stage4/generate_c/generate_c_typedecl.cc
author Laurent Bessard
Tue, 11 Sep 2012 01:05:24 +0200
changeset 628 fe0d516fe291
parent 594 c8092e909886
child 661 f537c3315f83
child 706 31553c22f318
permissions -rw-r--r--
Fix bug in SFC generated code. Action state was declared in the list of variables to debug, but wasn't stored using structure with flags. This error had side effects that makes Beremiz debug crash.
70
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
     1
/*
279
c0453b7f99df Re-generated std lib related code, with updated headers, updated all forgotten headers
Edouard Tisserant
parents: 221
diff changeset
     2
 *  matiec - a compiler for the programming languages defined in IEC 61131-3
c0453b7f99df Re-generated std lib related code, with updated headers, updated all forgotten headers
Edouard Tisserant
parents: 221
diff changeset
     3
 *
c0453b7f99df Re-generated std lib related code, with updated headers, updated all forgotten headers
Edouard Tisserant
parents: 221
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: 221
diff changeset
     5
 *  Copyright (C) 2007-2011  Laurent Bessard and Edouard Tisserant
c0453b7f99df Re-generated std lib related code, with updated headers, updated all forgotten headers
Edouard Tisserant
parents: 221
diff changeset
     6
 *
c0453b7f99df Re-generated std lib related code, with updated headers, updated all forgotten headers
Edouard Tisserant
parents: 221
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: 221
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: 221
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: 221
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: 221
diff changeset
    11
 *
c0453b7f99df Re-generated std lib related code, with updated headers, updated all forgotten headers
Edouard Tisserant
parents: 221
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: 221
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: 221
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: 221
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: 221
diff changeset
    16
 *
c0453b7f99df Re-generated std lib related code, with updated headers, updated all forgotten headers
Edouard Tisserant
parents: 221
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: 221
diff changeset
    18
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
c0453b7f99df Re-generated std lib related code, with updated headers, updated all forgotten headers
Edouard Tisserant
parents: 221
diff changeset
    19
 *
70
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    20
 *
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    21
 * This code is made available on the understanding that it will not be
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    22
 * used in safety-critical situations without a full and competent review.
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    23
 */
139
668a54686827 added missing includes on some platform (gentoo/gcc-4.3.1)
etisserant
parents: 123
diff changeset
    24
