stage4/generate_c/generate_var_list.cc
author Edouard Tisserant
Tue, 14 Dec 2021 08:48:05 +0100
changeset 1096 fad6e7a818e2
parent 1088 9cb7c8bf7dbc
child 1097 520a4b937f13
permissions -rw-r--r--
Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Match Beremiz commit 93ad018fb602.
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
958
7474d2cd1d6e Add a new pou_typename_c object to the AST to store references to previously declared Functions, FB, and Programs.
mjsousa
parents: 945
diff changeset
    93
/* TODO: Delete this helper class search_type_symbol_c, as well as the search_fb_typedecl_c
7474d2cd1d6e Add a new pou_typename_c object to the AST to store references to previously declared Functions, FB, and Programs.
mjsousa
parents: 945
diff changeset
    94
 *       in the absyntac_utils directory. They are no longer usefull, now that we have
7474d2cd1d6e Add a new pou_typename_c object to the AST to store references to previously declared Functions, FB, and Programs.
mjsousa
parents: 945
diff changeset
    95
 *       datatype analysis working!
7474d2cd1d6e Add a new pou_typename_c object to the AST to store references to previously declared Functions, FB, and Programs.
mjsousa
parents: 945
diff changeset
    96
 */
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    97
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
    98
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
    99
  public:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   100
    typedef enum {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   101
      none_vtc,
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   102
      variable_vtc,
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   103
      array_vtc,
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   104
      structure_vtc,
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   105
      function_block_vtc
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   106
    } vartypecategory_t;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   107
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   108
    vartypecategory_t current_var_type_category;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   109
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   110
  private:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   111
    symbol_c *current_var_type_symbol;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   112
    symbol_c *current_var_type_name;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   113
    search_fb_typedecl_c *search_fb_typedecl;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   114
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   115
  public:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   116
    search_type_symbol_c(symbol_c *scope) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   117
      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
   118
    }
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   119
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   120
    virtual ~search_type_symbol_c(void) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   121
      delete search_fb_typedecl;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   122
    }
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   123
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   124
    symbol_c *get_type_symbol(symbol_c* symbol) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   125
      this->current_var_type_category = variable_vtc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   126
      this->current_var_type_symbol = NULL;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   127
      this->current_var_type_name = NULL;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   128
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   129
      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
   130
      if (var_type_symbol == NULL) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   131
        var_type_symbol = symbol;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   132
      }
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
      var_type_symbol->accept(*this);
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   135
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   136
      if (this->current_var_type_symbol == NULL)
706
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   137
        this->current_var_type_symbol = var_type_symbol;
377
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
      return (this->current_var_type_symbol);
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   140
    }
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   141
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   142
    symbol_c *get_current_type_name(void) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   143
      if (this->current_var_type_name == NULL)
706
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   144
        return (this->current_var_type_symbol);
377
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
      return (this->current_var_type_name);
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   147
    }
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   148
958
7474d2cd1d6e Add a new pou_typename_c object to the AST to store references to previously declared Functions, FB, and Programs.
mjsousa
parents: 945
diff changeset
   149
    void *visit(derived_datatype_identifier_c* symbol) {
7474d2cd1d6e Add a new pou_typename_c object to the AST to store references to previously declared Functions, FB, and Programs.
mjsousa
parents: 945
diff changeset
   150
      if (this->current_var_type_name == NULL) {
7474d2cd1d6e Add a new pou_typename_c object to the AST to store references to previously declared Functions, FB, and Programs.
mjsousa
parents: 945
diff changeset
   151
        this->current_var_type_name = symbol;
7474d2cd1d6e Add a new pou_typename_c object to the AST to store references to previously declared Functions, FB, and Programs.
mjsousa
parents: 945
diff changeset
   152
7474d2cd1d6e Add a new pou_typename_c object to the AST to store references to previously declared Functions, FB, and Programs.
mjsousa
parents: 945
diff changeset
   153
        this->current_var_type_symbol = search_fb_typedecl->get_decl(this->current_var_type_name);
7474d2cd1d6e Add a new pou_typename_c object to the AST to store references to previously declared Functions, FB, and Programs.
mjsousa
parents: 945
diff changeset
   154
        if (this->current_var_type_symbol != NULL)
7474d2cd1d6e Add a new pou_typename_c object to the AST to store references to previously declared Functions, FB, and Programs.
mjsousa
parents: 945
diff changeset
   155
          this->current_var_type_category = function_block_vtc;
7474d2cd1d6e Add a new pou_typename_c object to the AST to store references to previously declared Functions, FB, and Programs.
mjsousa
parents: 945
diff changeset
   156
7474d2cd1d6e Add a new pou_typename_c object to the AST to store references to previously declared Functions, FB, and Programs.
mjsousa
parents: 945
diff changeset
   157
        else {
7474d2cd1d6e Add a new pou_typename_c object to the AST to store references to previously declared Functions, FB, and Programs.
mjsousa
parents: 945
diff changeset
   158
          this->current_var_type_symbol = search_base_type_c::get_basetype_decl(this->current_var_type_name);
7474d2cd1d6e Add a new pou_typename_c object to the AST to store references to previously declared Functions, FB, and Programs.
mjsousa
parents: 945
diff changeset
   159
          this->current_var_type_symbol->accept(*this);
7474d2cd1d6e Add a new pou_typename_c object to the AST to store references to previously declared Functions, FB, and Programs.
mjsousa
parents: 945
diff changeset
   160
        }
7474d2cd1d6e Add a new pou_typename_c object to the AST to store references to previously declared Functions, FB, and Programs.
mjsousa
parents: 945
diff changeset
   161
      }
7474d2cd1d6e Add a new pou_typename_c object to the AST to store references to previously declared Functions, FB, and Programs.
mjsousa
parents: 945
diff changeset
   162
      return NULL;
7474d2cd1d6e Add a new pou_typename_c object to the AST to store references to previously declared Functions, FB, and Programs.
mjsousa
parents: 945
diff changeset
   163
    }
