Changeset 27 in dev for BasicCompiler_Common
- Timestamp:
- Jan 7, 2007, 6:51:20 AM (18 years ago)
- Location:
- BasicCompiler_Common
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler_Common/Class.cpp
r18 r27 308 308 return ppobj_StaticMethod[i]; 309 309 } 310 bool CClass::IsExistMethod( char *name ){ 311 for( int i=0; i<iMethodNum; i++ ){ 312 if( lstrcmp( ppobj_Method[i]->psi->name, name ) == 0 ) return true; 313 } 314 return false; 315 } 316 bool CClass::IsExistStaticMethod( char *name ){ 317 for( int i=0; i<iStaticMethodNum; i++ ){ 318 if( lstrcmp( ppobj_StaticMethod[i]->psi->name, name ) == 0 ) return true; 319 } 320 return false; 321 } 322 310 323 311 324 LONG_PTR CClass::AddVtblDataTable(SUBINFO **ppsi,int length){ … … 677 690 //メンバ関数 678 691 for(i=0;i<pobj_c->iMethodNum;i++){ 679 // スーパークラスと重複する場合はオーバーライドを行う692 //基底クラスと重複する場合はオーバーライドを行う 680 693 if(pobj_c->ppobj_Method[i]->pobj_InheritsClass) continue; 681 694 -
BasicCompiler_Common/Class.h
r18 r27 105 105 CMethod *GetMethodInfo( SUBINFO *psi ); 106 106 CMethod *GetStaticMethodInfo( SUBINFO *psi ); 107 bool IsExistMethod( char *name ); 108 bool IsExistStaticMethod( char *name ); 107 109 108 110 -
BasicCompiler_Common/Intermediate_Step2.cpp
r18 r27 453 453 lstrcmpi(com,"PRINT")==0|| 454 454 lstrcmpi(com,"RANDOMIZE")==0|| 455 lstrcmpi(com,"WRITE")==0||455 //lstrcmpi(com,"WRITE")==0|| TODO: Trace.Writeとの重複が未完成 456 456 lstrcmpi(com,"MSGBOX")==0|| 457 457 lstrcmpi(com,"WINDOW")==0|| -
BasicCompiler_Common/Variable.cpp
r20 r27 724 724 725 725 726 ////////////////////727 // グローバル変数728 ////////////////////729 730 for(i=MaxGlobalVarNum-1;i>=0;i--){ //レキシカルスコープを考慮してバックサーチ731 if(GlobalVar[i].bLiving){732 if(lstrcmp(VarName,GlobalVar[i].name)==0) break;733 }734 }735 736 if(i>=0){737 goto GlobalOk;738 }739 740 741 726 ////////////////////////// 742 727 // クラスの静的メンバ … … 745 730 if(member[0]){ 746 731 lstrcpy(temporary,member); 747 GetVarFormatString(temporary,array,lpPtrOffset,member,&i); 732 char tempMember[VN_SIZE]; 733 char tempArray[VN_SIZE]; 734 GetVarFormatString(temporary,tempArray,lpPtrOffset,tempMember,&i); 748 735 749 736 char temp2[VN_SIZE]; … … 754 741 755 742 if(i!=MaxGlobalVarNum){ 743 lstrcpy(member,tempMember); 744 lstrcpy(array,tempArray); 756 745 goto GlobalOk; 757 746 } … … 769 758 goto GlobalOk; 770 759 } 760 } 761 762 763 //////////////////// 764 // グローバル変数 765 //////////////////// 766 767 for(i=MaxGlobalVarNum-1;i>=0;i--){ //レキシカルスコープを考慮してバックサーチ 768 if(GlobalVar[i].bLiving){ 769 if(lstrcmp(VarName,GlobalVar[i].name)==0) break; 770 } 771 } 772 773 if(i>=0){ 774 goto GlobalOk; 771 775 } 772 776 … … 1019 1023 } 1020 1024 1021 //関数 名1025 //関数(またはメソッド)名 1022 1026 lstrcat(FullName,pCompilingSubInfo->name); 1023 1027 lstrcat(FullName,"%"); … … 1029 1033 lstrcat(FullName,"%"); 1030 1034 1035 //変数名 1031 1036 lstrcat(FullName,VarName); 1032 1037 -
BasicCompiler_Common/error.cpp
r20 r27 162 162 if(num==116) lstrcpy(msg,"コンストラクタ及びデストラクタはパブリックアクセスにしなければなりません"); 163 163 if(num==117) lstrcpy(msg,"デストラクタの名前が \"~クラス名\" になっていません"); 164 if(num==118) lstrcpy(msg,"参照する スーパークラスが存在しません");165 if(num==119) sprintf(msg,"\"%s\" メンバは スーパークラスで定義されていません",KeyWord);164 if(num==118) lstrcpy(msg,"参照する基底クラスが存在しません"); 165 if(num==119) sprintf(msg,"\"%s\" メンバは基底クラスで定義されていません",KeyWord); 166 166 if(num==120) lstrcpy(msg,"デストラクトするオブジェクトの型が不明です"); 167 167 if(num==121) lstrcpy(msg,"New演算子にはクラス以外の型を指定できません"); -
BasicCompiler_Common/hash.cpp
r5 r27 121 121 //オブジェクトのメンバ関数の場合 122 122 123 bool isStatic = false; 124 CClass *pobj_c; 123 125 if(lstrcmpi(ObjName,"Super")==0){ 124 //スーパークラス参照の場合 125 126 if(pobj_CompilingClass==0){ 127 SetError(118,NULL,cp); 128 goto finish; 129 } 130 131 //クラス内のメンバ関数をコンパイルしているとき 132 //※オーバーライドされた関数をサーチする 133 for(i=0;i<pobj_CompilingClass->iMethodNum;i++){ 134 if(pobj_CompilingClass->ppobj_Method[i]->pobj_InheritsClass==0) continue; 135 136 if(lstrcmp(NestMember,pobj_CompilingClass->ppobj_Method[i]->psi->name)==0){ 137 ppArray_si[num]=pobj_CompilingClass->ppobj_Method[i]->psi; 138 num++; 139 } 140 } 141 142 if(num==0) SetError(119,NestMember,cp); 143 144 goto finish; 145 } 146 147 148 149 ////////////////////////////////////////////// 150 // 静的メソッド(クラス名が指定される場合) 151 ////////////////////////////////////////////// 152 153 CClass *pobj_c; 154 pobj_c=pobj_DBClass->check(ObjName); 155 if(pobj_c){ 156 for(i=0;i<pobj_c->iStaticMethodNum;i++){ 157 if(lstrcmp(NestMember,pobj_c->ppobj_StaticMethod[i]->psi->name)==0){ 158 ppArray_si[num]=pobj_c->ppobj_StaticMethod[i]->psi; 159 num++; 160 } 161 } 162 163 goto finish; 164 } 165 166 167 i=GetVarType(ObjName,(LONG_PTR *)&pobj_c,1); 168 if(i==-1) goto finish; //エラーの場合 169 if(!(NATURAL_TYPE(i)==DEF_OBJECT)) goto finish; 126 //クラスメンバ関数内から基底クラスの呼び出し 127 pobj_c=pobj_CompilingClass; 128 } 129 else{ 130 pobj_c=pobj_DBClass->check(ObjName); 131 if( ! pobj_c ){ 132 //"->"によってオブジェクトを指定する通常のメンバ関数呼び出し 133 int type = GetVarType(ObjName,(LONG_PTR *)&pobj_c,0); 134 if(!(NATURAL_TYPE(type)==DEF_OBJECT)) goto finish; 135 } 136 } 137 138 // 静的メソッドから取得 139 for(i=0;i<pobj_c->iStaticMethodNum;i++){ 140 if(lstrcmp(NestMember,pobj_c->ppobj_StaticMethod[i]->psi->name)==0){ 141 ppArray_si[num]=pobj_c->ppobj_StaticMethod[i]->psi; 142 num++; 143 } 144 } 145 146 //動的メソッドから取得 170 147 171 148 //※オーバーライドされた関数を先にサーチする必要があるため、バックサーチを行う … … 176 153 } 177 154 } 178 goto finish;179 155 } 180 156 … … 221 197 } 222 198 } 223 224 if(num) goto finish; 225 } 199 } 200 201 if(num) goto finish; 202 226 203 227 204 //ハッシュ値を取得
Note:
See TracChangeset
for help on using the changeset viewer.