6 #ifndef c_syntax_header_included
7 #define c_syntax_header_included
49 #define get_label_prefix() "-"
59 #define FIRST_C_LINE_NUMBER (1)
60 #define UNDEFINED_C_LINE_NUMBER (-1)
62 #define CParserError(m) c_parser_error(CURRENT_FUNCTION, m)
63 #define c_parser_user_warning(...) \
64 c_parser_user_warning_func(CURRENT_FUNCTION, __FILE__, __LINE__, __VA_ARGS__)
317 extern int c_lex(
void);
void error_reset_c_parser_current_user_input_file_name(void)
string get_current_C_comment(void)
Return the current comment as a string to be freed by the caller and reset the current comment.
value MakeEnumeratorInitialValue(list, int)
entity MakeDerivedEntity(string, list, bool, int)
void parser_init_keyword_typedef_table(void)
statement MakeBreakStatement(string)
int analyze_preprocessor_line(string, int)
Analyze information about user line number provided by the C preprocessor and by PIPS file splitter a...
void UpdateAbstractEntity(entity, stack)
statement MakeDefaultStatement(void)
bool compilation_unit_parser(const char *)
expression MakeArrayExpression(expression, list)
FI: this function is called for a bracketed comma expression.
string CreateMemberScope(string, bool)
list TakeDerivedEntities(list)
void c_parser_put_new_typedef(const char *)
Store named type for the lexical analyzer, which has to decide if a character string is the name of a...
void reset_expression_comment(void)
we don't want an expression comment with new lines, it is disgracefull
void * c_alloc(yy_size_t)
void PushContext(c_parser_context)
void ResetCurrentModule(void)
type UpdateType(type, type)
This function replaces the undefined field in t1 by t2.
void CCompilationUnitMemoryAllocations(entity, bool)
This function allocates the memory to the Current Compilation Unit.
void UpdateFunctionEntity(entity, list)
The parser has found out that an entity is a function and partially sets its type.
entity get_current_compilation_unit_entity(void)
void MakeTopLevelEntity(void)
c_parser_context GetContextCopy(void)
statement MakeForloop(expression, expression, expression, statement)
Create a for-loop statement with some parser-specific characteristics.
void remove_LFs_from_C_comment(int)
Remove "extra_LF" trailing LF from C_current_comment if they can be found at the end of the comment s...
void StackPop(stack)
The OffsetStack is poped n times, where n is the number of formal arguments of the actual function.
entity DynamicArea
These global variables are declared in ri-util/util.c.
statement Get_C_ReturnStatement(void)
This function is used to generate all goto's towards the unique return used to C replace return state...
list add_prettyprint_control_list_to_declaration_statement(statement, list)
The control list is hidden as arguments to the call to CONTROL in the declaration statement s.
void FixCReturnStatements(statement)
When return statements have been encountered, each of them has been replaced by a goto to a unique re...
void UpdateEntities(list, stack, stack, stack, stack, bool, bool)
c_parser_context GetContext(void)
expression MakeFunctionExpression(expression, list)
e is now owned by returned expression and must not be used any longer
void UpdateDerivedEntities(list, list, stack)
entity FindEntityFromLocalName(string)
stack SwitchControllerStack
void set_c_parser_current_input_file_name(string)
int get_previous_c_lineno(void)
type UpdateFinalPointer(type, type)
void UpdateArrayEntity(entity, list, list)
bool check_declaration_uniqueness_p(statement)
This is designed for standard C functions, not for compilation units.
void UpdatePointerEntity(entity, type, list)
void reset_c_parser_current_input_file_name(void)
expression MemberDerivedIdentifierToExpression(type, string)
list insert_qualifier(list, qualifier)
if qualifier "nq" does not already belong to qualifier list "ql", add it in front of the list.
void push_new_c_parser_scope(void)
void set_prettyprint_control_list_to_dummy(void)
void put_to_entity_type_stack_table(entity, stack value)
void init_c_parser_scope_stack(void)
void reset_token_has_been_seen_p(void)
void discard_C_comment(void)
Discard a C comment because we don't know how to deal with it.
int GetReturnNumber(void)
entity Generate_C_ReturnLabel(entity)
return.c
bool c_parser(const char *)
void * c_realloc(void *, yy_size_t)
string get_c_parser_current_scope(void)
void set_current_C_line_number(void)
void push_current_C_comment(void)
Push the current C comment so that we can get it back when building the statement later.
void reset_preprocessor_line_analysis(void)
expression MemberIdentifierToExpression(expression, string)
void make_predefined_C_entities(string)
void ResetCurrentCompilationUnitEntity(bool)
void init_c_areas(void)
In C we have 4 areas.
dimension MakeDimension(list, list)
entity get_top_level_entity(void)
entity FindOrCreateEntityFromLocalNameAndPrefix(string, string, bool)
parameter FindParameterEntity(string, int, list)
list LabeledStatements
BlockStack is used to handle block scope.
void reset_c_parser_scope_stack(void)
void set_entity_initial(entity, expression)
Be careful if the initial value has already been set.
bool c_parser_error(const char *, const char *)
Output a parser message error.
void reset_declaration_counter(void)
void RemoveFromExterns(entity)
void InitializeBlock(void)
int get_current_C_line_number(void)
void Reset_C_ReturnStatement(void)
The return statement must be reset when it is used by the parser to add the return statement to the f...
void InitializeEnumMemberValues(list)
stack SwitchGotoStack
list of labeled statements of the current module
stack BlockStack
statement.c
c_parser_context CreateDefaultContext(void)
string compilation_unit_name
cproto-generated files
entity FindEntityFromLocalNameAndPrefixAndScope(string, string, string)
The parameter "scope" is potentially destroyed.
entity MakeCLabel(string)
string get_c_parser_nth_scope(int)
list MakeParameterList(list, list, stack)
string pop_current_C_comment(void)
Pop the current comment.
int C_line_increment
from "clex.l"
void UpdateEntity(entity, stack, stack, stack, stack, bool, bool)
Update the entity with final type, storage and initial value; and also (sometimes?...
void reset_c_parser_current_user_input_file_name(void)
void error_reset_c_parser_current_input_file_name(void)
storage MakeStorageRam(entity, bool, bool)
The storage part should not be called twice when reparsing compilation unit.
void init_entity_type_storage_table(void)
statement Generate_C_ReturnStatement(void)
void MakeCurrentModule(entity)
is used for switch statements also, because we do not distinguish a break in a loop or a switch
string scope_to_block_scope(string)
Allocate a new string containing only block scope information.
string get_c_parser_current_input_file_name(void)
void CreateReturnEntity(entity)
If necessary, create the return entity, which is a hidden variable used in PIPS internal representati...
void reset_current_dummy_parameter_number(void)
unsigned int character_occurences_in_string(string, char)
Use a stack to survive to file inclusions if any.
statement MakeSwitchStatement(statement)
void init_C_comment(void)
void reset_current_C_line_number(void)
void NStackPop(stack, int)
Pop n times the stack s.
void put_new_typedef(const char *)
This function is used by libraries "step"* and "task_parallelization".
void c_parser_user_warning_func(const char *, const char *, const int, const char *,...)
statement ExpressionToStatement(expression)
e is now owned by returned statement
void push_current_C_line_number(void)
The line number stack, designed for structured control structure, is not used yet.
string GetParentScope(void)
void reset_C_comment(bool)
reset and reset_error should be handled differently
stack get_from_entity_type_stack_table(entity)
bool c_parser_scope_stack_empty_p(void)
void UpdateEntity2(entity, stack, stack)
void pop_c_parser_scope_stack(void)
statement MakeForloopWithIndexDeclaration(list, expression, expression, statement)
Create a C99 for-loop statement with a declaration as first parameter in the for clause,...
statement FindStatementFromLabel(entity)
bool extern_prettyprint_control_list_p(void)
void reset_prettyprint_control_list_to_extern(void)
void c_parser_user_warning_alist(const char *, const char *, const int, const char *, va_list *)
util.c
void c_pop_buffer_state(void)
bool dummy_prettyprint_control_list_p(void)
Provide the information only once.
statement MakeCaseStatement(expression)
Transform.
void SubstituteDummyParameters(entity, list)
string pop_block_scope(string)
The scope is moved up the scope tree and a NULL is return when there are no more scope to explore.
void CCompilationUnitMemoryReallocation(entity)
bool compilation_unit_parser_is_running_p
To pass down the information to functions used by the syntactical analyzer.
int c_parser_number_of_scopes(void)
void UpdateParenEntity(entity, list)
entity FindOrCreateCurrentEntity(string, stack, stack, stack, bool)
entity FindOrCreateEntityFromLocalNameAndPrefixAndScope(string, string, string, bool)
void AddToCalledModules(entity)
void UpdateDerivedEntity(list, entity, stack)
void remove_entity_type_stack(entity)
statement MakeBlock(list)
Create a block statement.
statement MakeContinueStatement(string)
void AddToExterns(entity, entity)
void error_reset_current_C_line_number(void)
entity RenameFunctionEntity(entity)
Rename function oe if necessary.
void remove_entity_type_stacks(list)
entity make_C_constant_entity(string, tag, size_t)
statement C_MakeReturnStatement(list, int, string)
This function creates a goto instruction to label end_label.
void error_reset_C_comment(bool)
void CModuleMemoryAllocation(entity)
This function is for MemoryAllocation for Module of C programs.
void MakeCurrentCompilationUnitEntity(const char *)
A compilation unit is also considered as a module.
int get_previous_C_line_number(void)
Should be called just before get_current_C_line_number.
int ComputeAreaOffset(entity, entity)
FILE * c_in
Warning! Do not modify this file that is automatically generated!
expression IdentifierToExpression(string)
list removable_extern_entities
void set_prettyprint_control_list_to_extern(void)
void RemoveDummyArguments(entity, list)
To chase formals in type declarations.
int loop_counter
Global counter.
statement MakeWhileLoop(list, statement, bool)
entity CreateEntityFromLocalNameAndPrefix(string, string, bool)
void init_c_implicit_variables(entity)
void CleanUpEntities(list)
string get_c_parser_current_user_input_file_name(void)
void reset_entity_type_stack_table(void)
void force_reset_c_parser_scope_stack(void)
To be used by an error handler.
void StackPush(stack)
The OffsetStack is pushed incrementally.
bool CheckExternList(void)
void clear_C_comment(void)
void UseDummyArguments(entity)
If f has regular formal parameters, destroy them.
statement MakeLabeledStatement(string, statement, string)
Construct a new statement from.
void update_C_comment(string)
Add a comment to the current one.
entity FindEntityFromLocalNameAndPrefix(string, string)
int get_declaration_counter(void)
entity GetFunction(void)
cproto workaround
void AddToDeclarations(entity, entity)
FI: check the difference with AddEntityToDeclarations()
statement MakeGotoStatement(string)
statement ModuleStatement
int pop_current_C_line_number(void)
int c_lineno
the file read in by the c_lexer
void set_c_parser_current_user_input_file_name(string)
void CCompilationUnitMemoryAllocation(entity)
void UseFormalArguments(entity)
If f has dummy formal parameters, replace them by standard formal parameters.
The structure used to build lists in NewGen.