PIPS
|
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "genC.h"
#include "linear.h"
#include "ri-util.h"
#include "misc.h"
#include "properties.h"
#include "preprocessor.h"
#include <limits.h>
Go to the source code of this file.
Data Structures | |
union | YYSTYPE |
Value type. More... | |
union | yyalloc |
INFRINGES ON USER NAME SPACE. More... | |
Macros | |
#define | YYBISON 30802 |
A Bison parser, made by GNU Bison 3.8.2. More... | |
#define | YYBISON_VERSION "3.8.2" |
Bison version string. More... | |
#define | YYSKELETON_NAME "yacc.c" |
Skeleton name. More... | |
#define | YYPURE 0 |
Pure parsers. More... | |
#define | YYPUSH 0 |
Push parsers. More... | |
#define | YYPULL 1 |
Pull parsers. More... | |
#define | yyparse(void) splitc_parse |
------—. More... | |
#define | yylex splitc_lex |
#define | yyerror splitc_error |
#define | yydebug splitc_debug |
#define | yynerrs splitc_nerrs |
#define | yylval splitc_lval |
#define | yychar splitc_char |
#define | C_ERROR_VERBOSE 1 /**much clearer error messages with bison */ |
First part of user prologue. More... | |
#define | YYMAXDEPTH 1000000 |
Increase the parser stack to have SPEC2006/445.gobmk/owl_defendpat.c going through without a: More... | |
#define | SCOPE_UNDEFINED (-1) |
Each scope in the compilation unit has its own number. More... | |
#define | YY_CAST(Type, Val) ((Type) (Val)) |
#define | YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) |
#define | YY_NULLPTR ((void*)0) |
#define | YY_SPLITC_Y_TAB_H_INCLUDED |
Use api.header.include to include this header instead of duplicating it here. More... | |
#define | YYDEBUG 0 |
Debug traces. More... | |
#define | YYTOKENTYPE |
Token kinds. More... | |
#define | YYEMPTY -2 |
Token kinds. More... | |
#define | YYEOF 0 |
#define | YYerror 256 |
#define | YYUNDEF 257 |
#define | TK_IDENT 258 |
#define | TK_CHARCON 259 |
#define | TK_INTCON 260 |
#define | TK_FLOATCON 261 |
#define | TK_NAMED_TYPE 262 |
#define | TK_STRINGCON 263 |
#define | TK_WSTRINGCON 264 |
#define | TK_EOF 265 |
#define | TK_CHAR 266 |
#define | TK_INT 267 |
#define | TK_INT128 268 |
#define | TK_UINT128 269 |
#define | TK_DOUBLE 270 |
#define | TK_FLOAT 271 |
#define | TK_VOID 272 |
#define | TK_COMPLEX 273 |
#define | TK_ENUM 274 |
#define | TK_STRUCT 275 |
#define | TK_TYPEDEF 276 |
#define | TK_UNION 277 |
#define | TK_SIGNED 278 |
#define | TK_UNSIGNED 279 |
#define | TK_LONG 280 |
#define | TK_SHORT 281 |
#define | TK_VOLATILE 282 |
#define | TK_EXTERN 283 |
#define | TK_STATIC 284 |
#define | TK_CONST 285 |
#define | TK_RESTRICT 286 |
#define | TK_AUTO 287 |
#define | TK_REGISTER 288 |
#define | TK_THREAD 289 |
#define | TK_STATIC_DIMENSION 290 |
#define | TK_SIZEOF 291 |
#define | TK_ALIGNOF 292 |
#define | TK_EQ 293 |
#define | TK_PLUS_EQ 294 |
#define | TK_MINUS_EQ 295 |
#define | TK_STAR_EQ 296 |
#define | TK_SLASH_EQ 297 |
#define | TK_PERCENT_EQ 298 |
#define | TK_AND_EQ 299 |
#define | TK_PIPE_EQ 300 |
#define | TK_CIRC_EQ 301 |
#define | TK_INF_INF_EQ 302 |
#define | TK_SUP_SUP_EQ 303 |
#define | TK_ARROW 304 |
#define | TK_DOT 305 |
#define | TK_EQ_EQ 306 |
#define | TK_EXCLAM_EQ 307 |
#define | TK_INF 308 |
#define | TK_SUP 309 |
#define | TK_INF_EQ 310 |
#define | TK_SUP_EQ 311 |
#define | TK_PLUS 312 |
#define | TK_MINUS 313 |
#define | TK_STAR 314 |
#define | TK_SLASH 315 |
#define | TK_PERCENT 316 |
#define | TK_TILDE 317 |
#define | TK_AND 318 |
#define | TK_PIPE 319 |
#define | TK_CIRC 320 |
#define | TK_EXCLAM 321 |
#define | TK_AND_AND 322 |
#define | TK_PIPE_PIPE 323 |
#define | TK_INF_INF 324 |
#define | TK_SUP_SUP 325 |
#define | TK_PLUS_PLUS 326 |
#define | TK_MINUS_MINUS 327 |
#define | TK_RPAREN 328 |
#define | TK_LPAREN 329 |
#define | TK_RBRACE 330 |
#define | TK_LBRACE 331 |
#define | TK_LBRACKET 332 |
#define | TK_RBRACKET 333 |
#define | TK_COLON 334 |
#define | TK_SEMICOLON 335 |
#define | TK_COMMA 336 |
#define | TK_ELLIPSIS 337 |
#define | TK_QUEST 338 |
#define | TK_BREAK 339 |
#define | TK_CONTINUE 340 |
#define | TK_GOTO 341 |
#define | TK_RETURN 342 |
#define | TK_SWITCH 343 |
#define | TK_CASE 344 |
#define | TK_DEFAULT 345 |
#define | TK_WHILE 346 |
#define | TK_DO 347 |
#define | TK_FOR 348 |
#define | TK_IF 349 |
#define | TK_ELSE 350 |
#define | TK_ATTRIBUTE 351 |
#define | TK_INLINE 352 |
#define | TK_ASM 353 |
#define | TK_TYPEOF 354 |
#define | TK_FUNCTION__ 355 |
#define | TK_PRETTY_FUNCTION__ 356 |
#define | TK_LABEL__ 357 |
#define | TK_BUILTIN_VA_ARG 358 |
#define | TK_BUILTIN_VA_LIST 359 |
#define | TK_BLOCKATTRIBUTE 360 |
#define | TK_DECLSPEC 361 |
#define | TK_MSASM 362 |
#define | TK_MSATTR 363 |
#define | TK_PRAGMA 364 |
#define | TK_AT_TRANSFORM 365 |
#define | TK_AT_TRANSFORMEXPR 366 |
#define | TK_AT_SPECIFIER 367 |
#define | TK_AT_EXPR 368 |
#define | TK_AT_NAME 369 |
#define | TK_COMPLEXCON 370 |
#define | TK_CAST 371 |
#define | TK_ADDROF 372 |
#define | YYSTYPE_IS_TRIVIAL 1 |
#define | YYSTYPE_IS_DECLARED 1 |
#define | YYPTRDIFF_T long |
#define | YYPTRDIFF_MAXIMUM LONG_MAX |
#define | YYSIZE_T unsigned |
#define | YYSIZE_MAXIMUM |
#define | YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) |
#define | YY_(Msgid) Msgid |
#define | YY_ATTRIBUTE_PURE |
#define | YY_ATTRIBUTE_UNUSED |
#define | YY_USE(E) ((void) (E)) |
Suppress unused-variable warnings by "using" E. More... | |
#define | YY_INITIAL_VALUE(Value) Value |
Suppress an incorrect diagnostic about yylval being uninitialized. More... | |
#define | YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN |
#define | YY_IGNORE_MAYBE_UNINITIALIZED_END |
#define | YY_IGNORE_USELESS_CAST_BEGIN |
#define | YY_IGNORE_USELESS_CAST_END |
#define | YY_ASSERT(E) ((void) (0 && (E))) |
#define | YYSTACK_ALLOC YYMALLOC |
The parser invokes alloca or malloc; define the necessary symbols. More... | |
#define | YYSTACK_FREE YYFREE |
#define | YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM |
#define | YYMALLOC malloc |
#define | YYFREE free |
INFRINGES ON USER NAME SPACE. More... | |
#define | YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) |
The size of the maximum gap between one aligned stack and the next. More... | |
#define | YYSTACK_BYTES(N) |
The size of an array large to enough to hold all stacks, each with N elements. More... | |
#define | YYCOPY_NEEDED 1 |
#define | YYSTACK_RELOCATE(Stack_alloc, Stack) |
Relocate STACK from its old location to the new one. More... | |
#define | YYCOPY(Dst, Src, Count) |
Copy COUNT objects from SRC to DST. More... | |
#define | YYFINAL 99 |
!YYCOPY_NEEDED More... | |
#define | YYLAST 3937 |
YYLAST – Last index in YYTABLE. More... | |
#define | YYNTOKENS 118 |
YYNTOKENS – Number of terminals. More... | |
#define | YYNNTS 91 |
YYNNTS – Number of nonterminals. More... | |
#define | YYNRULES 351 |
YYNRULES – Number of rules. More... | |
#define | YYNSTATES 664 |
YYNSTATES – Number of states. More... | |
#define | YYMAXUTOK 372 |
YYMAXUTOK – Last valid token kind. More... | |
#define | YYTRANSLATE(YYX) |
YYTRANSLATE(TOKEN-NUM) – Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. More... | |
#define | YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State]) |
Accessing symbol of state STATE. More... | |
#define | YYPACT_NINF (-454) |
#define | yypact_value_is_default(Yyn) ((Yyn) == YYPACT_NINF) |
#define | YYTABLE_NINF (-288) |
#define | yytable_value_is_error(Yyn) 0 |
#define | yyerrok (yyerrstatus = 0) |
#define | yyclearin (yychar = YYEMPTY) |
#define | YYACCEPT goto yyacceptlab |
#define | YYABORT goto yyabortlab |
#define | YYERROR goto yyerrorlab |
#define | YYNOMEM goto yyexhaustedlab |
#define | YYRECOVERING() (!!yyerrstatus) |
#define | YYBACKUP(Token, Value) |
#define | YYERRCODE YYUNDEF |
Backward compatibility with an undocumented macro. More... | |
#define | YYDPRINTF(Args) ((void) 0) |
Enable debugging if requested. More... | |
#define | YY_SYMBOL_PRINT(Title, Kind, Value, Location) |
#define | YY_STACK_PRINT(Bottom, Top) |
#define | YY_REDUCE_PRINT(Rule) |
#define | YYINITDEPTH 200 |
!YYDEBUG More... | |
#define | YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) |
Typedefs | |
typedef enum yytokentype | yytoken_kind_t |
typedef union YYSTYPE | YYSTYPE |
typedef enum yysymbol_kind_t | yysymbol_kind_t |
typedef signed char | yytype_int8 |
On compilers that do not define PTRDIFF_MAX etc., make sure <limits.h> and (if available) <stdint.h> are included so that the code can choose integer types of a good width. More... | |
typedef short | yytype_int16 |
typedef unsigned char | yytype_uint8 |
Work around bug in HP-UX 11.23, which defines these macros incorrectly for preprocessor constants. More... | |
typedef unsigned short | yytype_uint16 |
typedef yytype_int16 | yy_state_t |
Stored state numbers (used for stacks). More... | |
typedef int | yy_state_fast_t |
State numbers in computations. More... | |
Functions | |
static void | reset_csplit_current_function_name () |
static void | csplit_parser_warning_alist (const char *pips_func, const char *pips_file, const int pips_line, const string format, va_list *args) |
void | csplit_parser_warning_func (const char *pips_func, const char *pips_file, const int pips_line, const string format,...) |
void | csplit_parser_error (const string msg) |
Redundant with splitc_error()? More... | |
static void | PushTypedef () |
static void | PopTypedef () |
void | MakeTypedefStack () |
Define some functions from the .l or .y since cproto cannot dig them out: More... | |
void | ResetTypedefStack () |
void | ForceResetTypedefStack () |
void | init_preprocessor_scope_stack () |
void | reset_preprocessor_scope_stack () |
void | force_reset_preprocessor_scope_stack () |
To be used by an error handler. More... | |
void | push_new_preprocessor_scope () |
void | pop_preprocessor_scope () |
bool | preprocessor_scope_stack_empty_p () |
string | get_preprocessor_current_scope () |
string | get_preprocessor_nth_scope (int n) |
int | preprocessor_scope_number () |
static string | new_signature (const string s) |
static void | free_partial_signature (string s) |
static string | general_build_signature (bool arguments_are_defined_p, string s1, va_list *p_some_arguments) |
static string | build_signature (string s1,...) |
All arguments must be defined. More... | |
static string | safe_build_signature (string s1,...) |
Arguments may be defined or not, but as soon as one is undefined, an undefined_string is returned. More... | |
static string | simplify_signature (string s) |
Get rid of useless spaces: multiple contiguous spaces, spaces next to a separator,... More... | |
int | check_signature_balance () |
static string | new_empty () |
Beware of the free: no constant strings in signature! More... | |
static string | new_comma () |
static string | new_eq () |
static string | new_star () |
static string | new_semicolon () |
static string | new_colon () |
static string | new_lbrace () |
static string | new_rbrace () |
static string | new_lparen () |
static string | new_rparen () |
static string | new_lbracket () |
static string | new_rbracket () |
static string | new_ellipsis () |
int | splitc_parse (void) |
void * | malloc (YYSIZE_T) |
void | free (void *) |
static void | yydestruct (const char *yymsg, yysymbol_kind_t yykind, YYSTYPE *yyvaluep) |
YYMAXDEPTH – maximum size the stacks can grow to (effective only if the built-in stack extension method is used). More... | |
Variables | |
int | csplit_is_external = 0 |
The following global variables are used to store the information such as the scope, type and storage of an entity, given by the decl_spec_list, which are used later by direct_decl to create the entity. More... | |
int | csplit_is_function = 0 |
to know if the variable is declared inside or outside a function More... | |
string | csplit_current_function_name = string_undefined |
to know if this is the declaration of a function or not, to distinguish between a static variable and a static function More... | |
string | csplit_current_function_name2 = string_undefined |
string | csplit_definite_function_name = string_undefined |
string | csplit_definite_function_signature = string_undefined |
bool | csplit_is_static_p = false |
static int enum_counter = 0; More... | |
static bool | current_function_is_static_p = false |
static int | csplit_is_typedef = false |
All the following global variables must be replaced by functions, once we have the preprocessor for C. More... | |
static stack | TypedefStack = stack_undefined |
to know if this is a typedef name or not More... | |
static int | c_preprocessor_scope_number = SCOPE_UNDEFINED |
static stack | c_preprocessor_scope_stack = stack_undefined |
static int | number_of_signatures_built = 0 |
If any of the strings is undefined, we are in trouble. More... | |
static int | number_of_signatures_freed = 0 |
YYSTYPE | splitc_lval |
static const yytype_int8 | yytranslate [] |
YYTRANSLATE[TOKEN-NUM] – Symbol number corresponding to TOKEN-NUM as returned by yylex. More... | |
static const yytype_int16 | yypact [] |
YYPACT[STATE-NUM] – Index in YYTABLE of the portion describing STATE-NUM. More... | |
static const yytype_int16 | yydefact [] |
YYDEFACT[STATE-NUM] – Default reduction number in state STATE-NUM. More... | |
static const yytype_int16 | yypgoto [] |
YYPGOTO[NTERM-NUM]. More... | |
static const yytype_int16 | yydefgoto [] |
YYDEFGOTO[NTERM-NUM]. More... | |
static const yytype_int16 | yytable [] |
YYTABLE[YYPACT[STATE-NUM]] – What to do in state STATE-NUM. More... | |
static const yytype_int16 | yycheck [] |
static const yytype_uint8 | yystos [] |
YYSTOS[STATE-NUM] – The symbol kind of the accessing symbol of state STATE-NUM. More... | |
static const yytype_uint8 | yyr1 [] |
YYR1[RULE-NUM] – Symbol kind of the left-hand side of rule RULE-NUM. More... | |
static const yytype_int8 | yyr2 [] |
YYR2[RULE-NUM] – Number of symbols on the right-hand side of rule RULE-NUM. More... | |
int | yychar |
Lookahead token kind. More... | |
YYSTYPE | yylval |
The semantic value of the lookahead symbol. More... | |
int | yynerrs |
Number of syntax errors so far. More... | |
#define C_ERROR_VERBOSE 1 /**much clearer error messages with bison */ |
#define SCOPE_UNDEFINED (-1) |
#define YY_ACCESSING_SYMBOL | ( | State | ) | YY_CAST (yysymbol_kind_t, yystos[State]) |
#define YY_SPLITC_Y_TAB_H_INCLUDED |
#define YYBACKUP | ( | Token, | |
Value | |||
) |
#define YYBISON 30802 |
A Bison parser, made by GNU Bison 3.8.2.
Bison implementation for Yacc-like parsers in C
Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.
As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception.
This special exception was added by the Free Software Foundation in version 2.2 of Bison.
C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser.
DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, especially those whose name start with YY_ or yy_. They are private implementation details that can be changed or removed.
All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON
USER NAME SPACE" below.
Identify Bison output, and Bison version.
#define yychar splitc_char |
#define YYCOPY | ( | Dst, | |
Src, | |||
Count | |||
) |
Copy COUNT objects from SRC to DST.
The source and destination do not overlap.
#define YYDPRINTF | ( | Args | ) | ((void) 0) |
#define YYERRCODE YYUNDEF |
#define yyerror splitc_error |
#define YYFINAL 99 |
#define YYINITDEPTH 200 |
#define yylex | ( | void | ) | splitc_lex |
#define yylval splitc_lval |
#define YYMAXDEPTH 1000000 |
#define yynerrs splitc_nerrs |
#define yypact_value_is_default | ( | Yyn | ) | ((Yyn) == YYPACT_NINF) |
#define yyparse | ( | void | ) | splitc_parse |
------—.
Substitute the variable and function names.
| yyparse. | `-------—
Number of tokens to shift before error messages enabled.
Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere.
Their size.
The state stack: array, bottom, top.
The semantic value stack: array, bottom, top.
The return value of yyparse.
Lookahead symbol kind.
The variables used to return semantic value and location from the action routines.
The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped.
Cause a token to be read.
--------------------------------------------------------—. | yynewstate – push a new state, which is found in yystate. | `---------------------------------------------------------—
In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks.
----------------------------------------------------------------—. | yysetstate – set current state (the top of the stack) to yystate. | `-----------------------------------------------------------------—
Get the current used size of the three stacks, in elements.
defined YYSTACK_RELOCATE
Extend the stack our own way.
!defined yyoverflow && !defined YYSTACK_RELOCATE
-------—. | yybackup. | `--------—
Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one.
First try to decide what to do without reference to lookahead token.
Not known => get a lookahead token if don't already have one.
YYCHAR is either empty, or end-of-input, or a valid lookahead.
The scanner already issued an error message, process directly to error recovery. But do not keep the error token as lookahead, it is too special and may lead us to an endless loop in error recovery.
If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action.
Count tokens shifted since error; after three, turn off error status.
Shift the lookahead token.
Discard the shifted token.
-------------------------------------------------------—. | yydefault – do the default action for the current state. | `--------------------------------------------------------—
-------------------------—. | yyreduce – do a reduction. | `--------------------------—
yyn is the number of a rule to reduce with.
If YYLEN is nonzero, implement the default value of the action: '$$ = $1'.
Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized.
interpret: file TK_EOF
globals: empty
globals: global globals
globals: TK_SEMICOLON globals
location: empty
global: declaration
the variable is declared outside of any function
csplit_is_typedef = 0;
Useless since it is dealt by csplit_copy() later
global: function_def
G: mechanism to prevent the generation of module for functions defined in standard header files it should never be the case, but it sometimes happen with inline functions
the variable is declared inside a function
Hmm... It happens to early to gather following comments to its module...
global: TK_ASM TK_LPAREN string_constant TK_RPAREN TK_SEMICOLON
global: TK_PRAGMA attr
global: TK_IDENT TK_LPAREN old_parameter_list_ne TK_RPAREN old_pardef_list TK_SEMICOLON
global: TK_IDENT TK_LPAREN TK_RPAREN TK_SEMICOLON
global: TK_AT_TRANSFORM TK_LBRACE global TK_RBRACE TK_IDENT TK_LBRACE globals TK_RBRACE
global: TK_AT_TRANSFORMEXPR TK_LBRACE expression TK_RBRACE TK_IDENT TK_LBRACE expression TK_RBRACE
global: location error TK_SEMICOLON
id_or_typename: TK_IDENT
id_or_typename: TK_NAMED_TYPE
id_or_typename: TK_AT_NAME TK_LPAREN TK_IDENT TK_RPAREN
maybecomma: empty
maybecomma: TK_COMMA
expression: constant
expression: TK_IDENT
Elements in enum are symbolic constant which may appear in an array declaration.
expression: TK_SIZEOF expression
Can be used to dimemsion an argument
expression: TK_SIZEOF TK_LPAREN type_name TK_RPAREN
expression: TK_ALIGNOF expression
expression: TK_ALIGNOF TK_LPAREN type_name TK_RPAREN
expression: TK_PLUS expression
expression: TK_MINUS expression
expression: TK_STAR expression
expression: TK_AND expression
expression: TK_EXCLAM expression
expression: TK_TILDE expression
expression: TK_PLUS_PLUS expression
expression: expression TK_PLUS_PLUS
expression: TK_MINUS_MINUS expression
expression: expression TK_MINUS_MINUS
expression: expression TK_ARROW id_or_typename
expression: expression TK_DOT id_or_typename
expression: TK_LPAREN block TK_RPAREN
$$ = new_signature("block");
expression: paren_comma_expression
expression: expression TK_LPAREN arguments TK_RPAREN
arguments does not return anything.
expression: TK_BUILTIN_VA_ARG TK_LPAREN expression TK_COMMA type_name TK_RPAREN
expression: expression bracket_comma_expression
bracket_comma_expression does not return anything.
expression: expression TK_QUEST opt_expression TK_COLON expression
opt_expression does not return anything.
expression: expression TK_PLUS expression
expression: expression TK_MINUS expression
expression: expression TK_STAR expression
expression: expression TK_SLASH expression
expression: expression TK_PERCENT expression
expression: expression TK_AND_AND expression
expression: expression TK_PIPE_PIPE expression
expression: expression TK_AND expression
expression: expression TK_PIPE expression
expression: expression TK_CIRC expression
expression: expression TK_EQ_EQ expression
expression: expression TK_EXCLAM_EQ expression
expression: expression TK_INF expression
expression: expression TK_SUP expression
expression: expression TK_INF_EQ expression
expression: expression TK_SUP_EQ expression
expression: expression TK_INF_INF expression
expression: expression TK_SUP_SUP expression
expression: expression TK_EQ expression
expression: expression TK_PLUS_EQ expression
expression: expression TK_MINUS_EQ expression
expression: expression TK_STAR_EQ expression
expression: expression TK_SLASH_EQ expression
expression: expression TK_PERCENT_EQ expression
expression: expression TK_AND_EQ expression
expression: expression TK_PIPE_EQ expression
expression: expression TK_CIRC_EQ expression
expression: expression TK_INF_INF_EQ expression
expression: expression TK_SUP_SUP_EQ expression
expression: TK_LPAREN type_name TK_RPAREN expression
expression: TK_LPAREN type_name TK_RPAREN TK_LBRACE initializer_list_opt TK_RBRACE
initializer_list_opt does not return anything.
expression: TK_AND_AND TK_IDENT
expression: TK_AT_EXPR TK_LPAREN TK_IDENT TK_RPAREN
constant: TK_INTCON
constant: TK_FLOATCON
constant: TK_COMPLEXCON
constant: TK_CHARCON
constant: string_constant
constant: wstring_list
string_constant: string_list
one_string_constant: TK_STRINGCON
string_list: one_string
string_list: string_list one_string
wstring_list: TK_WSTRINGCON
wstring_list: wstring_list one_string
wstring_list: wstring_list TK_WSTRINGCON
one_string: TK_STRINGCON
one_string: TK_FUNCTION__
one_string: TK_PRETTY_FUNCTION__
init_expression: expression
init_expression: TK_LBRACE initializer_list_opt TK_RBRACE
initializer_list: initializer
initializer_list: initializer TK_COMMA initializer_list_opt
initializer_list_opt: empty
initializer_list_opt: initializer_list
initializer: init_designators eq_opt init_expression
initializer: gcc_init_designators init_expression
initializer: init_expression
eq_opt: TK_EQ
eq_opt: empty
init_designators: TK_DOT id_or_typename init_designators_opt
init_designators: TK_LBRACKET expression TK_RBRACKET init_designators_opt
init_designators: TK_LBRACKET expression TK_ELLIPSIS expression TK_RBRACKET
init_designators_opt: empty
init_designators_opt: init_designators
gcc_init_designators: id_or_typename TK_COLON
arguments: empty
arguments: comma_expression
opt_expression: empty
opt_expression: comma_expression
comma_expression: expression
comma_expression: expression TK_COMMA comma_expression
comma_expression: error TK_COMMA comma_expression
comma_expression_opt: empty
comma_expression_opt: comma_expression
paren_comma_expression: TK_LPAREN comma_expression TK_RPAREN
paren_comma_expression: TK_LPAREN error TK_RPAREN
bracket_comma_expression: TK_LBRACKET comma_expression TK_RBRACKET
bracket_comma_expression: TK_LBRACKET error TK_RBRACKET
$@1: empty
$@2: empty
block: TK_LBRACE $@1 local_labels block_attrs declaration_list statement_list $@2 TK_RBRACE
block: error location TK_RBRACE
block_attrs: empty
block_attrs: TK_BLOCKATTRIBUTE paren_attr_list_ne
declaration_list: empty
declaration_list: declaration declaration_list
statement_list: empty
statement_list: statement statement_list
statement_list: TK_IDENT TK_COLON
local_labels: empty
local_labels: TK_LABEL__ local_label_names TK_SEMICOLON local_labels
local_label_names: TK_IDENT
local_label_names: TK_IDENT TK_COMMA local_label_names
statement: TK_SEMICOLON
statement: comma_expression TK_SEMICOLON
statement: block
statement: TK_IF paren_comma_expression statement
statement: TK_IF paren_comma_expression statement TK_ELSE statement
$@3: empty
$@4: empty
free_partial_signature($1);
statement: TK_SWITCH $@3 paren_comma_expression $@4 statement
$@5: empty
statement: TK_WHILE $@5 paren_comma_expression statement
free_partial_signature($1);
$@6: empty
statement: TK_DO $@6 statement TK_WHILE paren_comma_expression TK_SEMICOLON
free_partial_signature($3);
$@7: empty
statement: TK_FOR $@7 TK_LPAREN for_clause
statement: TK_IDENT TK_COLON statement
statement: TK_CASE expression TK_COLON
statement: TK_CASE expression TK_ELLIPSIS expression TK_COLON
statement: TK_DEFAULT TK_COLON
statement: TK_RETURN TK_SEMICOLON
statement: TK_RETURN comma_expression TK_SEMICOLON
statement: TK_BREAK TK_SEMICOLON
statement: TK_CONTINUE TK_SEMICOLON
statement: TK_GOTO TK_IDENT TK_SEMICOLON
statement: TK_GOTO TK_STAR comma_expression TK_SEMICOLON
statement: TK_ASM asmattr TK_LPAREN asmtemplate asmoutputs TK_RPAREN TK_SEMICOLON
statement: TK_MSASM
statement: declaration
In C99 we can have declarations everywhere...
statement: error location TK_SEMICOLON
for_clause: opt_expression TK_SEMICOLON opt_expression TK_SEMICOLON opt_expression TK_RPAREN statement
for_clause: declaration opt_expression TK_SEMICOLON opt_expression TK_RPAREN statement
declaration: decl_spec_list init_declarator_list TK_SEMICOLON
not function's declaration
declaration: decl_spec_list TK_SEMICOLON
not function's declaration
init_declarator_list: init_declarator
init_declarator_list: init_declarator TK_COMMA init_declarator_list
init_declarator: declarator
init_declarator: declarator TK_EQ init_expression
decl_spec_list: TK_TYPEDEF decl_spec_list_opt
I would have liked not to build them when unnecessary.
decl_spec_list: TK_EXTERN decl_spec_list_opt
decl_spec_list: TK_STATIC decl_spec_list_opt
There are 3 cases: static function, external and internal static variable
decl_spec_list: TK_AUTO decl_spec_list_opt
decl_spec_list: TK_REGISTER decl_spec_list_opt
decl_spec_list: TK_THREAD decl_spec_list_opt
decl_spec_list: type_spec decl_spec_list_opt_no_named
FI: might need a call to reset_csplit_current_function_name if(!string_undefined_p(csplit_current_function_name) && strcmp($2, csplit_current_function_name)==0) { csplit_current_function_name = csplit_current_function_name2; csplit_current_function_name2 = string_undefined; }
decl_spec_list: TK_INLINE decl_spec_list_opt
decl_spec_list: attribute decl_spec_list_opt
decl_spec_list: TK_AT_SPECIFIER TK_LPAREN TK_IDENT TK_RPAREN
$$ = string_undefined;
decl_spec_list_opt: empty
decl_spec_list_opt: decl_spec_list
@8: empty
Cf "Actions in Mid-Rule" in the Bison doc.
decl_spec_list_opt_no_named: @8
pips_debug(8, "TK_IDENT %s is discarded\n", $1);
free($1);
FI: I do not feel safe about this.
$$=strdup(splitc_text);
FI: why not $1?
$$ = strdup("IAmNotSure");
decl_spec_list_opt_no_named: decl_spec_list
type_spec: TK_VOID
type_spec: TK_CHAR
type_spec: TK_SHORT
type_spec: TK_INT
type_spec: TK_INT128
type_spec: TK_UINT128
type_spec: TK_COMPLEX
type_spec: TK_LONG
type_spec: TK_FLOAT
type_spec: TK_DOUBLE
type_spec: TK_SIGNED
type_spec: TK_UNSIGNED
type_spec: TK_STRUCT id_or_typename
FI: not clean, but the parser distinguishes between different kinds of ident and do not process them the same way.
see reset_csplit_current_function_name() if(!string_undefined_p(csplit_current_function_name) && strcmp($2, csplit_current_function_name)==0) { csplit_current_function_name = csplit_current_function_name2; csplit_current_function_name2 = string_undefined; }
type_spec: TK_STRUCT id_or_typename TK_LBRACE struct_decl_list TK_RBRACE
FI: I do not understand the reset. I copy the guard from previous rule
type_spec: TK_STRUCT TK_LBRACE struct_decl_list TK_RBRACE
type_spec: TK_UNION id_or_typename
type_spec: TK_UNION id_or_typename TK_LBRACE struct_decl_list TK_RBRACE
type_spec: TK_UNION TK_LBRACE struct_decl_list TK_RBRACE
type_spec: TK_ENUM id_or_typename
type_spec: TK_ENUM id_or_typename TK_LBRACE enum_list maybecomma TK_RBRACE
type_spec: TK_ENUM TK_LBRACE enum_list maybecomma TK_RBRACE
type_spec: TK_NAMED_TYPE
type_spec: TK_TYPEOF TK_LPAREN expression TK_RPAREN
type_spec: TK_TYPEOF TK_LPAREN type_name TK_RPAREN
struct_decl_list: empty
struct_decl_list: decl_spec_list TK_SEMICOLON struct_decl_list
struct_decl_list: decl_spec_list field_decl_list TK_SEMICOLON struct_decl_list
struct_decl_list: error TK_SEMICOLON struct_decl_list
field_decl_list: field_decl
field_decl_list: field_decl TK_COMMA field_decl_list
field_decl: declarator
field_decl: declarator TK_COLON expression
field_decl: TK_COLON expression
enum_list: enumerator
enum_list: enum_list TK_COMMA enumerator
enum_list: enum_list TK_COMMA error
enumerator: TK_IDENT
enumerator: TK_IDENT TK_EQ expression
declarator: pointer_opt direct_decl attributes_with_asm
Type and identifier information are mixed here. Instead of trying to retrieve the type only, it might be easier to postprocess the signature for Rule 2.
Keep parameter names in signatures.
This does not work! Do not try it anymore...
direct_decl: id_or_typename
FI: I declare many too many types! I should look at Nga's grammar.
Tell the lexer about the new type names : add to keyword_typedef_table
Too early to reset: one typedef can be used to declare several named types... but I do not know how to use it.
Keep identifiers in signatures
You are going to loose the function identifier. You may also loose enum member names...
direct_decl: TK_LPAREN attributes declarator TK_RPAREN
direct_decl: direct_decl TK_LBRACKET attributes comma_expression_opt TK_RBRACKET
FI: quick fix for summary_preconditions02.c which uses a function call to size an array...
direct_decl: direct_decl TK_LBRACKET attributes error TK_RBRACKET
direct_decl: direct_decl parameter_list_startscope rest_par_list TK_RPAREN
parameter_list_startscope: TK_LPAREN
rest_par_list: empty
rest_par_list: parameter_decl rest_par_list1
If such a test is really useful, it might be better located in another version of build_signature() which would check its arguments and decide to return string_undefined as soon as one of its arguments is undefined.
rest_par_list1: empty
rest_par_list1: TK_COMMA TK_ELLIPSIS
rest_par_list1: TK_COMMA parameter_decl rest_par_list1
parameter_decl: decl_spec_list declarator
parameter_decl: decl_spec_list abstract_decl
pips_internal_error("FI: C syntax problem...\n");
To avoid building to much useless stuff, although it foes not gain much because of parser structure: $2 is built before you realize it's useless because of $1.
parameter_decl: decl_spec_list
parameter_decl: TK_LPAREN parameter_decl TK_RPAREN
old_proto_decl: pointer_opt direct_old_proto_decl
direct_old_proto_decl: direct_decl TK_LPAREN old_parameter_list_ne TK_RPAREN old_pardef_list
You do not need the formal parameter list
$$ = build_signature($1, new_lparen(), new_rparen(), $5, NULL);
direct_old_proto_decl: direct_decl TK_LPAREN TK_RPAREN
old_parameter_list_ne: TK_IDENT
old_parameter_list_ne: TK_IDENT TK_COMMA old_parameter_list_ne
old_pardef_list: empty
old_pardef_list: decl_spec_list old_pardef TK_SEMICOLON TK_ELLIPSIS
You want a comma-separated list of types, but...
bad news: "int * pj" is broken as "int" for decl_spec_list and "* pj" for old_pardef
old_pardef_list: decl_spec_list old_pardef TK_SEMICOLON old_pardef_list
old_pardef: declarator
old_pardef: declarator TK_COMMA old_pardef
old_pardef: error
pointer: TK_STAR attributes pointer_opt
pointer_opt: empty
pointer_opt: pointer
type_name: decl_spec_list abstract_decl
type_name: decl_spec_list
abstract_decl: pointer_opt abs_direct_decl attributes
abstract_decl: pointer
abs_direct_decl: TK_LPAREN attributes abstract_decl TK_RPAREN
abs_direct_decl: TK_LPAREN error TK_RPAREN
abs_direct_decl: abs_direct_decl_opt TK_LBRACKET comma_expression_opt TK_RBRACKET
abs_direct_decl: abs_direct_decl parameter_list_startscope rest_par_list TK_RPAREN
abs_direct_decl_opt: abs_direct_decl
abs_direct_decl_opt: empty
function_def: function_def_start block
function_def_start: decl_spec_list declarator
let's use a pretty limited stack...
function's declaration
function_def_start: decl_spec_list old_proto_decl
The signature obtained here must be post-processed. The declaration list after the empty parameter list could be entirely dropped or converted into a type list. But beware of parameters declared together or declared in another order. Note that we could keep the parameter list between the parentheses and fetch the associated types.
function's declaration
function_def_start: TK_IDENT parameter_list_startscope rest_par_list TK_RPAREN
Create the current function
current_function_name = strdup($1);
function's declaration
function_def_start: TK_IDENT TK_LPAREN old_parameter_list_ne TK_RPAREN old_pardef_list
function's declaration
function_def_start: TK_IDENT TK_LPAREN TK_RPAREN
MakeCurrentFunction
function's declaration
attributes: empty
attributes: attribute attributes
attributes_with_asm: empty
attributes_with_asm: attribute attributes_with_asm
attributes_with_asm: TK_ASM TK_LPAREN string_constant TK_RPAREN attributes
skip the asm declaration ... this is relatively dangerous because it can change the symbol name. Yet it is ok to skip it at split level
attribute: TK_ATTRIBUTE TK_LPAREN paren_attr_list_ne TK_RPAREN
attribute: TK_DECLSPEC paren_attr_list_ne
attribute: TK_MSATTR
attribute: TK_CONST
attribute: TK_RESTRICT
attribute: TK_VOLATILE
attribute: TK_STATIC_DIMENSION
attr: id_or_typename
attr: TK_IDENT TK_COLON TK_INTCON
attr: TK_DEFAULT TK_COLON TK_INTCON
attr: TK_IDENT TK_LPAREN TK_RPAREN
attr: TK_IDENT paren_attr_list_ne
attr: TK_INTCON
attr: string_constant
attr: TK_CONST
attr: TK_SIZEOF expression
attr: TK_SIZEOF TK_LPAREN type_name TK_RPAREN
attr: TK_ALIGNOF expression
attr: TK_ALIGNOF TK_LPAREN type_name TK_RPAREN
attr: TK_PLUS expression
attr: TK_MINUS expression
attr: TK_STAR expression
attr: TK_AND expression
attr: TK_EXCLAM expression
attr: TK_TILDE expression
attr: attr TK_PLUS attr
attr: attr TK_MINUS attr
attr: attr TK_STAR expression
attr: attr TK_SLASH attr
attr: attr TK_PERCENT attr
attr: attr TK_AND_AND attr
attr: attr TK_PIPE_PIPE attr
attr: attr TK_AND attr
attr: attr TK_PIPE attr
attr: attr TK_CIRC attr
attr: attr TK_EQ_EQ attr
attr: attr TK_EXCLAM_EQ attr
attr: attr TK_INF attr
attr: attr TK_SUP attr
attr: attr TK_INF_EQ attr
attr: attr TK_SUP_EQ attr
attr: attr TK_INF_INF attr
attr: attr TK_SUP_SUP attr
attr: attr TK_ARROW id_or_typename
attr: attr TK_DOT id_or_typename
attr: TK_LPAREN attr TK_RPAREN
attr_list_ne: attr
attr_list_ne: attr TK_COMMA attr_list_ne
attr_list_ne: error TK_COMMA attr_list_ne
paren_attr_list_ne: TK_LPAREN attr_list_ne TK_RPAREN
paren_attr_list_ne: TK_LPAREN error TK_RPAREN
asmattr: empty
asmattr: TK_VOLATILE asmattr
asmattr: TK_CONST asmattr
asmtemplate: one_string_constant
asmtemplate: one_string_constant asmtemplate
asmoutputs: empty
asmoutputs: TK_COLON asmoperands asminputs
asmoperands: empty
asmoperands: asmoperandsne
asmoperandsne: asmoperand
asmoperandsne: asmoperandsne TK_COMMA asmoperand
asmoperand: string_constant TK_LPAREN expression TK_RPAREN
asmoperand: string_constant TK_LPAREN error TK_RPAREN
asminputs: empty
asminputs: TK_COLON asmoperands asmclobber
asmclobber: empty
asmclobber: TK_COLON asmcloberlst_ne
asmcloberlst_ne: one_string_constant
asmcloberlst_ne: one_string_constant TK_COMMA asmcloberlst_ne
User semantic actions sometimes alter yychar, and that requires that yytoken be updated with the new translation. We take the approach of translating immediately before every use of yytoken. One alternative is translating here after every semantic action, but that translation would be missed if the semantic action invokes YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an incorrect destructor might then be invoked immediately. In the case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated.
Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by.
----------------------------------—. | yyerrlab – here on detecting error. | `-----------------------------------—
Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary.
If not already recovering from an error, report this error.
If just tried and failed to reuse lookahead token after an error, discard it.
Return failure if at end of input.
Else will try to reuse lookahead token after shifting the error token.
-----------------------------------------------—. | yyerrorlab – error raised explicitly by YYERROR. | `------------------------------------------------—
Pacify compilers when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code.
Do not reclaim the symbols of the rule whose action triggered this YYERROR.
---------------------------------------------------------—. | yyerrlab1 – common code for both syntax error and YYERROR. | `----------------------------------------------------------—
Each real token shifted decrements this.
Pop stack until we find a state that shifts the error token.
Pop the current state because it cannot handle the error token.
Shift the error token.
---------------------------------—. | yyacceptlab – YYACCEPT comes here. | `----------------------------------—
-------------------------------—. | yyabortlab – YYABORT comes here. | `--------------------------------—
-------------------------------------------------------—. | yyexhaustedlab – YYNOMEM (memory exhaustion) comes here. | `--------------------------------------------------------—
------------------------------------------------------—. | yyreturnlab – parsing is finished, clean up and return. | `-------------------------------------------------------—
Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary.
Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT.
#define YYPOPSTACK | ( | N | ) | (yyvsp -= (N), yyssp -= (N)) |
#define YYSIZE_MAXIMUM |
#define YYSTACK_ALLOC YYMALLOC |
#define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM |
#define YYSTACK_BYTES | ( | N | ) |
The size of an array large to enough to hold all stacks, each with N elements.
#define YYSTACK_RELOCATE | ( | Stack_alloc, | |
Stack | |||
) |
Relocate STACK from its old location to the new one.
The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack.
#define YYTRANSLATE | ( | YYX | ) |
YYTRANSLATE(TOKEN-NUM) – Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking.
typedef int yy_state_fast_t |
typedef yytype_int16 yy_state_t |
typedef enum yysymbol_kind_t yysymbol_kind_t |
typedef enum yytokentype yytoken_kind_t |
typedef short yytype_int16 |
typedef signed char yytype_int8 |
On compilers that do not define PTRDIFF_MAX etc., make sure <limits.h> and (if available) <stdint.h> are included so that the code can choose integer types of a good width.
INFRINGES ON USER NAME SPACE Narrow types that promote to a signed type and that can represent a signed or unsigned integer of at least N bits. In tables they can save space and decrease cache pressure. Promoting to a signed type helps avoid bugs in integer arithmetic.
typedef unsigned short yytype_uint16 |
typedef unsigned char yytype_uint8 |
Work around bug in HP-UX 11.23, which defines these macros incorrectly for preprocessor constants.
This workaround can likely be removed in 2023, as HPE has promised support for HP-UX 11.23 (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf.
enum yysymbol_kind_t |
!YY_SPLITC_Y_TAB_H_INCLUDED
Symbol kind.
Definition at line 910 of file splitc.c.
enum yytokentype |
Definition at line 627 of file splitc.c.
All arguments must be defined.
The result is always defined.
Definition at line 447 of file splitc.c.
References general_build_signature(), and s1.
int check_signature_balance | ( | void | ) |
pips_internal_error("More signatures freed than allocated: %d\n", imbalance);
Definition at line 524 of file splitc.c.
References number_of_signatures_built, number_of_signatures_freed, and pips_debug.
Referenced by reset_csplit_current_beginning().
void csplit_parser_error | ( | const string | msg | ) |
Redundant with splitc_error()?
Should add the current line number of the lexer
csplit_parser_warning("Corrupted or non-supported C constructs.\n"
"Make sure your code is compiled by gcc -stc=c99 first, "
"and/or set proper PIPS option, "
"CHECK_FORTRAN_SYNTAX_BEFORE_RUNNING_PIPS or "
"CHECK_C_SYNTAX_BEFORE_RUNNING_PIPS.\n");
Reset all static variables
Close all open files: at least three...
msg | sg |
Definition at line 188 of file splitc.c.
References csplit_close_files(), csplit_error_handler(), csplit_parser_warning, current_file_name, pips_user_error, and splitc_lex_destroy().
|
static |
Definition at line 146 of file splitc.c.
References csplit_line_number, free(), get_bool_property(), get_pips_current_module(), get_pips_current_pass_name(), pips_log_alist(), preprocessor_current_initial_file_name, preprocessor_current_split_file_name, safe_read_nth_line(), and warning_log.
Referenced by csplit_parser_warning_func().
void csplit_parser_warning_func | ( | const char * | pips_func, |
const char * | pips_file, | ||
const int | pips_line, | ||
const string | format, | ||
... | |||
) |
pips_func | ips_func |
pips_file | ips_file |
pips_line | ips_line |
format | ormat |
Definition at line 174 of file splitc.c.
References csplit_parser_warning_alist().
void force_reset_preprocessor_scope_stack | ( | void | ) |
To be used by an error handler.
Definition at line 297 of file splitc.c.
References c_preprocessor_scope_number, c_preprocessor_scope_stack, SCOPE_UNDEFINED, stack_free(), and stack_undefined.
void ForceResetTypedefStack | ( | void | ) |
Definition at line 259 of file splitc.c.
References stack_free(), stack_undefined, and TypedefStack.
Referenced by csplit_close_files().
void free | ( | void * | ) |
Referenced by csplit_parser_warning_alist(), free_partial_signature(), general_build_signature(), and reset_csplit_current_function_name().
|
static |
Definition at line 365 of file splitc.c.
References free(), number_of_signatures_freed, and string_undefined_p.
Referenced by simplify_signature().
|
static |
va_list some_arguments;
va_start(*some_arguments, s1);
We are in trouble
We are in trouble too
pips_debug(9, "s%d = \"s"
", i, sa[i]);
Definition at line 372 of file splitc.c.
References concatenate(), count, free(), number_of_signatures_built, number_of_signatures_freed, pips_assert, pips_debug, pips_internal_error, s1, strdup(), string_undefined, and string_undefined_p.
Referenced by build_signature(), and safe_build_signature().
string get_preprocessor_current_scope | ( | void | ) |
Definition at line 327 of file splitc.c.
References c_preprocessor_scope_stack, preprocessor_scope_stack_empty_p(), stack_head(), and string_undefined.
Referenced by is_c_preprocessor_keyword_typedef(), and keep_track_of_typedef().
Definition at line 339 of file splitc.c.
References c_preprocessor_scope_stack, and stack_nth().
Referenced by is_c_preprocessor_keyword_typedef().
void init_preprocessor_scope_stack | ( | void | ) |
Definition at line 274 of file splitc.c.
References c_preprocessor_scope_number, c_preprocessor_scope_stack, stack_make(), and string_domain.
Referenced by csplit().
void MakeTypedefStack | ( | void | ) |
Define some functions from the .l or .y since cproto cannot dig them out:
Definition at line 243 of file splitc.c.
References int_domain, pips_assert, stack_make(), stack_undefined_p, and TypedefStack.
Referenced by csplit().
void* malloc | ( | YYSIZE_T | ) |
|
static |
Definition at line 555 of file splitc.c.
References new_signature().
|
static |
Definition at line 539 of file splitc.c.
References new_signature().
|
static |
Definition at line 584 of file splitc.c.
References new_signature().
|
static |
Beware of the free: no constant strings in signature!
Definition at line 535 of file splitc.c.
References new_signature().
|
static |
Definition at line 543 of file splitc.c.
References new_signature().
Referenced by sc_strong_normalize2(), sc_strong_normalize_and_check_feasibility(), and sc_strong_normalize_and_check_feasibility2().
|
static |
Definition at line 560 of file splitc.c.
References new_signature().
|
static |
Definition at line 576 of file splitc.c.
References new_signature().
|
static |
Definition at line 568 of file splitc.c.
References new_signature().
|
static |
Definition at line 564 of file splitc.c.
References new_signature().
|
static |
Definition at line 580 of file splitc.c.
References new_signature().
|
static |
Definition at line 572 of file splitc.c.
References new_signature().
|
static |
Definition at line 551 of file splitc.c.
References new_signature().
Definition at line 358 of file splitc.c.
References number_of_signatures_built, and strdup().
Referenced by new_colon(), new_comma(), new_ellipsis(), new_empty(), new_eq(), new_lbrace(), new_lbracket(), new_lparen(), new_rbrace(), new_rbracket(), new_rparen(), new_semicolon(), and new_star().
|
static |
Definition at line 547 of file splitc.c.
References new_signature().
void pop_preprocessor_scope | ( | void | ) |
Definition at line 316 of file splitc.c.
References c_preprocessor_scope_stack, and stack_pop().
|
static |
Definition at line 237 of file splitc.c.
References bool_to_string(), csplit_is_typedef, pips_debug, stack_pop(), and TypedefStack.
int preprocessor_scope_number | ( | void | ) |
Definition at line 345 of file splitc.c.
References c_preprocessor_scope_stack, and stack_size().
Referenced by is_c_preprocessor_keyword_typedef().
bool preprocessor_scope_stack_empty_p | ( | void | ) |
Definition at line 322 of file splitc.c.
References c_preprocessor_scope_stack, and stack_empty_p().
Referenced by get_preprocessor_current_scope().
void push_new_preprocessor_scope | ( | void | ) |
Definition at line 307 of file splitc.c.
References asprintf, c_preprocessor_scope_number, c_preprocessor_scope_stack, stack_push(), and string_undefined.
|
static |
Definition at line 229 of file splitc.c.
References bool_to_string(), csplit_is_typedef, pips_debug, stack_push(), and TypedefStack.
|
static |
Definition at line 129 of file splitc.c.
References csplit_current_function_name, csplit_current_function_name2, free(), string_undefined, and string_undefined_p.
void reset_preprocessor_scope_stack | ( | void | ) |
Definition at line 280 of file splitc.c.
References c_preprocessor_scope_number, c_preprocessor_scope_stack, pips_user_warning, SCOPE_UNDEFINED, stack_empty_p(), stack_free(), and stack_undefined.
Referenced by csplit_close_compilation_unit().
void ResetTypedefStack | ( | void | ) |
Definition at line 249 of file splitc.c.
References pips_internal_error, stack_empty_p(), stack_free(), stack_undefined, and TypedefStack.
Arguments may be defined or not, but as soon as one is undefined, an undefined_string is returned.
Definition at line 457 of file splitc.c.
References general_build_signature(), and s1.
Get rid of useless spaces: multiple contiguous spaces, spaces next to a separator,...
Some look ahead required to get rid of spaces before a separator. Could be moved into build_signature but it seemed easier to separate concerns.
Make sure to allocate enough space...
source points to the next character to copy and destination to the last character copied. The first character is already copied.
Do not copy a second space
Overwrite the space in the destination
Normal copy
Do not copy a space after some separators
Normal copy
Normal copy
Get rid of a trailing SPACE.
Definition at line 469 of file splitc.c.
References free_partial_signature(), pips_assert, pips_debug, and strdup().
int splitc_parse | ( | void | ) |
|
static |
YYMAXDEPTH – maximum size the stacks can grow to (effective only if the built-in stack extension method is used).
Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic.
-------------------------------------------—. | Release the memory associated to this symbol. | `--------------------------------------------—
Definition at line 2957 of file splitc.c.
References YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN, YY_IGNORE_MAYBE_UNINITIALIZED_END, YY_SYMBOL_PRINT, and YY_USE.
|
static |
Definition at line 271 of file splitc.c.
Referenced by force_reset_preprocessor_scope_stack(), init_preprocessor_scope_stack(), push_new_preprocessor_scope(), and reset_preprocessor_scope_stack().
|
static |
Definition at line 272 of file splitc.c.
Referenced by force_reset_preprocessor_scope_stack(), get_preprocessor_current_scope(), get_preprocessor_nth_scope(), init_preprocessor_scope_stack(), pop_preprocessor_scope(), preprocessor_scope_number(), preprocessor_scope_stack_empty_p(), push_new_preprocessor_scope(), and reset_preprocessor_scope_stack().
string csplit_current_function_name = string_undefined |
to know if this is the declaration of a function or not, to distinguish between a static variable and a static function
Shared with the lexical analyzer
Definition at line 123 of file splitc.c.
Referenced by reset_csplit_current_beginning(), and reset_csplit_current_function_name().
string csplit_current_function_name2 = string_undefined |
Definition at line 124 of file splitc.c.
Referenced by reset_csplit_current_beginning(), and reset_csplit_current_function_name().
string csplit_definite_function_name = string_undefined |
Definition at line 125 of file splitc.c.
Referenced by reset_csplit_current_beginning().
string csplit_definite_function_signature = string_undefined |
Definition at line 126 of file splitc.c.
Referenced by reset_csplit_current_beginning().
int csplit_is_external = 0 |
The following global variables are used to store the information such as the scope, type and storage of an entity, given by the decl_spec_list, which are used later by direct_decl to create the entity.
For the moment, block scope is not considered. CurrentScope can be File, Module, File'FILE_SEP_STRING'Module or TOP-LEVEL static string CurrentScope = NULL; static string CurrentDerivedName = NULL; to remember the name of a struct and add it to the member prefix name static int CurrentMode = 0; to know the mode of the formal parameter : by value or by reference
int csplit_is_function = 0 |
static int enum_counter = 0;
Shared with the lexical analyzer
Definition at line 143 of file splitc.c.
Referenced by reset_csplit_current_beginning().
All the following global variables must be replaced by functions, once we have the preprocessor for C.
Definition at line 226 of file splitc.c.
Referenced by PopTypedef(), and PushTypedef().
|
static |
If any of the strings is undefined, we are in trouble.
If not, concatenate them with separator into a new string and free all input strings. No more than six arguments.
Definition at line 355 of file splitc.c.
Referenced by check_signature_balance(), general_build_signature(), and new_signature().
|
static |
Definition at line 356 of file splitc.c.
Referenced by check_signature_balance(), free_partial_signature(), and general_build_signature().
|
extern |
|
static |
to know if this is a typedef name or not
Definition at line 227 of file splitc.c.
Referenced by ForceResetTypedefStack(), MakeTypedefStack(), PopTypedef(), PushTypedef(), and ResetTypedefStack().
|
static |
|
static |
|
static |
YYDEFGOTO[NTERM-NUM].
YYSTYPE yylval |
|
static |
|
static |
YYPGOTO[NTERM-NUM].
|
static |
|
static |
|
static |
|
static |
|
static |