# HG changeset patch # User Mario de Sousa # Date 1348050195 -3600 # Node ID fe5e1f01a49e9467cd98b922b425b7e11b356a05 # Parent cac2973b688406a5992364bea8d656aed741bb76 store POU reference to POU declaration instead of global var declarations. diff -r cac2973b6884 -r fe5e1f01a49e stage3/declaration_check.cc --- a/stage3/declaration_check.cc Tue Sep 18 14:21:19 2012 +0200 +++ b/stage3/declaration_check.cc Wed Sep 19 11:23:15 2012 +0100 @@ -1,7 +1,7 @@ /* * matiec - a compiler for the programming languages defined in IEC 61131-3 * - * Copyright (C) 2003-2011 Mario de Sousa (msousa@fe.up.pt) + * Copyright (C) 2003-2012 Mario de Sousa (msousa@fe.up.pt) * Copyright (C) 2012 Manuele Conti (conti.ma@alice.it) * * This program is free software: you can redistribute it and/or modify @@ -86,7 +86,7 @@ symbol_c *var_name; search_base_type_c search_base_type; - search_var_instance_decl_c search_var_instance_glo_decl(global_var_decls); + search_var_instance_decl_c search_var_instance_glo_decl(current_pou_decl); search_var_instance_decl_c search_var_instance_ext_decl(p_decl); function_param_iterator_c fpi(p_decl); while((var_name = fpi.next()) != NULL) { @@ -101,21 +101,22 @@ * We need a new class (like search_base_type class) to get type id by variable declaration. * symbol_c *glo_type = ????; * symbol_c *ext_type = fpi.param_type(); - * if (! is_type_equal(glo_type, ext_type)) - * STAGE3_ERROR(0, glo_decl, glo_decl, "Declaration error an external redefinition data type."); - */ + */ + /* For the moment, we will just use search_base_type_c instead... */ + symbol_c *glo_type = search_base_type.get_basetype_decl(glo_decl); + symbol_c *ext_type = search_base_type.get_basetype_decl(ext_decl); + if (! is_type_equal(glo_type, ext_type)) + STAGE3_ERROR(0, ext_decl, ext_decl, "Declaration error an external redefinition data type."); } } } /******************************************/ -/* B 1.4.3 - Declaration & Initialisation */ +/* B 1.5.3 - Declaration & Initialisation */ /******************************************/ -void *declaration_check_c::visit(global_var_declarations_c *symbol) { - global_var_decls = dynamic_cast(symbol->global_var_decl_list); - if (NULL == global_var_decls) - ERROR; +void *declaration_check_c::visit(program_declaration_c *symbol) { + current_pou_decl = symbol; return NULL; } diff -r cac2973b6884 -r fe5e1f01a49e stage3/declaration_check.hh --- a/stage3/declaration_check.hh Tue Sep 18 14:21:19 2012 +0200 +++ b/stage3/declaration_check.hh Wed Sep 19 11:23:15 2012 +0100 @@ -1,7 +1,7 @@ /* * matiec - a compiler for the programming languages defined in IEC 61131-3 * - * Copyright (C) 2003-2011 Mario de Sousa (msousa@fe.up.pt) + * Copyright (C) 2003-2012 Mario de Sousa (msousa@fe.up.pt) * Copyright (C) 2012 Manuele Conti (conti.ma@alice.it) * * This program is free software: you can redistribute it and/or modify @@ -39,7 +39,7 @@ int error_count; int current_display_error_level; search_base_type_c search_base_type; - list_c *global_var_decls; + symbol_c *current_pou_decl; public: declaration_check_c(symbol_c *ignore); @@ -48,9 +48,9 @@ void check_global_decl(symbol_c *p_decl); /******************************************/ - /* B 1.4.3 - Declaration & Initialisation */ + /* B 1.5.3 - Declaration & Initialisation */ /******************************************/ - void *visit(global_var_declarations_c *symbol); + void *visit(program_declaration_c *symbol); /********************************/ /* B 1.7 Configuration elements */ /********************************/