00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef CPARAM_HPP
00032 #define CPARAM_HPP
00033
00034 #include <stdio.h>
00035 #include "glue.h"
00036 #include "cnode.h"
00037 #include "cdecl.h"
00038
00039
00040 class CNode;
00041
00042
00046 class CParam: public CDecl
00047 {
00048 private:
00049 CNode* expression;
00050 int specify;
00051 Decl_t subType;
00052 int inlined;
00053
00054 public:
00062 CParam( CSymbol* symbol, Coord_t* aLoc,
00063 Decl_t type, CDataType* dataType );
00069 virtual CDecl* Clone( CObstack* heap );
00075 virtual int IsWidthConstant( void );
00081 virtual int IsWidthVolatile( void );
00086 virtual int IsWidthEvaluateable( void );
00091 virtual INT32 GetWidth( void );
00096 virtual CNode* GetWidthExp( void );
00101 virtual int WidthDirection( void );
00106 void Specify( int v ) { specify = v; }
00111 int Specify( void ) { return specify; }
00116 void SetExpression( CNode* aExp );
00121 CNode* GetExpression( void );
00126 virtual NodeType_t GetNodeType( void );
00131 virtual void Dump( FILE* f );
00136 void SetSubType( Decl_t t ) { subType = t; }
00141 Decl_t GetSubType() { return subType; }
00147 void SetInlined( int v ) { inlined = v; }
00153 int GetInlined() { return inlined; }
00158 void PreVisit1( int (*func)(CNode*,void*), void* data );
00159 void PostVisit1( void (*func)(CNode*, void*), void* data );
00160 void PostSubVisit1( CNode* (*func)(CNode*, void*), void* data );
00161 protected:
00165 void Copy( CObstack* heap, CParam& param );
00166 private:
00167
00168
00169
00170 CParam( const CParam& param );
00174 };
00175
00176 #endif // CPARAM_HPP