1 /* Process source files and output type information.
2 Copyright (C) 2006-2015 Free Software Foundation, Inc.
4 This file is part of GCC.
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 3, or (at your option) any later
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3. If not see
18 <http://www.gnu.org/licenses/>. */
20 #ifdef HOST_GENERATOR_FILE
22 #define GENERATOR_FILE 1
29 /* This is a simple recursive-descent parser which understands a subset of
32 Rule functions are suffixed _seq if they scan a sequence of items;
33 _opt if they may consume zero tokens; _seqopt if both are true. The
34 "consume_" prefix indicates that a sequence of tokens is parsed for
35 syntactic correctness and then thrown away. */
37 /* Simple one-token lookahead mechanism. */
45 static struct token T
;
47 /* Retrieve the code of the current token; if there is no current token,
48 get the next one from the lexer. */
54 T
.code
= yylex (&T
.value
);
60 /* Retrieve the value of the current token (if any) and mark it consumed.
61 The next call to token() will get another token from the lexer. */
62 static inline const char *
71 /* This array is indexed by the token code minus CHAR_TOKEN_OFFSET. */
72 static const char *const token_names
[] = {
83 "a param<N>_is option",
88 "a character constant",
89 "an array declarator",
90 "a C++ keyword to ignore"
93 /* This array is indexed by token code minus FIRST_TOKEN_WITH_VALUE. */
94 static const char *const token_value_format
[] = {
105 /* Produce a printable representation for a token defined by CODE and
106 VALUE. This sometimes returns pointers into malloc memory and
107 sometimes not, therefore it is unsafe to free the pointer it
108 returns, so that memory is leaked. This does not matter, as this
109 function is only used for diagnostics, and in a successful run of
110 the program there will be none. */
112 print_token (int code
, const char *value
)
114 if (code
< CHAR_TOKEN_OFFSET
)
115 return xasprintf ("'%c'", code
);
116 else if (code
< FIRST_TOKEN_WITH_VALUE
)
117 return xasprintf ("'%s'", token_names
[code
- CHAR_TOKEN_OFFSET
]);
119 return token_names
[code
- CHAR_TOKEN_OFFSET
]; /* don't quote these */
121 return xasprintf (token_value_format
[code
- FIRST_TOKEN_WITH_VALUE
],
125 /* Convenience wrapper around print_token which produces the printable
126 representation of the current token. */
127 static inline const char *
128 print_cur_token (void)
130 return print_token (T
.code
, T
.value
);
133 /* Report a parse error on the current line, with diagnostic MSG.
134 Behaves as standard printf with respect to additional arguments and
136 static void ATTRIBUTE_PRINTF_1
137 parse_error (const char *msg
, ...)
141 fprintf (stderr
, "%s:%d: parse error: ",
142 get_input_file_name (lexer_line
.file
), lexer_line
.line
);
145 vfprintf (stderr
, msg
, ap
);
148 fputc ('\n', stderr
);
153 /* If the next token does not have code T, report a parse error; otherwise
154 return the token's value. */
159 const char *v
= advance ();
162 parse_error ("expected %s, have %s",
163 print_token (t
, 0), print_token (u
, v
));
169 /* As per require, but do not advance. */
171 require_without_advance (int t
)
174 const char *v
= T
.value
;
177 parse_error ("expected %s, have %s",
178 print_token (t
, 0), print_token (u
, v
));
184 /* If the next token does not have one of the codes T1 or T2, report a
185 parse error; otherwise return the token's value. */
187 require2 (int t1
, int t2
)
190 const char *v
= advance ();
191 if (u
!= t1
&& u
!= t2
)
193 parse_error ("expected %s or %s, have %s",
194 print_token (t1
, 0), print_token (t2
, 0),
201 /* If the next token does not have one of the codes T1, T2, T3 or T4, report a
202 parse error; otherwise return the token's value. */
204 require4 (int t1
, int t2
, int t3
, int t4
)
207 const char *v
= advance ();
208 if (u
!= t1
&& u
!= t2
&& u
!= t3
&& u
!= t4
)
210 parse_error ("expected %s, %s, %s or %s, have %s",
211 print_token (t1
, 0), print_token (t2
, 0),
212 print_token (t3
, 0), print_token (t4
, 0),
219 /* Near-terminals. */
221 /* C-style string constant concatenation: STRING+
222 Bare STRING should appear nowhere else in this file. */
230 s1
= require (STRING
);
233 while (token () == STRING
)
239 buf
= XRESIZEVEC (char, CONST_CAST (char *, s1
), l1
+ l2
+ 1);
240 memcpy (buf
+ l1
, s2
, l2
+ 1);
241 XDELETE (CONST_CAST (char *, s2
));
248 /* The caller has detected a template declaration that starts
249 with TMPL_NAME. Parse up to the closing '>'. This recognizes
250 simple template declarations of the form ID<ID1,ID2,...,IDn>,
251 potentially with a single level of indirection e.g.
252 ID<ID1 *, ID2, ID3 *, ..., IDn>.
253 It does not try to parse anything more sophisticated than that.
255 Returns the template declaration string "ID<ID1,ID2,...,IDn>". */
258 require_template_declaration (const char *tmpl_name
)
261 int num_indirections
= 0;
263 /* Recognize the opening '<'. */
265 str
= concat (tmpl_name
, "<", (char *) 0);
267 /* Read the comma-separated list of identifiers. */
271 if (token () == ENUM
)
274 str
= concat (str
, "enum ", (char *) 0);
279 str
= concat (str
, advance (), (char *) 0);
285 str
= concat (str
, ":", (char *) 0);
291 str
= concat (str
, "<", (char *) 0);
298 str
= concat (str
, ">", (char *) 0);
302 const char *id
= require4 (SCALAR
, ID
, '*', ',');
308 if (num_indirections
++)
309 parse_error ("only one level of indirection is supported"
310 " in template arguments");
316 num_indirections
= 0;
317 str
= concat (str
, id
, (char *) 0);
323 /* typedef_name: either an ID, or a template type
324 specification of the form ID<t1,t2,...,tn>. */
329 const char *id
= require (ID
);
331 return require_template_declaration (id
);
336 /* Absorb a sequence of tokens delimited by balanced ()[]{}. */
338 consume_balanced (int opener
, int closer
)
348 consume_balanced ('(', ')');
351 consume_balanced ('[', ']');
354 consume_balanced ('{', '}');
360 if (token () != closer
)
361 parse_error ("unbalanced delimiters - expected '%c', have '%c'",
367 parse_error ("unexpected end of file within %c%c-delimited construct",
373 /* Absorb a sequence of tokens, possibly including ()[]{}-delimited
374 expressions, until we encounter an end-of-statement marker (a ';' or
375 a '}') outside any such delimiters; absorb that too. */
378 consume_until_eos (void)
388 consume_balanced ('{', '}');
392 consume_balanced ('(', ')');
396 consume_balanced ('[', ']');
402 parse_error ("unmatched '%c' while scanning for ';'", token ());
406 parse_error ("unexpected end of file while scanning for ';'");
415 /* Absorb a sequence of tokens, possibly including ()[]{}-delimited
416 expressions, until we encounter a comma or semicolon outside any
417 such delimiters; absorb that too. Returns true if the loop ended
421 consume_until_comma_or_eos ()
435 consume_balanced ('{', '}');
439 consume_balanced ('(', ')');
443 consume_balanced ('[', ']');
449 parse_error ("unmatched '%s' while scanning for ',' or ';'",
454 parse_error ("unexpected end of file while scanning for ',' or ';'");
464 /* GTY(()) option handling. */
465 static type_p
type (options_p
*optsp
, bool nested
);
467 /* Optional parenthesized string: ('(' string_seq ')')? */
469 str_optvalue_opt (options_p prev
)
471 const char *name
= advance ();
472 const char *value
= "";
476 value
= string_seq ();
479 return create_string_option (prev
, name
, value
);
482 /* absdecl: type '*'*
483 -- a vague approximation to what the C standard calls an abstract
484 declarator. The only kinds that are actually used are those that
485 are just a bare type and those that have trailing pointer-stars.
486 Further kinds should be implemented if and when they become
487 necessary. Used only within GTY(()) option values, therefore
488 further GTY(()) tags within the type are invalid. Note that the
489 return value has already been run through adjust_field_type. */
496 ty
= type (&opts
, true);
497 while (token () == '*')
499 ty
= create_pointer (ty
);
504 parse_error ("nested GTY(()) options are invalid");
506 return adjust_field_type (ty
, 0);
509 /* Type-option: '(' absdecl ')' */
511 type_optvalue (options_p prev
, const char *name
)
517 return create_type_option (prev
, name
, ty
);
520 /* Nested pointer data: '(' type '*'* ',' string_seq ',' string_seq ')' */
522 nestedptr_optvalue (options_p prev
)
525 const char *from
, *to
;
532 from
= string_seq ();
535 return create_nested_ptr_option (prev
, ty
, to
, from
);
538 /* One GTY(()) option:
540 | PTR_ALIAS type_optvalue
541 | NESTED_PTR nestedptr_optvalue
544 option (options_p prev
)
549 return str_optvalue_opt (prev
);
553 return type_optvalue (prev
, "ptr_alias");
557 return nestedptr_optvalue (prev
);
561 return create_string_option (prev
, "user", "");
564 parse_error ("expected an option keyword, have %s", print_cur_token ());
566 return create_string_option (prev
, "", "");
570 /* One comma-separated list of options. */
577 while (token () == ',')
585 /* GTY marker: 'GTY' '(' '(' option_seq? ')' ')' */
589 options_p result
= 0;
594 result
= option_seq ();
600 /* Optional GTY marker. */
604 if (token () != GTY_TOKEN
)
611 /* Declarators. The logic here is largely lifted from c-parser.c.
612 Note that we do not have to process abstract declarators, which can
613 appear only in parameter type lists or casts (but see absdecl,
614 above). Also, type qualifiers are thrown out in gengtype-lex.l so
615 we don't have to do it. */
617 /* array_and_function_declarators_opt:
619 array_and_function_declarators_opt ARRAY
620 array_and_function_declarators_opt '(' ... ')'
622 where '...' indicates stuff we ignore except insofar as grouping
623 symbols ()[]{} must balance.
625 Subroutine of direct_declarator - do not use elsewhere. */
628 array_and_function_declarators_opt (type_p ty
)
630 if (token () == ARRAY
)
632 const char *array
= advance ();
633 return create_array (array_and_function_declarators_opt (ty
), array
);
635 else if (token () == '(')
637 /* We don't need exact types for functions. */
638 consume_balanced ('(', ')');
639 array_and_function_declarators_opt (ty
);
640 return create_scalar_type ("function type");
646 static type_p
inner_declarator (type_p
, const char **, options_p
*, bool);
648 /* direct_declarator:
649 '(' inner_declarator ')'
650 '(' \epsilon ')' <-- C++ ctors/dtors
651 gtymarker_opt ID array_and_function_declarators_opt
653 Subroutine of declarator, mutually recursive with inner_declarator;
654 do not use elsewhere.
656 IN_STRUCT is true if we are called while parsing structures or classes. */
659 direct_declarator (type_p ty
, const char **namep
, options_p
*optsp
,
662 /* The first token in a direct-declarator must be an ID, a
663 GTY marker, or an open parenthesis. */
667 *optsp
= gtymarker ();
671 *namep
= require (ID
);
672 /* If the next token is '(', we are parsing a function declaration.
673 Functions are ignored by gengtype, so we return NULL. */
679 /* If the declarator starts with a '(', we have three options. We
680 are either parsing 'TYPE (*ID)' (i.e., a function pointer)
683 The latter will be a constructor iff we are inside a
684 structure or class. Otherwise, it could be a typedef, but
685 since we explicitly reject typedefs inside structures, we can
686 assume that we found a ctor and return NULL. */
688 if (in_struct
&& token () != '*')
690 /* Found a constructor. Find and consume the closing ')'. */
691 while (token () != ')')
694 /* Tell the caller to ignore this. */
697 ty
= inner_declarator (ty
, namep
, optsp
, in_struct
);
701 case IGNORABLE_CXX_KEYWORD
:
702 /* Any C++ keyword like 'operator' means that we are not looking
703 at a regular data declarator. */
707 parse_error ("expected '(', ')', 'GTY', or an identifier, have %s",
709 /* Do _not_ advance if what we have is a close squiggle brace, as
710 we will get much better error recovery that way. */
715 return array_and_function_declarators_opt (ty
);
718 /* The difference between inner_declarator and declarator is in the
719 handling of stars. Consider this declaration:
723 It declares a pointer to a function that takes no arguments and
724 returns a char*. To construct the correct type for this
725 declaration, the star outside the parentheses must be processed
726 _before_ the function type, the star inside the parentheses must
727 be processed _after_ the function type. To accomplish this,
728 declarator() creates pointers before recursing (it is actually
729 coded as a while loop), whereas inner_declarator() recurses before
730 creating pointers. */
736 Mutually recursive subroutine of direct_declarator; do not use
739 IN_STRUCT is true if we are called while parsing structures or classes. */
742 inner_declarator (type_p ty
, const char **namep
, options_p
*optsp
,
749 inner
= inner_declarator (ty
, namep
, optsp
, in_struct
);
753 return create_pointer (ty
);
756 return direct_declarator (ty
, namep
, optsp
, in_struct
);
759 /* declarator: '*'+ direct_declarator
761 This is the sole public interface to this part of the grammar.
762 Arguments are the type known so far, a pointer to where the name
763 may be stored, and a pointer to where GTY options may be stored.
765 IN_STRUCT is true when we are called to parse declarators inside
766 a structure or class.
768 Returns the final type. */
771 declarator (type_p ty
, const char **namep
, options_p
*optsp
,
772 bool in_struct
= false)
776 while (token () == '*')
779 ty
= create_pointer (ty
);
781 return direct_declarator (ty
, namep
, optsp
, in_struct
);
784 /* Types and declarations. */
786 /* Structure field(s) declaration:
789 | type declarator bitfield? ( ',' declarator bitfield? )+ ';'
792 Knows that such declarations must end with a close brace (or,
793 erroneously, at EOF).
796 struct_field_seq (void)
800 options_p opts
, dopts
;
804 while (token () != '}' && token () != EOF_TOKEN
)
806 ty
= type (&opts
, true);
808 /* Ignore access-control keywords ("public:" etc). */
809 while (!ty
&& token () == IGNORABLE_CXX_KEYWORD
)
811 const char *keyword
= advance ();
812 if (strcmp (keyword
, "public:") != 0
813 && strcmp (keyword
, "private:") != 0
814 && strcmp (keyword
, "protected:") != 0)
816 ty
= type (&opts
, true);
819 if (!ty
|| token () == ':')
821 consume_until_eos ();
827 dty
= declarator (ty
, &name
, &dopts
, true);
829 /* There could be any number of weird things after the declarator,
830 notably bitfield declarations and __attribute__s. If this
831 function returns true, the last thing was a comma, so we have
832 more than one declarator paired with the current type. */
833 another
= consume_until_comma_or_eos ();
839 parse_error ("two GTY(()) options for field %s", name
);
843 f
= create_field_at (f
, dty
, name
, dopts
, &lexer_line
);
847 return nreverse_pairs (f
);
850 /* Return true if OPTS contain the option named STR. */
853 opts_have (options_p opts
, const char *str
)
855 for (options_p opt
= opts
; opt
; opt
= opt
->next
)
856 if (strcmp (opt
->name
, str
) == 0)
862 /* This is called type(), but what it parses (sort of) is what C calls
863 declaration-specifiers and specifier-qualifier-list:
867 | (STRUCT|UNION) ID? gtymarker? ( '{' gtymarker? struct_field_seq '}' )?
868 | ENUM ID ( '{' ... '}' )?
870 Returns a partial type; under some conditions (notably
871 "struct foo GTY((...)) thing;") it may write an options
874 NESTED is true when parsing a declaration already known to have a
875 GTY marker. In these cases, typedef and enum declarations are not
876 allowed because gengtype only understands types at the global
880 type (options_p
*optsp
, bool nested
)
888 return create_scalar_type (s
);
892 return resolve_typedef (s
, &lexer_line
);
894 case IGNORABLE_CXX_KEYWORD
:
895 /* By returning NULL here, we indicate to the caller that they
896 should ignore everything following this keyword up to the
903 type_p base_class
= NULL
;
905 /* GTY annotations follow attribute syntax
906 GTY_BEFORE_ID is for union/struct declarations
907 GTY_AFTER_ID is for variable declarations. */
914 enum typekind kind
= (token () == UNION
) ? TYPE_UNION
: TYPE_STRUCT
;
917 /* Top-level structures that are not explicitly tagged GTY(())
918 are treated as mere forward declarations. This is because
919 there are a lot of structures that we don't need to know
920 about, and some of those have C++ and macro constructs that
922 if (nested
|| token () == GTY_TOKEN
)
924 is_gty
= GTY_BEFORE_ID
;
925 opts
= gtymarker_opt ();
931 s
= xasprintf ("anonymous:%s:%d",
932 get_input_file_name (lexer_line
.file
),
935 /* Unfortunately above GTY_TOKEN check does not capture the
936 typedef struct_type GTY case. */
937 if (token () == GTY_TOKEN
)
939 is_gty
= GTY_AFTER_ID
;
940 opts
= gtymarker_opt ();
943 bool is_user_gty
= opts_have (opts
, "user");
947 if (is_gty
&& !is_user_gty
)
949 /* For GTY-marked types that are not "user", parse some C++
950 inheritance specifications.
951 We require single-inheritance from a non-template type. */
953 const char *basename
= require (ID
);
954 /* This may be either an access specifier, or the base name. */
955 if (0 == strcmp (basename
, "public")
956 || 0 == strcmp (basename
, "protected")
957 || 0 == strcmp (basename
, "private"))
958 basename
= require (ID
);
959 base_class
= find_structure (basename
, TYPE_STRUCT
);
961 parse_error ("unrecognized base class: %s", basename
);
962 require_without_advance ('{');
966 /* For types lacking GTY-markings, skip over C++ inheritance
967 specification (and thus avoid having to parse e.g. template
969 while (token () != '{')
980 if (is_gty
== GTY_AFTER_ID
)
981 parse_error ("GTY must be specified before identifier");
986 fields
= struct_field_seq ();
991 /* Do not look inside user defined structures. */
993 kind
= TYPE_USER_STRUCT
;
994 consume_balanced ('{', '}');
995 return create_user_defined_type (s
, &lexer_line
);
998 return new_structure (s
, kind
, &lexer_line
, fields
, opts
,
1002 else if (token () == '{')
1003 consume_balanced ('{', '}');
1006 return find_structure (s
, kind
);
1010 /* In C++, a typedef inside a struct/class/union defines a new
1011 type for that inner scope. We cannot support this in
1012 gengtype because we have no concept of scoping.
1014 We handle typedefs in the global scope separately (see
1015 parse_file), so if we find a 'typedef', we must be inside
1017 gcc_assert (nested
);
1018 parse_error ("typedefs not supported in structures marked with "
1019 "automatic GTY markers. Use GTY((user)) to mark "
1029 s
= xasprintf ("anonymous:%s:%d",
1030 get_input_file_name (lexer_line
.file
),
1033 if (token () == '{')
1034 consume_balanced ('{', '}');
1036 /* If after parsing the enum we are at the end of the statement,
1037 and we are currently inside a structure, then this was an
1038 enum declaration inside this scope.
1040 We cannot support this for the same reason we cannot support
1041 'typedef' inside structures (see the TYPEDEF handler above).
1042 If this happens, emit an error and return NULL. */
1043 if (nested
&& token () == ';')
1045 parse_error ("enum definitions not supported in structures marked "
1046 "with automatic GTY markers. Use GTY((user)) to mark "
1052 return create_scalar_type (s
);
1055 parse_error ("expected a type specifier, have %s", print_cur_token ());
1057 return create_scalar_type ("erroneous type");
1061 /* Top level constructs. */
1063 /* Dispatch declarations beginning with 'typedef'. */
1073 gcc_assert (token () == TYPEDEF
);
1076 ty
= type (&opts
, false);
1080 parse_error ("GTY((...)) cannot be applied to a typedef");
1083 dty
= declarator (ty
, &name
, &opts
);
1085 parse_error ("GTY((...)) cannot be applied to a typedef");
1087 /* Yet another place where we could have junk (notably attributes)
1088 after the declarator. */
1089 another
= consume_until_comma_or_eos ();
1091 do_typedef (name
, dty
, &lexer_line
);
1096 /* Structure definition: type() does all the work. */
1099 struct_or_union (void)
1102 type (&dummy
, false);
1103 /* There may be junk after the type: notably, we cannot currently
1104 distinguish 'struct foo *function(prototype);' from 'struct foo;'
1105 ... we could call declarator(), but it's a waste of time at
1106 present. Instead, just eat whatever token is currently lookahead
1107 and go back to lexical skipping mode. */
1111 /* GC root declaration:
1112 (extern|static) gtymarker? type ID array_declarators_opt (';'|'=')
1113 If the gtymarker is not present, we ignore the rest of the declaration. */
1115 extern_or_static (void)
1117 options_p opts
, opts2
, dopts
;
1120 require2 (EXTERN
, STATIC
);
1122 if (token () != GTY_TOKEN
)
1128 opts
= gtymarker ();
1129 ty
= type (&opts2
, true); /* if we get here, it's got a GTY(()) */
1130 dty
= declarator (ty
, &name
, &dopts
);
1132 if ((opts
&& dopts
) || (opts
&& opts2
) || (opts2
&& dopts
))
1133 parse_error ("GTY((...)) specified more than once for %s", name
);
1141 note_variable (name
, adjust_field_type (dty
, opts
), opts
, &lexer_line
);
1142 require2 (';', '=');
1146 /* Parse the file FNAME for GC-relevant declarations and definitions.
1147 This is the only entry point to this file. */
1149 parse_file (const char *fname
)
1158 extern_or_static ();
1174 parse_error ("unexpected top level token, %s", print_cur_token ());
1177 lexer_toplevel_done
= 1;