#include <stdlib.h>
70
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    25
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    26
class generate_c_typedecl_c: public generate_c_base_c {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    27
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    28
  protected:
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    29
    stage4out_c &s4o_incl;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    30
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
    31
  private:
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
    32
    symbol_c* current_type_name;
309
f93bcada0f51 Fix bug when declaring data type directly derived from array type
laurent
parents: 307
diff changeset
    33
    bool array_is_derived;
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
    34
    search_base_type_c search_base_type;
328
66cd5d9893dd Add support for finding type of a constant enumerated value and managing conflict between same identifiers defined in different enumerated data types
laurent
parents: 327
diff changeset
    35
    search_constant_type_c search_constant_type;
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
    36
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    37
    generate_c_base_c *basedecl;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    38
70
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    39
  public:
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    40
    generate_c_typedecl_c(stage4out_c *s4o_ptr, stage4out_c *s4o_incl_ptr): generate_c_base_c(s4o_ptr), s4o_incl(*s4o_incl_ptr) {
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
    41
      current_typedefinition = none_td;
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
    42
      current_basetypedeclaration = none_bd;
328
66cd5d9893dd Add support for finding type of a constant enumerated value and managing conflict between same identifiers defined in different enumerated data types
laurent
parents: 327
diff changeset
    43
      current_type_name = NULL;
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    44
      basedecl = new generate_c_base_c(&s4o_incl);
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
    45
    }
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    46
    generate_c_typedecl_c(stage4out_c *s4o_ptr): generate_c_base_c(s4o_ptr), s4o_incl(*s4o_ptr) {
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    47
      current_typedefinition = none_td;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    48
      current_basetypedeclaration = none_bd;
328
66cd5d9893dd Add support for finding type of a constant enumerated value and managing conflict between same identifiers defined in different enumerated data types
laurent
parents: 327
diff changeset
    49
      current_type_name = NULL;
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    50
      basedecl = new generate_c_base_c(&s4o_incl);
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    51
    }
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    52
    ~generate_c_typedecl_c(void) {
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    53
      delete basedecl;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    54
    }
70
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    55
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
    56
    typedef enum {
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
    57
      none_td,
310
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
    58
      enumerated_td,
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
    59
      subrange_td,
310
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
    60
      array_td,
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
    61
      struct_td,
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
    62
    } typedefinition_t;
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
    63
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
    64
    typedefinition_t current_typedefinition;
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
    65
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
    66
    typedef enum {
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
    67
      none_bd,
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
    68
      subrangebasetype_bd,
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
    69
      subrangetest_bd,
309
f93bcada0f51 Fix bug when declaring data type directly derived from array type
laurent
parents: 307
diff changeset
    70
      arrayderiveddeclaration_bd,
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
    71
      arraybasetype_bd,
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    72
      arraybasetypeincl_bd,
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 350
diff changeset
    73
      arraysubrange_bd
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
    74
    } basetypedeclaration_t;
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 350
diff changeset
    75
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
    76
    basetypedeclaration_t current_basetypedeclaration;
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
    77
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    78
    void *print_list_incl(list_c *list,
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    79
         std::string pre_elem_str = "",
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    80
         std::string inter_elem_str = "",
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    81
         std::string post_elem_str = "",
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    82
         visitor_c *visitor = NULL) {
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    83
      if (visitor == NULL) visitor = this;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    84
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    85
      if (list->n > 0) {
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    86
//std::cout << "generate_c_base_c::print_list(n = " << list->n << ")   000\n";
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    87
        s4o_incl.print(pre_elem_str);
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    88
        list->elements[0]->accept(*visitor);
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    89
      }
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    90
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    91
      for(int i = 1; i < list->n; i++) {
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    92
//std::cout << "generate_c_base_c::print_list   " << i << "\n";
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    93
        s4o_incl.print(inter_elem_str);
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    94
        list->elements[i]->accept(*visitor);
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    95
      }
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    96
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    97
      if (list->n > 0)
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    98
        s4o_incl.print(post_elem_str);
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
    99
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
   100
      return NULL;
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
   101
    }
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
   102
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
   103
70
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   104
/***************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   105
/* B 0 - Programming Model */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   106
/***************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   107
  /* leave for derived classes... */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   108
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   109
/*************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   110
/* B.1 - Common elements */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   111
/*************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   112
/*******************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   113
/* B 1.1 - Letters, digits and identifiers */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   114
/*******************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   115
  /* done in base class(es) */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   116
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   117
/*********************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   118
/* B 1.2 - Constants */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   119
/*********************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   120
  /* originally empty... */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   121
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   122
/******************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   123
/* B 1.2.1 - Numeric Literals */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   124
/******************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   125
  /* done in base class(es) */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   126
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   127
/*******************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   128
/* B.1.2.2   Character Strings */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   129
/*******************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   130
  /* done in base class(es) */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   131
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   132
/***************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   133
/* B 1.2.3 - Time Literals */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   134
/***************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   135
/************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   136
/* B 1.2.3.1 - Duration */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   137
/************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   138
  /* done in base class(es) */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   139
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   140
/************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   141
/* B 1.2.3.2 - Time of day and Date */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   142
/************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   143
  /* done in base class(es) */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   144
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   145
/**********************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   146
/* B.1.3 - Data types */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   147
/**********************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   148
/***********************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   149
/* B 1.3.1 - Elementary Data Types */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   150
/***********************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   151
  /* done in base class(es) */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   152
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   153
/********************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   154
/* B.1.3.2 - Generic data types */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   155
/********************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   156
  /* originally empty... */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   157
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   158
/********************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   159
/* B 1.3.3 - Derived data types */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   160
/********************************/
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   161
/*  subrange_type_name ':' subrange_spec_init */
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   162
void *visit(subrange_type_declaration_c *symbol) {
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   163
  TRACE("subrange_type_declaration_c");  
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   164
  
310
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   165
  current_typedefinition = subrange_td;
328
66cd5d9893dd Add support for finding type of a constant enumerated value and managing conflict between same identifiers defined in different enumerated data types
laurent
parents: 327
diff changeset
   166
  current_type_name = symbol->subrange_type_name;
310
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   167
221
c6aed7e5f070 Adding support for flags on Function Block variables for marking which variable must be debugged, retained or is forced
laurent
parents: 178
diff changeset
   168
  s4o_incl.print("__DECLARE_DERIVED_TYPE(");
328
66cd5d9893dd Add support for finding type of a constant enumerated value and managing conflict between same identifiers defined in different enumerated data types
laurent
parents: 327
diff changeset
   169
  current_type_name->accept(*basedecl);
327
da78d0d93c75 Fix bug in declaring variable of enumerated type
laurent
parents: 322
diff changeset
   170
  s4o_incl.print(",");
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   171
  current_basetypedeclaration = subrangebasetype_bd;
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   172
  symbol->subrange_spec_init->accept(*this);
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   173
  current_basetypedeclaration = none_bd;
221
c6aed7e5f070 Adding support for flags on Function Block variables for marking which variable must be debugged, retained or is forced
laurent
parents: 178
diff changeset
   174
  s4o_incl.print(")\n");
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   175
  
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   176
  current_basetypedeclaration = subrangetest_bd;
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   177
  symbol->subrange_spec_init->accept(*this);
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   178
  current_basetypedeclaration = none_bd;
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   179
  
328
66cd5d9893dd Add support for finding type of a constant enumerated value and managing conflict between same identifiers defined in different enumerated data types
laurent
parents: 327
diff changeset
   180
  current_type_name = NULL;
310
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   181
  current_typedefinition = none_td;
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   182
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   183
  return NULL;
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   184
}
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   185
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   186
/* subrange_specification ASSIGN signed_integer */
70
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   187
void *visit(subrange_spec_init_c *symbol) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   188
  TRACE("subrange_spec_init_c");
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   189
  symbol->subrange_specification->accept(*this);
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   190
  return NULL;
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   191
}
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   192
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   193
/*  integer_type_name '(' subrange')' */
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   194
void *visit(subrange_specification_c *symbol) {
310
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   195
  if (current_typedefinition == subrange_td) {
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   196
    switch (current_basetypedeclaration) {
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   197
      case subrangebasetype_bd:
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   198
        symbol->integer_type_name->accept(*basedecl);
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   199
        break;
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   200
      case subrangetest_bd:
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   201
        if (symbol->subrange != NULL) {
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   202
          current_type_name->accept(*this);
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   203
          s4o.print(" __CHECK_");
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   204
          current_type_name->accept(*this);
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   205
          s4o.print("(");
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   206
          current_type_name->accept(*this);
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   207
          s4o.print(" value) {\n");
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   208
          s4o.indent_right();
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   209
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   210
          if (search_base_type.type_is_subrange(symbol->integer_type_name)) {
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   211
            s4o.print(s4o.indent_spaces + "value = __CHECK_");
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   212
            symbol->integer_type_name->accept(*this);
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   213
            s4o.print("(value);\n");
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   214
          }
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   215
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   216
          symbol->subrange->accept(*this);
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   217
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   218
          s4o.indent_left();
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   219
          s4o.print("}\n");
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   220
        }
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   221
        else {
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   222
          s4o.print("#define __CHECK_");
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   223
          current_type_name->accept(*this);
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   224
          s4o.print(" __CHECK_");
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   225
          symbol->integer_type_name->accept(*this);
310
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   226
          s4o.print("\n");
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   227
        }
310
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   228
        break;
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   229
      default:
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   230
        break;
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   231
    }
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   232
  }
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   233
  else {
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   234
    symbol->integer_type_name->accept(*basedecl);
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   235
  }
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   236
  return NULL;
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   237
}
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   238
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   239
/*  signed_integer DOTDOT signed_integer */
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   240
void *visit(subrange_c *symbol) {
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   241
  int dimension;
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   242
  switch (current_typedefinition) {
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   243
    case array_td:
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   244
      if (current_basetypedeclaration == arraysubrange_bd) {
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
   245
        s4o_incl.print("[");
594
c8092e909886 Clean up code (remove parsing of integers in stage 4).
Mario de Sousa <msousa@fe.up.pt>
parents: 592
diff changeset
   246
        s4o_incl.print(symbol->dimension);
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
   247
        s4o_incl.print("]");
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   248
      }
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   249
      else
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   250
        symbol->lower_limit->accept(*this);
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   251
      break;
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   252
    case subrange_td:
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   253
      s4o.print(s4o.indent_spaces + "if (value < ");
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   254
      symbol->lower_limit->accept(*this);
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   255
      s4o.print(")\n");
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   256
      s4o.indent_right();
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   257
      s4o.print(s4o.indent_spaces + "return ");
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   258
      symbol->lower_limit->accept(*this);
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   259
      s4o.print(";\n");
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   260
      s4o.indent_left();
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   261
      s4o.print(s4o.indent_spaces + "else if (value > ");
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   262
      symbol->upper_limit->accept(*this);
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   263
      s4o.print(")\n");
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   264
      s4o.indent_right();
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   265
      s4o.print(s4o.indent_spaces + "return ");
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   266
      symbol->upper_limit->accept(*this);
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   267
      s4o.print(";\n");
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   268
      s4o.indent_left();
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   269
      s4o.print(s4o.indent_spaces + "else\n");
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   270
      s4o.indent_right();
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   271
      s4o.print(s4o.indent_spaces + "return value;\n");
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   272
      s4o.indent_left();
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   273
    default:
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   274
      break;
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   275
  }
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   276
  return NULL;
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   277
}
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   278
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   279
/*  enumerated_type_name ':' enumerated_spec_init */
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   280
void *visit(enumerated_type_declaration_c *symbol) {
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   281
  TRACE("enumerated_type_declaration_c");
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   282
  
310
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   283
  current_typedefinition = enumerated_td;
328
66cd5d9893dd Add support for finding type of a constant enumerated value and managing conflict between same identifiers defined in different enumerated data types
laurent
parents: 327
diff changeset
   284
  current_type_name = symbol->enumerated_type_name;
310
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   285
327
da78d0d93c75 Fix bug in declaring variable of enumerated type
laurent
parents: 322
diff changeset
   286
  s4o_incl.print("__DECLARE_ENUMERATED_TYPE(");
328
66cd5d9893dd Add support for finding type of a constant enumerated value and managing conflict between same identifiers defined in different enumerated data types
laurent
parents: 327
diff changeset
   287
  current_type_name->accept(*basedecl);
327
da78d0d93c75 Fix bug in declaring variable of enumerated type
laurent
parents: 322
diff changeset
   288
  s4o_incl.print(",\n");
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
   289
  s4o_incl.indent_right();
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   290
  symbol->enumerated_spec_init->accept(*this);
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
   291
  s4o_incl.indent_left();
327
da78d0d93c75 Fix bug in declaring variable of enumerated type
laurent
parents: 322
diff changeset
   292
  s4o_incl.print(")\n");
310
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   293
328
66cd5d9893dd Add support for finding type of a constant enumerated value and managing conflict between same identifiers defined in different enumerated data types
laurent
parents: 327
diff changeset
   294
  current_type_name = NULL;
310
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   295
  current_typedefinition = none_td;
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   296
70
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   297
  return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   298
}
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   299
328
66cd5d9893dd Add support for finding type of a constant enumerated value and managing conflict between same identifiers defined in different enumerated data types
laurent
parents: 327
diff changeset
   300
