stage4/generate_c/generate_var_list.cc
author Edouard Tisserant
Fri, 19 Oct 2012 12:10:32 +0200
changeset 634 736b36a83548
parent 626 9f2cefb98e60
child 667 bd1360f29f15
child 706 31553c22f318
permissions -rwxr-xr-x
Added double curly braces for pragma (kept single curly braces for compatibility). Added macro def and undef surrounding pragma to simplify user code. Moved useless comment from generated code back to code generator.
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
     1
/*
279
c0453b7f99df Re-generated std lib related code, with updated headers, updated all forgotten headers
Edouard Tisserant
parents: 232
diff changeset
     2
 *  matiec - a compiler for the programming languages defined in IEC 61131-3
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
     3
 *
279
c0453b7f99df Re-generated std lib related code, with updated headers, updated all forgotten headers
Edouard Tisserant
parents: 232
diff changeset
     4
 *  Copyright (C) 2003-2011  Mario de Sousa (msousa@fe.up.pt)
c0453b7f99df Re-generated std lib related code, with updated headers, updated all forgotten headers
Edouard Tisserant
parents: 232
diff changeset
     5
 *  Copyright (C) 2007-2011  Laurent Bessard and Edouard Tisserant
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
     6
 *
279
c0453b7f99df Re-generated std lib related code, with updated headers, updated all forgotten headers
Edouard Tisserant
parents: 232
diff changeset
     7
 *  This program is free software: you can redistribute it and/or modify
c0453b7f99df Re-generated std lib related code, with updated headers, updated all forgotten headers
Edouard Tisserant
parents: 232
diff changeset
     8
 *  it under the terms of the GNU General Public License as published by
c0453b7f99df Re-generated std lib related code, with updated headers, updated all forgotten headers
Edouard Tisserant
parents: 232
diff changeset
     9
 *  the Free Software Foundation, either version 3 of the License, or
c0453b7f99df Re-generated std lib related code, with updated headers, updated all forgotten headers
Edouard Tisserant
parents: 232
diff changeset
    10
 *  (at your option) any later version.
c0453b7f99df Re-generated std lib related code, with updated headers, updated all forgotten headers
Edouard Tisserant
parents: 232
diff changeset
    11
 *
c0453b7f99df Re-generated std lib related code, with updated headers, updated all forgotten headers
Edouard Tisserant
parents: 232
diff changeset
    12
 *  This program is distributed in the hope that it will be useful,
c0453b7f99df Re-generated std lib related code, with updated headers, updated all forgotten headers
Edouard Tisserant
parents: 232
diff changeset
    13
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
c0453b7f99df Re-generated std lib related code, with updated headers, updated all forgotten headers
Edouard Tisserant
parents: 232
diff changeset
    14
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
c0453b7f99df Re-generated std lib related code, with updated headers, updated all forgotten headers
Edouard Tisserant
parents: 232
diff changeset
    15
 *  GNU General Public License for more details.
c0453b7f99df Re-generated std lib related code, with updated headers, updated all forgotten headers
Edouard Tisserant
parents: 232
diff changeset
    16
 *
c0453b7f99df Re-generated std lib related code, with updated headers, updated all forgotten headers
Edouard Tisserant
parents: 232
diff changeset
    17
 *  You should have received a copy of the GNU General Public License
c0453b7f99df Re-generated std lib related code, with updated headers, updated all forgotten headers
Edouard Tisserant
parents: 232
diff changeset
    18
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
    19
 *
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
    20
 * This code is made available on the understanding that it will not be
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
    21
 * used in safety-critical situations without a full and competent review.
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
    22
 *
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
    23
 * Based on the
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
    24
 * FINAL DRAFT - IEC 61131-3, 2nd Ed. (2001-12-10)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
    25
 *
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
    26
 */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
    27
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    28
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    29
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    30
/***********************************************************************/
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    31
/***********************************************************************/
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    32
/***********************************************************************/
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    33
/***********************************************************************/
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    34
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    35
class search_location_type_c: public iterator_visitor_c {
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    36
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    37
  public:
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    38
    typedef enum {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    39
      none_lt,
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    40
      input_lt,
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    41
      output_lt,
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    42
      memory_lt
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    43
    } locationtype_t;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    44
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    45
    locationtype_t current_location_type;
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    46
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    47
  public:
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    48
    search_location_type_c(void) {}
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    49
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    50
    virtual ~search_location_type_c(void) {}
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    51
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    52
    locationtype_t get_location_type(symbol_c *symbol) {
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    53
      current_location_type = none_lt;
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    54
      symbol->accept(*this);
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    55
      if (current_location_type == none_lt) ERROR;
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    56
      return current_location_type;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    57
    }
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    58
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    59
  private:
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    60
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    61
    void *visit(incompl_location_c* symbol) {
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    62
      if (symbol->value[1] == 'I')
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    63
        current_location_type = input_lt;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    64
     else if (symbol->value[1] == 'Q')
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    65
        current_location_type = output_lt;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    66
     else if (symbol->value[1] == 'M')
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    67
        current_location_type = memory_lt;
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    68
      return NULL;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    69
    }
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    70
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    71
    void *visit(direct_variable_c *symbol) {
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    72
      if (symbol->value[1] == 'I')
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    73
        current_location_type = input_lt;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    74
     else if (symbol->value[1] == 'Q')
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    75
        current_location_type = output_lt;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    76
     else if (symbol->value[1] == 'M')
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    77
        current_location_type = memory_lt;
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    78
      return NULL;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    79
    }
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
    80
};
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
    81
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
    82
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    83
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    84
/***********************************************************************/
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    85
/***********************************************************************/
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    86
/***********************************************************************/
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    87
/***********************************************************************/
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    88
/***********************************************************************/
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    89
/***********************************************************************/
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    90
/***********************************************************************/
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    91
/***********************************************************************/
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    92
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    93
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    94
class search_type_symbol_c: public iterator_visitor_c {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    95
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    96
  public:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    97
    typedef enum {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    98
      none_vtc,
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    99
      variable_vtc,
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   100
      array_vtc,
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   101
      structure_vtc,
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   102
      function_block_vtc
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   103
    } vartypecategory_t;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   104
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   105
    vartypecategory_t current_var_type_category;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   106
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   107
  private:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   108
    symbol_c *current_var_type_symbol;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   109
    symbol_c *current_var_type_name;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   110
    search_base_type_c search_base_type;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   111
    search_fb_typedecl_c *search_fb_typedecl;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   112
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   113
  public:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   114
    search_type_symbol_c(symbol_c *scope) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   115
      search_fb_typedecl = new search_fb_typedecl_c(scope);
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   116
    }
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   117
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   118
    virtual ~search_type_symbol_c(void) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   119
      delete search_fb_typedecl;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   120
    }
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   121
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   122
    symbol_c *get_type_symbol(symbol_c* symbol) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   123
      this->current_var_type_category = variable_vtc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   124
      this->current_var_type_symbol = NULL;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   125
      this->current_var_type_name = NULL;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   126
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   127
      symbol_c* var_type_symbol = spec_init_sperator_c::get_spec(symbol);
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   128
      if (var_type_symbol == NULL) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   129
        var_type_symbol = symbol;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   130
      }
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   131
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   132
      var_type_symbol->accept(*this);
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   133
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   134
      if (this->current_var_type_symbol == NULL)
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   135
    	this->current_var_type_symbol = var_type_symbol;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   136
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   137
      return (this->current_var_type_symbol);
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   138
    }
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   139
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   140
    symbol_c *get_current_type_name(void) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   141
      if (this->current_var_type_name == NULL)
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   142
    	return (this->current_var_type_symbol);
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   143
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   144
      return (this->current_var_type_name);
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   145
    }
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   146
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   147
    void *visit(identifier_c* symbol) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   148
      if (this->current_var_type_name == NULL) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   149
        this->current_var_type_name = symbol;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   150
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   151
        this->current_var_type_symbol = search_fb_typedecl->get_decl(this->current_var_type_name);
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   152
        if (this->current_var_type_symbol != NULL)
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   153
          this->current_var_type_category = function_block_vtc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   154
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   155
        else {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   156
          this->current_var_type_symbol = (symbol_c *)(this->current_var_type_name->accept(search_base_type));
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   157
          this->current_var_type_symbol->accept(*this);
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   158
        }
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   159
      }
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   160
      return NULL;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   161
    }
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   162
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   163
    void *visit(array_specification_c* symbol) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   164
      this->current_var_type_category = array_vtc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   165
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   166
      if (this->current_var_type_name == NULL)
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   167
        this->current_var_type_name = symbol->non_generic_type_name;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   168
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   169
      return NULL;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   170
    }
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   171
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   172
    void *visit(structure_element_declaration_list_c* symbol) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   173
      this->current_var_type_category = structure_vtc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   174
      return NULL;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   175
    }
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   176
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   177
};
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   178
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   179
/***********************************************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   180
/***********************************************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   181
/***********************************************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   182
/***********************************************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   183
/***********************************************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   184
/***********************************************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   185
/***********************************************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   186
/***********************************************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   187
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   188
class generate_var_list_c: protected generate_c_typedecl_c {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   189
  
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   190
  public:
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   191
    typedef struct
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   192
    {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   193
      symbol_c *symbol;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   194
    } SYMBOL;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   195
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   196
    typedef enum {
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   197
      none_dt,
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   198
      programs_dt,
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   199
      variables_dt
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   200
    } declarationtype_t;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   201
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   202
    declarationtype_t current_declarationtype;
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   203
    
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   204
    typedef enum {
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   205
      none_vcc,
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   206
      external_vcc,
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   207
      located_input_vcc,
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   208
      located_memory_vcc,
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   209
      located_output_vcc,
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   210
    } varclasscategory_t;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   211
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   212
    varclasscategory_t current_var_class_category;
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   213
    
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   214
  private:
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   215
    symbol_c *current_var_type_symbol;
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   216
    symbol_c *current_var_type_name;
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   217
    unsigned int current_var_number;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   218
    unsigned int step_number;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   219
    unsigned int transition_number;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   220
    unsigned int action_number;
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   221
    bool configuration_defined;
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   222
    std::list<SYMBOL> current_symbol_list;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   223
    search_type_symbol_c *search_type_symbol;
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   224
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   225
  public:
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   226
    generate_var_list_c(stage4out_c *s4o_ptr, symbol_c *scope)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   227
    : generate_c_typedecl_c(s4o_ptr) {
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   228
      search_type_symbol = new search_type_symbol_c(scope);
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   229
      current_var_number = 0;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   230
      current_var_type_symbol = NULL;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   231
      current_var_type_name = NULL;
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   232
      current_declarationtype = none_dt;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   233
      current_var_class_category = none_vcc;
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   234
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   235
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   236
    ~generate_var_list_c(void) {
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   237
      delete search_type_symbol;
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   238
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   239
    
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   240
    void update_var_type_symbol(symbol_c *symbol) {
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   241
      this->current_var_type_symbol = search_type_symbol->get_type_symbol(symbol);
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   242
      this->current_var_type_name = search_type_symbol->get_current_type_name();
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   243
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   244
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   245
    void reset_var_type_symbol(void) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   246
      this->current_var_type_symbol = NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   247
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   248
    
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   249
    void generate_programs(symbol_c *symbol) {
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   250
      s4o.print("// Programs\n");
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   251
      current_var_number = 0;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   252
      configuration_defined = false;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   253
      current_declarationtype = programs_dt;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   254
      symbol->accept(*this);
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   255
      current_declarationtype = none_dt;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   256
      s4o.print("\n");
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   257
    }
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   258
    
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   259
    void generate_variables(symbol_c *symbol) {
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   260
      s4o.print("// Variables\n");
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   261
      current_var_number = 0;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   262
      configuration_defined = false;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   263
      current_declarationtype = variables_dt;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   264
      symbol->accept(*this);
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   265
      current_declarationtype = none_dt;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   266
      s4o.print("\n");
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   267
    }
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   268
    
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   269
    void declare_variables(symbol_c *symbol) {
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   270
      list_c *list = dynamic_cast<list_c *>(symbol);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   271
      /* should NEVER EVER occur!! */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   272
      if (list == NULL) ERROR;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   273
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   274
      for(int i = 0; i < list->n; i++) {
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   275
        declare_variable(list->elements[i]);
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   276
      }
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   277
    }
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   278
    
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   279
    void declare_variable(symbol_c *symbol) {
317
5b687021c6e7 Fix bug in debugging variable list compilation with structure and array disabling
laurent
parents: 300
diff changeset
   280
      // Arrays and structures are not supported in debugging
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   281
      switch (search_type_symbol->current_var_type_category) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   282
          case search_type_symbol_c::array_vtc:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   283
          case search_type_symbol_c::structure_vtc:
317
5b687021c6e7 Fix bug in debugging variable list compilation with structure and array disabling
laurent
parents: 300
diff changeset
   284
          return;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   285
          default:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   286
           break;
317
5b687021c6e7 Fix bug in debugging variable list compilation with structure and array disabling
laurent
parents: 300
diff changeset
   287
      }