7474d2cd1d6e Add a new pou_typename_c object to the AST to store references to previously declared Functions, FB, and Programs.
mjsousa
parents: 945
diff changeset
   164
7474d2cd1d6e Add a new pou_typename_c object to the AST to store references to previously declared Functions, FB, and Programs.
mjsousa
parents: 945
diff changeset
   165
    void *visit(poutype_identifier_c* symbol) {
377
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;
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
        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
   170
        if (this->current_var_type_symbol != NULL)
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   171
          this->current_var_type_category = function_block_vtc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   172
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   173
        else {
718
a9f8cc778444 Make search_base_type_c a singleton!
Mario de Sousa <msousa@fe.up.pt>
parents: 667
diff changeset
   174
          this->current_var_type_symbol = search_base_type_c::get_basetype_decl(this->current_var_type_name);
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   175
          this->current_var_type_symbol->accept(*this);
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
      return NULL;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   179
    }
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   180
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   181
    void *visit(array_specification_c* symbol) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   182
      this->current_var_type_category = array_vtc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   183
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   184
      if (this->current_var_type_name == NULL)
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   185
        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
   186
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   187
      return NULL;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   188
    }
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   189
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   190
    void *visit(structure_element_declaration_list_c* symbol) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   191
      this->current_var_type_category = structure_vtc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   192
      return NULL;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   193
    }
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   194
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   195
};
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   196
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   197
/***********************************************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   198
/***********************************************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   199
/***********************************************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   200
/***********************************************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   201
/***********************************************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   202
/***********************************************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   203
/***********************************************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   204
/***********************************************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   205
945
477393b00f95 Add support for relaxed datatype model for array datatypes.
mjsousa
parents: 898
diff changeset
   206
class generate_var_list_c: protected generate_c_base_and_typeid_c {
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   207
  
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   208
  public:
706
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   209
    typedef struct {
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   210
      symbol_c *symbol;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   211
    } SYMBOL;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   212
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   213
    typedef enum {
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   214
      none_dt,
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   215
      programs_dt,
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   216
      variables_dt
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   217
    } declarationtype_t;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   218
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   219
    declarationtype_t current_declarationtype;
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   220
    
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   221
    typedef enum {
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   222
      none_vcc,
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   223
      external_vcc,
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   224
      located_input_vcc,
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   225
      located_memory_vcc,
661
f537c3315f83 Minor changes needed to build with pedantic flag.
Manuele Conti <conti.ma@alice.it>
parents: 641
diff changeset
   226
      located_output_vcc
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   227
    } varclasscategory_t;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   228
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   229
    varclasscategory_t current_var_class_category;
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   230
    
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   231
  private:
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   232
    symbol_c *current_var_type_symbol;
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   233
    symbol_c *current_var_type_name;
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   234
    unsigned int current_var_number;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   235
    unsigned int step_number;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   236
    unsigned int transition_number;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   237
    unsigned int action_number;
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   238
    bool configuration_defined;
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   239
    std::list<SYMBOL> current_symbol_list;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   240
    search_type_symbol_c *search_type_symbol;
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   241
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   242
  public:
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   243
    generate_var_list_c(stage4out_c *s4o_ptr, symbol_c *scope)
945
477393b00f95 Add support for relaxed datatype model for array datatypes.
mjsousa
parents: 898
diff changeset
   244
    : generate_c_base_and_typeid_c(s4o_ptr) {
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   245
      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
   246
      current_var_number = 0;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   247
      current_var_type_symbol = NULL;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   248
      current_var_type_name = NULL;
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   249
      current_declarationtype = none_dt;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   250
      current_var_class_category = none_vcc;
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   251
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   252
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   253
    ~generate_var_list_c(void) {
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   254
      delete search_type_symbol;
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   255
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   256
    
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   257
    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
   258
      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
   259
      this->current_var_type_name = search_type_symbol->get_current_type_name();
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   260
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   261
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   262
    void reset_var_type_symbol(void) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   263
      this->current_var_type_symbol = NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   264
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   265
    
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   266
    void generate_programs(symbol_c *symbol) {
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   267
      s4o.print("// Programs\n");
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   268
      current_var_number = 0;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   269
      configuration_defined = false;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   270
      current_declarationtype = programs_dt;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   271
      symbol->accept(*this);
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   272
      current_declarationtype = none_dt;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   273
      s4o.print("\n");
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   274
    }
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   275
    
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   276
    void generate_variables(symbol_c *symbol) {
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   277
      s4o.print("// Variables\n");
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   278
      current_var_number = 0;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   279
      configuration_defined = false;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   280
      current_declarationtype = variables_dt;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   281
      symbol->accept(*this);
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   282
      current_declarationtype = none_dt;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   283
      s4o.print("\n");
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   284
    }
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   285
    
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   286
    void declare_variables(symbol_c *symbol) {
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   287
      list_c *list = dynamic_cast<list_c *>(symbol);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   288
      /* should NEVER EVER occur!! */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   289
      if (list == NULL) ERROR;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   290
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   291
      for(int i = 0; i < list->n; i++) {
1041
56ebe2a31b5b Access elements[] in list_c through a new get_element() method.
Mario de Sousa <msousa@fe.up.pt>
parents: 958
diff changeset
   292
        declare_variable(list->get_element(i));
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   293
      }
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   294
    }
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   295
    
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   296
    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
   297
      // 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
   298
      switch (search_type_symbol->current_var_type_category) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   299
          case search_type_symbol_c::array_vtc:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   300
          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
   301
          return;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   302
          default:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   303
           break;
