absyntax_utils/get_datatype_info.cc
changeset 778 44e02a88f1e7
parent 727 db5881e6facd
child 832 8cd104e483c6
equal deleted inserted replaced
777:e74a882c8d22 778:44e02a88f1e7
   101 get_datatype_id_c *get_datatype_id_c::singleton = NULL;
   101 get_datatype_id_c *get_datatype_id_c::singleton = NULL;
   102 
   102 
   103 
   103 
   104 
   104 
   105 
   105 
       
   106 /***********************************************************************/
       
   107 /***********************************************************************/
       
   108 
       
   109 
       
   110 /* A small helper class, to transform elementary data type to string.
       
   111  * this allows us to generate more relevant error messages...
       
   112  */
       
   113 
       
   114 class get_datatype_id_str_c: public null_visitor_c {
       
   115   protected:
       
   116      get_datatype_id_str_c(void)  {};
       
   117     ~get_datatype_id_str_c(void) {};
       
   118 
       
   119   private:
       
   120     /* singleton class! */
       
   121     static get_datatype_id_str_c *singleton;
       
   122 
       
   123   public:
       
   124     static const char *get_id_str(symbol_c *symbol) {
       
   125       if (NULL == singleton)    singleton = new get_datatype_id_str_c;
       
   126       if (NULL == singleton)    ERROR;
       
   127       const char *res           = (const char *)symbol->accept(*singleton);
       
   128       if (NULL == res)          ERROR;
       
   129       return res;
       
   130     }
       
   131 
       
   132 
       
   133     /*************************/
       
   134     /* B.1 - Common elements */
       
   135     /*************************/
       
   136     /*******************************************/
       
   137     /* B 1.1 - Letters, digits and identifiers */
       
   138     /*******************************************/
       
   139     void *visit(identifier_c *symbol) {return (void *)symbol->value;};
       
   140 
       
   141     /***********************************/
       
   142     /* B 1.3.1 - Elementary Data Types */
       
   143     /***********************************/
       
   144     void *visit(time_type_name_c        *symbol) {return (void *)"TIME";        };
       
   145     void *visit(bool_type_name_c        *symbol) {return (void *)"BOOL";        };
       
   146     void *visit(sint_type_name_c        *symbol) {return (void *)"SINT";        };
       
   147     void *visit(int_type_name_c         *symbol) {return (void *)"INT";         };
       
   148     void *visit(dint_type_name_c        *symbol) {return (void *)"DINT";        };
       
   149     void *visit(lint_type_name_c        *symbol) {return (void *)"LINT";        };
       
   150     void *visit(usint_type_name_c       *symbol) {return (void *)"USINT";       };
       
   151     void *visit(uint_type_name_c        *symbol) {return (void *)"UINT";        };
       
   152     void *visit(udint_type_name_c       *symbol) {return (void *)"UDINT";       };
       
   153     void *visit(ulint_type_name_c       *symbol) {return (void *)"ULINT";       };
       
   154     void *visit(real_type_name_c        *symbol) {return (void *)"REAL";        };
       
   155     void *visit(lreal_type_name_c       *symbol) {return (void *)"LREAL";       };
       
   156     void *visit(date_type_name_c        *symbol) {return (void *)"DATE";        };
       
   157     void *visit(tod_type_name_c         *symbol) {return (void *)"TOD";         };
       
   158     void *visit(dt_type_name_c          *symbol) {return (void *)"DT";          };
       
   159     void *visit(byte_type_name_c        *symbol) {return (void *)"BYTE";        };
       
   160     void *visit(word_type_name_c        *symbol) {return (void *)"WORD";        };
       
   161     void *visit(lword_type_name_c       *symbol) {return (void *)"LWORD";       };
       
   162     void *visit(dword_type_name_c       *symbol) {return (void *)"DWORD";       };
       
   163     void *visit(string_type_name_c      *symbol) {return (void *)"STRING";      };
       
   164     void *visit(wstring_type_name_c     *symbol) {return (void *)"WSTRING";     };
       
   165 
       
   166     void *visit(safetime_type_name_c    *symbol) {return (void *)"SAFETIME";    };
       
   167     void *visit(safebool_type_name_c    *symbol) {return (void *)"SAFEBOOL";    };
       
   168     void *visit(safesint_type_name_c    *symbol) {return (void *)"SAFESINT";    };
       
   169     void *visit(safeint_type_name_c     *symbol) {return (void *)"SAFEINT";     };
       
   170     void *visit(safedint_type_name_c    *symbol) {return (void *)"SAFEDINT";    };
       
   171     void *visit(safelint_type_name_c    *symbol) {return (void *)"SAFELINT";    };
       
   172     void *visit(safeusint_type_name_c   *symbol) {return (void *)"SAFEUSINT";   };
       
   173     void *visit(safeuint_type_name_c    *symbol) {return (void *)"SAFEUINT";    };
       
   174     void *visit(safeudint_type_name_c   *symbol) {return (void *)"SAFEUDINT";   };
       
   175     void *visit(safeulint_type_name_c   *symbol) {return (void *)"SAFEULINT";   };
       
   176     void *visit(safereal_type_name_c    *symbol) {return (void *)"SAFEREAL";    };
       
   177     void *visit(safelreal_type_name_c   *symbol) {return (void *)"SAFELREAL";   };
       
   178     void *visit(safedate_type_name_c    *symbol) {return (void *)"SAFEDATE";    };
       
   179     void *visit(safetod_type_name_c     *symbol) {return (void *)"SAFETOD";     };
       
   180     void *visit(safedt_type_name_c      *symbol) {return (void *)"SAFEDT";      };
       
   181     void *visit(safebyte_type_name_c    *symbol) {return (void *)"SAFEBYTE";    };
       
   182     void *visit(safeword_type_name_c    *symbol) {return (void *)"SAFEWORD";    };
       
   183     void *visit(safelword_type_name_c   *symbol) {return (void *)"SAFELWORD";   };
       
   184     void *visit(safedword_type_name_c   *symbol) {return (void *)"SAFEDWORD";   };
       
   185     void *visit(safestring_type_name_c  *symbol) {return (void *)"SAFESTRING";  };
       
   186     void *visit(safewstring_type_name_c *symbol) {return (void *)"SAFEWSTRING"; };
       
   187 
       
   188     /********************************/
       
   189     /* B 1.3.3 - Derived data types */
       
   190     /********************************/
       
   191     /*  simple_type_name ':' simple_spec_init */
       
   192     void *visit(simple_type_declaration_c *symbol)      {return symbol->simple_type_name->accept(*this);}
       
   193     /*  subrange_type_name ':' subrange_spec_init */
       
   194     void *visit(subrange_type_declaration_c *symbol)    {return symbol->subrange_type_name->accept(*this);}
       
   195     /*  enumerated_type_name ':' enumerated_spec_init */
       
   196     void *visit(enumerated_type_declaration_c *symbol)  {return symbol->enumerated_type_name->accept(*this);}
       
   197     /*  identifier ':' array_spec_init */
       
   198     void *visit(array_type_declaration_c *symbol)       {return symbol->identifier->accept(*this);}
       
   199     /*  structure_type_name ':' structure_specification */
       
   200     void *visit(structure_type_declaration_c *symbol)   {return symbol->structure_type_name->accept(*this);}
       
   201     /*  string_type_name ':' elementary_string_type_name string_type_declaration_size string_type_declaration_init */
       
   202     void *visit(string_type_declaration_c *symbol)      {return symbol->string_type_name->accept(*this);}
       
   203     
       
   204     /*****************************/
       
   205     /* B 1.5.2 - Function Blocks */
       
   206     /*****************************/
       
   207     /*  FUNCTION_BLOCK derived_function_block_name io_OR_other_var_declarations function_block_body END_FUNCTION_BLOCK */
       
   208     void *visit(function_block_declaration_c *symbol)      {return symbol->fblock_name->accept(*this);}    
       
   209 };
       
   210 
       
   211 get_datatype_id_str_c *get_datatype_id_str_c::singleton = NULL;
       
   212 
   106 
   213 
   107 
   214 
   108 /**********************************************************/
   215 /**********************************************************/
   109 /**********************************************************/
   216 /**********************************************************/
   110 /**********************************************************/
   217 /**********************************************************/
   115 /*****                                                *****/
   222 /*****                                                *****/
   116 /**********************************************************/
   223 /**********************************************************/
   117 /**********************************************************/
   224 /**********************************************************/
   118 /**********************************************************/
   225 /**********************************************************/
   119 
   226 
   120 
   227 const char *get_datatype_info_c::get_id_str(symbol_c *datatype) {
   121 
   228   return get_datatype_id_str_c::get_id_str(datatype);
   122 symbol_c *get_datatype_info_c::get_datatype_id(symbol_c *datatype) {
   229 }
       
   230 
       
   231 
       
   232 symbol_c *get_datatype_info_c::get_id(symbol_c *datatype) {
   123   return get_datatype_id_c::get_id(datatype);
   233   return get_datatype_id_c::get_id(datatype);
   124 }
   234 }
   125 
   235 
   126 
   236 
   127 bool get_datatype_info_c::is_type_equal(symbol_c *first_type, symbol_c *second_type) {
   237 bool get_datatype_info_c::is_type_equal(symbol_c *first_type, symbol_c *second_type) {