source: dev/BasicCompiler_Common/Parameter.h@ 75

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

TYPEINFO→Typeへのリファクタリングを実施。64bitはほぼ完了。32bitが全般的に未完成。

File size: 1.9 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() const
49 {
50 return isRef;
51 }
52 bool IsArray(){
53 return isArray;
54 }
55 int *GetSubScriptsPtr(){
56 return subScripts;
57 }
58
59 bool Equals( const Parameter &param ) const
60 {
61 if( Type::Equals( param ) ){
62 return true;
63 }
64 else{
65
66 if( this->isRef && this->GetBasicType() == DEF_ANY &&
67 param.isRef == false && param.IsPointer()
68 ||
69 this->isRef == false && this->IsPointer() &&
70 param.isRef && param.GetBasicType() == DEF_ANY ){
71 /* ByRef var As Any
72
73 var As VoidPtr
74 は同等
75 */
76 return true;
77 }
78 }
79
80 return false;
81 }
82
83
84 static bool Equals( const Parameters &paramsA, const Parameters paramsB ){
85 if( paramsA.size() != paramsB.size() ){
86 return false;
87 }
88
89 int max = (int)paramsA.size();
90 for( int i=0; i<max; i++ ){
91 if( !paramsA[i]->Equals( *paramsB[i] ) ){
92 return false;
93 }
94 }
95
96 return true;
97 }
98};
99
100#endif //_ACTIVEBASIC_COMPILER_PARAMETER_H
Note: See TracBrowser for help on using the repository browser.