317
5b687021c6e7 Fix bug in debugging variable list compilation with structure and array disabling
laurent
parents: 300
diff changeset
   304
      }
157
3e12726f9d6b Adding Function Blocks in VARIABLES.csv
lbessard
parents: 141
diff changeset
   305
      print_var_number();
3e12726f9d6b Adding Function Blocks in VARIABLES.csv
lbessard
parents: 141
diff changeset
   306
      s4o.print(";");
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   307
      switch (search_type_symbol->current_var_type_category) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   308
        case search_type_symbol_c::array_vtc:
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   309
          s4o.print("ARRAY");
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   310
          break;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   311
        case search_type_symbol_c::structure_vtc:
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   312
          s4o.print("STRUCT");
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   313
          break;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   314
        case search_type_symbol_c::function_block_vtc:
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   315
          s4o.print("FB");
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   316
          break;
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   317
        default:
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   318
          switch (this->current_var_class_category) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   319
            case external_vcc:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   320
             s4o.print("EXT");
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   321
             break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   322
            case located_input_vcc:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   323
             s4o.print("IN");
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   324
             break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   325
            case located_memory_vcc:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   326
             s4o.print("MEM");
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   327
             break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   328
            case located_output_vcc:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   329
             s4o.print("OUT");
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   330
             break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   331
            default:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   332
             s4o.print("VAR");
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   333
             break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   334
          }
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   335
          break;
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   336
      }
157
3e12726f9d6b Adding Function Blocks in VARIABLES.csv
lbessard
parents: 141
diff changeset
   337
      s4o.print(";");
3e12726f9d6b Adding Function Blocks in VARIABLES.csv
lbessard
parents: 141
diff changeset
   338
      print_symbol_list();
3e12726f9d6b Adding Function Blocks in VARIABLES.csv
lbessard
parents: 141
diff changeset
   339
      symbol->accept(*this);
3e12726f9d6b Adding Function Blocks in VARIABLES.csv
lbessard
parents: 141
diff changeset
   340
      s4o.print(";");
3e12726f9d6b Adding Function Blocks in VARIABLES.csv
lbessard
parents: 141
diff changeset
   341
      print_symbol_list();
3e12726f9d6b Adding Function Blocks in VARIABLES.csv
lbessard
parents: 141
diff changeset
   342
      symbol->accept(*this);
3e12726f9d6b Adding Function Blocks in VARIABLES.csv
lbessard
parents: 141
diff changeset
   343
      s4o.print(";");
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   344
      switch (search_type_symbol->current_var_type_category) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   345
        case search_type_symbol_c::structure_vtc:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   346
        case search_type_symbol_c::function_block_vtc:
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   347
          this->current_var_type_name->accept(*this);
1088
9cb7c8bf7dbc Add a column to VARIABLES.CSV, containing variable (derived) type name, additionally to current last column contyaining base type name
Edouard Tisserant
parents: 1041
diff changeset
   348
          s4o.print(";;\n");
706
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   349
          if (this->current_var_class_category != external_vcc) {
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   350
              SYMBOL *current_name;
793
268bf4ca5fa1 grand merge
Mario de Sousa <msousa@fe.up.pt>
parents: 726 706
diff changeset
   351
              symbol_c *tmp_var_type;
706
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   352
              current_name = new SYMBOL;
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   353
              current_name->symbol = symbol;
793
268bf4ca5fa1 grand merge
Mario de Sousa <msousa@fe.up.pt>
parents: 726 706
diff changeset
   354
              tmp_var_type = this->current_var_type_symbol;
706
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   355
              current_symbol_list.push_back(*current_name);
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   356
              this->current_var_type_symbol->accept(*this);
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   357
              current_symbol_list.pop_back();
793
268bf4ca5fa1 grand merge
Mario de Sousa <msousa@fe.up.pt>
parents: 726 706
diff changeset
   358
              this->current_var_type_symbol = tmp_var_type;
706
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   359
          }
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   360
          break;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   361
        case search_type_symbol_c::array_vtc:
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   362
          this->current_var_type_name->accept(*this);
1088
9cb7c8bf7dbc Add a column to VARIABLES.CSV, containing variable (derived) type name, additionally to current last column contyaining base type name
Edouard Tisserant
parents: 1041
diff changeset
   363
          s4o.print(";;\n");
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   364
          break;
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   365
        default:
1088
9cb7c8bf7dbc Add a column to VARIABLES.CSV, containing variable (derived) type name, additionally to current last column contyaining base type name
Edouard Tisserant
parents: 1041
diff changeset
   366
          // base type name
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   367
          this->current_var_type_symbol->accept(*this);
1088
9cb7c8bf7dbc Add a column to VARIABLES.CSV, containing variable (derived) type name, additionally to current last column contyaining base type name
Edouard Tisserant
parents: 1041
diff changeset
   368
          s4o.print(";");
9cb7c8bf7dbc Add a column to VARIABLES.CSV, containing variable (derived) type name, additionally to current last column contyaining base type name
Edouard Tisserant
parents: 1041
diff changeset
   369
          // type name (eventualy derived)
9cb7c8bf7dbc Add a column to VARIABLES.CSV, containing variable (derived) type name, additionally to current last column contyaining base type name
Edouard Tisserant
parents: 1041
diff changeset
   370
          this->current_var_type_name->accept(*this);
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   371
          s4o.print(";\n");
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   372
          break;
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   373
      }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   374
    }