/* enumerated_specification ASSIGN enumerated_value */
70
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   301
void *visit(enumerated_spec_init_c *symbol) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   302
  TRACE("enumerated_spec_init_c");
310
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   303
  if (current_typedefinition == enumerated_td)
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   304
    symbol->enumerated_specification->accept(*this);
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   305
  else
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   306
    symbol->enumerated_specification->accept(*basedecl);
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   307
  return NULL;
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   308
}
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   309
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   310
/* helper symbol for enumerated_specification->enumerated_spec_init */
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   311
/* enumerated_value_list ',' enumerated_value */
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   312
void *visit(enumerated_value_list_c *symbol) {
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
   313
  print_list_incl(symbol, s4o_incl.indent_spaces, ",\n"+s4o_incl.indent_spaces, "\n");
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   314
  return NULL;
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   315
}
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   316
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   317
/* enumerated_type_name '#' identifier */
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   318
void *visit(enumerated_value_c *symbol) {
328
66cd5d9893dd Add support for finding type of a constant enumerated value and managing conflict between same identifiers defined in different enumerated data types
laurent
parents: 327
diff changeset
   319
  symbol_c *value_type;
66cd5d9893dd Add support for finding type of a constant enumerated value and managing conflict between same identifiers defined in different enumerated data types
laurent
parents: 327
diff changeset
   320
  if (current_typedefinition == enumerated_td)
66cd5d9893dd Add support for finding type of a constant enumerated value and managing conflict between same identifiers defined in different enumerated data types
laurent
parents: 327
diff changeset
   321
    current_type_name->accept(*basedecl);
66cd5d9893dd Add support for finding type of a constant enumerated value and managing conflict between same identifiers defined in different enumerated data types
laurent
parents: 327
diff changeset
   322
  else {
66cd5d9893dd Add support for finding type of a constant enumerated value and managing conflict between same identifiers defined in different enumerated data types
laurent
parents: 327
diff changeset
   323
    value_type = (symbol_c *)symbol->accept(search_constant_type);
66cd5d9893dd Add support for finding type of a constant enumerated value and managing conflict between same identifiers defined in different enumerated data types
laurent
parents: 327
diff changeset
   324
    if (value_type == NULL) ERROR;
66cd5d9893dd Add support for finding type of a constant enumerated value and managing conflict between same identifiers defined in different enumerated data types
laurent
parents: 327
diff changeset
   325
66cd5d9893dd Add support for finding type of a constant enumerated value and managing conflict between same identifiers defined in different enumerated data types
laurent
parents: 327
diff changeset
   326
    value_type->accept(*basedecl);
66cd5d9893dd Add support for finding type of a constant enumerated value and managing conflict between same identifiers defined in different enumerated data types
laurent
parents: 327
diff changeset
   327
  }
329
882f5f1e5f6f Adding double underscore in computed enumerated value to avoid conflict with other user defined identifiers
laurent
parents: 328
diff changeset
   328
  s4o_incl.print("__");
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
   329
  symbol->value->accept(*basedecl);
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   330
  return NULL;
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   331
}
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   332
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   333
/*  identifier ':' array_spec_init */
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   334
void *visit(array_type_declaration_c *symbol) {
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   335
  TRACE("array_type_declaration_c");
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   336
  
310
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   337
  current_typedefinition = array_td;
328
66cd5d9893dd Add support for finding type of a constant enumerated value and managing conflict between same identifiers defined in different enumerated data types
laurent
parents: 327
diff changeset
   338
  current_type_name = symbol->identifier;
310
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   339
309
f93bcada0f51 Fix bug when declaring data type directly derived from array type
laurent
parents: 307
diff changeset
   340
  array_is_derived = false;
f93bcada0f51 Fix bug when declaring data type directly derived from array type
laurent
parents: 307
diff changeset
   341
  current_basetypedeclaration = arrayderiveddeclaration_bd;
f93bcada0f51 Fix bug when declaring data type directly derived from array type
laurent
parents: 307
diff changeset
   342
  symbol->array_spec_init->accept(*this);
f93bcada0f51 Fix bug when declaring data type directly derived from array type
laurent
parents: 307
diff changeset
   343
  current_basetypedeclaration = none_bd;
f93bcada0f51 Fix bug when declaring data type directly derived from array type
laurent
parents: 307
diff changeset
   344
f93bcada0f51 Fix bug when declaring data type directly derived from array type
laurent
parents: 307
diff changeset
   345
  if (array_is_derived)
f93bcada0f51 Fix bug when declaring data type directly derived from array type
laurent
parents: 307
diff changeset
   346
	s4o_incl.print("__DECLARE_DERIVED_TYPE(");
f93bcada0f51 Fix bug when declaring data type directly derived from array type
laurent
parents: 307
diff changeset
   347
  else
322
293967b9277d Fix bug with array attribute in structure declaration
laurent
parents: 310
diff changeset
   348
	s4o_incl.print("__DECLARE_ARRAY_TYPE(");
328
66cd5d9893dd Add support for finding type of a constant enumerated value and managing conflict between same identifiers defined in different enumerated data types
laurent
parents: 327
diff changeset
   349
  current_type_name->accept(*basedecl);
327
da78d0d93c75 Fix bug in declaring variable of enumerated type
laurent
parents: 322
diff changeset
   350
  s4o_incl.print(",");
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
   351
  current_basetypedeclaration = arraybasetypeincl_bd;
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   352
  symbol->array_spec_init->accept(*this);
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   353
  current_basetypedeclaration = none_bd;
309
f93bcada0f51 Fix bug when declaring data type directly derived from array type
laurent
parents: 307
diff changeset
   354
  if (!array_is_derived) {
322
293967b9277d Fix bug with array attribute in structure declaration
laurent
parents: 310
diff changeset
   355
	s4o_incl.print(",");
293967b9277d Fix bug with array attribute in structure declaration
laurent
parents: 310
diff changeset
   356
	current_basetypedeclaration = arraysubrange_bd;
293967b9277d Fix bug with array attribute in structure declaration
laurent
parents: 310
diff changeset
   357
	symbol->array_spec_init->accept(*this);
293967b9277d Fix bug with array attribute in structure declaration
laurent
parents: 310
diff changeset
   358
	current_basetypedeclaration = none_bd;
309
f93bcada0f51 Fix bug when declaring data type directly derived from array type
laurent
parents: 307
diff changeset
   359
  }
221
c6aed7e5f070 Adding support for flags on Function Block variables for marking which variable must be debugged, retained or is forced
laurent
parents: 178
diff changeset
   360
  s4o_incl.print(")\n");
322
293967b9277d Fix bug with array attribute in structure declaration
laurent
parents: 310
diff changeset
   361
328
66cd5d9893dd Add support for finding type of a constant enumerated value and managing conflict between same identifiers defined in different enumerated data types
laurent
parents: 327
diff changeset
   362
  current_type_name = NULL;
310
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   363
  current_typedefinition = none_td;
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   364
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   365
  return NULL;
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   366
}
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   367
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 139
diff changeset
   368