157
3e12726f9d6b Adding Function Blocks in VARIABLES.csv
lbessard
parents: 141
diff changeset
   288
      print_var_number();
3e12726f9d6b Adding Function Blocks in VARIABLES.csv
lbessard
parents: 141
diff changeset
   289
      s4o.print(";");
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   290
      switch (search_type_symbol->current_var_type_category) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   291
        case search_type_symbol_c::array_vtc:
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   292
          s4o.print("ARRAY");
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   293
          break;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   294
        case search_type_symbol_c::structure_vtc:
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   295
          s4o.print("STRUCT");
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   296
          break;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   297
        case search_type_symbol_c::function_block_vtc:
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   298
          s4o.print("FB");
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   299
          break;
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   300
        default:
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   301
          switch (this->current_var_class_category) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   302
            case external_vcc:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   303
             s4o.print("EXT");
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   304
             break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   305
            case located_input_vcc:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   306
             s4o.print("IN");
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   307
             break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   308
            case located_memory_vcc:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   309
             s4o.print("MEM");
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   310
             break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   311
            case located_output_vcc:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   312
             s4o.print("OUT");
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   313
             break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   314
            default:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   315
             s4o.print("VAR");
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   316
             break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   317
          }
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   318
          break;
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   319
      }
157
3e12726f9d6b Adding Function Blocks in VARIABLES.csv
lbessard
parents: 141
diff changeset
   320
      s4o.print(";");
