diff -r a1b87eb155e4 -r 79ac274d1cc4 stage3/fill_candidate_datatypes.cc --- a/stage3/fill_candidate_datatypes.cc Mon Feb 20 17:52:01 2012 +0000 +++ b/stage3/fill_candidate_datatypes.cc Mon Feb 20 19:44:40 2012 +0000 @@ -923,8 +923,9 @@ il_parenthesis_level--; if (il_parenthesis_level < 0) ERROR; + /* Now check the if the data type semantics of operation are correct, */ - il_operand = prev_il_instruction; + il_operand = symbol->simple_instr_list; prev_il_instruction = prev_il_instruction_backup; symbol->il_expr_operator->accept(*this); il_operand = NULL; @@ -998,9 +999,26 @@ return NULL; } + +// void *visit(il_operand_list_c *symbol); + + +/* | simple_instr_list il_simple_instruction */ +/* This object is referenced by il_expression_c objects */ +void *fill_candidate_datatypes_c::visit(simple_instr_list_c *symbol) { + int i; + for(i = 0; i < symbol->n; i++) + symbol->elements[i]->accept(*this); + /* This object has (inherits) the same candidate datatypes as the last il_instruction (if it exists!) */ + if (i > 0) + copy_candidate_datatype_list(symbol->elements[i-1] /*from*/, symbol /*to*/); + + if (debug) std::cout << "simple_instr_list_c [" << symbol->candidate_datatypes.size() << "] result.\n"; +std::cout << "simple_instr_list_c [" << symbol->candidate_datatypes.size() << "] result.\n"; + return NULL; +} + /* - void *visit(il_operand_list_c *symbol); - void *visit(simple_instr_list_c *symbol); void *visit(il_param_list_c *symbol); void *visit(il_param_assignment_c *symbol); void *visit(il_param_out_assignment_c *symbol);