stage4/generate_c/generate_location_list.cc
author mario
Thu, 04 Jun 2009 14:17:08 +0200
changeset 185 39c23046dad6
parent 70 e1f0ebd2d9ec
child 279 c0453b7f99df
permissions -rw-r--r--
Newer versions of g++ require access controls to be correct!
70
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
     1
/*
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
     2
 * (c) 2007 Mario de Sousa and Laurent Bessard
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
     3
 *
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
     4
 * Offered to the public under the terms of the GNU General Public License
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
     5
 * as published by the Free Software Foundation; either version 2 of the
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
     6
 * License, or (at your option) any later version.
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
     7
 *
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
     8
 * This program is distributed in the hope that it will be useful, but
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
     9
 * WITHOUT ANY WARRANTY; without even the implied warranty of
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    10
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    11
 * Public License for more details.
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    12
 *
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    13
 * This code is made available on the understanding that it will not be
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    14
 * used in safety-critical situations without a full and competent review.
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    15
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    16
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    17
/*
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    18
 * An IEC 61131-3 IL and ST compiler.
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    19
 *
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    20
 * Based on the
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    21
 * FINAL DRAFT - IEC 61131-3, 2nd Ed. (2001-12-10)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    22
 *
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    23
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    24
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    25
/*
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    26
 * This is one of the versions available for the 4th stage.
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    27
 *
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    28
 * This 4th stage generates a c++ source program equivalent
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    29
 * to the IL and ST code.
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    30
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    31
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    32
//#include <stdio.h>  /* required for NULL */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    33
//#include <string>
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    34
//#include <iostream>
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    35
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    36
//#include "../../util/symtable.hh"
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    37
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    38
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    39
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    40
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    41
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    42
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    43
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    44
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    45
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    46
/***********************************************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    47
/***********************************************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    48
/***********************************************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    49
/***********************************************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    50
/***********************************************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    51
/***********************************************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    52
/***********************************************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    53
/***********************************************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    54
185
39c23046dad6 Newer versions of g++ require access controls to be correct!
mario
parents: 70
diff changeset
    55
class generate_location_list_c: public iterator_visitor_c {
70
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    56
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    57
  protected:
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    58
    stage4out_c &s4o;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    59
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    60
  private:
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    61
    symbol_c *current_var_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    62
    generate_c_base_c *generate_c_base;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    63
    search_base_type_c search_base_type;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    64
    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    65
  public:
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    66
    generate_location_list_c(stage4out_c *s4o_ptr): s4o(*s4o_ptr) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    67
      generate_c_base = new generate_c_base_c(s4o_ptr);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    68
      current_var_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    69
    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    70
    ~generate_location_list_c(void) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    71
      delete generate_c_base;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    72
    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    73
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    74
    bool test_location_type(symbol_c *direct_variable) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    75
      
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    76
      token_c *location = dynamic_cast<token_c *>(direct_variable);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    77
      
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    78
      if (location == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    79
        /* invalid identifiers... */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    80
        return false;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    81
      
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    82
      switch (location->value[2]) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    83
        case 'X': // bit
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    84
          if (typeid(*current_var_type_symbol) == typeid(bool_type_name_c)) return true;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    85
          break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    86
        case 'B': // Byte, 8 bits
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    87
          if (typeid(*current_var_type_symbol) == typeid(sint_type_name_c)) return true;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    88
          if (typeid(*current_var_type_symbol) == typeid(usint_type_name_c)) return true;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    89
          if (typeid(*current_var_type_symbol) == typeid(string_type_name_c)) return true;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    90
          if (typeid(*current_var_type_symbol) == typeid(byte_type_name_c)) return true;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    91
          break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    92
        case 'W': // Word, 16 bits
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    93
          if (typeid(*current_var_type_symbol) == typeid(int_type_name_c)) return true;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    94
          if (typeid(*current_var_type_symbol) == typeid(uint_type_name_c)) return true;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    95
          if (typeid(*current_var_type_symbol) == typeid(word_type_name_c)) return true;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    96
          if (typeid(*current_var_type_symbol) == typeid(wstring_type_name_c)) return true;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    97
          break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    98
        case 'D': // Double, 32 bits
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    99
          if (typeid(*current_var_type_symbol) == typeid(dint_type_name_c)) return true;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   100
          if (typeid(*current_var_type_symbol) == typeid(udint_type_name_c)) return true;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   101
          if (typeid(*current_var_type_symbol) == typeid(real_type_name_c)) return true;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   102
          if (typeid(*current_var_type_symbol) == typeid(dword_type_name_c)) return true;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   103
          break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   104
        case 'L': // Long, 64 bits
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   105
          if (typeid(*current_var_type_symbol) == typeid(lint_type_name_c)) return true;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   106
          if (typeid(*current_var_type_symbol) == typeid(ulint_type_name_c)) return true;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   107
          if (typeid(*current_var_type_symbol) == typeid(lreal_type_name_c)) return true;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   108
          if (typeid(*current_var_type_symbol) == typeid(lword_type_name_c)) return true;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   109
          break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   110
        default:
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   111
          if (typeid(*current_var_type_symbol) == typeid(bool_type_name_c)) return true;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   112
      }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   113
      return false;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   114
    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   115
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   116
/********************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   117
/* B.1.4.1   Directly Represented Variables */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   118
/********************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   119
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   120
    void *visit(direct_variable_c *symbol) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   121
      if (current_var_type_symbol) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   122
        s4o.print("__LOCATED_VAR(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   123
        current_var_type_symbol->accept(*generate_c_base);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   124
        s4o.print(",");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   125
        /* Do not use print_token() as it will change everything into uppercase */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   126
        s4o.printlocation((symbol->value)+1);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   127
        s4o.print(",");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   128
        s4o.printlocation_comasep((symbol->value)+1);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   129
        s4o.print(")\n");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   130
      }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   131
      return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   132
    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   133
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.4.3   Declaration and initilization  */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   137
/********************************************/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   138
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   139
/*  [variable_name] location ':' located_var_spec_init */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   140
/* variable_name -> may be NULL ! */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   141
//SYM_REF4(located_var_decl_c, variable_name, location, located_var_spec_init, unused)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   142
    void *visit(located_var_decl_c *symbol) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   143
        current_var_type_symbol = spec_init_sperator_c::get_spec(symbol->located_var_spec_init);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   144
        if (current_var_type_symbol == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   145
          ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   146
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   147
        current_var_type_symbol = (symbol_c *)(current_var_type_symbol->accept(search_base_type));
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   148
        if (current_var_type_symbol == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   149
          ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   150
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   151
        symbol->location->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   152
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   153
        current_var_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   154
        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   155
    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   156
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   157
/*| global_var_spec ':' [located_var_spec_init|function_block_type_name] */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   158
/* type_specification ->may be NULL ! */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   159
//SYM_REF2(global_var_decl_c, global_var_spec, type_specification)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   160
    void *visit(global_var_decl_c *symbol) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   161
        current_var_type_symbol = spec_init_sperator_c::get_spec(symbol->type_specification);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   162
        if (current_var_type_symbol == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   163
          ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   164
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   165
        current_var_type_symbol = (symbol_c *)(current_var_type_symbol->accept(search_base_type));
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   166
        if (current_var_type_symbol == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   167
          ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   168
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   169
        symbol->global_var_spec->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   170
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   171
        current_var_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   172
        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   173
    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   174
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   175
/*  AT direct_variable */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   176
//SYM_REF2(location_c, direct_variable, unused)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   177
    void *visit(location_c *symbol) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   178
      if (test_location_type(symbol->direct_variable))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   179
        symbol->direct_variable->accept(*this); 
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   180
      else
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   181
        ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   182
      return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   183
    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   184
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   185
}; /* generate_location_list_c */