/* array_specification [ASSIGN array_initialization] */
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   369
/* array_initialization may be NULL ! */
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   370
void *visit(array_spec_init_c *symbol) {
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   371
  TRACE("array_spec_init_c");
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 139
diff changeset
   372
  
322
293967b9277d Fix bug with array attribute in structure declaration
laurent
parents: 310
diff changeset
   373
  if (current_typedefinition == array_td) {
293967b9277d Fix bug with array attribute in structure declaration
laurent
parents: 310
diff changeset
   374
    switch (current_basetypedeclaration) {
293967b9277d Fix bug with array attribute in structure declaration
laurent
parents: 310
diff changeset
   375
	  case arrayderiveddeclaration_bd:
293967b9277d Fix bug with array attribute in structure declaration
laurent
parents: 310
diff changeset
   376
	    array_is_derived = dynamic_cast<identifier_c *>(symbol->array_specification) != NULL;
293967b9277d Fix bug with array attribute in structure declaration
laurent
parents: 310
diff changeset
   377
	    break;
293967b9277d Fix bug with array attribute in structure declaration
laurent
parents: 310
diff changeset
   378
	  default:
293967b9277d Fix bug with array attribute in structure declaration
laurent
parents: 310
diff changeset
   379
	    if (array_is_derived)
293967b9277d Fix bug with array attribute in structure declaration
laurent
parents: 310
diff changeset
   380
		  symbol->array_specification->accept(*basedecl);
293967b9277d Fix bug with array attribute in structure declaration
laurent
parents: 310
diff changeset
   381
	    else
293967b9277d Fix bug with array attribute in structure declaration
laurent
parents: 310
diff changeset
   382
		  symbol->array_specification->accept(*this);
293967b9277d Fix bug with array attribute in structure declaration
laurent
parents: 310
diff changeset
   383
	    break;
293967b9277d Fix bug with array attribute in structure declaration
laurent
parents: 310
diff changeset
   384
    }
293967b9277d Fix bug with array attribute in structure declaration
laurent
parents: 310
diff changeset
   385
  }
293967b9277d Fix bug with array attribute in structure declaration
laurent
parents: 310
diff changeset
   386
  else {
293967b9277d Fix bug with array attribute in structure declaration
laurent
parents: 310
diff changeset
   387
	symbol->array_specification->accept(*basedecl);
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 139
diff changeset
   388
  }
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   389
  return NULL;
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   390
}
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   391
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   392
/* ARRAY '[' array_subrange_list ']' OF non_generic_type_name */
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   393
void *visit(array_specification_c *symbol) {
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   394
  switch (current_basetypedeclaration) {
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   395
    case arraybasetype_bd:
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   396
      symbol->non_generic_type_name->accept(*this);
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   397
      break;
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
   398
    case arraybasetypeincl_bd:
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
   399
      symbol->non_generic_type_name->accept(*basedecl);
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
   400
      break;
98
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   401
    case arraysubrange_bd:
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   402
      symbol->array_subrange_list->accept(*this);
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   403
      break;
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   404
    default:
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   405
      break;
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   406
  }
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   407
  return NULL;
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   408
}
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   409
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   410
/* helper symbol for array_specification */
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   411
/* array_subrange_list ',' subrange */
d0cdf1d00b74 Adding support for derived data types.
lbessard
parents: 70
diff changeset
   412
