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