# HG changeset patch # User mario # Date 1193128558 -7200 # Node ID 41cb5b80416ec4835aa9b42e10b178d8d8b0c40e # Parent b0a43002dcac2099155476f4d0c8db9a35dcb411 Adding basic error checking. diff -r b0a43002dcac -r 41cb5b80416e absyntax/absyntax.cc --- a/absyntax/absyntax.cc Tue Oct 23 10:33:09 2007 +0200 +++ b/absyntax/absyntax.cc Tue Oct 23 10:35:58 2007 +0200 @@ -43,16 +43,23 @@ /* The base class of all symbols */ symbol_c::symbol_c(void) { - lineno = 0; -} - -symbol_c::symbol_c(long lineno) { - this->lineno = lineno; -} - - - -token_c::token_c(const char *value) { + this->first_line = 0; + this->first_column = 0; + this->last_line = 0; + this->last_column = 0; +} + +symbol_c::symbol_c(int first_line, int first_column, int last_line, int last_column) { + this->first_line = first_line; + this->first_column = first_column; + this->last_line = last_line; + this->last_column = last_column; +} + + + +token_c::token_c(const char *value, int fl, int fc, int ll, int lc) + :symbol_c(fl, fc, ll, lc) { this->value = value; // printf("New token: %s\n", value); } @@ -62,12 +69,14 @@ -list_c::list_c(void) { +list_c::list_c(int fl, int fc, int ll, int lc) + :symbol_c(fl, fc, ll, lc) { n = 0; elements = NULL; } -list_c::list_c(symbol_c *elem) { +list_c::list_c(symbol_c *elem, int fl, int fc, int ll, int lc) + :symbol_c(fl, fc, ll, lc) { n = 0; elements = NULL; add_element(elem); @@ -81,37 +90,95 @@ if (elements == NULL) ABORT("Out of memory"); elements[n - 1] = elem; -} - + + if (elem == NULL) + return; + + /* adjust the location parameters, taking into account the new element. */ + if ((first_line == elem->first_line) && + (first_column > elem->first_column)) { + first_column = elem->first_column; + } + if (first_line > elem->first_line) { + first_line = elem->first_line; + first_column = elem->first_column; + } + if ((last_line == elem->last_line) && + (last_column < elem->last_column)) { + last_column = elem->last_column; + } + if (last_line < elem->last_line) { + last_line = elem->last_line; + last_column = elem->last_column; + } +} #define SYM_LIST(class_name_c) \ +class_name_c::class_name_c(int fl, int fc, int ll, int lc) \ + :list_c(fl, fc, ll, lc) {} \ +class_name_c::class_name_c(symbol_c *elem, int fl, int fc, int ll, int lc) \ + :list_c(elem, fl, fc, ll, lc) {} \ void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);} #define SYM_TOKEN(class_name_c) \ -class_name_c::class_name_c(const char *value): token_c(value) {} \ -void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);} - -#define SYM_REF0(class_name_c) \ -void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);} - - -#define SYM_REF2(class_name_c, ref1, ref2) \ -class_name_c::class_name_c(symbol_c *ref1, \ - symbol_c *ref2) { \ - this->ref1 = ref1; \ - this->ref2 = ref2; \ -} \ -void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);} - - -#define SYM_REF4(class_name_c, ref1, ref2, ref3, ref4) \ +class_name_c::class_name_c(const char *value, int fl, int fc, int ll, int lc) \ + :token_c(value, fl, fc, ll, lc) {} \ +void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);} + +#define SYM_REF0(class_name_c) \ +class_name_c::class_name_c(int fl, int fc, \ + int ll, int lc \ + ): symbol_c(fl, fc, ll, lc) {} \ +void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);} + + +#define SYM_REF1(class_name_c, ref1) \ +class_name_c::class_name_c(symbol_c *ref1, \ + int fl, int fc, \ + int ll, int lc \ + ): symbol_c(fl, fc, ll, lc) { \ + this->ref1 = ref1; \ +} \ +void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);} + + +#define SYM_REF2(class_name_c, ref1, ref2) \ +class_name_c::class_name_c(symbol_c *ref1, \ + symbol_c *ref2, \ + int fl, int fc, \ + int ll, int lc \ + ): symbol_c(fl, fc, ll, lc) { \ + this->ref1 = ref1; \ + this->ref2 = ref2; \ +} \ +void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);} + + +#define SYM_REF3(class_name_c, ref1, ref2, ref3) \ class_name_c::class_name_c(symbol_c *ref1, \ symbol_c *ref2, \ symbol_c *ref3, \ - symbol_c *ref4) { \ + int fl, int fc, \ + int ll, int lc \ + ): symbol_c(fl, fc, ll, lc) { \ + this->ref1 = ref1; \ + this->ref2 = ref2; \ + this->ref3 = ref3; \ +} \ +void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);} + + +#define SYM_REF4(class_name_c, ref1, ref2, ref3, ref4) \ +class_name_c::class_name_c(symbol_c *ref1, \ + symbol_c *ref2, \ + symbol_c *ref3, \ + symbol_c *ref4, \ + int fl, int fc, \ + int ll, int lc \ + ): symbol_c(fl, fc, ll, lc) { \ this->ref1 = ref1; \ this->ref2 = ref2; \ this->ref3 = ref3; \ @@ -120,20 +187,42 @@ void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);} +#define SYM_REF5(class_name_c, ref1, ref2, ref3, ref4, ref5) \ +class_name_c::class_name_c(symbol_c *ref1, \ + symbol_c *ref2, \ + symbol_c *ref3, \ + symbol_c *ref4, \ + symbol_c *ref5, \ + int fl, int fc, \ + int ll, int lc \ + ): symbol_c(fl, fc, ll, lc) { \ + this->ref1 = ref1; \ + this->ref2 = ref2; \ + this->ref3 = ref3; \ + this->ref4 = ref4; \ + this->ref5 = ref5; \ +} \ +void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);} + + + #define SYM_REF6(class_name_c, ref1, ref2, ref3, ref4, ref5, ref6) \ class_name_c::class_name_c(symbol_c *ref1, \ symbol_c *ref2, \ symbol_c *ref3, \ symbol_c *ref4, \ symbol_c *ref5, \ - symbol_c *ref6) { \ - this->ref1 = ref1; \ - this->ref2 = ref2; \ - this->ref3 = ref3; \ - this->ref4 = ref4; \ - this->ref5 = ref5; \ - this->ref6 = ref6; \ -} \ + symbol_c *ref6, \ + int fl, int fc, \ + int ll, int lc \ + ): symbol_c(fl, fc, ll, lc) { \ + this->ref1 = ref1; \ + this->ref2 = ref2; \ + this->ref3 = ref3; \ + this->ref4 = ref4; \ + this->ref5 = ref5; \ + this->ref6 = ref6; \ +} \ void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);} @@ -147,8 +236,11 @@ #undef SYM_TOKEN #undef SYM_TOKEN #undef SYM_REF0 +#undef SYM_REF1 #undef SYM_REF2 +#undef SYM_REF3 #undef SYM_REF4 +#undef SYM_REF5 #undef SYM_REF6 diff -r b0a43002dcac -r 41cb5b80416e absyntax/absyntax.def --- a/absyntax/absyntax.def Tue Oct 23 10:33:09 2007 +0200 +++ b/absyntax/absyntax.def Tue Oct 23 10:35:58 2007 +0200 @@ -115,16 +115,16 @@ SYM_REF2(hours_c, hours, minutes) SYM_REF2(minutes_c, minutes, seconds) SYM_REF2(seconds_c, seconds, milliseconds) -SYM_REF2(milliseconds_c, milliseconds, unused) +SYM_REF1(milliseconds_c, milliseconds) /************************************/ /* B 1.2.3.2 - Time of day and Date */ /************************************/ -SYM_REF2(time_of_day_c, daytime, unused) -SYM_REF4(daytime_c, day_hour, day_minute, day_second, unused) -SYM_REF2(date_c, date_literal, unused) -SYM_REF4(date_literal_c, year, month, day, unused) +SYM_REF1(time_of_day_c, daytime) +SYM_REF3(daytime_c, day_hour, day_minute, day_second) +SYM_REF1(date_c, date_literal) +SYM_REF3(date_literal_c, year, month, day) SYM_REF2(date_and_time_c, date_literal, daytime) @@ -167,7 +167,7 @@ /* B 1.3.3 - Derived data types */ /********************************/ /* TYPE type_declaration_list END_TYPE */ -SYM_REF2(data_type_declaration_c, type_declaration_list, unused) +SYM_REF1(data_type_declaration_c, type_declaration_list) /* helper symbol for data_type_declaration */ SYM_LIST(type_declaration_list_c) @@ -320,7 +320,7 @@ /*********************/ /* B 1.4 - Variables */ /*********************/ -SYM_REF2(symbolic_variable_c, var_name, unused) +SYM_REF1(symbolic_variable_c, var_name) /********************************************/ /* B.1.4.1 Directly Represented Variables */ @@ -381,7 +381,7 @@ /* fb_name_list ':' function_block_type_name ASSIGN structure_initialization */ /* structure_initialization -> may be NULL ! */ -SYM_REF4(fb_name_decl_c, fb_name_list, function_block_type_name, structure_initialization, unused) +SYM_REF3(fb_name_decl_c, fb_name_list, function_block_type_name, structure_initialization) /* fb_name_list ',' fb_name */ SYM_LIST(fb_name_list_c) @@ -391,7 +391,7 @@ SYM_REF2(output_declarations_c, option, var_init_decl_list) /* VAR_IN_OUT var_declaration_list END_VAR */ -SYM_REF2(input_output_declarations_c, var_declaration_list, unused) +SYM_REF1(input_output_declarations_c, var_declaration_list) /* helper symbol for input_output_declarations */ /* var_declaration_list var_declaration ';' */ @@ -408,7 +408,7 @@ SYM_REF2(var_declarations_c, option, var_init_decl_list) /* VAR RETAIN var_init_decl_list END_VAR */ -SYM_REF2(retentive_var_declarations_c, var_init_decl_list, unused) +SYM_REF1(retentive_var_declarations_c, var_init_decl_list) /* VAR [CONSTANT|RETAIN|NON_RETAIN] located_var_decl_list END_VAR */ /* option -> may be NULL ! */ @@ -420,7 +420,7 @@ /* [variable_name] location ':' located_var_spec_init */ /* variable_name -> may be NULL ! */ -SYM_REF4(located_var_decl_c, variable_name, location, located_var_spec_init, unused) +SYM_REF3(located_var_decl_c, variable_name, location, located_var_spec_init) /*| VAR_EXTERNAL [CONSTANT] external_declaration_list END_VAR */ /* option -> may be NULL ! */ @@ -449,7 +449,7 @@ SYM_REF2(global_var_spec_c, global_var_name, location) /* AT direct_variable */ -SYM_REF2(location_c, direct_variable, unused) +SYM_REF1(location_c, direct_variable) /*| global_var_list ',' global_var_name */ SYM_LIST(global_var_list_c) @@ -479,7 +479,7 @@ SYM_LIST(incompl_located_var_decl_list_c) /* variable_name incompl_location ':' var_spec */ -SYM_REF4(incompl_located_var_decl_c, variable_name, incompl_location, var_spec, unused) +SYM_REF3(incompl_located_var_decl_c, variable_name, incompl_location, var_spec) /* AT incompl_location_token */ SYM_TOKEN(incompl_location_c) @@ -519,7 +519,7 @@ /* B 1.5.2 - Function Blocks */ /*****************************/ /* FUNCTION_BLOCK derived_function_block_name io_OR_other_var_declarations function_block_body END_FUNCTION_BLOCK */ -SYM_REF4(function_block_declaration_c, fblock_name, var_declarations, fblock_body, unused) +SYM_REF3(function_block_declaration_c, fblock_name, var_declarations, fblock_body) /* intermediate helper symbol for function_declaration */ /* { io_var_declarations | other_var_declarations } */ @@ -528,20 +528,20 @@ */ /* VAR_TEMP temp_var_decl_list END_VAR */ -SYM_REF2(temp_var_decls_c, var_decl_list, unused) +SYM_REF1(temp_var_decls_c, var_decl_list) /* intermediate helper symbol for temp_var_decls */ SYM_LIST(temp_var_decls_list_c) /* VAR NON_RETAIN var_init_decl_list END_VAR */ -SYM_REF2(non_retentive_var_decls_c, var_decl_list, unused) +SYM_REF1(non_retentive_var_decls_c, var_decl_list) /**********************/ /* B 1.5.3 - Programs */ /**********************/ /* PROGRAM program_type_name program_var_declarations_list function_block_body END_PROGRAM */ -SYM_REF4(program_declaration_c, program_type_name, var_declarations, function_block_body, unused) +SYM_REF3(program_declaration_c, program_type_name, var_declarations, function_block_body) /* intermediate helper symbol for program_declaration_c */ /* { io_var_declarations | other_var_declarations } */ @@ -563,7 +563,7 @@ SYM_LIST(action_association_list_c) SYM_REF2(step_c, step_name, action_association_list) -SYM_REF4(action_association_c, action_name, action_qualifier, indicator_name_list, unused) +SYM_REF3(action_association_c, action_name, action_qualifier, indicator_name_list) SYM_TOKEN(qualifier_c) SYM_TOKEN(timed_qualifier_c) @@ -592,7 +592,7 @@ optional_instance_specific_initializations END_CONFIGURATION */ -SYM_REF6(configuration_declaration_c, configuration_name, global_var_declarations, resource_declarations, access_declarations, instance_specific_initializations, unused) +SYM_REF5(configuration_declaration_c, configuration_name, global_var_declarations, resource_declarations, access_declarations, instance_specific_initializations) /* helper symbol for configuration_declaration */ SYM_LIST(resource_declaration_list_c) @@ -621,7 +621,7 @@ SYM_LIST(any_fb_name_list_c) /* [resource_name '.'] global_var_name ['.' structure_element_name] */ -SYM_REF4(global_var_reference_c, resource_name, global_var_name, structure_element_name, unused) +SYM_REF3(global_var_reference_c, resource_name, global_var_name, structure_element_name) /* prev_declared_program_name '.' symbolic_variable */ SYM_REF2(program_output_reference_c, program_name, symbolic_variable) @@ -630,10 +630,10 @@ SYM_REF2(task_configuration_c, task_name, task_initialization) /* '(' [SINGLE ASSIGN data_source ','] [INTERVAL ASSIGN data_source ','] PRIORITY ASSIGN integer ')' */ -SYM_REF4(task_initialization_c, single_data_source, interval_data_source, priority_data_source, unused) +SYM_REF3(task_initialization_c, single_data_source, interval_data_source, priority_data_source) /* PROGRAM [RETAIN | NON_RETAIN] program_name [WITH task_name] ':' program_type_name ['(' prog_conf_elements ')'] */ -SYM_REF6(program_configuration_c, retain_option, program_name, task_name, program_type_name, prog_conf_elements, unused) +SYM_REF5(program_configuration_c, retain_option, program_name, task_name, program_type_name, prog_conf_elements) /* prog_conf_elements ',' prog_conf_element */ SYM_LIST(prog_conf_elements_c) @@ -648,7 +648,7 @@ SYM_REF2(prog_cnxn_sendto_c, symbolic_variable, data_sink) /* VAR_CONFIG instance_specific_init_list END_VAR */ -SYM_REF2(instance_specific_initializations_c, instance_specific_init_list, unused) +SYM_REF1(instance_specific_initializations_c, instance_specific_init_list) /* helper symbol for instance_specific_initializations */ SYM_LIST(instance_specific_init_list_c) @@ -685,7 +685,7 @@ /* | il_expr_operator '(' [il_operand] eol_list [simple_instr_list] ')' */ -SYM_REF4(il_expression_c, il_expr_operator, il_operand, simple_instr_list, unused) +SYM_REF3(il_expression_c, il_expr_operator, il_operand, simple_instr_list) /* il_jump_operator label */ SYM_REF2(il_jump_operation_c, il_jump_operator, label) @@ -714,7 +714,7 @@ /* il_assign_operator il_operand * | il_assign_operator '(' eol_list simple_instr_list ')' */ -SYM_REF4(il_param_assignment_c, il_assign_operator, il_operand, simple_instr_list, unused) +SYM_REF3(il_param_assignment_c, il_assign_operator, il_operand, simple_instr_list) /* il_assign_out_operator variable */ SYM_REF2(il_param_out_assignment_c, il_assign_out_operator, variable) @@ -792,8 +792,8 @@ SYM_REF2(div_expression_c, l_exp, r_exp) SYM_REF2(mod_expression_c, l_exp, r_exp) SYM_REF2(power_expression_c, l_exp, r_exp) -SYM_REF2(neg_expression_c, exp, unused) -SYM_REF2(not_expression_c, exp, unused) +SYM_REF1(neg_expression_c, exp) +SYM_REF1(not_expression_c, exp) SYM_REF2(function_invocation_c, function_name, parameter_assignment_list) @@ -828,7 +828,7 @@ SYM_REF2(input_variable_param_assignment_c, variable_name, expression) /* [NOT] variable_name '=>' variable */ -SYM_REF4(output_variable_param_assignment_c, not_param, variable_name, variable, unused) +SYM_REF3(output_variable_param_assignment_c, not_param, variable_name, variable) /* helper CLASS for output_variable_param_assignment */ SYM_REF0(not_paramassign_c) @@ -848,7 +848,7 @@ SYM_REF2(elseif_statement_c, expression, statement_list) /* CASE expression OF case_element_list ELSE statement_list END_CASE */ -SYM_REF4(case_statement_c, expression, case_element_list, statement_list, unused) +SYM_REF3(case_statement_c, expression, case_element_list, statement_list) /* helper symbol for case_statement */ SYM_LIST(case_element_list_c) @@ -863,7 +863,7 @@ /* B 3.2.4 Iteration Statements */ /********************************/ /* FOR control_variable ASSIGN expression TO expression [BY expression] DO statement_list END_FOR */ -SYM_REF6(for_statement_c, control_variable, beg_expression, end_expression, by_expression, statement_list, unused) +SYM_REF5(for_statement_c, control_variable, beg_expression, end_expression, by_expression, statement_list) /* WHILE expression DO statement_list END_WHILE */ SYM_REF2(while_statement_c, expression, statement_list) diff -r b0a43002dcac -r 41cb5b80416e absyntax/absyntax.hh --- a/absyntax/absyntax.hh Tue Oct 23 10:33:09 2007 +0200 +++ b/absyntax/absyntax.hh Tue Oct 23 10:35:58 2007 +0200 @@ -51,7 +51,6 @@ class symbol_c; // forward declaration -//extern symbol_c *tree_root; @@ -62,12 +61,19 @@ /* * Line number for the purposes of error checking */ - long lineno; + int first_line; + int first_column; + int last_line; + int last_column; public: /* default constructor */ symbol_c(void); - symbol_c(long lineno); + symbol_c(int fl /* first_line */, + int fc /* first_column */, + int ll = 0 /* last_line */, + int lc = 0 /* last_column */ + ); /* default destructor */ /* must be virtual so compiler does not complain... */ @@ -83,7 +89,7 @@ const char *value; public: - token_c(const char *value); + token_c(const char *value, int fl = 0, int fc = 0, int ll = 0, int lc = 0); }; @@ -94,8 +100,8 @@ symbol_c **elements; public: - list_c(void); - list_c(symbol_c *elem); + list_c(int fl = 0, int fc = 0, int ll = 0, int lc = 0); + list_c(symbol_c *elem, int fl = 0, int fc = 0, int ll = 0, int lc = 0); /* insert a new element */ virtual void add_element(symbol_c *elem); }; @@ -103,37 +109,71 @@ -#define SYM_LIST(class_name_c) \ -class class_name_c: public list_c { \ - public: \ - virtual void *accept(visitor_c &visitor); \ -}; - - -#define SYM_TOKEN(class_name_c) \ -class class_name_c: public token_c { \ - public: \ - class_name_c(const char *value); \ - virtual void *accept(visitor_c &visitor); \ +#define SYM_LIST(class_name_c) \ +class class_name_c: public list_c { \ + public: \ + class_name_c(int fl = 0, int fc = 0, int ll = 0, int lc = 0); \ + class_name_c(symbol_c *elem, int fl = 0, int fc = 0, int ll = 0, int lc = 0); \ + virtual void *accept(visitor_c &visitor); \ +}; + + +#define SYM_TOKEN(class_name_c) \ +class class_name_c: public token_c { \ + public: \ + class_name_c(const char *value, int fl = 0, int fc = 0, int ll = 0, int lc = 0); \ + virtual void *accept(visitor_c &visitor); \ }; #define SYM_REF0(class_name_c) \ class class_name_c: public symbol_c { \ public: \ + class_name_c(int fl = 0, int fc = 0, \ + int ll = 0, int lc = 0); \ virtual void *accept(visitor_c &visitor); \ }; -#define SYM_REF2(class_name_c, ref1, ref2) \ -class class_name_c: public symbol_c { \ - public: \ - symbol_c *ref1; \ - symbol_c *ref2; \ - public: \ - class_name_c(symbol_c *ref1, \ - symbol_c *ref2 = NULL); \ - virtual void *accept(visitor_c &visitor); \ +#define SYM_REF1(class_name_c, ref1) \ +class class_name_c: public symbol_c { \ + public: \ + symbol_c *ref1; \ + public: \ + class_name_c(symbol_c *ref1, \ + int fl = 0, int fc = 0, \ + int ll = 0, int lc = 0); \ + virtual void *accept(visitor_c &visitor); \ +}; + + +#define SYM_REF2(class_name_c, ref1, ref2) \ +class class_name_c: public symbol_c { \ + public: \ + symbol_c *ref1; \ + symbol_c *ref2; \ + public: \ + class_name_c(symbol_c *ref1, \ + symbol_c *ref2 = NULL, \ + int fl = 0, int fc = 0, \ + int ll = 0, int lc = 0); \ + virtual void *accept(visitor_c &visitor); \ +}; + + +#define SYM_REF3(class_name_c, ref1, ref2, ref3) \ +class class_name_c: public symbol_c { \ + public: \ + symbol_c *ref1; \ + symbol_c *ref2; \ + symbol_c *ref3; \ + public: \ + class_name_c(symbol_c *ref1, \ + symbol_c *ref2, \ + symbol_c *ref3, \ + int fl = 0, int fc = 0, \ + int ll = 0, int lc = 0); \ + virtual void *accept(visitor_c &visitor); \ }; @@ -148,8 +188,30 @@ class_name_c(symbol_c *ref1, \ symbol_c *ref2, \ symbol_c *ref3, \ - symbol_c *ref4 = NULL); \ - virtual void *accept(visitor_c &visitor); \ + symbol_c *ref4 = NULL, \ + int fl = 0, int fc = 0, \ + int ll = 0, int lc = 0); \ + virtual void *accept(visitor_c &visitor); \ +}; + + +#define SYM_REF5(class_name_c, ref1, ref2, ref3, ref4, ref5) \ +class class_name_c: public symbol_c { \ + public: \ + symbol_c *ref1; \ + symbol_c *ref2; \ + symbol_c *ref3; \ + symbol_c *ref4; \ + symbol_c *ref5; \ + public: \ + class_name_c(symbol_c *ref1, \ + symbol_c *ref2, \ + symbol_c *ref3, \ + symbol_c *ref4, \ + symbol_c *ref5, \ + int fl = 0, int fc = 0, \ + int ll = 0, int lc = 0); \ + virtual void *accept(visitor_c &visitor); \ }; @@ -168,7 +230,9 @@ symbol_c *ref3, \ symbol_c *ref4, \ symbol_c *ref5, \ - symbol_c *ref6 = NULL); \ + symbol_c *ref6 = NULL, \ + int fl = 0, int fc = 0, \ + int ll = 0, int lc = 0); \ virtual void *accept(visitor_c &visitor); \ }; @@ -180,8 +244,11 @@ #undef SYM_LIST #undef SYM_TOKEN #undef SYM_REF0 +#undef SYM_REF1 #undef SYM_REF2 +#undef SYM_REF3 #undef SYM_REF4 +#undef SYM_REF5 #undef SYM_REF6 diff -r b0a43002dcac -r 41cb5b80416e absyntax/visitor.cc --- a/absyntax/visitor.cc Tue Oct 23 10:33:09 2007 +0200 +++ b/absyntax/visitor.cc Tue Oct 23 10:35:58 2007 +0200 @@ -72,12 +72,21 @@ #define SYM_REF0(class_name_c) \ void *null_visitor_c::visit(class_name_c *symbol) {return NULL;} +#define SYM_REF1(class_name_c, ref1) \ + void *null_visitor_c::visit(class_name_c *symbol) {return NULL;} + #define SYM_REF2(class_name_c, ref1, ref2) \ void *null_visitor_c::visit(class_name_c *symbol) {return NULL;} +#define SYM_REF3(class_name_c, ref1, ref2, ref3) \ + void *null_visitor_c::visit(class_name_c *symbol) {return NULL;} + #define SYM_REF4(class_name_c, ref1, ref2, ref3, ref4) \ void *null_visitor_c::visit(class_name_c *symbol) {return NULL;} +#define SYM_REF5(class_name_c, ref1, ref2, ref3, ref4, ref5) \ + void *null_visitor_c::visit(class_name_c *symbol) {return NULL;} + #define SYM_REF6(class_name_c, ref1, ref2, ref3, ref4, ref5, ref6) \ void *null_visitor_c::visit(class_name_c *symbol) {return NULL;} @@ -90,8 +99,11 @@ #undef SYM_LIST #undef SYM_TOKEN #undef SYM_REF0 +#undef SYM_REF1 #undef SYM_REF2 +#undef SYM_REF3 #undef SYM_REF4 +#undef SYM_REF5 #undef SYM_REF6 @@ -123,6 +135,12 @@ #define SYM_REF0(class_name_c) \ void *iterator_visitor_c::visit(class_name_c *symbol) {return NULL;} +#define SYM_REF1(class_name_c, ref1) \ +void *iterator_visitor_c::visit(class_name_c *symbol) { \ + if (symbol->ref1!=NULL) symbol->ref1->accept(*this); \ + return NULL; \ +} + #define SYM_REF2(class_name_c, ref1, ref2) \ void *iterator_visitor_c::visit(class_name_c *symbol) { \ if (symbol->ref1!=NULL) symbol->ref1->accept(*this); \ @@ -130,6 +148,14 @@ return NULL; \ } +#define SYM_REF3(class_name_c, ref1, ref2, ref3) \ +void *iterator_visitor_c::visit(class_name_c *symbol) { \ + if (symbol->ref1) symbol->ref1->accept(*this); \ + if (symbol->ref2) symbol->ref2->accept(*this); \ + if (symbol->ref3) symbol->ref3->accept(*this); \ + return NULL; \ +} + #define SYM_REF4(class_name_c, ref1, ref2, ref3, ref4) \ void *iterator_visitor_c::visit(class_name_c *symbol) { \ if (symbol->ref1) symbol->ref1->accept(*this); \ @@ -139,6 +165,15 @@ return NULL; \ } +#define SYM_REF5(class_name_c, ref1, ref2, ref3, ref4, ref5) \ +void *iterator_visitor_c::visit(class_name_c *symbol) { \ + if (symbol->ref1) symbol->ref1->accept(*this); \ + if (symbol->ref2) symbol->ref2->accept(*this); \ + if (symbol->ref3) symbol->ref3->accept(*this); \ + if (symbol->ref4) symbol->ref4->accept(*this); \ + if (symbol->ref5) symbol->ref5->accept(*this); \ + return NULL; \ +} #define SYM_REF6(class_name_c, ref1, ref2, ref3, ref4, ref5, ref6) \ void *iterator_visitor_c::visit(class_name_c *symbol) { \ @@ -160,8 +195,11 @@ #undef SYM_LIST #undef SYM_TOKEN #undef SYM_REF0 +#undef SYM_REF1 #undef SYM_REF2 +#undef SYM_REF3 #undef SYM_REF4 +#undef SYM_REF5 #undef SYM_REF6 @@ -199,6 +237,12 @@ #define SYM_REF0(class_name_c) \ void *search_visitor_c::visit(class_name_c *symbol) {return NULL;} +#define SYM_REF1(class_name_c, ref1) \ +void *search_visitor_c::visit(class_name_c *symbol) { \ + if (symbol->ref1) return symbol->ref1->accept(*this); \ + return NULL; \ +} + #define SYM_REF2(class_name_c, ref1, ref2) \ void *search_visitor_c::visit(class_name_c *symbol) { \ void *res = NULL; \ @@ -208,6 +252,17 @@ return NULL; \ } +#define SYM_REF3(class_name_c, ref1, ref2, ref3) \ +void *search_visitor_c::visit(class_name_c *symbol) { \ + void *res = NULL; \ + if (symbol->ref1) res = symbol->ref1->accept(*this); \ + if (res != NULL) return res; \ + if (symbol->ref2) res = symbol->ref2->accept(*this); \ + if (res != NULL) return res; \ + if (symbol->ref3) return symbol->ref3->accept(*this); \ + return NULL; \ +} + #define SYM_REF4(class_name_c, ref1, ref2, ref3, ref4) \ void *search_visitor_c::visit(class_name_c *symbol) { \ void *res = NULL; \ @@ -221,6 +276,20 @@ return NULL; \ } +#define SYM_REF5(class_name_c, ref1, ref2, ref3, ref4, ref5) \ +void *search_visitor_c::visit(class_name_c *symbol) { \ + void *res = NULL; \ + if (symbol->ref1) res = symbol->ref1->accept(*this); \ + if (res != NULL) return res; \ + if (symbol->ref2) res = symbol->ref2->accept(*this); \ + if (res != NULL) return res; \ + if (symbol->ref3) res = symbol->ref3->accept(*this); \ + if (res != NULL) return res; \ + if (symbol->ref4) res = symbol->ref4->accept(*this); \ + if (res != NULL) return res; \ + if (symbol->ref5) return symbol->ref5->accept(*this); \ + return NULL; \ +} #define SYM_REF6(class_name_c, ref1, ref2, ref3, ref4, ref5, ref6) \ void *search_visitor_c::visit(class_name_c *symbol) { \ @@ -248,8 +317,11 @@ #undef SYM_LIST #undef SYM_TOKEN #undef SYM_REF0 +#undef SYM_REF1 #undef SYM_REF2 +#undef SYM_REF3 #undef SYM_REF4 +#undef SYM_REF5 #undef SYM_REF6 diff -r b0a43002dcac -r 41cb5b80416e absyntax/visitor.hh --- a/absyntax/visitor.hh Tue Oct 23 10:33:09 2007 +0200 +++ b/absyntax/visitor.hh Tue Oct 23 10:35:58 2007 +0200 @@ -80,12 +80,21 @@ #define SYM_REF0(class_name_c) \ virtual void *visit(class_name_c *symbol) = 0; +#define SYM_REF1(class_name_c, ref1) \ + virtual void *visit(class_name_c *symbol) = 0; + #define SYM_REF2(class_name_c, ref1, ref2) \ virtual void *visit(class_name_c *symbol) = 0; +#define SYM_REF3(class_name_c, ref1, ref2, ref3) \ + virtual void *visit(class_name_c *symbol) = 0; + #define SYM_REF4(class_name_c, ref1, ref2, ref3, ref4) \ virtual void *visit(class_name_c *symbol) = 0; +#define SYM_REF5(class_name_c, ref1, ref2, ref3, ref4, ref5) \ + virtual void *visit(class_name_c *symbol) = 0; + #define SYM_REF6(class_name_c, ref1, ref2, ref3, ref4, ref5, ref6) \ virtual void *visit(class_name_c *symbol) = 0; @@ -99,8 +108,11 @@ #undef SYM_LIST #undef SYM_TOKEN #undef SYM_REF0 +#undef SYM_REF1 #undef SYM_REF2 +#undef SYM_REF3 #undef SYM_REF4 +#undef SYM_REF5 #undef SYM_REF6 @@ -117,12 +129,21 @@ #define SYM_REF0(class_name_c) \ virtual void *visit(class_name_c *symbol); +#define SYM_REF1(class_name_c, ref1) \ + virtual void *visit(class_name_c *symbol); + #define SYM_REF2(class_name_c, ref1, ref2) \ virtual void *visit(class_name_c *symbol); +#define SYM_REF3(class_name_c, ref1, ref2, ref3) \ + virtual void *visit(class_name_c *symbol); + #define SYM_REF4(class_name_c, ref1, ref2, ref3, ref4) \ virtual void *visit(class_name_c *symbol); +#define SYM_REF5(class_name_c, ref1, ref2, ref3, ref4, ref5) \ + virtual void *visit(class_name_c *symbol); + #define SYM_REF6(class_name_c, ref1, ref2, ref3, ref4, ref5, ref6) \ virtual void *visit(class_name_c *symbol); @@ -164,8 +185,11 @@ #undef SYM_LIST #undef SYM_TOKEN #undef SYM_REF0 +#undef SYM_REF1 #undef SYM_REF2 +#undef SYM_REF3 #undef SYM_REF4 +#undef SYM_REF5 #undef SYM_REF6 #endif /* _VISITOR_HH */ diff -r b0a43002dcac -r 41cb5b80416e stage4/generate_cc/generate_cc.cc --- a/stage4/generate_cc/generate_cc.cc Tue Oct 23 10:33:09 2007 +0200 +++ b/stage4/generate_cc/generate_cc.cc Tue Oct 23 10:35:58 2007 +0200 @@ -78,11 +78,11 @@ dsymtable_c function_symtable; /* A symbol table with all globally declared functions block types... */ -function_block_declaration_c null_symbol2(NULL,NULL,NULL,NULL); +function_block_declaration_c null_symbol2(NULL,NULL,NULL); symtable_c function_block_type_symtable; /* A symbol table with all globally declared program types... */ -program_declaration_c null_symbol3(NULL,NULL,NULL,NULL); +program_declaration_c null_symbol3(NULL,NULL,NULL); symtable_c program_type_symtable; /* A symbol table with all user declared type definitions... */ diff -r b0a43002dcac -r 41cb5b80416e stage4/generate_cc/generate_cc_il.cc --- a/stage4/generate_cc/generate_cc_il.cc Tue Oct 23 10:33:09 2007 +0200 +++ b/stage4/generate_cc/generate_cc_il.cc Tue Oct 23 10:35:58 2007 +0200 @@ -379,8 +379,8 @@ identifier_c param(param_name); - //SYM_REF4(il_param_assignment_c, il_assign_operator, il_operand, simple_instr_list, unused) - il_param_assignment_c il_param_assignment(¶m, &this->default_variable_name, NULL, NULL); + //SYM_REF3(il_param_assignment_c, il_assign_operator, il_operand, simple_instr_list) + il_param_assignment_c il_param_assignment(¶m, &this->default_variable_name, NULL); // SYM_LIST(il_param_list_c) il_param_list_c il_param_list; il_param_list.add_element(&il_param_assignment);