void *visit(array_subrange_list_c *symbol) {
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 350
diff changeset
   413
  print_list(symbol);
70
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   414
  return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   415
}
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   416
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   417
/*  TYPE type_declaration_list END_TYPE */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   418
void *visit(data_type_declaration_c *symbol) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   419
  TRACE("data_type_declaration_c");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   420
  symbol->type_declaration_list->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   421
  s4o.print("\n\n");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   422
  return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   423
}
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   424
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   425
/* helper symbol for data_type_declaration */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   426
void *visit(type_declaration_list_c *symbol) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   427
  TRACE("type_declaration_list_c");
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 139
diff changeset
   428
  return print_list_incl(symbol, "", "\n", "\n");
70
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   429
}
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   430
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   431
/*  simple_type_name ':' simple_spec_init */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   432
void *visit(simple_type_declaration_c *symbol) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   433
  TRACE("simple_type_declaration_c");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   434
307
6ea381792f59 Fix missing '(' when declaring new simple derived data type.
Mario de Sousa <msousa@fe.up.pt>
parents: 279
diff changeset
   435
  s4o_incl.print("__DECLARE_DERIVED_TYPE(");
327
da78d0d93c75 Fix bug in declaring variable of enumerated type
laurent
parents: 322
diff changeset
   436
  symbol->simple_type_name->accept(*basedecl);