626
9f2cefb98e60 Fixed VARIABLES.csv, was broken when using enumrated types
Edouard Tisserant
parents: 409
diff changeset
   375
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   376
    void print_var_number(void) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   377
      char str[10];
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   378
      sprintf(str, "%d", current_var_number);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   379
      s4o.print(str);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   380
      current_var_number++;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   381
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   382
        
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   383
    void print_step_number(void) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   384
      char str[10];
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   385
      sprintf(str, "%d", step_number);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   386
      s4o.print(str);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   387
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   388
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   389
    void print_transition_number(void) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   390
      char str[10];
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   391
      sprintf(str, "%d", transition_number);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   392
      s4o.print(str);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   393
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   394
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   395
    void print_action_number(void) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   396
      char str[10];
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   397
      sprintf(str, "%d", action_number);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   398
      s4o.print(str);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   399
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   400
    
706
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   401
    void print_symbol_list() {
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   402
      std::list<SYMBOL>::iterator pt;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   403
      for(pt = current_symbol_list.begin(); pt != current_symbol_list.end(); pt++) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   404
        pt->symbol->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   405
        s4o.print(".");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   406
      }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   407
    }
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   408
726
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   409
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   410
/********************************/
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   411
/* B 1.3.3 - Derived data types */
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   412
/********************************/
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   413
    /*  enumerated_type_name ':' enumerated_spec_init */
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   414
    void *visit(enumerated_type_declaration_c *symbol) {
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   415
      this->current_var_type_name->accept(*this);
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   416
      return NULL;
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   417
    }
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   418
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   419
    /* enumerated_specification ASSIGN enumerated_value */
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   420
    void *visit(enumerated_spec_init_c *symbol) {
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   421
      /* search_base_type_c now returns an enumerated_type_declaration_c as the base type of a non-anonymous enumerated type
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   422
       * (non-anonymous means it is declared inside a TYPE ... END_TYPE declaration, with a given name/identifier
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   423
       *  unlike implicitly defined anonymous datatypes declared inside VAR ... END_VAR declarations!).
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   424
       * This means that this method should not get called.
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   425
       */
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   426
      ERROR;  
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   427
      this->current_var_type_name->accept(*this);
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   428
      return NULL;
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   429
    }
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   430
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   431
    /* enumerated_value_list ',' enumerated_value */
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   432
    void *visit(enumerated_value_list_c *symbol) {
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   433
      /* search_base_type_c now returns an enumerated_type_declaration_c as the base type of a non-anonymous enumerated type
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   434
       * (non-anonymous means it is declared inside a TYPE ... END_TYPE declaration, with a given name/identifier
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   435
       *  unlike implicitly defined anonymous datatypes declared inside VAR ... END_VAR declarations!).
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   436
       * This means that this method should not get called.
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   437
       */
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   438
      ERROR;
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   439
      this->current_var_type_name->accept(*this);
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   440
      return NULL;
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   441
    }
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   442
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   443
/********************************************/
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   444
/* B.1.4.3 - Declaration and initialization */
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   445
/********************************************/
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   446
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   447
    /*  [variable_name] location ':' located_var_spec_init */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   448
    /* variable_name -> may be NULL ! */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   449
    //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
   450
    void *visit(located_var_decl_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   451
        /* Start off by setting the current_var_type_symbol and
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   452
         * current_var_init_symbol private variables...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   453
         */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   454
        update_var_type_symbol(symbol->located_var_spec_init);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   455
        
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   456
        search_location_type_c search_location_type;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   457
        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
   458
          case search_location_type_c::input_lt:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   459
            this->current_var_class_category = located_input_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   460
            break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   461
          case search_location_type_c::memory_lt:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   462
            this->current_var_class_category = located_memory_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   463
            break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   464
          case search_location_type_c::output_lt:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   465
              this->current_var_class_category = located_output_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   466
              break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   467
          default:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   468
            ERROR;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   469
            break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   470
        }
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   471
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   472
        if (symbol->variable_name != NULL)
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   473
          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
   474
        else
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   475
          declare_variable(symbol->location);
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   476
        
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   477
        this->current_var_class_category = none_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   478
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   479
        /* 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
   480
         * 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
   481
         * 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
   482
         */
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   483
        reset_var_type_symbol();
