stage4/generate_c/generate_var_list.cc
author Andrey Skvortsov <andrej.skvortzov@gmail.com>
Sun, 14 Oct 2018 20:14:13 +0300
changeset 1073 24ef30a9bcee
parent 1041 56ebe2a31b5b
child 1088 9cb7c8bf7dbc
permissions -rw-r--r--
revert commits improved performance of some extensible Standard Functions (ADD, MUL, AND, OR, XOR)

Following commits are reverted:
mjsousa 0b275a2 improve performance of some extensible Standard Functions (ADD, MUL, AND, OR, XOR) -- increase hardcoded limit to 499
mjsousa 2228799 improve performance of some extensible Standard Functions (ADD, MUL, AND, OR, XOR) -- Add comments!!
mjsousa ce81fa6 improve performance of some extensible Standard Functions (ADD, MUL, AND, OR, XOR)"

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