da78d0d93c75 Fix bug in declaring variable of enumerated type
laurent
parents: 322
diff changeset
   437
  s4o_incl.print(",");
70
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   438
  symbol->simple_spec_init->accept(*this);
309
f93bcada0f51 Fix bug when declaring data type directly derived from array type
laurent
parents: 307
diff changeset
   439
  s4o_incl.print(")\n");
377
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 350
diff changeset
   440
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 350
diff changeset
   441
  if (search_base_type.type_is_subrange(symbol->simple_type_name)) {
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 350
diff changeset
   442
	s4o.print("#define __CHECK_");
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 350
diff changeset
   443
	current_type_name->accept(*this);
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 350
diff changeset
   444
	s4o.print(" __CHECK_");
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 350
diff changeset
   445
	symbol->simple_spec_init->accept(*this);
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 350
diff changeset
   446
	s4o.print("\n");
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 350
diff changeset
   447
  }
60b012b7793f Adding support for compiling direct array specification inside variable declaration
laurent
parents: 350
diff changeset
   448
70
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   449
  return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   450
}
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   451
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   452
/* simple_specification [ASSIGN constant] */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   453
//SYM_REF2(simple_spec_init_c, simple_specification, constant)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   454
// <constant> may be NULL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   455
void *visit(simple_spec_init_c *symbol) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   456
  TRACE("simple_spec_init_c");
121
9e8ce092e169 Adding support for POU struct definition in POUS.h
lbessard
parents: 98
diff changeset
   457
  symbol->simple_specification->accept(*basedecl);
70
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   458
  return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   459
}
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   460
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   461
#if 0
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   462
/*  subrange_type_name ':' subrange_spec_init */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   463
SYM_REF2(subrange_type_declaration_c, subrange_type_name, subrange_spec_init)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   464
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   465
/* subrange_specification ASSIGN signed_integer */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   466
SYM_REF2(subrange_spec_init_c, subrange_specification, signed_integer)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   467
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   468
/*  integer_type_name '(' subrange')' */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   469
SYM_REF2(subrange_specification_c, integer_type_name, subrange)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   470
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   471
/*  signed_integer DOTDOT signed_integer */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   472
SYM_REF2(subrange_c, lower_limit, upper_limit)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   473
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   474
/*  enumerated_type_name ':' enumerated_spec_init */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   475
SYM_REF2(enumerated_type_declaration_c, enumerated_type_name, enumerated_spec_init)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   476
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   477
/* enumerated_specification ASSIGN enumerated_value */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   478
SYM_REF2(enumerated_spec_init_c, enumerated_specification, enumerated_value)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   479
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   480
/* helper symbol for enumerated_specification->enumerated_spec_init */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   481
/* enumerated_value_list ',' enumerated_value */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   482
SYM_LIST(enumerated_value_list_c)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   483
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   484
/* enumerated_type_name '#' identifier */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   485
SYM_REF2(enumerated_value_c, type, value)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   486
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   487
/*  identifier ':' array_spec_init */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   488
SYM_REF2(array_type_declaration_c, identifier, array_spec_init)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   489
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   490
/* array_specification [ASSIGN array_initialization} */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   491
/* array_initialization may be NULL ! */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   492
SYM_REF2(array_spec_init_c, array_specification, array_initialization)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   493
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   494
/* ARRAY '[' array_subrange_list ']' OF non_generic_type_name */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   495
SYM_REF2(array_specification_c, array_subrange_list, non_generic_type_name)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   496
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   497
/* helper symbol for array_specification */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   498
/* array_subrange_list ',' subrange */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   499
SYM_LIST(array_subrange_list_c)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   500
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   501
/* array_initialization:  '[' array_initial_elements_list ']' */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   502
/* helper symbol for array_initialization */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   503
/* array_initial_elements_list ',' array_initial_elements */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   504
SYM_LIST(array_initial_elements_list_c)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   505
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   506
/* integer '(' [array_initial_element] ')' */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   507
/* array_initial_element may be NULL ! */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   508
SYM_REF2(array_initial_elements_c, integer, array_initial_element)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   509
#endif
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   510
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   511
/*  structure_type_name ':' structure_specification */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   512
//SYM_REF2(structure_type_declaration_c, structure_type_name, structure_specification)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   513
void *visit(structure_type_declaration_c *symbol) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   514
  TRACE("structure_type_declaration_c");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   515
310
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   516
  current_typedefinition = struct_td;
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   517
221
c6aed7e5f070 Adding support for flags on Function Block variables for marking which variable must be debugged, retained or is forced
laurent
parents: 178
diff changeset
   518
  s4o_incl.print("__DECLARE_STRUCT_TYPE(");
327
da78d0d93c75 Fix bug in declaring variable of enumerated type
laurent
parents: 322
diff changeset
   519
  symbol->structure_type_name->accept(*basedecl);
