diff -r 2f6d8866ec8d -r 0a1204bcc9af stage4/generate_c/generate_c.cc --- a/stage4/generate_c/generate_c.cc Fri Apr 01 12:19:32 2011 +0100 +++ b/stage4/generate_c/generate_c.cc Mon Apr 04 10:42:03 2011 +0100 @@ -1,21 +1,28 @@ /* - * (c) 2003 Mario de Sousa + * matiec - a compiler for the programming languages defined in IEC 61131-3 * - * Offered to the public under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. + * Copyright (C) 2003-2011 Mario de Sousa (msousa@fe.up.pt) * - * 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. + * 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 . + * * * This code is made available on the understanding that it will not be * used in safety-critical situations without a full and competent review. */ /* - * An IEC 61131-3 IL and ST compiler. + * An IEC 61131-3 compiler. * * Based on the * FINAL DRAFT - IEC 61131-3, 2nd Ed. (2001-12-10) @@ -364,10 +371,16 @@ public: generate_c_SFC_IL_ST_c(stage4out_c *s4o_ptr, symbol_c *name, symbol_c *scope, const char *variable_prefix = NULL); + + /********************/ + /* 2.1.6 - Pragmas */ + /********************/ + void *visit(enable_code_generation_pragma_c * symbol) {s4o_ptr->enable_output(); return NULL;} + void *visit(disable_code_generation_pragma_c * symbol) {s4o_ptr->disable_output(); return NULL;} + /*********************************************/ /* B.1.6 Sequential function chart elements */ /*********************************************/ - /*| sequential_function_chart sfc_network*/ void *visit(sequential_function_chart_c * symbol); @@ -438,14 +451,23 @@ class generate_c_pous_c: public generate_c_typedecl_c { - + private: + stage4out_c *s4o_ptr; + public: generate_c_pous_c(stage4out_c *s4o_ptr, stage4out_c *s4o_incl_ptr) - : generate_c_typedecl_c(s4o_ptr, s4o_incl_ptr) {}; + : generate_c_typedecl_c(s4o_ptr, s4o_incl_ptr) { + generate_c_pous_c::s4o_ptr = s4o_ptr; + }; virtual ~generate_c_pous_c(void) {} public: +/********************/ +/* 2.1.6 - Pragmas */ +/********************/ +void *visit(enable_code_generation_pragma_c * symbol) {s4o_ptr->enable_output(); return NULL;} +void *visit(disable_code_generation_pragma_c * symbol) {s4o_ptr->disable_output(); return NULL;} /*************************/ /* B.1 - Common elements */ @@ -981,10 +1003,15 @@ /***********************************************************************/ class generate_c_config_c: public generate_c_typedecl_c { + private: + stage4out_c *s4o_ptr; public: generate_c_config_c(stage4out_c *s4o_ptr) - : generate_c_typedecl_c(s4o_ptr) {}; + : generate_c_typedecl_c(s4o_ptr) { + generate_c_config_c::s4o_ptr = s4o_ptr; + }; + virtual ~generate_c_config_c(void) {} typedef enum { @@ -996,12 +1023,18 @@ declaretype_t wanted_declaretype; + +public: +/********************/ +/* 2.1.6 - Pragmas */ +/********************/ +void *visit(enable_code_generation_pragma_c * symbol) {s4o_ptr->enable_output(); return NULL;} +void *visit(disable_code_generation_pragma_c * symbol) {s4o_ptr->disable_output(); return NULL;} + + /********************************/ /* B 1.7 Configuration elements */ /********************************/ - - -public: /* CONFIGURATION configuration_name optional_global_var_declarations @@ -1168,6 +1201,7 @@ symbol_c *current_resource_name; symbol_c *current_task_name; symbol_c *current_global_vars; + stage4out_c *s4o_ptr; public: generate_c_resources_c(stage4out_c *s4o_ptr, symbol_c *config_scope, symbol_c *resource_scope, unsigned long time) @@ -1178,7 +1212,9 @@ current_resource_name = NULL; current_task_name = NULL; current_global_vars = NULL; + generate_c_resources_c::s4o_ptr = s4o_ptr; }; + virtual ~generate_c_resources_c(void) { delete search_config_instance; delete search_resource_instance; @@ -1228,6 +1264,14 @@ return NULL; } + + /********************/ + /* 2.1.6 - Pragmas */ + /********************/ + void *visit(enable_code_generation_pragma_c * symbol) {s4o_ptr->enable_output(); return NULL;} + void *visit(disable_code_generation_pragma_c * symbol) {s4o_ptr->disable_output(); return NULL;} + + /******************************************/ /* B 1.4.3 - Declaration & Initialisation */ /******************************************/ @@ -1673,6 +1717,30 @@ ~generate_c_c(void) {} + + +/********************/ +/* 2.1.6 - Pragmas */ +/********************/ + void *visit(enable_code_generation_pragma_c * symbol) { + s4o .enable_output(); + pous_s4o .enable_output(); + pous_incl_s4o .enable_output(); + located_variables_s4o.enable_output(); + variables_s4o .enable_output(); + return NULL; + } + + void *visit(disable_code_generation_pragma_c * symbol) { + s4o .disable_output(); + pous_s4o .disable_output(); + pous_incl_s4o .disable_output(); + located_variables_s4o.disable_output(); + variables_s4o .disable_output(); + return NULL; + } + + /***************************/ /* B 0 - Programming Model */ /***************************/