Changeset 75 in dev for BasicCompiler_Common/Procedure.h
- Timestamp:
- Mar 20, 2007, 4:36:16 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler_Common/Procedure.h
r74 r75 2 2 struct VARIABLE; 3 3 4 #define SUBTYPE_SUB 1 5 #define SUBTYPE_FUNCTION 2 6 #define SUBTYPE_MACRO 3 7 class SubInfo{ 8 public: 9 SubInfo(); 10 11 DWORD dwType; 12 13 //クラス情報 14 CClass *pobj_ParentClass; 15 4 class Procedure{ 5 public: 6 // 種類 7 enum Kind{ 8 Sub, 9 Function, 10 }; 11 12 private: 13 const string name; 14 15 Kind kind; 16 17 bool isCdecl; 18 bool isUsing; 19 20 protected: 21 22 // パラメータ 23 Parameters params; 24 25 // 戻り値の型 26 Type returnType; 27 28 // ソースコードの位置 29 int codePos; 30 31 public: 32 Procedure( const string &name, Kind kind, bool isCdecl ): 33 name( name ), 34 kind( kind ), 35 isCdecl( isCdecl ), 36 isUsing( false ), 37 codePos( -1 ) 38 {} 39 ~Procedure(){ 40 foreach( Parameter *pParam, params ){ 41 delete pParam; 42 } 43 } 44 45 const string &GetName() const 46 { 47 return name; 48 } 49 50 bool IsSub() const 51 { 52 return ( kind == Sub ); 53 } 54 bool IsFunction() const 55 { 56 return ( kind == Function ); 57 } 58 59 bool IsCdecl() const 60 { 61 return isCdecl; 62 } 63 void Using(){ 64 isUsing = true; 65 } 66 bool IsUsing() const 67 { 68 return isUsing; 69 } 70 71 int GetCodePos() const 72 { 73 return codePos; 74 } 75 76 const Parameters &Params() const 77 { 78 return params; 79 } 80 const Type &ReturnType() const 81 { 82 return returnType; 83 } 84 }; 85 86 class UserProc : public Procedure 87 { 88 89 private: 90 bool isMacro; 91 92 // パラメータの追加情報 93 int secondParmNum; 94 Parameters realParams; 95 int realSecondParmNum; 96 97 // 親クラスと対応するメソッド 98 CClass *pParentClass; 99 CMethod *pMethod; 100 101 // 各種フラグ 102 bool isExport; 103 bool isSystem; 104 bool isCompiled; 105 106 public: 107 // ハッシュリスト用 108 UserProc *pNextData; 109 110 UserProc( const string &name, Kind kind, bool isMacro, bool isCdecl, bool isExport ): 111 Procedure( name, kind, isCdecl ), 112 isMacro( isMacro ), 113 pParentClass( NULL ), 114 pMethod( NULL ), 115 isExport( isExport ), 116 isSystem( false ), 117 isCompiled( false ), 118 pNextData( NULL ) 119 { 120 } 121 ~UserProc(){ 122 foreach( Parameter *pParam, realParams ){ 123 delete pParam; 124 } 125 } 126 127 bool IsMacro() const 128 { 129 return isMacro; 130 } 131 132 virtual bool SetParamsAndReturnType( const char *sourceOfParams, int nowLine, bool isStatic ); 133 134 int GetSecondParmNum() const 135 { 136 return secondParmNum; 137 } 138 const Parameters &RealParams() const 139 { 140 return realParams; 141 } 142 int GetRealSecondParmNum() const 143 { 144 return realSecondParmNum; 145 } 146 147 void SetParentClass( CClass *pParentClass ){ 148 this->pParentClass = pParentClass; 149 } 150 CClass *GetParentClassPtr() 151 { 152 return pParentClass; 153 } 154 const CClass &GetParentClass() const 155 { 156 return *pParentClass; 157 } 158 void SetMethod( CMethod *pMethod ){ 159 this->pMethod = pMethod; 160 } 161 162 void ExportOff(){ 163 isExport = false; 164 } 165 bool IsExport() const 166 { 167 return isExport; 168 } 169 void ThisIsSystemProc(){ 170 isSystem = true; 171 } 172 bool IsSystem() const 173 { 174 return isSystem; 175 } 176 void CompleteCompile(){ 177 isCompiled = true; 178 } 179 void KillCompileStatus(){ 180 isCompiled = false; 181 } 182 bool IsCompiled() const 183 { 184 return isCompiled; 185 } 186 bool IsDestructor() const 187 { 188 return ( GetName()[0] == '~' ); 189 } 190 bool IsVirtual() const 191 { 192 if( pMethod == NULL ){ 193 return false; 194 } 195 return ( pMethod->bVirtual != 0 ); 196 } 197 198 199 // バイナリコードの位置 200 DWORD beginOpAddress; 201 DWORD endOpAddress; 202 203 // ローカル変数 204 Variables localVars; 205 206 // TODO: 適切なコードへ直す 16 207 long id; 17 208 18 char *name; 19 long address; 20 21 //パラメータ 22 Parameters params; 23 int SecondParmNum; 24 Parameters realParams; 25 int RealSecondParmNum; 26 27 //戻り値 28 int ReturnType; 29 union{ 30 LONG_PTR ReturnIndex; 31 CClass *Return_pobj_c; 32 }u; 33 bool isReturnRef; 34 35 DWORD CompileAddress; 36 DWORD EndOpAddr; 37 VARIABLE *pVar; 38 int VarNum; 39 40 BOOL bExport; 41 BOOL bCdecl; 42 BOOL bVirtual; 43 BOOL bUse; 44 BOOL bCompile; 45 BOOL bSystem; 46 47 SubInfo *pNextData; 48 }; 209 210 ///////////////////////////////////////////////////////////////// 211 // コンパイル中の関数を管理 212 ///////////////////////////////////////////////////////////////// 213 private: 214 static UserProc *pCompilingUserProc; 215 public: 216 static void CompileStartForGlobalArea(){ 217 pCompilingUserProc = NULL; 218 } 219 static void CompileStartForUserProc( UserProc *pUserProc ){ 220 pCompilingUserProc = pUserProc; 221 } 222 static bool IsGlobalAreaCompiling(){ 223 return ( pCompilingUserProc == NULL ); 224 } 225 static bool IsLocalAreaCompiling(){ 226 return ( pCompilingUserProc != NULL ); 227 } 228 static UserProc &CompilingUserProc(){ 229 return *pCompilingUserProc; 230 } 231 }; 232 233 class DllProc : public Procedure 234 { 235 const string dllFileName; 236 const string alias; 237 int lookupAddress; 238 239 public: 240 // ハッシュリスト用 241 DllProc *pNextData; 242 243 DllProc( const string &name, Kind kind, bool isCdecl, const string &dllFileName, const string &alias ): 244 Procedure( name, kind, isCdecl ), 245 dllFileName( dllFileName ), 246 alias( alias ), 247 lookupAddress( 0 ), 248 pNextData( NULL ) 249 { 250 } 251 ~DllProc(){} 252 253 virtual bool SetParamsAndReturnType( const char *sourceOfParams, int nowLine ); 254 255 const string &GetDllFileName() const 256 { 257 return dllFileName; 258 } 259 const string &GetAlias() const 260 { 261 return alias; 262 } 263 264 void SetLookupAddress( int lookupAddress ){ 265 this->lookupAddress = lookupAddress; 266 } 267 int GetLookupAddress() const 268 { 269 return lookupAddress; 270 } 271 272 }; 273 274 class ProcPointer : public Procedure 275 { 276 public: 277 ProcPointer( Kind kind ): 278 Procedure( "", kind, false ) 279 { 280 } 281 ~ProcPointer(){} 282 283 virtual bool SetParamsAndReturnType( const char *sourceOfParams, int nowLine ); 284 };
Note:
See TracChangeset
for help on using the changeset viewer.