da78d0d93c75 Fix bug in declaring variable of enumerated type
laurent
parents: 322
diff changeset
   520
  s4o_incl.print(",");
70
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   521
  symbol->structure_specification->accept(*this);
327
da78d0d93c75 Fix bug in declaring variable of enumerated type
laurent
parents: 322
diff changeset
   522
  s4o_incl.print(")\n");
310
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   523
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   524
  current_typedefinition = none_td;
f111a6986c22 Fix bug when using an enumerated or subrange type to define a structure element
laurent
parents: 309
diff changeset
   525
70
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   526
  return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   527
}
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   528
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   529
/* structure_type_name ASSIGN structure_initialization */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   530
/* structure_initialization may be NULL ! */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   531
//SYM_REF2(initialized_structure_c, structure_type_name, structure_initialization)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   532
void *visit(initialized_structure_c *symbol) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   533
  TRACE("initialized_structure_c");
164
a0679c78143a Bug with structure of structure fixed
lbessard
parents: 160
diff changeset
   534
  
a0679c78143a Bug with structure of structure fixed
lbessard
parents: 160
diff changeset
   535
  symbol->structure_type_name->accept(*basedecl);
a0679c78143a Bug with structure of structure fixed
lbessard
parents: 160
diff changeset
   536
  
70
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   537
  return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   538
}
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   539
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   540
/* helper symbol for structure_declaration */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   541
/* structure_declaration:  STRUCT structure_element_declaration_list END_STRUCT */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   542
/* structure_element_declaration_list structure_element_declaration ';' */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   543
//SYM_LIST(structure_element_declaration_list_c)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   544
void *visit(structure_element_declaration_list_c *symbol) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   545
  TRACE("structure_element_declaration_list_c");
327
da78d0d93c75 Fix bug in declaring variable of enumerated type
laurent
parents: 322
diff changeset
   546
  s4o_incl.print("\n");
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 139
diff changeset
   547
  s4o_incl.indent_right();
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 139
diff changeset
   548
  s4o_incl.print(s4o_incl.indent_spaces);
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 139
diff changeset
   549
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 139
diff changeset
   550
  print_list_incl(symbol, "", s4o_incl.indent_spaces, "");
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 139
diff changeset
   551
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 139
diff changeset
   552
  s4o_incl.indent_left();
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 139
diff changeset
   553
  s4o_incl.print(s4o_incl.indent_spaces);
70
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   554
  return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   555
}
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   556
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   557
/*  structure_element_name ':' spec_init */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   558
//SYM_REF2(structure_element_declaration_c, structure_element_name, spec_init)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   559
void *visit(structure_element_declaration_c *symbol) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   560
  TRACE("structure_element_declaration_c");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   561
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   562
  symbol->spec_init->accept(*this);
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 139
diff changeset
   563
  s4o_incl.print(" ");
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 139
diff changeset
   564
  symbol->structure_element_name->accept(*basedecl);
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 139
diff changeset
   565
  s4o_incl.print(";\n");
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 139
diff changeset
   566
  s4o_incl.print(s4o.indent_spaces);
70
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   567
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   568
  return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   569
}
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   570
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   571
/* helper symbol for structure_initialization */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   572
/* structure_initialization: '(' structure_element_initialization_list ')' */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   573
/* structure_element_initialization_list ',' structure_element_initialization */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   574
//SYM_LIST(structure_element_initialization_list_c)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   575
void *visit(structure_element_initialization_list_c *symbol) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   576
  TRACE("structure_element_initialization_list_c");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   577
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   578
  // TODO ???
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 139
diff changeset
   579
  //ERROR;
70
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   580
  return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   581
}
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   582
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   583
/*  structure_element_name ASSIGN value */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   584
//SYM_REF2(structure_element_initialization_c, structure_element_name, value)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   585
void *visit(structure_element_initialization_c *symbol) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   586
  TRACE("structure_element_initialization_c");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   587
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   588
  // TODO ???
160
59d58f5e6caa Adding support for compiling struct data types
lbessard
parents: 139
diff changeset
   589
  //ERROR;