3e12726f9d6b Adding Function Blocks in VARIABLES.csv
lbessard
parents: 141
diff changeset
   321
      print_symbol_list();
3e12726f9d6b Adding Function Blocks in VARIABLES.csv
lbessard
parents: 141
diff changeset
   322
      symbol->accept(*this);
3e12726f9d6b Adding Function Blocks in VARIABLES.csv
lbessard
parents: 141
diff changeset
   323
      s4o.print(";");
3e12726f9d6b Adding Function Blocks in VARIABLES.csv
lbessard
parents: 141
diff changeset
   324
      print_symbol_list();
3e12726f9d6b Adding Function Blocks in VARIABLES.csv
lbessard
parents: 141
diff changeset
   325
      symbol->accept(*this);
3e12726f9d6b Adding Function Blocks in VARIABLES.csv
lbessard
parents: 141
diff changeset
   326
      s4o.print(";");
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   327
      switch (search_type_symbol->current_var_type_category) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   328
        case search_type_symbol_c::structure_vtc:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   329
        case search_type_symbol_c::function_block_vtc:
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   330
          this->current_var_type_name->accept(*this);
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   331
          s4o.print(";\n");
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   332
          SYMBOL *current_name;
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   333
          current_name = new SYMBOL;
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   334
          current_name->symbol = symbol;
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   335
          current_symbol_list.push_back(*current_name);
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   336
          this->current_var_type_symbol->accept(*this);
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   337
          current_symbol_list.pop_back();
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   338
          break;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   339
        case search_type_symbol_c::array_vtc:
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   340
          this->current_var_type_name->accept(*this);
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   341
          s4o.print(";\n");
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   342
          break;
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   343
        default:
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   344
          this->current_var_type_symbol->accept(*this);
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   345
          s4o.print(";\n");
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   346
          break;
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   347
      }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   348
    }
