vrq
cdatatype.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Copyright (C) 1997-2010, Mark Hummel
3  * This file is part of Vrq.
4  *
5  * Vrq is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * Vrq is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301 USA
19  *****************************************************************************
20  */
21 /******************************************************************************
22  *
23  *
24  * cdatatype.h
25  * - abstract class for data types
26  *
27  *
28  ******************************************************************************
29  */
30 
31 #ifndef CDATATYPE_H
32 #define CDATATYPE_H
33 
34 #include <list>
35 #include "cobject.h"
36 
37 class CNode;
38 
47  eREG,
51  eBIT,
52  eINT,
65 };
66 #if defined CDATATYPE_CC
67 
70 const char* varDataTypeName[] = {
71  "",
72  "real",
73  "shortreal",
74  "realtime",
75  "reg",
76  "time",
77  "logic",
78  "integer",
79  "bit",
80  "int",
81  "byte",
82  "shortint",
83  "longint",
84  "event",
85  "struct",
86  "union",
87  "union tagged",
88  "enum",
89  "class",
90  "proxy",
91  "interface type",
92  "string",
93 };
94 #else // CDATATYPE_CC
95 extern const char* varDataTypeName[];
96 #endif // CDATATYPE_CC
97 
102  eU,
103  eR,
104  eS,
105  eE,
106  eB
107 };
108 
112 class CDataType : public CObject
113 {
114 public:
115 private:
116  int const_;
117  VarDataType_t varDataType;
118  int numberOfPackedDimensions;
119  vector<CNode*> packedRange;
120 public:
128  CDataType( VarDataType_t t, list<CNode*> packedList );
133  virtual CDataType* Clone( CObstack* heap ) = 0;
138  virtual void SetVarDataType( VarDataType_t v ) { varDataType = v; }
143  virtual VarDataType_t GetVarDataType() const { return varDataType; }
148  virtual const char* GetVarDataTypeName() const { return varDataTypeName[varDataType]; }
154  virtual void SetConst( int v ) { const_ = v; }
159  virtual int GetConst() const { return const_; }
164  virtual int GetTwoState() const = 0;
169  virtual int GetSigned() const = 0;
174  virtual NodeType_t GetNodeType( void ) const = 0;
180  virtual bool Validate( string& errorMessage ) { return true; }
188  virtual int IsBaseWidthConstant( void ) const = 0;
196  virtual int IsBaseWidthVolatile( void ) const = 0;
203  virtual int IsBaseWidthEvaluateable( void ) const = 0;
208  virtual INT32 GetBaseWidth( void ) const = 0;
213  virtual CNode* GetBaseWidthExp() const = 0;
219  virtual int IsScalar() const;
225  virtual int IsVector() const = 0;
231  virtual int IsPacked() const = 0;
238  virtual int IsPackedWidthConstant( void ) const;
245  virtual int IsPackedWidthVolatile( void ) const;
251  virtual int IsPackedWidthEvaluateable( void ) const;
257  virtual CNode* GetPackedMsb() const;
263  virtual CNode* GetPackedLsb() const;
269  virtual CNode* GetPackedRange() const;
274  virtual INT32 GetPackedWidth( void ) const;
279  virtual CNode* GetPackedWidthExp() const;
284  virtual int PackedWidthDirection( void ) const;
289  virtual INT32 GetNumberOfPackedDimensions( void ) const
290  { return numberOfPackedDimensions;}
296  virtual CNode* GetPackedMsi( INT32 dim ) const;
302  virtual CNode* GetPackedLsi( INT32 dim ) const;
308  virtual CNode* GetPackedRange( INT32 dim ) const
309  { return packedRange[dim]; }
310 
311 
316  virtual void Dump( FILE* f ) const = 0;
324  virtual void PreVisit1( int (*callback)(CNode*,void*), void* data );
331  virtual void PostVisit1( void (*callback)(CNode*,void*), void* data );
340  virtual void PostSubVisit1( CNode* (*callback)(CNode*, void*), void* data );
341 protected:
348  void Copy( CObstack* heap, const CDataType& o );
349 private:
350  /*
351  * disable copy constructors
352  */
353  CDataType( const CDataType& o );
354 
355 };
356 
357 #endif // CDATATYPE_H
358 
virtual void SetVarDataType(VarDataType_t v)
Set declaration&#39;s variable data type.
Definition: cdatatype.h:138
int declaration
Definition: cdatatype.h:52
virtual void SetConst(int v)
Set declaration&#39;s const property.
Definition: cdatatype.h:154
undefined
Definition: cdatatype.h:102
virtual int IsScalar() const
Determine if complete data structure is a scalar.
signed bit vector, includes integer
Definition: cdatatype.h:104
shortreal declaration
Definition: cdatatype.h:45
virtual int IsPackedWidthEvaluateable(void) const
Determine if packed or vector width of declaration can be evaluated.
virtual int PackedWidthDirection(void) const
Evaluate current decl width direction.
tagged union declaration
Definition: cdatatype.h:59
longint declaration
Definition: cdatatype.h:55
virtual INT32 GetBaseWidth(void) const =0
Evaluate base width (sans packed dimensions) of declaration.
realtime declaration
Definition: cdatatype.h:46
virtual CNode * GetPackedMsb() const
Get expression for declaration&#39;s msb.
virtual VarDataType_t GetVarDataType() const
Get declaration&#39;s variable data type.
Definition: cdatatype.h:143
proxy declaration
Definition: cdatatype.h:62
long INT32
Short cut for signed 32 bit integer.
Definition: glue.h:38
virtual NodeType_t GetNodeType(void) const =0
Get data type.
register declaration
Definition: cdatatype.h:47
virtual int GetConst() const
Get declaration&#39;s const property.
Definition: cdatatype.h:159
virtual CNode * GetBaseWidthExp() const =0
Get expression for datatype&#39;s base width (sans packed dimensions)
virtual CDataType * Clone(CObstack *heap)=0
Create a new copy with a deep copy.
virtual CNode * GetPackedLsi(INT32 dim) const
Get expression tree for lower limit of packed array dimension.
virtual void Dump(FILE *f) const =0
Dump data type info to file descriptor.
Base class for describing data types.
Definition: cdatatype.h:112
byte declaration
Definition: cdatatype.h:53
real declaration
Definition: cdatatype.h:44
unsigned bit vector
Definition: cdatatype.h:106
virtual int IsPacked() const =0
Determine if complete data structure is packed.
virtual CNode * GetPackedRange() const
Get expression for datatype&#39;s overall packed or vector range (msb/lsb)
virtual CNode * GetPackedLsb() const
Get expression for declaration&#39;s lsb.
Bulk object allocation object.
Definition: cobstack.h:46
Primary data structure representing parse tree nodes.
Definition: cnode.h:197
CDataType(VarDataType_t t)
Create data type instance.
integer declaration
Definition: cdatatype.h:50
virtual int GetTwoState() const =0
Get declaration&#39;s 2 state property.
virtual bool Validate(string &errorMessage)
Validate data structure.
Definition: cdatatype.h:180
virtual INT32 GetPackedWidth(void) const
Evaluate packed or vector width of declaration.
string declaration
Definition: cdatatype.h:64
integer declaration
Definition: cdatatype.h:51
virtual int IsBaseWidthConstant(void) const =0
Determine if base width (sans packed dimensions) of declaration is constant, ie dependent upon only c...
virtual int IsBaseWidthEvaluateable(void) const =0
Determine if base width (sans packed dimensions) of declaration can be evaluated. ...
virtual int IsPackedWidthConstant(void) const
Determine if packed or vector width of declaration is constant, ie dependent upon only constants and ...
virtual int IsVector() const =0
Determine if complete data structure is a vector.
virtual int IsPackedWidthVolatile(void) const
Determine if packed or vector width of declaration is volatile, ie depend upon parameters or variable...
virtual void PreVisit1(int(*callback)(CNode *, void *), void *data)
Walk tree invoking callback on each node before children have been visited.
class declaration
Definition: cdatatype.h:61
shortint declaration
Definition: cdatatype.h:54
virtual INT32 GetNumberOfPackedDimensions(void) const
Get number of packed dimensions of declaration.
Definition: cdatatype.h:289
event - have width 0
Definition: cdatatype.h:105
Base class for vrq objects.
Definition: cobject.h:41
const char * varDataTypeName[]
Array to convert DataType_t to character string.
Definition: cdatatype.h:70
virtual CNode * GetPackedRange(INT32 dim) const
Get expression for range of packed array for dimension.
Definition: cdatatype.h:308
interface declaration
Definition: cdatatype.h:63
real - have width 0
Definition: cdatatype.h:103
virtual CNode * GetPackedMsi(INT32 dim) const
Get expression tree for upper limit of given packed array dimension.
virtual int IsBaseWidthVolatile(void) const =0
Determine if base width (sans packed dimensions) of declaration is volatile, ie depend upon parameter...
struct declaration
Definition: cdatatype.h:57
no type declaration
Definition: cdatatype.h:43
event declaration
Definition: cdatatype.h:56
VarDataType_t
Variable data types.
Definition: cdatatype.h:42
NodeType_t
Expression node type.
Definition: cdatatype.h:101
time declaration
Definition: cdatatype.h:48
virtual void PostSubVisit1(CNode *(*callback)(CNode *, void *), void *data)
Walk tree invoking callback on each node after children have been visited.
virtual CNode * GetPackedWidthExp() const
Get expression for datatype&#39;s overall packed or vector width.
virtual void PostVisit1(void(*callback)(CNode *, void *), void *data)
Walk tree invoking callback on each node after children have been visited.
enum declaration
Definition: cdatatype.h:60
virtual const char * GetVarDataTypeName() const
Get declaration&#39;s variable data type as a string.
Definition: cdatatype.h:148
logic declaration
Definition: cdatatype.h:49
union declaration
Definition: cdatatype.h:58
virtual int GetSigned() const =0
Get declartion&#39;s signed property.
void Copy(CObstack *heap, const CDataType &o)
Perform deep copy of given object to this one This should never be call directly, only by subclasses...