111
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
    }
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   486
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   487
    /* 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
   488
    /* variable_name -> may be NULL ! */
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   489
    //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
   490
    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
   491
        /* 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
   492
         * 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
   493
         */
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   494
        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
   495
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   496
        search_location_type_c search_location_type;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   497
        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
   498
          case search_location_type_c::input_lt:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   499
            this->current_var_class_category = located_input_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   500
            break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   501
          case search_location_type_c::memory_lt:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   502
            this->current_var_class_category = located_memory_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   503
            break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   504
          case search_location_type_c::output_lt:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   505
            this->current_var_class_category = located_output_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   506
            break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   507
          default:
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   508
            ERROR;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   509
            break;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   510
        }
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   511
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   512
        if (symbol->variable_name != NULL)
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   513
          declare_variable(symbol->variable_name);
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   514
        else
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   515
          declare_variable(symbol->incompl_location);
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   516
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   517
        this->current_var_class_category = none_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   518
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   519
        /* 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
   520
        * 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
   521
        * 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
   522
        */
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   523
       reset_var_type_symbol();
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   524
        return NULL;
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   525
    }
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   526
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   527
    /*  var1_list ':' array_spec_init */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   528
    // SYM_REF2(array_var_init_decl_c, var1_list, array_spec_init)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   529
    void *visit(array_var_init_decl_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   530
      TRACE("array_var_init_decl_c");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   531
      /* Start off by setting the current_var_type_symbol and
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   532
       * current_var_init_symbol private variables...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   533
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   534
      update_var_type_symbol(symbol->array_spec_init);
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   535
      
317
5b687021c6e7 Fix bug in debugging variable list compilation with structure and array disabling
laurent
parents: 300
diff changeset
   536
      declare_variables(symbol->var1_list);
409
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   537
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   538
      /* Values no longer in scope, and therefore no longer used.
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   539
       * Make an effort to keep them set to NULL when not in use
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   540
       * in order to catch bugs as soon as possible...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   541
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   542
      reset_var_type_symbol();
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   543
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   544
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   545
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   546
409
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   547
    /*  var1_list ':' array_specification */
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   548
    //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
   549
    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
   550
       TRACE("array_var_declaration_c");
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   551
       /* 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
   552
        * current_var_init_symbol private variables...
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
       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
   555
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   556
       declare_variables(symbol->var1_list);
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   557
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   558
       /* 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
   559
        * 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
   560
        * 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
   561
        */
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   562
       reset_var_type_symbol();
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   563
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   564
       return NULL;
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   565
    }
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   566
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   567
    /*  var1_list ':' initialized_structure */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   568
    // SYM_REF2(structured_var_init_decl_c, var1_list, initialized_structure)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   569
    void *visit(structured_var_init_decl_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   570
      TRACE("structured_var_init_decl_c");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   571
      /* Please read the comments inside the var1_init_decl_c
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   572
       * visitor, as they apply here too.
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   573
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   574
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   575
      /* Start off by setting the current_var_type_symbol and
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   576
       * current_var_init_symbol private variables...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   577
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   578
      update_var_type_symbol(symbol->initialized_structure);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   579
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   580
      /* 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
   581
      declare_variables(symbol->var1_list);
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   582
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   583
      /* Values no longer in scope, and therefore no longer used.
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   584
       * Make an effort to keep them set to NULL when not in use
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   585
       * in order to catch bugs as soon as possible...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   586
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   587
      reset_var_type_symbol();
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   588
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   589
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   590
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   591
    
409
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   592
    /*  var1_list ':' structure_type_name */
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   593
    //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
   594
    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
   595
      TRACE("structured_var_declaration_c");
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   596
      /* 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
   597
       * visitor, as they apply here too.
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   598
       */
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   599
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   600
      /* 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
   601
       * current_var_init_symbol private variables...
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   602
       */
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   603
      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
   604
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   605
      /* now to produce the c equivalent... */
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   606
      declare_variables(symbol->var1_list);
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   607
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   608
      /* 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
   609
       * 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
   610
       * 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
   611
       */
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   612
      reset_var_type_symbol();
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   613
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   614
      return NULL;
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   615
    }
8d876ad522f4 Fix bug with complex type inout variables while generating variable list
Laurent Bessard
parents: 377
diff changeset
   616