70
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   590
  return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   591
}
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   592
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   593
#if 0
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   594
/*  string_type_name ':' elementary_string_type_name string_type_declaration_size string_type_declaration_init */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   595
/*
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   596
 * NOTE:
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   597
 * (Summary: Contrary to what is expected, the
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   598
 *           string_type_declaration_c is not used to store
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   599
 *           simple string type declarations that do not include
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   600
 *           size limits.
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   601
 *           For e.g.:
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   602
 *             str1_type: STRING := "hello!"
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   603
 *           will be stored in a simple_type_declaration_c
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   604
 *           instead of a string_type_declaration_c.
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   605
 *           The following:
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   606
 *             str2_type: STRING [64] := "hello!"
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   607
 *           will be stored in a sring_type_declaration_c
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   608
 *
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   609
 *           Read on for why this is done...
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   610
 * End Summary)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   611
 *
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   612
 * According to the spec, the valid construct
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   613
 * TYPE new_str_type : STRING := "hello!"; END_TYPE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   614
 * has two possible routes to type_declaration...
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   615
 *
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   616
 * Route 1:
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   617
 * type_declaration: single_element_type_declaration
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   618
 * single_element_type_declaration: simple_type_declaration
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   619
 * simple_type_declaration: identifier ':' simple_spec_init
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   620
 * simple_spec_init: simple_specification ASSIGN constant
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   621
 * (shift:  identifier <- 'new_str_type')
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   622
 * simple_specification: elementary_type_name
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   623
 * elementary_type_name: STRING
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   624
 * (shift: elementary_type_name <- STRING)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   625
 * (reduce: simple_specification <- elementary_type_name)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   626
 * (shift: constant <- "hello!")
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   627
 * (reduce: simple_spec_init: simple_specification ASSIGN constant)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   628
 * (reduce: ...)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   629
 *
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   630
 *
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   631
 * Route 2:
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   632
 * type_declaration: string_type_declaration
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   633
 * string_type_declaration: identifier ':' elementary_string_type_name string_type_declaration_size string_type_declaration_init
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   634
 * (shift:  identifier <- 'new_str_type')
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   635
 * elementary_string_type_name: STRING
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   636
 * (shift: elementary_string_type_name <- STRING)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   637
 * (shift: string_type_declaration_size <-  empty )
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   638
 * string_type_declaration_init: ASSIGN character_string
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   639
 * (shift: character_string <- "hello!")
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   640
 * (reduce: string_type_declaration_init <- ASSIGN character_string)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   641
 * (reduce: string_type_declaration <- identifier ':' elementary_string_type_name string_type_declaration_size string_type_declaration_init )
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   642
 * (reduce: type_declaration <- string_type_declaration)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   643
 *
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   644
 *
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   645
 * At first glance it seems that removing route 1 would make
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   646
 * the most sense. Unfortunately the construct 'simple_spec_init'
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   647
 * shows up multiple times in other rules, so changing this construct
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   648
 * would also mean changing all the rules in which it appears.
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   649
 * I (Mario) therefore chose to remove route 2 instead. This means
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   650
 * that the above declaration gets stored in a
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   651
 * simple_type_declaration_c, and not in a string_type_declaration_c
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   652
 * as would be expected!
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   653
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   654
/*  string_type_name ':' elementary_string_type_name string_type_declaration_size string_type_declaration_init */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   655
SYM_REF4(string_type_declaration_c,	string_type_name,
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   656
					elementary_string_type_name,
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   657
					string_type_declaration_size,
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   658
					string_type_declaration_init) /* may be == NULL! */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   659
#endif
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   660
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   661
/*********************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   662
/* B 1.4 - Variables */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   663
/*********************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   664
  /* done in base class(es) */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   665
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   666
/********************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   667
/* B.1.4.1   Directly Represented Variables */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   668
/********************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   669
// direct_variable: direct_variable_token	{$$ = new direct_variable_c($1);};
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   670
void *visit(direct_variable_c *symbol) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   671
  TRACE("direct_variable_c");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   672
  /* Do not use print_token() as it will change everything into uppercase */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   673
  if (strlen(symbol->value) == 0) ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   674
  return s4o.printlocation(symbol->value + 1);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   675
}
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   676
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   677
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   678
/*************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   679
/* B.1.4.2   Multi-element Variables */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   680
/*************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   681
  /* done in base class(es) */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   682
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   683
/******************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   684
/* B 1.4.3 - Declaration & Initialisation */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   685
/******************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   686
  /* leave for derived classes... */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   687
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   688
/**************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   689
/* B.1.5 - Program organization units */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   690
/**************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   691
/***********************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   692
/* B 1.5.1 - Functions */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   693
/***********************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   694
  /* leave for derived classes... */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   695
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   696
/*****************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   697
/* B 1.5.2 - Function Blocks */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   698
/*****************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   699
  /* leave for derived classes... */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   700
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   701
/**********************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   702
/* B 1.5.3 - Programs */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   703
/**********************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   704
  /* leave for derived classes... */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   705
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   706
/*********************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   707
/* B.1.6  Sequential function chart elements */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   708
/*********************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   709
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   710
/********************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   711
/* B 1.7 Configuration elements */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   712
/********************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   713
  /* leave for derived classes... */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   714
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   715
/****************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   716
/* B.2 - Language IL (Instruction List) */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   717
/****************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   718
/***********************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   719
/* B 2.1 Instructions and Operands */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   720
/***********************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   721
  /* leave for derived classes... */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   722
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   723
/*******************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   724
/* B 2.2 Operators */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   725
/*******************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   726
  /* leave for derived classes... */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   727
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   728
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   729
/***************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   730
/* B.3 - Language ST (Structured Text) */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   731
/***************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   732
/***********************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   733
/* B 3.1 - Expressions */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   734
/***********************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   735
  /* leave for derived classes... */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   736
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   737
/********************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   738
/* B 3.2 Statements */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   739
/********************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   740
  /* leave for derived classes... */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   741
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   742
/*********************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   743
/* B 3.2.1 Assignment Statements */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   744
/*********************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   745
  /* leave for derived classes... */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   746
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   747
/*****************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   748
/* B 3.2.2 Subprogram Control Statements */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   749
/*****************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   750
  /* leave for derived classes... */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   751
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   752
/********************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   753
/* B 3.2.3 Selection Statements */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   754
/********************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   755
  /* leave for derived classes... */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   756
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   757
/********************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   758
/* B 3.2.4 Iteration Statements */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   759
/********************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   760
  /* leave for derived classes... */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   761
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   762
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   763
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   764
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   765
}; /* generate_c_typedecl_c */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   766
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   767
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   768