source: dev/BasicCompiler_Common/Parameter.h@ 73

Last change on this file since 73 was 73, checked in by dai_9181, 17 years ago

Parameterクラスを適用。32bit側は動くようになったので、64bitのほうを調整する。

File size: 1.8 KB
Line 
1#include "Type.h"
2
3#ifndef _ACTIVEBASIC_COMPILER_PARAMETER_H
4#define _ACTIVEBASIC_COMPILER_PARAMETER_H
5
6class Parameter;
7typedef vector<Parameter *> Parameters;
8
9class Parameter : public Type
10{
11 string varName;
12 bool isRef;
13 bool isArray;
14 int subScripts[MAX_ARRAYDIM];
15
16public:
17 Parameter( const string &varName, const Type &type, bool isRef = false ):
18 Type( type ),
19 varName( varName ),
20 isRef( isRef ),
21 isArray( false )
22 {
23 subScripts[0] = -1;
24 }
25 Parameter( const Parameter &param ):
26 Type( param ),
27 varName( param.varName ),
28 isRef( param.isRef ),
29 isArray( false )
30 {
31 subScripts[0] = -1;
32 if( param.isArray ){
33 SetArray( param.subScripts );
34 }
35 }
36 ~Parameter(){}
37
38 void SetArray( const int *pSubScripts ){
39 isArray = true;
40 memcpy( this->subScripts, pSubScripts, sizeof(int) * MAX_ARRAYDIM );
41 }
42
43 const string &GetVarName() const
44 {
45 return varName;
46 }
47
48 bool IsRef(){
49 return isRef;
50 }
51 bool IsArray(){
52 return isArray;
53 }
54 int *GetSubScriptsPtr(){
55 return subScripts;
56 }
57
58 bool Equals( const Parameter &param ) const
59 {
60 if( Type::Equals( param ) ){
61 return true;
62 }
63 else{
64
65 if( this->isRef && this->GetBasicType() == DEF_ANY &&
66 param.isRef == false && param.IsPointer()
67 ||
68 this->isRef == false && this->IsPointer() &&
69 param.isRef && param.GetBasicType() == DEF_ANY ){
70 /* ByRef var As Any
71
72 var As VoidPtr
73 は同等
74 */
75 return true;
76 }
77 }
78
79 return false;
80 }
81
82
83 static bool Equals( const Parameters &paramsA, const Parameters paramsB ){
84 if( paramsA.size() != paramsB.size() ){
85 return false;
86 }
87
88 int max = (int)paramsA.size();
89 for( int i=0; i<max; i++ ){
90 if( !paramsA[i]->Equals( *paramsB[i] ) ){
91 return false;
92 }
93 }
94
95 return true;
96 }
97};
98
99#endif //_ACTIVEBASIC_COMPILER_PARAMETER_H
Note: See TracBrowser for help on using the repository browser.