626
9f2cefb98e60 Fixed VARIABLES.csv, was broken when using enumrated types
Edouard Tisserant
parents: 409
diff changeset
   349
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   350
    void print_var_number(void) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   351
      char str[10];
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   352
      sprintf(str, "%d", current_var_number);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   353
      s4o.print(str);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   354
      current_var_number++;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   355
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   356
        
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   357
    void print_step_number(void) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   358
      char str[10];
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   359
      sprintf(str, "%d", step_number);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   360
      s4o.print(str);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   361
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   362
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   363
    void print_transition_number(void) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   364
      char str[10];
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   365
      sprintf(str, "%d", transition_number);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   366
      s4o.print(str);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   367
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   368
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   369
    void print_action_number(void) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   370
      char str[10];
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   371
      sprintf(str, "%d", action_number);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   372
      s4o.print(str);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   373
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   374
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   375
    void print_symbol_list(void) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   376
      std::list<SYMBOL>::iterator pt;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   377
      for(pt = current_symbol_list.begin(); pt != current_symbol_list.end(); pt++) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   378
        pt->symbol->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   379
        s4o.print(".");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   380
      }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   381
    }
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   382
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   383
/********************************************/
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   384
/* B.1.4.3 - Declaration and initialization */
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   385
/********************************************/
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   386
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   387
    /*  [variable_name] location ':' located_var_spec_init */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   388
    /* variable_name -> may be NULL ! */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   389
    //SYM_REF4(located_var_decl_c, variable_name, location, located_var_spec_init, unused)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   390
    void *visit(located_var_decl_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   391
        /* Start off by setting the current_var_type_symbol and
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   392
         * current_var_init_symbol private variables...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   393
         */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   394
        update_var_type_symbol(symbol->located_var_spec_init);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   395
        
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   396
        search_location_type_c search_location_type;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   397
        switch (search_location_type.get_location_type(symbol->location)) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   398
          case search_location_type_c::input_lt:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   399
            this->current_var_class_category = located_input_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   400
            break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   401
          case search_location_type_c::memory_lt:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   402
            this->current_var_class_category = located_memory_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   403
            break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   404
          case search_location_type_c::output_lt:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   405
              this->current_var_class_category = located_output_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   406
              break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   407
          default:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   408
            ERROR;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   409
            break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   410
        }
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   411
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   412
        if (symbol->variable_name != NULL)
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   413
          declare_variable(symbol->variable_name);
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   414
        else
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   415
          declare_variable(symbol->location);
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   416
        
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   417
        this->current_var_class_category = none_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   418
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   419
        /* Values no longer in scope, and therefore no longer used.
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   420
         * Make an effort to keep them set to NULL when not in use
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   421
         * in order to catch bugs as soon as possible...
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   422
         */
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   423
        reset_var_type_symbol();
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   424
        return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   425
    }
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   426
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   427
    /* variable_name incompl_location ':' var_spec */
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   428
    /* variable_name -> may be NULL ! */
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   429
    //SYM_REF3(incompl_located_var_decl_c, variable_name, incompl_location, var_spec)
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   430
    void *visit(incompl_located_var_decl_c *symbol) {
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   431
        /* Start off by setting the current_var_type_symbol and
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   432
         * current_var_init_symbol private variables...
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   433
         */
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   434
        update_var_type_symbol(symbol->var_spec);
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   435
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   436
        search_location_type_c search_location_type;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   437
        switch (search_location_type.get_location_type(symbol->incompl_location)) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   438
          case search_location_type_c::input_lt:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   439
            this->current_var_class_category = located_input_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   440
            break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   441
          case search_location_type_c::memory_lt:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   442
            this->current_var_class_category = located_memory_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   443
            break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   444
          case search_location_type_c::output_lt:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   445
            this->current_var_class_category = located_output_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   446
            break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   447
          default:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   448
            ERROR;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   449
            break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   450
        }
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   451
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   452
        if (symbol->variable_name != NULL)
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   453
          declare_variable(symbol->variable_name);
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   454
        else
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   455
          declare_variable(symbol->incompl_location);
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   456
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   457
        this->current_var_class_category = none_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   458
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   459
        /* Values no longer in scope, and therefore no longer used.
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   460
        * Make an effort to keep them set to NULL when not in use
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   461
        * in order to catch bugs as soon as possible...
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   462
        */
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   463
       reset_var_type_symbol();
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   464
        return NULL;
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   465
    }
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   466
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   467
    /*  var1_list ':' array_spec_init */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   468
    // SYM_REF2(array_var_init_decl_c, var1_list, array_spec_init)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   469
    void *visit(array_var_init_decl_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   470
      TRACE("array_var_init_decl_c");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   471
      /* Start off by setting the current_var_type_symbol and
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   472
       * current_var_init_symbol private variables...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   473
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   474
      update_var_type_symbol(symbol->array_spec_init);
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   475
      
317
5b687021c6e7 Fix bug in debugging variable list compilation with structure and array disabling
laurent
parents: 300
diff changeset
   476
      declare_variables(symbol->var1_list);
409
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   477
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   478
      /* Values no longer in scope, and therefore no longer used.
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   479
       * Make an effort to keep them set to NULL when not in use
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   480
       * in order to catch bugs as soon as possible...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   481
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   482
      reset_var_type_symbol();
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   483
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   484
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   485
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   486
409
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   487
    /*  var1_list ':' array_specification */
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   488
    //SYM_REF2(array_var_declaration_c, var1_list, array_specification)
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   489
    void *visit(array_var_declaration_c *symbol) {
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   490
       TRACE("array_var_declaration_c");
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   491
       /* Start off by setting the current_var_type_symbol and
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   492
        * current_var_init_symbol private variables...
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   493
        */
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   494
       update_var_type_symbol(symbol->array_specification);
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   495
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   496
       declare_variables(symbol->var1_list);
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   497
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   498
       /* Values no longer in scope, and therefore no longer used.
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   499
        * Make an effort to keep them set to NULL when not in use
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   500
        * in order to catch bugs as soon as possible...
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   501
        */
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   502
       reset_var_type_symbol();
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   503
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   504
       return NULL;
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   505
    }
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   506
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   507
    /*  var1_list ':' initialized_structure */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   508
    // SYM_REF2(structured_var_init_decl_c, var1_list, initialized_structure)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   509
    void *visit(structured_var_init_decl_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   510
      TRACE("structured_var_init_decl_c");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   511
      /* Please read the comments inside the var1_init_decl_c
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   512
       * visitor, as they apply here too.
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   513
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   514
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   515
      /* Start off by setting the current_var_type_symbol and
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   516
       * current_var_init_symbol private variables...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   517
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   518
      update_var_type_symbol(symbol->initialized_structure);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   519
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   520
      /* now to produce the c equivalent... */
317
5b687021c6e7 Fix bug in debugging variable list compilation with structure and array disabling
laurent
parents: 300
diff changeset
   521
      declare_variables(symbol->var1_list);
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   522
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   523
      /* Values no longer in scope, and therefore no longer used.
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   524
       * Make an effort to keep them set to NULL when not in use
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   525
       * in order to catch bugs as soon as possible...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   526
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   527
      reset_var_type_symbol();
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   528
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   529
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   530
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   531
    
409
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   532
    /*  var1_list ':' structure_type_name */
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   533
    //SYM_REF2(structured_var_declaration_c, var1_list, structure_type_name)
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   534
    void *visit(structured_var_declaration_c *symbol) {
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   535
      TRACE("structured_var_declaration_c");
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   536
      /* Please read the comments inside the var1_init_decl_c
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   537
       * visitor, as they apply here too.
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   538
       */
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   539
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   540
      /* Start off by setting the current_var_type_symbol and
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   541
       * current_var_init_symbol private variables...
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   542
       */
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   543
      update_var_type_symbol(symbol->structure_type_name);
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   544
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   545
      /* now to produce the c equivalent... */
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   546
      declare_variables(symbol->var1_list);
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   547
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   548
      /* Values no longer in scope, and therefore no longer used.
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   549
       * Make an effort to keep them set to NULL when not in use
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   550
       * in order to catch bugs as soon as possible...
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   551
       */
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   552
      reset_var_type_symbol();
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   553
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   554
      return NULL;
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   555
    }
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   556
626
9f2cefb98e60 Fixed VARIABLES.csv, was broken when using enumrated types
Edouard Tisserant
parents: 409
diff changeset
   557
    /* enumerated_value_list ',' enumerated_value */
9f2cefb98e60 Fixed VARIABLES.csv, was broken when using enumrated types
Edouard Tisserant
parents: 409
diff changeset
   558
    void *visit(enumerated_value_list_c *symbol) {
9f2cefb98e60 Fixed VARIABLES.csv, was broken when using enumrated types
Edouard Tisserant
parents: 409
diff changeset
   559
      this->current_var_type_name->accept(*this);
9f2cefb98e60 Fixed VARIABLES.csv, was broken when using enumrated types
Edouard Tisserant
parents: 409
diff changeset
   560
      return NULL;
9f2cefb98e60 Fixed VARIABLES.csv, was broken when using enumrated types
Edouard Tisserant
parents: 409
diff changeset
   561
    }
9f2cefb98e60 Fixed VARIABLES.csv, was broken when using enumrated types
Edouard Tisserant
parents: 409
diff changeset
   562
    
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   563
    /* fb_name_list ':' function_block_type_name ASSIGN structure_initialization */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   564
    /* structure_initialization -> may be NULL ! */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   565
    void *visit(fb_name_decl_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   566
      TRACE("fb_name_decl_c");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   567
      /* Please read the comments inside the var1_init_decl_c
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   568
       * visitor, as they apply here too.
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   569
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   570
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   571
      /* Start off by setting the current_var_type_symbol and
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   572
       * current_var_init_symbol private variables...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   573
       */
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   574
      update_var_type_symbol(symbol);
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   575
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   576
      /* now to produce the c equivalent... */
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   577
      declare_variables(symbol->fb_name_list);
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   578
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   579
      /* Values no longer in scope, and therefore no longer used.
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   580
       * Make an effort to keep them set to NULL when not in use
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   581
       * in order to catch bugs as soon as possible...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   582
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   583
      reset_var_type_symbol();
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   584
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   585
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   586
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   587
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   588
    /*  global_var_name ':' (simple_specification|subrange_specification|enumerated_specification|array_specification|prev_declared_structure_type_name|function_block_type_name */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   589
    //SYM_REF2(external_declaration_c, global_var_name, specification)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   590
    void *visit(external_declaration_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   591
      TRACE("external_declaration_c");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   592
      /* Please read the comments inside the var1_init_decl_c
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   593
       * visitor, as they apply here too.
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   594
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   595
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   596
      /* Start off by setting the current_var_type_symbol and
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   597
       * current_var_init_symbol private variables...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   598
       */
166
09004f402097 Bug with external variable declaration fixed
lbessard
parents: 160
diff changeset
   599
      update_var_type_symbol(symbol->specification);
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   600
      
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   601
      this->current_var_class_category = external_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   602
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   603
      /* now to produce the c equivalent... */
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   604
      declare_variable(symbol->global_var_name);
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   605
      
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   606
      this->current_var_class_category = none_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   607
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   608
      /* Values no longer in scope, and therefore no longer used.
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   609
       * Make an effort to keep them set to NULL when not in use
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   610
       * in order to catch bugs as soon as possible...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   611
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   612
      reset_var_type_symbol();
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   613
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   614
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   615
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   616
    /*| global_var_spec ':' [located_var_spec_init|function_block_type_name] */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   617
    /* type_specification ->may be NULL ! */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   618
    // SYM_REF2(global_var_decl_c, global_var_spec, type_specification)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   619
    void *visit(global_var_decl_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   620
      TRACE("global_var_decl_c");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   621
      /* Please read the comments inside the var1_init_decl_c
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   622
       * visitor, as they apply here too.
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   623
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   624
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   625
      /* Start off by setting the current_var_type_symbol and
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   626
       * current_var_init_symbol private variables...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   627
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   628
      update_var_type_symbol(symbol->type_specification);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   629
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   630
      /* now to produce the c equivalent... */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   631
      symbol->global_var_spec->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   632
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   633
      /* Values no longer in scope, and therefore no longer used.
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   634
       * Make an effort to keep them set to NULL when not in use
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   635
       * in order to catch bugs as soon as possible...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   636
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   637
      reset_var_type_symbol();
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   638
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   639
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   640
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   641
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   642
    void *visit(global_var_list_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   643
      declare_variables(symbol);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   644
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   645
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   646
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   647
    /*| global_var_name location */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   648
    // SYM_REF2(global_var_spec_c, global_var_name, location)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   649
    void *visit(global_var_spec_c *symbol) {
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   650
      search_location_type_c search_location_type;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   651
	  switch (search_location_type.get_location_type(symbol->location)) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   652
		case search_location_type_c::input_lt:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   653
		  this->current_var_class_category = located_input_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   654
		  break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   655
		case search_location_type_c::memory_lt:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   656
		  this->current_var_class_category = located_memory_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   657
		  break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   658
		case search_location_type_c::output_lt:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   659
		  this->current_var_class_category = located_output_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   660
		  break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   661
		default:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   662
		  ERROR;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   663
	      break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   664
	  }
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   665
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   666
      if (symbol->global_var_name != NULL)
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   667
        declare_variable(symbol->global_var_name);
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   668
      else
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   669
        declare_variable(symbol->location);
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   670
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   671
      this->current_var_class_category = none_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   672
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   673
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   674
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   675
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   676
    void *visit(var1_init_decl_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   677
      TRACE("var1_init_decl_c");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   678
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   679
      /* Start off by setting the current_var_type_symbol and
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   680
       * current_var_init_symbol private variables...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   681
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   682
      update_var_type_symbol(symbol->spec_init);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   683
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   684
      /* now to produce the c equivalent... */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   685
      declare_variables(symbol->var1_list);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   686
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   687
      /* Values no longer in scope, and therefore no longer used.
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   688
       * Make an effort to keep them set to NULL when not in use
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   689
       * in order to catch bugs as soon as possible...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   690
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   691
      reset_var_type_symbol();
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   692
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   693
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   694
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   695
206
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   696
    void *visit(en_param_declaration_c *symbol) {
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   697
      TRACE("en_param_declaration_c");
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   698
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   699
      /* Start off by setting the current_var_type_symbol and
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   700
       * current_var_init_symbol private variables...
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   701
       */
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   702
      update_var_type_symbol(symbol->type);
206
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   703
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   704
      /* now to produce the c equivalent... */
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   705
      declare_variable(symbol->name);
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   706
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   707
      /* Values no longer in scope, and therefore no longer used.
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   708
       * Make an effort to keep them set to NULL when not in use
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   709
       * in order to catch bugs as soon as possible...
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   710
       */
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   711
      reset_var_type_symbol();
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   712
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   713
      return NULL;
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   714
    }
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   715
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   716
    void *visit(eno_param_declaration_c *symbol) {
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   717
      TRACE("eno_param_declaration_c");
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   718
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   719
      /* Start off by setting the current_var_type_symbol and
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   720
       * current_var_init_symbol private variables...
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   721
       */
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   722
      update_var_type_symbol(symbol->type);
206
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   723
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   724
      /* now to produce the c equivalent... */
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   725
      declare_variable(symbol->name);
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   726
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   727
      /* Values no longer in scope, and therefore no longer used.
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   728
       * Make an effort to keep them set to NULL when not in use
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   729
       * in order to catch bugs as soon as possible...
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   730
       */
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   731
      reset_var_type_symbol();
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   732
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   733
      return NULL;
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   734
    }
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   735
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   736
/********************************/
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   737
/* B 1.3.3 - Derived data types */
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   738
/********************************/
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   739
    void *visit(data_type_declaration_c *symbol) {
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   740
      return NULL;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   741
    }
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   742
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   743
    void *visit(structure_element_declaration_list_c *symbol) {
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   744
      for(int i = 0; i < symbol->n; i++) {
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   745
        symbol->elements[i]->accept(*this);
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   746
      }
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   747
      return NULL;
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   748
    }
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   749
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   750
    void *visit(structure_element_declaration_c *symbol) {
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   751
      /* Start off by setting the current_var_type_symbol and
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   752
       * current_var_init_symbol private variables...
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   753
       */
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   754
      update_var_type_symbol(symbol->spec_init);
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   755
      
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   756
      /* now to produce the c equivalent... */
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   757
      declare_variable(symbol->structure_element_name);
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   758
      
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   759
      /* Values no longer in scope, and therefore no longer used.
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   760
       * Make an effort to keep them set to NULL when not in use
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   761
       * in order to catch bugs as soon as possible...
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   762
       */
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   763
      reset_var_type_symbol();
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   764
      
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   765
      return NULL;
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   766
    }
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   767
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   768
/**************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   769
/* B.1.5 - Program organization units */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   770
/**************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   771
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   772
/***********************/
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   773
/* B 1.5.1 - Functions */
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   774
/***********************/
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   775
    void *visit(function_declaration_c *symbol) {
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   776
      return NULL;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   777
    }
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   778
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   779
/*****************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   780
/* B 1.5.2 - Function Blocks */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   781
/*****************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   782
    void *visit(function_block_declaration_c *symbol) {
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   783
      if (current_declarationtype == variables_dt && configuration_defined) {
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   784
        symbol->var_declarations->accept(*this);
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   785
        symbol->fblock_body->accept(*this);
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   786
      }
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   787
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   788
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   789
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   790
/**********************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   791
/* B 1.5.3 - Programs */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   792
/**********************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   793
    void *visit(program_declaration_c *symbol) {
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   794
      if (current_declarationtype == variables_dt && configuration_defined) {
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   795
        symbol->var_declarations->accept(*this);
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   796
        symbol->function_block_body->accept(*this);
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   797
      }
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   798
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   799
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   800
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   801
/**********************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   802
/* B 1.6 - Sequential function chart elements */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   803
/**********************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   804
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   805
    /* | sequential_function_chart sfc_network */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   806
    //SYM_LIST(sequential_function_chart_c)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   807
    void *visit(sequential_function_chart_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   808
      step_number = 0;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   809
      transition_number = 0;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   810
      action_number = 0;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   811
      for(int i = 0; i < symbol->n; i++) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   812
        symbol->elements[i]->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   813
      }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   814
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   815
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   816
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   817
    /* INITIAL_STEP step_name ':' action_association_list END_STEP */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   818
    //SYM_REF2(initial_step_c, step_name, action_association_list)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   819
    void *visit(initial_step_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   820
      print_var_number();
115
3dd564ff94e4 Adding support to distinguish direct variables and pointed variables
lbessard
parents: 111
diff changeset
   821
      s4o.print(";VAR;");
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   822
      print_symbol_list();
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   823
      symbol->step_name->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   824
      s4o.print(".X;");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   825
      print_symbol_list();
141
d2dc99c319b6 Adding support for transition debugging
lbessard
parents: 138
diff changeset
   826
      s4o.print("__step_list[");
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   827
      print_step_number();
229
ca7bc1324540 Bug on SFC debugging fixed
laurent
parents: 221
diff changeset
   828
      s4o.print("].state;BOOL;\n");
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   829
      step_number++;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   830
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   831
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   832
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   833
    /* STEP step_name ':' action_association_list END_STEP */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   834
    //SYM_REF2(step_c, step_name, action_association_list)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   835
    void *visit(step_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   836
      print_var_number();
115
3dd564ff94e4 Adding support to distinguish direct variables and pointed variables
lbessard
parents: 111
diff changeset
   837
      s4o.print(";VAR;");
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   838
      print_symbol_list();
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   839
      symbol->step_name->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   840
      s4o.print(".X;");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   841
      print_symbol_list();
141
d2dc99c319b6 Adding support for transition debugging
lbessard
parents: 138
diff changeset
   842
      s4o.print("__step_list[");
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   843
      print_step_number();
229
ca7bc1324540 Bug on SFC debugging fixed
laurent
parents: 221
diff changeset
   844
      s4o.print("].state;BOOL;\n");
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   845
      step_number++;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   846
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   847
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   848
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   849
    /* TRANSITION [transition_name] ['(' PRIORITY ASSIGN integer ')'] 
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   850
     *   FROM steps TO steps 
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   851
     *   transition_condition 
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   852
     * END_TRANSITION
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   853
     */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   854
    /* transition_name -> may be NULL ! */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   855
    /* integer -> may be NULL ! */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   856
    //SYM_REF5(transition_c, transition_name, integer, from_steps, to_steps, transition_condition)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   857
    void *visit(transition_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   858
      print_var_number();
115
3dd564ff94e4 Adding support to distinguish direct variables and pointed variables
lbessard
parents: 111
diff changeset
   859
      s4o.print(";VAR;");
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   860
      print_symbol_list();
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   861
      symbol->from_steps->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   862
      s4o.print("->");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   863
      symbol->to_steps->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   864
      s4o.print(";");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   865
      print_symbol_list();
141
d2dc99c319b6 Adding support for transition debugging
lbessard
parents: 138
diff changeset
   866
      s4o.print("__debug_transition_list[");
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   867
      print_transition_number();
229
ca7bc1324540 Bug on SFC debugging fixed
laurent
parents: 221
diff changeset
   868
      s4o.print("];BOOL;\n");
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   869
      transition_number++;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   870
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   871
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   872
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   873
    /* step_name | '(' step_name_list ')' */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   874
    /* step_name      -> may be NULL ! */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   875
    /* step_name_list -> may be NULL ! */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   876
    //SYM_REF2(steps_c, step_name, step_name_list)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   877
    void *visit(steps_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   878
      if (symbol->step_name != NULL)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   879
        symbol->step_name->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   880
      if (symbol->step_name_list != NULL)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   881
        symbol->step_name_list->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   882
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   883
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   884
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   885
    /* | step_name_list ',' step_name */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   886
    //SYM_LIST(step_name_list_c)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   887
    void *visit(step_name_list_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   888
      for(int i = 0; i < symbol->n; i++) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   889
        symbol->elements[i]->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   890
        if (i < symbol->n - 1)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   891
          s4o.print(",");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   892
      }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   893
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   894
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   895
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   896
    /* ACTION action_name ':' function_block_body END_ACTION */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   897
    //SYM_REF2(action_c, action_name, function_block_body)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   898
    void *visit(action_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   899
      print_var_number();
115
3dd564ff94e4 Adding support to distinguish direct variables and pointed variables
lbessard
parents: 111
diff changeset
   900
      s4o.print(";VAR;");
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   901
      print_symbol_list();
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   902
      symbol->action_name->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   903
      s4o.print(".Q;");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   904
      print_symbol_list();
141
d2dc99c319b6 Adding support for transition debugging
lbessard
parents: 138
diff changeset
   905
      s4o.print("__action_list[");
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   906
      print_action_number();
229
ca7bc1324540 Bug on SFC debugging fixed
laurent
parents: 221
diff changeset
   907
      s4o.print("].state;BOOL;\n");
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   908
      action_number++;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   909
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   910
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   911
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   912
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   913
/**************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   914
/* B.1.7 - Configuration elements     */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   915
/**************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   916
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   917
    /*  PROGRAM [RETAIN | NON_RETAIN] program_name [WITH task_name] ':' program_type_name ['(' prog_conf_elements ')'] */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   918
    //SYM_REF6(program_configuration_c, retain_option, program_name, task_name, program_type_name, prog_conf_elements, unused)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   919
    void *visit(program_configuration_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   920
      
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   921
      switch (current_declarationtype) {
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   922
        case programs_dt:
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   923
          print_var_number();
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   924
          s4o.print(";");
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   925
          print_symbol_list();
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   926
          symbol->program_name->accept(*this);
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   927
          s4o.print(";");
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   928
          symbol->program_type_name->accept(*this);
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   929
          s4o.print(";\n");
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   930
          break;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   931
        case variables_dt:
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   932
          /* Start off by setting the current_var_type_symbol and
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   933
           * current_var_init_symbol private variables...
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   934
           */
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   935
          update_var_type_symbol(symbol->program_type_name);
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   936
          
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   937
          declare_variable(symbol->program_name);
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   938
          
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   939
          /* Values no longer in scope, and therefore no longer used.
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   940
           * Make an effort to keep them set to NULL when not in use
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   941
           * in order to catch bugs as soon as possible...
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   942
           */
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   943
          reset_var_type_symbol();
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   944
          
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   945
          break;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   946
        default:
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   947
          break;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   948
      }
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   949
      
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   950
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   951
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   952
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   953
    /* CONFIGURATION configuration_name
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   954
     *   optional_global_var_declarations
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   955
     *   (resource_declaration_list | single_resource_declaration)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   956
     *   optional_access_declarations
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   957
     *   optional_instance_specific_initializations
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   958
     * END_CONFIGURATION
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   959
     */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   960
    //SYM_REF5(configuration_declaration_c, configuration_name, global_var_declarations, resource_declarations, access_declarations, instance_specific_initializations)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   961
    void *visit(configuration_declaration_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   962
      SYMBOL *current_name;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   963
      current_name = new SYMBOL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   964
      current_name->symbol = symbol->configuration_name;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   965
      current_symbol_list.push_back(*current_name);
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   966
      configuration_defined = true;
135
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
   967
      
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
   968
      switch (current_declarationtype) {
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
   969
        case variables_dt:
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
   970
          if (symbol->global_var_declarations != NULL)
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
   971
            symbol->global_var_declarations->accept(*this);
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
   972
          break;
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
   973
        default:
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
   974
          break;
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
   975
      }
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
   976
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   977
      symbol->resource_declarations->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   978
      current_symbol_list.pop_back();
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   979
      configuration_defined = false;
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   980
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   981
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   982
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   983
    /* RESOURCE resource_name ON resource_type_name
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   984
     *   optional_global_var_declarations
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   985
     *   single_resource_declaration
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   986
     * END_RESOURCE
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   987
     */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   988
    //SYM_REF4(resource_declaration_c, resource_name, resource_type_name, global_var_declarations, resource_declaration)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   989
    void *visit(resource_declaration_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   990
      SYMBOL *current_name;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   991
      current_name = new SYMBOL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   992
      current_name->symbol = symbol->resource_name;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   993
      current_symbol_list.push_back(*current_name);
135
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
   994
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
   995
      switch (current_declarationtype) {
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
   996
        case variables_dt:
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
   997
          if (symbol->global_var_declarations != NULL)
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
   998
            symbol->global_var_declarations->accept(*this);
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
   999
          break;
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
  1000
        default:
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
  1001
          break;
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
  1002
      }
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
  1003
      
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1004
      
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1005
      symbol->resource_declaration->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1006
      
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1007
      current_symbol_list.pop_back();
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1008
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1009
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1010
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1011
    /* task_configuration_list program_configuration_list */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1012
    //SYM_REF2(single_resource_declaration_c, task_configuration_list, program_configuration_list)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1013
    void *visit(single_resource_declaration_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1014
      symbol->program_configuration_list->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1015
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1016
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1017
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1018
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1019
/*************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1020
/* B 2.1 - Instructions and operands */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1021
/*************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1022
    void *visit(instruction_list_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1023
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1024
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1025
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1026
/************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1027
/* B 3.2 - Statements   */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1028
/************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1029
    void *visit(statement_list_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1030
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1031
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1032
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1033
};