726
9b61eb4f00dc Change the base datatype of enumerations to an enumerated_type_declaration_c (for named types!)
Mario de Sousa <msousa@fe.up.pt>
parents: 718
diff changeset
   617
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   618
    /* fb_name_list ':' function_block_type_name ASSIGN structure_initialization */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   619
    /* structure_initialization -> may be NULL ! */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   620
    void *visit(fb_name_decl_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   621
      TRACE("fb_name_decl_c");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   622
      /* Please read the comments inside the var1_init_decl_c
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   623
       * visitor, as they apply here too.
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   624
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   625
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   626
      /* Start off by setting the current_var_type_symbol and
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   627
       * current_var_init_symbol private variables...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   628
       */
810
d9c48ad646f1 Add a new node to the abstract symtax tree, which will let us do datatype checking of FB variable declarations using the standard algorithm, and no special cases.
Mario de Sousa <msousa@fe.up.pt>
parents: 805
diff changeset
   629
      update_var_type_symbol(symbol->fb_spec_init);
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   630
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   631
      /* now to produce the c equivalent... */
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   632
      declare_variables(symbol->fb_name_list);
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   633
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   634
      /* Values no longer in scope, and therefore no longer used.
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   635
       * Make an effort to keep them set to NULL when not in use
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   636
       * in order to catch bugs as soon as possible...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   637
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   638
      reset_var_type_symbol();
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   639
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   640
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   641
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   642
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   643
    /*  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
   644
    //SYM_REF2(external_declaration_c, global_var_name, specification)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   645
    void *visit(external_declaration_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   646
      TRACE("external_declaration_c");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   647
      /* Please read the comments inside the var1_init_decl_c
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   648
       * visitor, as they apply here too.
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   649
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   650
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   651
      /* Start off by setting the current_var_type_symbol and
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   652
       * current_var_init_symbol private variables...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   653
       */
166
09004f402097 Bug with external variable declaration fixed
lbessard
parents: 160
diff changeset
   654
      update_var_type_symbol(symbol->specification);
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   655
      
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   656
      this->current_var_class_category = external_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   657
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   658
      /* now to produce the c equivalent... */
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   659
      declare_variable(symbol->global_var_name);
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   660
      
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   661
      this->current_var_class_category = none_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   662
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   663
      /* Values no longer in scope, and therefore no longer used.
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   664
       * Make an effort to keep them set to NULL when not in use
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   665
       * in order to catch bugs as soon as possible...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   666
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   667
      reset_var_type_symbol();
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   668
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   669
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   670
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   671
    /*| global_var_spec ':' [located_var_spec_init|function_block_type_name] */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   672
    /* type_specification ->may be NULL ! */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   673
    // SYM_REF2(global_var_decl_c, global_var_spec, type_specification)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   674
    void *visit(global_var_decl_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   675
      TRACE("global_var_decl_c");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   676
      /* Please read the comments inside the var1_init_decl_c
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   677
       * visitor, as they apply here too.
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   678
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   679
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   680
      /* Start off by setting the current_var_type_symbol and
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   681
       * current_var_init_symbol private variables...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   682
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   683
      update_var_type_symbol(symbol->type_specification);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   684
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   685
      /* now to produce the c equivalent... */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   686
      symbol->global_var_spec->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   687
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   688
      /* Values no longer in scope, and therefore no longer used.
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   689
       * Make an effort to keep them set to NULL when not in use
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   690
       * in order to catch bugs as soon as possible...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   691
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   692
      reset_var_type_symbol();
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   693
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   694
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   695
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   696
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   697
    void *visit(global_var_list_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   698
      declare_variables(symbol);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   699
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   700
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   701
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   702
    /*| global_var_name location */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   703
    // SYM_REF2(global_var_spec_c, global_var_name, location)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   704
    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
   705
      search_location_type_c search_location_type;
706
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   706
      switch (search_location_type.get_location_type(symbol->location)) {
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   707
        case search_location_type_c::input_lt:
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   708
          this->current_var_class_category = located_input_vcc;
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   709
          break;
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   710
        case search_location_type_c::memory_lt:
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   711
          this->current_var_class_category = located_memory_vcc;
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   712
          break;
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   713
        case search_location_type_c::output_lt:
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   714
          this->current_var_class_category = located_output_vcc;
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   715
          break;
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   716
        default:
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   717
          ERROR;
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   718
          break;
31553c22f318 Adding support for declaring function block instances as global and external variables
Laurent Bessard
parents: 626
diff changeset
   719
      }
232
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   720
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   721
      if (symbol->global_var_name != NULL)
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   722
        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
   723
      else
29ab33687333 Adding support for making distinction between external variables and located variables for forcing
laurent
parents: 229
diff changeset
   724
        declare_variable(symbol->location);
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   725
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   726
      this->current_var_class_category = none_vcc;
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   727
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   728
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   729
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   730
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   731
    void *visit(var1_init_decl_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   732
      TRACE("var1_init_decl_c");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   733
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   734
      /* Start off by setting the current_var_type_symbol and
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   735
       * current_var_init_symbol private variables...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   736
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   737
      update_var_type_symbol(symbol->spec_init);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   738
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   739
      /* now to produce the c equivalent... */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   740
      declare_variables(symbol->var1_list);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   741
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   742
      /* Values no longer in scope, and therefore no longer used.
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   743
       * Make an effort to keep them set to NULL when not in use
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   744
       * in order to catch bugs as soon as possible...
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   745
       */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   746
      reset_var_type_symbol();
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   747
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   748
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   749
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   750
206
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   751
    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
   752
      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
   753
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   754
      /* 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
   755
       * 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
   756
       */
805
b737cfc92614 Use simple_spec_init_c inside en_param_declaration_c (will reduce need to handle it as a special case in the future).
Mario de Sousa <msousa@fe.up.pt>
parents: 793
diff changeset
   757
      update_var_type_symbol(symbol->type_decl);
206
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   758
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   759
      /* 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
   760
      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
   761
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   762
      /* 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
   763
       * 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
   764
       * 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
   765
       */
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   766
      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
   767
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   768
      return NULL;
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   769
    }
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   770
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   771
    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
   772
      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
   773
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   774
      /* 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
   775
       * 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
   776
       */
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 317
diff changeset
   777
      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
   778
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   779
      /* 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
   780
      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
   781
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   782
      /* 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
   783
       * 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
   784
       * 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
   785
       */
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   786
      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
   787
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   788
      return NULL;
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   789
    }
261beef39000 Bug with EN/ENO in generate_var_list that breaks parsing of variables.csv fixed
laurent
parents: 195
diff changeset
   790
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   791
/********************************/
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   792
/* B 1.3.3 - Derived data types */
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   793
/********************************/
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   794
    void *visit(data_type_declaration_c *symbol) {
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   795
      return NULL;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   796
    }
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   797
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   798
    void *visit(structure_element_declaration_list_c *symbol) {
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   799
      for(int i = 0; i < symbol->n; i++) {
1041
56ebe2a31b5b Access elements[] in list_c through a new get_element() method.
Mario de Sousa <msousa@fe.up.pt>
parents: 958
diff changeset
   800
        symbol->get_element(i)->accept(*this);
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   801
      }
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   802
      return NULL;
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   803
    }
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   804
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   805
    void *visit(structure_element_declaration_c *symbol) {
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   806
      /* Start off by setting the current_var_type_symbol and
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   807
       * current_var_init_symbol private variables...
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   808
       */
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   809
      update_var_type_symbol(symbol->spec_init);
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   810
      
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   811
      /* now to produce the c equivalent... */
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   812
      declare_variable(symbol->structure_element_name);
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   813
      
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   814
      /* Values no longer in scope, and therefore no longer used.
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   815
       * 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
   816
       * in order to catch bugs as soon as possible...
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   817
       */
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   818
      reset_var_type_symbol();
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   819
      
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   820
      return NULL;
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   821
    }
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   822
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   823
/**************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   824
/* B.1.5 - Program organization units */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   825
/**************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   826
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   827
/***********************/
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   828
/* B 1.5.1 - Functions */
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   829
/***********************/
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   830
    void *visit(function_declaration_c *symbol) {
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   831
      return NULL;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   832
    }
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   833
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   834
/*****************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   835
/* B 1.5.2 - Function Blocks */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   836
/*****************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   837
    void *visit(function_block_declaration_c *symbol) {
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   838
      if (current_declarationtype == variables_dt && configuration_defined) {
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   839
        symbol->var_declarations->accept(*this);
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   840
        symbol->fblock_body->accept(*this);
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   841
      }
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   842
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   843
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   844
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   845
/**********************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   846
/* B 1.5.3 - Programs */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   847
/**********************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   848
    void *visit(program_declaration_c *symbol) {
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   849
      if (current_declarationtype == variables_dt && configuration_defined) {
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   850
        symbol->var_declarations->accept(*this);
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   851
        symbol->function_block_body->accept(*this);
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   852
      }
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   853
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   854
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   855
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   856
/**********************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   857
/* B 1.6 - Sequential function chart elements */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   858
/**********************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   859
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   860
    /* | sequential_function_chart sfc_network */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   861
    //SYM_LIST(sequential_function_chart_c)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   862
    void *visit(sequential_function_chart_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   863
      step_number = 0;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   864
      transition_number = 0;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   865
      action_number = 0;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   866
      for(int i = 0; i < symbol->n; i++) {
1041
56ebe2a31b5b Access elements[] in list_c through a new get_element() method.
Mario de Sousa <msousa@fe.up.pt>
parents: 958
diff changeset
   867
        symbol->get_element(i)->accept(*this);
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   868
      }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   869
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   870
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   871
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   872
    /* INITIAL_STEP step_name ':' action_association_list END_STEP */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   873
    //SYM_REF2(initial_step_c, step_name, action_association_list)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   874
    void *visit(initial_step_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   875
      print_var_number();
115
3dd564ff94e4 Adding support to distinguish direct variables and pointed variables
lbessard
parents: 111
diff changeset
   876
      s4o.print(";VAR;");
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   877
      print_symbol_list();
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   878
      symbol->step_name->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   879
      s4o.print(".X;");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   880
      print_symbol_list();
141
d2dc99c319b6 Adding support for transition debugging
lbessard
parents: 138
diff changeset
   881
      s4o.print("__step_list[");
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   882
      print_step_number();
1088
9cb7c8bf7dbc Add a column to VARIABLES.CSV, containing variable (derived) type name, additionally to current last column contyaining base type name
Edouard Tisserant
parents: 1041
diff changeset
   883
      s4o.print("].X;BOOL;BOOL;\n");
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   884
      step_number++;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   885
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   886
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   887
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   888
    /* STEP step_name ':' action_association_list END_STEP */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   889
    //SYM_REF2(step_c, step_name, action_association_list)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   890
    void *visit(step_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   891
      print_var_number();
115
3dd564ff94e4 Adding support to distinguish direct variables and pointed variables
lbessard
parents: 111
diff changeset
   892
      s4o.print(";VAR;");
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   893
      print_symbol_list();
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   894
      symbol->step_name->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   895
      s4o.print(".X;");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   896
      print_symbol_list();
141
d2dc99c319b6 Adding support for transition debugging
lbessard
parents: 138
diff changeset
   897
      s4o.print("__step_list[");
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   898
      print_step_number();
1088
9cb7c8bf7dbc Add a column to VARIABLES.CSV, containing variable (derived) type name, additionally to current last column contyaining base type name
Edouard Tisserant
parents: 1041
diff changeset
   899
      s4o.print("].X;BOOL;BOOL;\n");
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   900
      step_number++;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   901
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   902
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   903
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   904
    /* TRANSITION [transition_name] ['(' PRIORITY ASSIGN integer ')'] 
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   905
     *   FROM steps TO steps 
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   906
     *   transition_condition 
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   907
     * END_TRANSITION
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   908
     */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   909
    /* transition_name -> may be NULL ! */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   910
    /* integer -> may be NULL ! */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   911
    //SYM_REF5(transition_c, transition_name, integer, from_steps, to_steps, transition_condition)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   912
    void *visit(transition_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   913
      print_var_number();
115
3dd564ff94e4 Adding support to distinguish direct variables and pointed variables
lbessard
parents: 111
diff changeset
   914
      s4o.print(";VAR;");
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   915
      print_symbol_list();
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   916
      symbol->from_steps->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   917
      s4o.print("->");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   918
      symbol->to_steps->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   919
      s4o.print(";");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   920
      print_symbol_list();
141
d2dc99c319b6 Adding support for transition debugging
lbessard
parents: 138
diff changeset
   921
      s4o.print("__debug_transition_list[");
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   922
      print_transition_number();
1088
9cb7c8bf7dbc Add a column to VARIABLES.CSV, containing variable (derived) type name, additionally to current last column contyaining base type name
Edouard Tisserant
parents: 1041
diff changeset
   923
      s4o.print("];BOOL;BOOL;\n");
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   924
      transition_number++;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   925
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   926
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   927
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   928
    /* step_name | '(' step_name_list ')' */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   929
    /* step_name      -> may be NULL ! */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   930
    /* step_name_list -> may be NULL ! */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   931
    //SYM_REF2(steps_c, step_name, step_name_list)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   932
    void *visit(steps_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   933
      if (symbol->step_name != NULL)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   934
        symbol->step_name->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   935
      if (symbol->step_name_list != NULL)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   936
        symbol->step_name_list->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   937
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   938
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   939
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   940
    /* | step_name_list ',' step_name */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   941
    //SYM_LIST(step_name_list_c)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   942
    void *visit(step_name_list_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   943
      for(int i = 0; i < symbol->n; i++) {
1041
56ebe2a31b5b Access elements[] in list_c through a new get_element() method.
Mario de Sousa <msousa@fe.up.pt>
parents: 958
diff changeset
   944
        symbol->get_element(i)->accept(*this);
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   945
        if (i < symbol->n - 1)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   946
          s4o.print(",");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   947
      }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   948
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   949
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   950
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   951
    /* ACTION action_name ':' function_block_body END_ACTION */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   952
    //SYM_REF2(action_c, action_name, function_block_body)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   953
    void *visit(action_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   954
      print_var_number();
115
3dd564ff94e4 Adding support to distinguish direct variables and pointed variables
lbessard
parents: 111
diff changeset
   955
      s4o.print(";VAR;");
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   956
      print_symbol_list();
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   957
      symbol->action_name->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   958
      s4o.print(".Q;");
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   959
      print_symbol_list();
141
d2dc99c319b6 Adding support for transition debugging
lbessard
parents: 138
diff changeset
   960
      s4o.print("__action_list[");
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   961
      print_action_number();
1088
9cb7c8bf7dbc Add a column to VARIABLES.CSV, containing variable (derived) type name, additionally to current last column contyaining base type name
Edouard Tisserant
parents: 1041
diff changeset
   962
      s4o.print("].state;BOOL;BOOL;\n");
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   963
      action_number++;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   964
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   965
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   966
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   967
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   968
/**************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   969
/* B.1.7 - Configuration elements     */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   970
/**************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   971
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   972
    /*  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
   973
    //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
   974
    void *visit(program_configuration_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
   975
      
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   976
      switch (current_declarationtype) {
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   977
        case programs_dt:
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   978
          print_var_number();
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   979
          s4o.print(";");
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   980
          print_symbol_list();
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   981
          symbol->program_name->accept(*this);
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   982
          s4o.print(";");
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   983
          symbol->program_type_name->accept(*this);
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   984
          s4o.print(";\n");
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   985
          break;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   986
        case variables_dt:
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   987
          /* 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
   988
           * current_var_init_symbol private variables...
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   989
           */
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   990
          update_var_type_symbol(symbol->program_type_name);
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   991
          
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 158
diff changeset
   992
          declare_variable(symbol->program_name);
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   993
          
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   994
          /* 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
   995
           * 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
   996
           * in order to catch bugs as soon as possible...
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   997
           */
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   998
          reset_var_type_symbol();
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
   999
          
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
  1000
          break;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
  1001
        default:
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
  1002
          break;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
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
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1006
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1007
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1008
    /* CONFIGURATION configuration_name
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1009
     *   optional_global_var_declarations
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1010
     *   (resource_declaration_list | single_resource_declaration)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1011
     *   optional_access_declarations
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1012
     *   optional_instance_specific_initializations
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1013
     * END_CONFIGURATION
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1014
     */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1015
    //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
  1016
    void *visit(configuration_declaration_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1017
      SYMBOL *current_name;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1018
      current_name = new SYMBOL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1019
      current_name->symbol = symbol->configuration_name;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1020
      current_symbol_list.push_back(*current_name);
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
  1021
      configuration_defined = true;
135
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
  1022
      
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
  1023
      switch (current_declarationtype) {
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
  1024
        case variables_dt:
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
  1025
          if (symbol->global_var_declarations != NULL)
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
  1026
            symbol->global_var_declarations->accept(*this);
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
  1027
          break;
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
  1028
        default:
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
  1029
          break;
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
  1030
      }
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
  1031
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1032
      symbol->resource_declarations->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1033
      current_symbol_list.pop_back();
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 115
diff changeset
  1034
      configuration_defined = false;
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1035
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1036
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1037
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1038
    /* RESOURCE resource_name ON resource_type_name
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1039
     *   optional_global_var_declarations
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1040
     *   single_resource_declaration
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1041
     * END_RESOURCE
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1042
     */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1043
    //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
  1044
    void *visit(resource_declaration_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1045
      SYMBOL *current_name;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1046
      current_name = new SYMBOL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1047
      current_name->symbol = symbol->resource_name;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1048
      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
  1049
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
  1050
      switch (current_declarationtype) {
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
  1051
        case variables_dt:
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
  1052
          if (symbol->global_var_declarations != NULL)
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
  1053
            symbol->global_var_declarations->accept(*this);
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
  1054
          break;
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
  1055
        default:
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
  1056
          break;
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
  1057
      }
0f3f6714b938 Fixed generation of VARIABLES.csv, some variables appeared in program section
etisserant
parents: 121
diff changeset
  1058
      
111
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1059
      
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1060
      symbol->resource_declaration->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1061
      
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1062
      current_symbol_list.pop_back();
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1063
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1064
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1065
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1066
    /* task_configuration_list program_configuration_list */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1067
    //SYM_REF2(single_resource_declaration_c, task_configuration_list, program_configuration_list)
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1068
    void *visit(single_resource_declaration_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1069
      symbol->program_configuration_list->accept(*this);
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1070
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1071
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1072
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1073
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1074
/*************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1075
/* B 2.1 - Instructions and operands */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1076
/*************************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1077
    void *visit(instruction_list_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1078
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1079
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1080
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1081
/************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1082
/* B 3.2 - Statements   */
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1083
/************************/
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1084
    void *visit(statement_list_c *symbol) {
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1085
      return NULL;
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1086
    }
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1087
    
ee31ee39eaf6 Adding structure variable list generation module
lbessard
parents:
diff changeset
  1088
};