Changeset 193 in dev
- Timestamp:
- Jun 26, 2007, 5:04:50 AM (17 years ago)
- Location:
- trunk/abdev
- Files:
-
- 4 added
- 30 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler32/BasicCompiler.vcproj
r191 r193 1287 1287 > 1288 1288 </File> 1289 <File 1290 RelativePath="..\BasicCompiler_Common\src\TypeDef.cpp" 1291 > 1292 </File> 1293 <File 1294 RelativePath="..\BasicCompiler_Common\src\VariableImpl.cpp" 1295 > 1296 </File> 1289 1297 </Filter> 1290 1298 </Filter> … … 1380 1388 > 1381 1389 </File> 1390 <File 1391 RelativePath="..\BasicCompiler_Common\include\TypeDef.h" 1392 > 1393 </File> 1394 <File 1395 RelativePath="..\BasicCompiler_Common\include\VariableImpl.h" 1396 > 1397 </File> 1382 1398 </Filter> 1383 1399 </Filter> -
trunk/abdev/BasicCompiler32/Compile_Calc.cpp
r183 r193 1 1 #include <jenga/include/smoothie/Smoothie.h> 2 2 #include <jenga/include/smoothie/LexicalAnalysis.h> 3 4 #include <Compiler.h> 3 5 4 6 #include "../BasicCompiler_Common/common.h" … … 622 624 623 625 624 if( varType.IsObject() && Smoothie::GetMeta().blittableTypes.IsExist( calcType ) ){626 if( varType.IsObject() && compiler.GetMeta().GetBlittableTypes().IsExist( calcType ) ){ 625 627 // Blittable型をオブジェクトとして扱う 626 628 vector<UserProc *> userProcs; 627 Smoothie::GetMeta().blittableTypes.GetClass( calcType ).GetStaticMethods().Enum( "_Create", userProcs );629 compiler.GetMeta().GetBlittableTypes().GetClass( calcType ).GetStaticMethods().Enum( "_Create", userProcs ); 628 630 if( userProcs.size() != 1 ){ 629 631 SetError(); -
trunk/abdev/BasicCompiler32/Compile_CallProc.cpp
r183 r193 1 1 #include <jenga/include/smoothie/Smoothie.h> 2 3 #include <Compiler.h> 2 4 3 5 #include "../BasicCompiler_Common/common.h" … … 129 131 pobj_c = &varType.GetClass(); 130 132 if( NATURAL_TYPE( varType.GetBasicType() ) != DEF_OBJECT ){ 131 pobj_c= Smoothie::GetMeta().GetClasses().Find(ObjectName);133 pobj_c=compiler.GetMeta().GetClasses().Find(ObjectName); 132 134 if( pobj_c ){ 133 135 isStatic = true; -
trunk/abdev/BasicCompiler32/Compile_Func.cpp
r183 r193 1 1 #include <jenga/include/smoothie/Smoothie.h> 2 3 #include <Compiler.h> 2 4 3 5 #include "../BasicCompiler_Common/common.h" … … 178 180 tempParm=temp2; 179 181 180 type.SetType( DEF_OBJECT, Smoothie::GetMeta().GetClasses().GetStringClassPtr() );182 type.SetType( DEF_OBJECT, compiler.GetMeta().GetClasses().GetStringClassPtr() ); 181 183 } 182 184 … … 230 232 231 233 //オーバーロードを解決 232 pUserProc=OverloadSolution(name,subs, Smoothie::GetMeta().GetProcPointers()[ProcPtr_BaseIndex]->Params(), Type() );234 pUserProc=OverloadSolution(name,subs,compiler.GetMeta().GetProcPointers()[ProcPtr_BaseIndex]->Params(), Type() ); 233 235 234 236 if(!pUserProc){ … … 318 320 void Opcode_Func_SizeOf( const string &typeName ){ 319 321 Type tempType; 320 if( ! Type::StringToType( typeName, tempType ) ){322 if( !Compiler::StringToType( typeName, tempType ) ){ 321 323 SetError(3,typeName,cp); 322 324 return; -
trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp
r183 r193 3 3 4 4 #include <Program.h> 5 #include <Compiler.h> 5 6 #include <LexicalScopingImpl.h> 6 7 #include <ClassImpl.h> 8 #include <VariableImpl.h> 7 9 8 10 #include "../BasicCompiler_Common/common.h" … … 55 57 56 58 //クラスに属する静的メンバを定義 57 Smoothie::GetMeta().GetClasses().InitStaticMember();59 compiler.GetMeta().GetClasses().InitStaticMember(); 58 60 59 61 GetGlobalDataForDll(); … … 224 226 && userProc.GetParentClass().GetName() == "_System_TypeBase" ){ 225 227 226 Smoothie::GetMeta().GetClasses().Compile_System_InitializeUserTypes();228 compiler.GetMeta().GetClasses().Compile_System_InitializeUserTypes(); 227 229 } 228 230 else if( userProc.GetName() == "RegisterGlobalRoots" … … 273 275 274 276 //コンパイルスタートをクラス管理クラスに追加 275 Smoothie::GetMeta().GetClasses().StartCompile( pUserProc );277 compiler.GetMeta().GetClasses().StartCompile( pUserProc ); 276 278 277 279 //コンパイル中の関数 … … 282 284 283 285 // コンパイル中の関数でImportsされている名前空間 284 Smoothie::Temp::importedNamespaces = pUserProc->GetImportedNamespaces();286 compiler.SetImportedNamespaces( pUserProc->GetImportedNamespaces() ); 285 287 286 288 if(pUserProc->IsSystem()){ … … 318 320 Parameter ¶m = *pUserProc->RealParams()[i3]; 319 321 320 Variable *pVar = new Variable ( param.GetVarName(), param, false, param.IsRef() );322 Variable *pVar = new VariableImpl( param.GetVarName(), param, false, param.IsRef() ); 321 323 322 324 if( param.IsArray() ){ … … 395 397 else{ 396 398 if( pUserProc->ReturnType().IsObject() ){ 397 sprintf(temporary,"%s=Nothing%c%c%s",temp,1,ESC_AS, pUserProc->ReturnType().ToString().c_str() );399 sprintf(temporary,"%s=Nothing%c%c%s",temp,1,ESC_AS, Compiler::TypeToString( pUserProc->ReturnType() ).c_str() ); 398 400 } 399 401 else{ 400 402 //戻り値用の変数の定義 401 sprintf(temporary,"%s%c%c%s",temp,1,ESC_AS, pUserProc->ReturnType().ToString().c_str() );403 sprintf(temporary,"%s%c%c%s",temp,1,ESC_AS, Compiler::TypeToString( pUserProc->ReturnType() ).c_str() ); 402 404 } 403 405 -
trunk/abdev/BasicCompiler32/Compile_Var.cpp
r183 r193 5 5 #include <CodeGenerator.h> 6 6 #include <Compiler.h> 7 #include <VariableImpl.h> 7 8 8 9 #include "../BasicCompiler_Common/common.h" … … 367 368 // 名前空間を分離 368 369 char namespaceStr[VN_SIZE]="", simpleName[VN_SIZE]; 369 Smoothie::GetMeta().namespaceScopesCollection.SplitNamespace( variable, namespaceStr, simpleName );370 compiler.GetMeta().GetNamespaces().SplitNamespace( variable, namespaceStr, simpleName ); 370 371 371 372 // 先頭オブジェクトまたはクラス名と入れ子メンバに分割 … … 461 462 //Const修飾子のメソッド内でメンバ書き込みアクセスが発生したとき 462 463 //(コンストラクタ、デストラクタ内を除く) 463 const CMethod *pMethod = Smoothie::GetMeta().GetClasses().GetNowCompilingMethodInfo();464 const CMethod *pMethod = compiler.GetMeta().GetClasses().GetNowCompilingMethodInfo(); 464 465 if( isWriteAccess && 465 466 pMethod->IsConst() && … … 524 525 } 525 526 526 int typeDefIndex = Smoothie::GetMeta().typeDefs.GetIndex( VarName );527 int typeDefIndex = compiler.GetMeta().GetTypeDefs().GetIndex( VarName ); 527 528 if( typeDefIndex != -1 ){ 528 529 // TypeDef後の型名だったとき 529 lstrcpy( VarName, Smoothie::GetMeta().typeDefs[typeDefIndex].GetBaseName().c_str() );530 lstrcpy( VarName, compiler.GetMeta().GetTypeDefs()[typeDefIndex].GetBaseName().c_str() ); 530 531 } 531 532 … … 832 833 char *temp; 833 834 temp=(char *)i64data; 834 i2= Compiler::GetNativeCode().GetDataTable().AddString(temp,lstrlen(temp));835 i2=compiler.GetNativeCode().GetDataTable().AddString(temp,lstrlen(temp)); 835 836 HeapDefaultFree(temp); 836 837 … … 1022 1023 char *temp; 1023 1024 temp=(char *)i64data; 1024 i2= Compiler::GetNativeCode().GetDataTable().AddString(temp,lstrlen(temp));1025 i2=compiler.GetNativeCode().GetDataTable().AddString(temp,lstrlen(temp)); 1025 1026 HeapDefaultFree(temp); 1026 1027 … … 1095 1096 bool isConst = ( dwFlags & DIMFLAG_CONST ) ? true:false; 1096 1097 1097 Variable *pVar = new Variable ( VarName, type, isConst );1098 Variable *pVar = new VariableImpl( VarName, type, isConst ); 1098 1099 1099 1100 if( SubScripts[0] != -1 ){ -
trunk/abdev/BasicCompiler32/MakePeHdr.cpp
r191 r193 140 140 ////////////////// 141 141 // データテーブル 142 Compiler::GetNativeCode().GetDataTable().Init();142 compiler.GetNativeCode().GetDataTable().Init(); 143 143 if(bDebugCompile){ 144 Compiler::GetNativeCode().GetDataTable().Add( (long)0x00000002 );144 compiler.GetNativeCode().GetDataTable().Add( (long)0x00000002 ); 145 145 } 146 146 … … 166 166 167 167 //関数ポインタ情報を初期化 168 Smoothie::GetMeta().GetProcPointers().clear();168 compiler.GetMeta().GetProcPointers().clear(); 169 169 170 170 // 名前空間情報を取得 171 171 NamespaceScopesCollection::CollectNamespaces( 172 172 Smoothie::Lexical::source.GetBuffer(), 173 Smoothie::GetMeta().namespaceScopesCollection173 compiler.GetMeta().GetNamespaces() 174 174 ); 175 175 … … 177 177 // GetSubInfo関数の中で参照されるオブジェクト名を事前に取得する。 178 178 // ※オブジェクトの内容までは取得しない 179 Smoothie::GetMeta().GetClasses().CollectClassesForNameOnly( Smoothie::Lexical::source );179 compiler.GetMeta().GetClasses().CollectClassesForNameOnly( Smoothie::Lexical::source ); 180 180 181 181 //TypeDef情報を初期化 182 Smoothie::GetMeta().typeDefs.Init();182 compiler.GetMeta().GetTypeDefs().Init(); 183 183 184 184 //定数情報を取得 … … 190 190 191 191 //クラス情報を取得(※注 - GetSubInfoの後に呼び出す) 192 Smoothie::GetMeta().GetClasses().GetAllClassInfo();193 194 if( ! Smoothie::GetMeta().AutoWrite( Jenga::Common::Environment::GetAppDir() + "\\meta_test.xml" ) )192 compiler.GetMeta().GetClasses().GetAllClassInfo(); 193 194 if( !compiler.GetMeta().AutoWrite( Jenga::Common::Environment::GetAppDir() + "\\meta_test.xml" ) ) 195 195 { 196 196 ts(0); … … 415 415 416 416 //クラスに属する静的メンバを定義 417 Smoothie::GetMeta().GetClasses().InitStaticMember();417 compiler.GetMeta().GetClasses().InitStaticMember(); 418 418 419 419 //グローバル実行領域をコンパイル開始 … … 884 884 885 885 //データセクションのファイル上のサイズ 886 if( Compiler::GetNativeCode().GetDataTable().GetSize()%FILE_ALIGNMENT) FileSize_DataSection=Compiler::GetNativeCode().GetDataTable().GetSize()+(FILE_ALIGNMENT-Compiler::GetNativeCode().GetDataTable().GetSize()%FILE_ALIGNMENT);887 else FileSize_DataSection= Compiler::GetNativeCode().GetDataTable().GetSize();886 if(compiler.GetNativeCode().GetDataTable().GetSize()%FILE_ALIGNMENT) FileSize_DataSection=compiler.GetNativeCode().GetDataTable().GetSize()+(FILE_ALIGNMENT-compiler.GetNativeCode().GetDataTable().GetSize()%FILE_ALIGNMENT); 887 else FileSize_DataSection=compiler.GetNativeCode().GetDataTable().GetSize(); 888 888 if(FileSize_DataSection) bUse_DataSection=1; 889 889 else bUse_DataSection=0; … … 1076 1076 //////////////////////////////////////// 1077 1077 //仮想関数データテーブルスケジュール 1078 Smoothie::GetMeta().GetClasses().ActionVtblSchedule(ImageBase,MemPos_CodeSection);1078 compiler.GetMeta().GetClasses().ActionVtblSchedule(ImageBase,MemPos_CodeSection); 1079 1079 1080 1080 … … 1611 1611 if(bUse_DataSection){ 1612 1612 //データ テーブル 1613 WriteFile(hFile, Compiler::GetNativeCode().GetDataTable().GetPtr(),Compiler::GetNativeCode().GetDataTable().GetSize(),(DWORD *)&i2,NULL);1613 WriteFile(hFile,compiler.GetNativeCode().GetDataTable().GetPtr(),compiler.GetNativeCode().GetDataTable().GetSize(),(DWORD *)&i2,NULL); 1614 1614 i+=i2; 1615 1615 } … … 1723 1723 1724 1724 //クラスに関するメモリを解放 1725 Smoothie::GetMeta().GetClasses().Clear();1725 compiler.GetMeta().GetClasses().Clear(); 1726 1726 } -
trunk/abdev/BasicCompiler32/NumOpe.cpp
r183 r193 82 82 SetStringQuotes( parameter ); 83 83 84 Operator_New( * Smoothie::GetMeta().GetClasses().GetStringClassPtr(), "", parameter, Type( DEF_OBJECT, *Smoothie::GetMeta().GetClasses().GetStringClassPtr() ) );84 Operator_New( *compiler.GetMeta().GetClasses().GetStringClassPtr(), "", parameter, Type( DEF_OBJECT, *compiler.GetMeta().GetClasses().GetStringClassPtr() ) ); 85 85 86 86 free( parameter ); … … 261 261 Type leftType; 262 262 if( GetTermType( termLeft, leftType, isLiteral, &isClassName ) ){ 263 if( isClassName == false && Smoothie::GetMeta().blittableTypes.IsExist( leftType ) ){263 if( isClassName == false && compiler.GetMeta().GetBlittableTypes().IsExist( leftType ) ){ 264 264 // 左側のオブジェクト部分がBlittable型のとき 265 265 … … 267 267 lstrcpy( temporary, termLeft ); 268 268 sprintf( termLeft, "%s(%s)", 269 Smoothie::GetMeta().blittableTypes.Find( leftType ).GetCreateStaticMethodFullName().c_str(),269 compiler.GetMeta().GetBlittableTypes().Find( leftType ).GetCreateStaticMethodFullName().c_str(), 270 270 temporary ); 271 271 } … … 296 296 297 297 if( pIsClassName ){ 298 if( Smoothie::GetMeta().GetClasses().Find( termFull ) ){298 if( compiler.GetMeta().GetClasses().Find( termFull ) ){ 299 299 *pIsClassName = true; 300 300 return true; … … 593 593 } 594 594 595 i2 = Compiler::GetNativeCode().GetDataTable().AddBinary( binary, num * tempBaseType.GetSize() );595 i2 = compiler.GetNativeCode().GetDataTable().AddBinary( binary, num * tempBaseType.GetSize() ); 596 596 597 597 //mov eax,i2 … … 709 709 // As演算子の右辺値 710 710 //型名 711 if( Type::StringToType( term, resultType ) ){711 if( Compiler::StringToType( term, resultType ) ){ 712 712 resultType.SetBasicType( resultType.GetBasicType() | FLAG_CAST ); 713 713 } … … 740 740 741 741 type_stack[sp]=DEF_OBJECT; 742 index_stack[sp]=(LONG_PTR) Smoothie::GetMeta().GetClasses().GetStringClassPtr();742 index_stack[sp]=(LONG_PTR)compiler.GetMeta().GetClasses().GetStringClassPtr(); 743 743 bLiteralCalculation=0; 744 744 … … 751 751 bLiteralCalculation=0; 752 752 753 i2= Compiler::GetNativeCode().GetDataTable().AddString(term,i3);753 i2=compiler.GetNativeCode().GetDataTable().AddString(term,i3); 754 754 755 755 //push DataSize … … 838 838 } 839 839 else{ 840 index_stack[sp] = (LONG_PTR) Smoothie::GetMeta().GetClasses().GetObjectClassPtr();840 index_stack[sp] = (LONG_PTR)compiler.GetMeta().GetClasses().GetObjectClassPtr(); 841 841 } 842 842 -
trunk/abdev/BasicCompiler64/BasicCompiler.vcproj
r188 r193 313 313 > 314 314 </File> 315 <File 316 RelativePath="..\BasicCompiler_Common\include\SmoothieImpl.h" 317 > 318 </File> 315 319 </Filter> 316 320 </Filter> -
trunk/abdev/BasicCompiler64/MakePeHdr.cpp
r188 r193 177 177 Smoothie::GetMeta().GetClasses().GetAllClassInfo(); 178 178 179 Smoothie::GetMeta(). Write( Jenga::Common::Environment::GetAppDir() + "\\meta_test.xml" );179 Smoothie::GetMeta().AutoWrite( Jenga::Common::Environment::GetAppDir() + "\\meta_test.xml" ); 180 180 181 181 //コードと行番号の関係 -
trunk/abdev/BasicCompiler_Common/Compile.cpp
r182 r193 5 5 #include <LexicalScopingImpl.h> 6 6 #include <CodeGenerator.h> 7 #include <Compiler.h> 7 8 8 9 #include "../BasicCompiler_Common/common.h" … … 260 261 break; 261 262 case ESC_IMPORTS: 262 Smoothie::Temp::importedNamespaces.Imports( Command + 2 );263 compiler.ImportsNamespace( Command + 2 ); 263 264 break; 264 265 case ESC_CLEARNAMESPACEIMPORTED: 265 Smoothie::Temp::importedNamespaces.clear();266 compiler.GetImportedNamespaces().clear(); 266 267 break; 267 268 -
trunk/abdev/BasicCompiler_Common/Const.cpp
r188 r193 1 #include <Compiler.h> 2 1 3 #include "common.h" 2 4 #include OPCODE_H_PATH //opcode.h … … 12 14 return false; 13 15 } 14 return NamespaceScopes::IsSameArea( this->namespaceScopes, namespaceScopes );16 return compiler.IsSameAreaNamespace( this->namespaceScopes, namespaceScopes ); 15 17 } 16 18 bool ConstBase::IsEqualSymbol( const string &fullName ) const -
trunk/abdev/BasicCompiler_Common/DebugMiddleFile.cpp
r191 r193 1 1 #include <jenga/include/smoothie/Smoothie.h> 2 2 3 #include <Compiler.h> 3 4 #include <ClassImpl.h> 5 #include <VariableImpl.h> 4 6 5 7 #include "../BasicCompiler_Common/common.h" … … 32 34 (*p)+=lstrlen(buffer+(*p))+1; 33 35 34 type.SetIndex( (LONG_PTR) Smoothie::GetMeta().GetClasses().Find(szClassName) );36 type.SetIndex( (LONG_PTR)compiler.GetMeta().GetClasses().Find(szClassName) ); 35 37 } 36 38 else{ … … 119 121 120 122 //イテレータをリセット 121 Smoothie::GetMeta().GetClasses().Iterator_Reset();123 compiler.GetMeta().GetClasses().Iterator_Reset(); 122 124 123 125 //個数 124 *(long *)(buffer+i2)= Smoothie::GetMeta().GetClasses().Iterator_GetMaxCount();125 i2+=sizeof(long); 126 127 while( Smoothie::GetMeta().GetClasses().Iterator_HasNext()){126 *(long *)(buffer+i2)=compiler.GetMeta().GetClasses().Iterator_GetMaxCount(); 127 i2+=sizeof(long); 128 129 while(compiler.GetMeta().GetClasses().Iterator_HasNext()){ 128 130 CClass *pobj_c; 129 pobj_c= Smoothie::GetMeta().GetClasses().Iterator_GetNext();131 pobj_c=compiler.GetMeta().GetClasses().Iterator_GetNext(); 130 132 131 133 //クラス名 … … 139 141 // TypeDef情報 140 142 ////////////////// 141 *(long *)(buffer+i2)=(int) Smoothie::GetMeta().typeDefs.size();142 i2+=sizeof(long); 143 for(i3=0;i3<(int) Smoothie::GetMeta().typeDefs.size();i3++){144 lstrcpy(buffer+i2, Smoothie::GetMeta().typeDefs[i3].GetName().c_str() );145 i2+=lstrlen(buffer+i2)+1; 146 147 lstrcpy(buffer+i2, Smoothie::GetMeta().typeDefs[i3].GetBaseName().c_str() );143 *(long *)(buffer+i2)=(int)compiler.GetMeta().GetTypeDefs().size(); 144 i2+=sizeof(long); 145 for(i3=0;i3<(int)compiler.GetMeta().GetTypeDefs().size();i3++){ 146 lstrcpy(buffer+i2,compiler.GetMeta().GetTypeDefs()[i3].GetName().c_str() ); 147 i2+=lstrlen(buffer+i2)+1; 148 149 lstrcpy(buffer+i2,compiler.GetMeta().GetTypeDefs()[i3].GetBaseName().c_str() ); 148 150 i2+=lstrlen(buffer+i2)+1; 149 151 … … 307 309 308 310 //イテレータをリセット 309 Smoothie::GetMeta().GetClasses().Iterator_Reset();310 311 while( Smoothie::GetMeta().GetClasses().Iterator_HasNext()){311 compiler.GetMeta().GetClasses().Iterator_Reset(); 312 313 while(compiler.GetMeta().GetClasses().Iterator_HasNext()){ 312 314 CClass *pobj_c; 313 pobj_c= Smoothie::GetMeta().GetClasses().Iterator_GetNext();315 pobj_c=compiler.GetMeta().GetClasses().Iterator_GetNext(); 314 316 315 317 … … 497 499 } 498 500 499 Smoothie::GetMeta().SetClasses( this->pobj_DBClass );501 compiler.GetMeta().SetClasses( this->pobj_DBClass ); 500 502 501 503 … … 505 507 506 508 //初期化 507 Smoothie::GetMeta().typeDefs.clear();509 compiler.GetMeta().GetTypeDefs().clear(); 508 510 509 511 //個数を取得 … … 515 517 516 518 // 名前空間に未対応 517 Smoothie::GetMeta().typeDefs.push_back( TypeDef( NamespaceScopes(), temp5, buffer+i2, -1 ) );519 compiler.GetMeta().GetTypeDefs().push_back( TypeDef( NamespaceScopes(), temp5, buffer+i2, -1 ) ); 518 520 519 521 i2+=lstrlen(buffer+i2)+1; … … 546 548 bool isArray = (buffer[i2++]) ? true:false; 547 549 548 Variable *pVar = new Variable ( name, type, false, isRef );550 Variable *pVar = new VariableImpl( name, type, false, isRef ); 549 551 550 552 if(isArray){ … … 592 594 const CClass *pClass = NULL; 593 595 if(szParentClassName[0]){ 594 pClass= Smoothie::GetMeta().GetClasses().Find(szParentClassName);596 pClass=compiler.GetMeta().GetClasses().Find(szParentClassName); 595 597 } 596 598 … … 636 638 bool isArray = (buffer[i2++]) ? true:false; 637 639 638 Variable *pVar = new Variable ( name, type, false, isRef );640 Variable *pVar = new VariableImpl( name, type, false, isRef ); 639 641 640 642 if(isArray){ … … 697 699 i2+=lstrlen(buffer+i2)+1; 698 700 699 pobj_c = const_cast<CClass *>( Smoothie::GetMeta().GetClasses().Find(szClassName) );701 pobj_c = const_cast<CClass *>( compiler.GetMeta().GetClasses().Find(szClassName) ); 700 702 701 703 //仮想関数の数 … … 748 750 const CClass *pobj_InheritsClass = NULL; 749 751 if(szInherits[0]){ 750 pobj_InheritsClass= Smoothie::GetMeta().GetClasses().Find(szInherits);752 pobj_InheritsClass=compiler.GetMeta().GetClasses().Find(szInherits); 751 753 } 752 754 … … 945 947 946 948 // クラス情報 947 Smoothie::GetMeta().SetClasses( this->pobj_DBClass );949 compiler.GetMeta().SetClasses( this->pobj_DBClass ); 948 950 949 951 //定数を取得 -
trunk/abdev/BasicCompiler_Common/Diagnose.cpp
r182 r193 1 1 #include <jenga/include/smoothie/Smoothie.h> 2 2 3 #include <Compiler.h> 3 4 #include <Program.h> 4 5 … … 68 69 // イテレータをリセット 69 70 extern Classes *pobj_DBClass; 70 Smoothie::GetMeta().GetClasses().Iterator_Reset();71 compiler.GetMeta().GetClasses().Iterator_Reset(); 71 72 72 while( Smoothie::GetMeta().GetClasses().Iterator_HasNext() ){73 while( compiler.GetMeta().GetClasses().Iterator_HasNext() ){ 73 74 int codeSizeOfClass = 0; 74 75 75 CClass &objClass = * Smoothie::GetMeta().GetClasses().Iterator_GetNext();76 CClass &objClass = *compiler.GetMeta().GetClasses().Iterator_GetNext(); 76 77 77 78 if( !objClass.IsEnum() ){ … … 108 109 // イテレータをリセット 109 110 extern Classes *pobj_DBClass; 110 Smoothie::GetMeta().GetClasses().Iterator_Reset();111 compiler.GetMeta().GetClasses().Iterator_Reset(); 111 112 112 while( Smoothie::GetMeta().GetClasses().Iterator_HasNext() ){113 while( compiler.GetMeta().GetClasses().Iterator_HasNext() ){ 113 114 int codeSizeOfClass = 0; 114 115 115 CClass &objClass = * Smoothie::GetMeta().GetClasses().Iterator_GetNext();116 CClass &objClass = *compiler.GetMeta().GetClasses().Iterator_GetNext(); 116 117 117 118 // 動的メソッド -
trunk/abdev/BasicCompiler_Common/NumOpe_GetType.cpp
r182 r193 1 1 #include <jenga/include/smoothie/Smoothie.h> 2 2 #include <jenga/include/smoothie/LexicalAnalysis.h> 3 4 #include <Compiler.h> 3 5 4 6 #include "common.h" … … 284 286 } 285 287 286 if( ! Type::StringToType( TypeName, resultType ) ){288 if( !Compiler::StringToType( TypeName, resultType ) ){ 287 289 return false; 288 290 } … … 326 328 Type leftType; 327 329 if( GetTermType( termLeft, leftType, isLiteral, &isClassName ) ){ 328 if( isClassName == false && Smoothie::GetMeta().blittableTypes.IsExist( leftType ) ){330 if( isClassName == false && compiler.GetMeta().GetBlittableTypes().IsExist( leftType ) ){ 329 331 // 左側のオブジェクト部分がBlittable型のとき 330 332 … … 332 334 lstrcpy( temporary, termLeft ); 333 335 sprintf( termLeft, "%s(%s)", 334 Smoothie::GetMeta().blittableTypes.Find( leftType ).GetCreateStaticMethodFullName().c_str(),336 compiler.GetMeta().GetBlittableTypes().Find( leftType ).GetCreateStaticMethodFullName().c_str(), 335 337 temporary ); 336 338 … … 396 398 397 399 if( pIsClassName ){ 398 if( Smoothie::GetMeta().GetClasses().Find( termFull ) ){400 if( compiler.GetMeta().GetClasses().Find( termFull ) ){ 399 401 *pIsClassName = true; 400 402 return true; … … 635 637 // As演算子の右辺値 636 638 //型名 637 if( Type::StringToType( term, resultType ) ){639 if( Compiler::StringToType( term, resultType ) ){ 638 640 639 641 if( resultType.IsObject() ){ … … 673 675 //要求タイプがオブジェクト、または未定のとき 674 676 type_stack[sp]=DEF_OBJECT; 675 index_stack[sp]=(LONG_PTR) Smoothie::GetMeta().GetClasses().GetStringClassPtr();677 index_stack[sp]=(LONG_PTR)compiler.GetMeta().GetClasses().GetStringClassPtr(); 676 678 bLiteralCalculation=0; 677 679 … … 718 720 } 719 721 else{ 720 index_stack[sp] = (LONG_PTR) Smoothie::GetMeta().GetClasses().GetObjectClassPtr();722 index_stack[sp] = (LONG_PTR)compiler.GetMeta().GetClasses().GetObjectClassPtr(); 721 723 } 722 724 bLiteralCalculation = 0; -
trunk/abdev/BasicCompiler_Common/Object.cpp
r182 r193 1 #include <Co deGenerator.h>1 #include <Compiler.h> 2 2 3 3 #include "../BasicCompiler_Common/common.h" … … 116 116 } 117 117 118 if( ! Type::StringToType( typeName, resultType ) ){118 if( !Compiler::StringToType( typeName, resultType ) ){ 119 119 SetError(3,typeName,cp); 120 120 return false; -
trunk/abdev/BasicCompiler_Common/Subroutine.cpp
r182 r193 2 2 #include <jenga/include/smoothie/LexicalAnalysis.h> 3 3 4 #include <Compiler.h> 4 5 #include <ProcedureImpl.h> 5 6 … … 164 165 GetVarType(fullCallName,type,false); 165 166 166 ProcPointer *pProcPtr = Smoothie::GetMeta().GetProcPointers()[type.GetIndex()];167 ProcPointer *pProcPtr = compiler.GetMeta().GetProcPointers()[type.GetIndex()]; 167 168 resultType = pProcPtr->ReturnType(); 168 169 … … 631 632 632 633 // Importsされた名前空間の管理 633 NamespaceScopesCollection &importedNamespaces = Smoothie::Temp::importedNamespaces;634 NamespaceScopesCollection &importedNamespaces = compiler.GetImportedNamespaces(); 634 635 importedNamespaces.clear(); 635 636 … … 685 686 temporary[i2]=basbuf[i]; 686 687 } 687 if( ! importedNamespaces.Imports( temporary ) )688 if( !compiler.ImportsNamespace( temporary ) ) 688 689 { 689 690 SetError(64,temporary,cp ); -
trunk/abdev/BasicCompiler_Common/VariableOpe.cpp
r182 r193 2 2 #include <jenga/include/smoothie/LexicalAnalysis.h> 3 3 4 #include <Compiler.h> 4 5 #include <LexicalScopingImpl.h> 6 #include <VariableImpl.h> 5 7 6 8 #include "../BasicCompiler_Common/common.h" … … 215 217 if(lpIndex==-1) lstrcpy(name,"VoidPtr"); 216 218 else{ 217 if( Smoothie::GetMeta().GetProcPointers()[lpIndex]->ReturnType().IsNull() )219 if( compiler.GetMeta().GetProcPointers()[lpIndex]->ReturnType().IsNull() ) 218 220 lstrcpy(name,"*Sub"); 219 221 else lstrcpy(name,"*Function"); … … 230 232 231 233 Type GetStringTypeInfo(){ 232 Type type( DEF_OBJECT, * Smoothie::GetMeta().GetClasses().GetStringClassPtr() );234 Type type( DEF_OBJECT, *compiler.GetMeta().GetClasses().GetStringClassPtr() ); 233 235 return type; 234 236 } … … 567 569 // 名前空間を分離 568 570 char namespaceStr[VN_SIZE]="", simpleName[VN_SIZE]; 569 Smoothie::GetMeta().namespaceScopesCollection.SplitNamespace( variable, namespaceStr, simpleName );571 compiler.GetMeta().GetNamespaces().SplitNamespace( variable, namespaceStr, simpleName ); 570 572 571 573 // 先頭オブジェクトまたはクラス名と入れ子メンバに分割 … … 660 662 } 661 663 662 int typeDefIndex = Smoothie::GetMeta().typeDefs.GetIndex( VarName );664 int typeDefIndex = compiler.GetMeta().GetTypeDefs().GetIndex( VarName ); 663 665 if( typeDefIndex != -1 ){ 664 666 // TypeDef後の型名だったとき 665 lstrcpy( VarName, Smoothie::GetMeta().typeDefs[typeDefIndex].GetBaseName().c_str() );667 lstrcpy( VarName, compiler.GetMeta().GetTypeDefs()[typeDefIndex].GetBaseName().c_str() ); 666 668 } 667 669 … … 870 872 } 871 873 872 if( ! Type::StringToType( temporary, type ) ){874 if( !Compiler::StringToType( temporary, type ) ){ 873 875 SetError(3,temporary,cp); 874 876 type.SetBasicType( DEF_LONG ); … … 974 976 bool isConst = ( dwFlag & DIMFLAG_CONST ) ? true:false; 975 977 976 Variable *pVar = new Variable ( Smoothie::Temp::liveingNamespaceScopes, name, type, isConst );978 Variable *pVar = new VariableImpl( Smoothie::Temp::liveingNamespaceScopes, name, type, isConst ); 977 979 978 980 if( SubScripts[0] != -1 ){ -
trunk/abdev/BasicCompiler_Common/VariableOpe.h
r182 r193 12 12 int GetPtrType(int type); 13 13 BOOL GetTypeName(int type,LONG_PTR lpIndex,char *name); 14 Type GetStringTypeInfo(); 14 15 void GetWithName(char *buffer); 15 16 BOOL GetVarFormatString(char *buffer,char *array,char *array2,char *NestMember, CClass::RefType &refType ); -
trunk/abdev/BasicCompiler_Common/calculation.cpp
r182 r193 1 1 #include <jenga/include/smoothie/LexicalAnalysis.h> 2 3 #include <Compiler.h> 2 4 3 5 #include "../BasicCompiler_Common/common.h" … … 486 488 487 489 Type tempType; 488 if( ! Type::StringToType( temp2, tempType ) ){490 if( !Compiler::StringToType( temp2, tempType ) ){ 489 491 if(enableerror) SetError(3,temp2,cp); 490 492 return false; … … 690 692 { 691 693 Type tempType; 692 if( ! Type::StringToType( Parms, tempType ) ){694 if( !Compiler::StringToType( Parms, tempType ) ){ 693 695 if(bDebuggingWatchList){ 694 696 if( pIsMemoryAccessError ) *pIsMemoryAccessError = true; -
trunk/abdev/BasicCompiler_Common/hash.cpp
r182 r193 1 1 #include <jenga/include/smoothie/Smoothie.h> 2 3 #include <Compiler.h> 2 4 3 5 #include "../BasicCompiler_Common/common.h" … … 91 93 } 92 94 else{ 93 pobj_c= Smoothie::GetMeta().GetClasses().Find(ObjName);95 pobj_c=compiler.GetMeta().GetClasses().Find(ObjName); 94 96 if( pobj_c ){ 95 97 isStatic = true; … … 189 191 190 192 UserProc *GetClassMethod( const char *className, const char *methodName ){ 191 const CClass *pClass = Smoothie::GetMeta().GetClasses().Find( className );193 const CClass *pClass = compiler.GetMeta().GetClasses().Find( className ); 192 194 if( pClass ){ 193 195 vector<UserProc *> userProcs; -
trunk/abdev/BasicCompiler_Common/include/ClassImpl.h
r191 r193 14 14 { 15 15 } 16 17 virtual bool IsEqualSymbol( const NamespaceScopes &namespaceScopes, const string &name ) const; 16 18 17 19 //継承させる … … 62 64 virtual void Compile_System_InitializeUserTypes(); 63 65 66 virtual const CClass *Find( const NamespaceScopes &namespaceScopes, const string &name ) const; 67 64 68 65 69 // XMLシリアライズ用 -
trunk/abdev/BasicCompiler_Common/include/Compiler.h
r184 r193 2 2 3 3 #include <CodeGenerator.h> 4 #include <MetaImpl.h> 5 4 6 class Compiler 5 7 { 6 static NativeCode nativeCode; 8 NativeCode nativeCode; 9 MetaImpl metaImpl; 10 11 NamespaceScopesCollection importedNamespaces; 12 7 13 public: 8 staticNativeCode &GetNativeCode()14 NativeCode &GetNativeCode() 9 15 { 10 16 return nativeCode; 11 17 } 18 19 MetaImpl &GetMeta() 20 { 21 return metaImpl; 22 } 23 24 NamespaceScopesCollection &GetImportedNamespaces() 25 { 26 return importedNamespaces; 27 } 28 void SetImportedNamespaces( const NamespaceScopesCollection &namespaces ) 29 { 30 this->importedNamespaces = namespaces; 31 } 32 bool ImportsNamespace( const std::string &namespaceStr ) 33 { 34 NamespaceScopes namespaceScopes( namespaceStr ); 35 if( !this->GetMeta().GetNamespaces().IsExist( namespaceScopes ) ){ 36 return false; 37 } 38 39 this->importedNamespaces.push_back( namespaceScopes ); 40 41 return true; 42 } 43 44 static bool StringToType( const std::string &typeName, Type &type ); 45 static const std::string TypeToString( const Type &type ); 46 47 // 指定された名前空間が同一エリアと見なされるかどうかをチェック 48 bool IsSameAreaNamespace( const NamespaceScopes &baseNamespaceScopes, const NamespaceScopes &entryNamespaceScopes ){ 49 if( entryNamespaceScopes.size() ){ 50 if( baseNamespaceScopes.IsCoverd( entryNamespaceScopes ) ){ 51 // 包括しているときは同一と見なす 52 return true; 53 } 54 } 55 else{ 56 if( baseNamespaceScopes.size() ){ 57 // 名前空間の判断が必要なとき 58 if( this->importedNamespaces.IsImported( baseNamespaceScopes ) 59 || baseNamespaceScopes.IsLiving() ){ 60 // Using指定があるとき 61 // または 62 // 指定された名前空間が現在の名前空間スコープと同一のとき 63 return true; 64 } 65 } 66 else{ 67 return true; 68 } 69 } 70 71 return false; 72 } 12 73 }; 74 75 static Compiler compiler; -
trunk/abdev/BasicCompiler_Common/include/MetaImpl.h
r191 r193 7 7 #include <ClassImpl.h> 8 8 #include <ProcedureImpl.h> 9 #include <TypeDef.h> 9 10 10 11 class MetaImpl : public Meta 11 12 { 13 // 名前空間 14 NamespaceScopesCollection namespaceScopesCollection; 15 16 // クラス 12 17 ClassesImpl classesImpl; 13 18 Classes *pNowClassesForDebugger; 14 19 20 // blittable型 21 BlittableTypes blittableTypes; 22 23 // TypeDef 24 TypeDefCollection typeDefs; 25 15 26 public: 16 MetaImpl( ClassesImpl *pClasses)27 MetaImpl() 17 28 : Meta( new ProcPointersImpl() ) 18 29 , classesImpl() … … 20 31 { 21 32 } 22 MetaImpl() 23 : Meta()33 34 const NamespaceScopesCollection &GetNamespaces() const 24 35 { 36 return namespaceScopesCollection; 25 37 } 26 38 NamespaceScopesCollection &GetNamespaces() 39 { 40 return namespaceScopesCollection; 41 } 27 42 28 43 virtual Classes &GetClasses() … … 33 48 { 34 49 this->pNowClassesForDebugger = pClasses; 50 } 51 52 BlittableTypes &GetBlittableTypes() 53 { 54 return blittableTypes; 55 } 56 57 TypeDefCollection &GetTypeDefs() 58 { 59 return typeDefs; 35 60 } 36 61 -
trunk/abdev/BasicCompiler_Common/include/ProcedureImpl.h
r184 r193 49 49 } 50 50 51 virtual bool IsEqualSymbol( const NamespaceScopes &namespaceScopes, const string &name ) const; 52 51 53 virtual bool SetParamsAndReturnType( const char *sourceOfParams, int nowLine ); 52 54 }; -
trunk/abdev/BasicCompiler_Common/include/SmoothieImpl.h
r191 r193 9 9 { 10 10 friend Smoothie; 11 static MetaImpl metaImpl; 11 12 12 public: 13 13 SmoothieImpl() … … 15 15 { 16 16 } 17 18 // blittable型 19 BlittableTypes blittableTypes; 17 20 }; -
trunk/abdev/BasicCompiler_Common/src/ClassImpl.cpp
r185 r193 76 76 77 77 78 bool ClassImpl::IsEqualSymbol( const NamespaceScopes &namespaceScopes, const string &name ) const 79 { 80 if( GetName() != name ){ 81 return false; 82 } 83 84 return compiler.IsSameAreaNamespace( GetNamespaceScopes(), namespaceScopes ); 85 } 86 78 87 bool ClassImpl::Inherits( const char *inheritNames, int nowLine ){ 79 88 int i = 0; … … 91 100 92 101 //継承元クラスを取得 93 const CClass *pInheritsClass = Smoothie::GetMeta().GetClasses().Find(temporary);102 const CClass *pInheritsClass = compiler.GetMeta().GetClasses().Find(temporary); 94 103 if( !pInheritsClass ){ 95 104 SmoothieException::Throw(106,temporary,nowLine); … … 121 130 if( !isInheritsClass ){ 122 131 // クラスを一つも継承していないとき 123 const CClass *pObjectClass = Smoothie::GetMeta().GetClasses().Find("Object");132 const CClass *pObjectClass = compiler.GetMeta().GetClasses().Find("Object"); 124 133 if( !pObjectClass ){ 125 134 SmoothieException::Throw(106,"Object",i); … … 145 154 146 155 //継承元クラスを取得 147 const CClass *pInheritsClass = Smoothie::GetMeta().GetClasses().Find(temporary);156 const CClass *pInheritsClass = compiler.GetMeta().GetClasses().Find(temporary); 148 157 if( !pInheritsClass ){ 149 158 SmoothieException::Throw(106,temporary,nowLine); … … 184 193 //継承先が読み取られていないとき 185 194 pobj_LoopRefCheck->add(this->GetName().c_str()); 186 Smoothie::GetMeta().GetClasses().GetClass_recur(inheritsClass.GetName().c_str());195 compiler.GetMeta().GetClasses().GetClass_recur(inheritsClass.GetName().c_str()); 187 196 pobj_LoopRefCheck->del(this->GetName().c_str()); 188 197 } … … 246 255 //継承先が読み取られていないとき 247 256 pobj_LoopRefCheck->add(this->GetName().c_str()); 248 Smoothie::GetMeta().GetClasses().GetClass_recur(inheritsInterface.GetName().c_str());257 compiler.GetMeta().GetClasses().GetClass_recur(inheritsInterface.GetName().c_str()); 249 258 pobj_LoopRefCheck->del(this->GetName().c_str()); 250 259 } … … 470 479 } 471 480 472 vtbl_offset= Compiler::GetNativeCode().GetDataTable().AddBinary((void *)ppsi,GetVtblNum()*sizeof(LONG_PTR));481 vtbl_offset=compiler.GetNativeCode().GetDataTable().AddBinary((void *)ppsi,GetVtblNum()*sizeof(LONG_PTR)); 473 482 474 483 for( int i=0; i < GetVtblNum(); i++ ){ … … 484 493 485 494 LONG_PTR *pVtbl; 486 pVtbl=(LONG_PTR *)((char *) Compiler::GetNativeCode().GetDataTable().GetPtr()+vtbl_offset);495 pVtbl=(LONG_PTR *)((char *)compiler.GetNativeCode().GetDataTable().GetPtr()+vtbl_offset); 487 496 488 497 int i; … … 505 514 506 515 // Blittable型管理オブジェクトを初期化 507 Smoothie::GetMeta().blittableTypes.clear();516 compiler.GetMeta().GetBlittableTypes().clear(); 508 517 509 518 // 名前空間管理 … … 512 521 513 522 // Importsされた名前空間の管理 514 NamespaceScopesCollection &importedNamespaces = Smoothie::Temp::importedNamespaces;523 NamespaceScopesCollection &importedNamespaces = compiler.GetImportedNamespaces(); 515 524 importedNamespaces.clear(); 516 525 … … 549 558 temporary[i2]=source[i]; 550 559 } 551 if( ! importedNamespaces.Imports( temporary ) )560 if( !compiler.ImportsNamespace( temporary ) ) 552 561 { 553 562 SmoothieException::Throw(64,temporary,i ); … … 580 589 i+=10; 581 590 i+=GetStringInPare_RemovePare(temporary,source.GetBuffer()+i)+1; 582 Type::StringToType( temporary, blittableType );591 Compiler::StringToType( temporary, blittableType ); 583 592 } 584 593 … … 625 634 626 635 // Blittable型として登録 627 Smoothie::GetMeta().blittableTypes.push_back( BlittableType( blittableType, pClass ) );636 compiler.GetMeta().GetBlittableTypes().push_back( BlittableType( blittableType, pClass ) ); 628 637 } 629 638 } … … 783 792 784 793 //継承元クラスを取得 785 const CClass *pInheritsClass = Find(temporary); 794 const Classes &classes = *this; 795 const CClass *pInheritsClass = classes.Find(temporary); 786 796 if( !pInheritsClass ){ 787 797 SetError(106,temporary,i); … … 1283 1293 }*/ 1284 1294 } 1295 1296 const CClass *ClassesImpl::Find( const NamespaceScopes &namespaceScopes, const string &name ) const 1297 { 1298 int key; 1299 key=GetHashCode(name.c_str()); 1300 1301 if( namespaceScopes.size() == 0 && name == "Object" ){ 1302 return GetObjectClassPtr(); 1303 } 1304 else if( namespaceScopes.size() == 0 && name == "String" ){ 1305 return GetStringClassPtr(); 1306 } 1307 1308 if(pobj_ClassHash[key]){ 1309 CClass *pobj_c; 1310 pobj_c=pobj_ClassHash[key]; 1311 while(1){ 1312 if( pobj_c->IsEqualSymbol( namespaceScopes, name ) ){ 1313 //名前空間とクラス名が一致した 1314 return pobj_c; 1315 } 1316 1317 if(pobj_c->pobj_NextClass==0) break; 1318 pobj_c=pobj_c->pobj_NextClass; 1319 } 1320 } 1321 1322 // TypeDefも見る 1323 int index = compiler.GetMeta().GetTypeDefs().GetIndex( namespaceScopes, name ); 1324 if( index != -1 ){ 1325 Type type = compiler.GetMeta().GetTypeDefs()[index].GetBaseType(); 1326 if( type.IsObject() ){ 1327 return &type.GetClass(); 1328 } 1329 } 1330 1331 return NULL; 1332 } -
trunk/abdev/BasicCompiler_Common/src/Compiler.cpp
r184 r193 1 #include <jenga/include/smoothie/Type.h> 2 #include <jenga/include/smoothie/SmoothieException.h> 3 1 4 #include <Compiler.h> 2 5 3 NativeCode Compiler::nativeCode; 6 7 bool Compiler::StringToType( const string &typeName, Type &type ){ 8 type.SetIndex( -1 ); 9 10 if( typeName[0] == '*' ){ 11 if( typeName.size() >= 3 12 && typeName[1] == 1 && ( typeName[2] == ESC_FUNCTION || typeName[2] == ESC_SUB ) ){ 13 //関数ポインタ(*Function) 14 type.SetBasicType( DEF_PTR_PROC ); 15 type.SetIndex( compiler.GetMeta().GetProcPointers().Add( typeName ) ); 16 return true; 17 } 18 19 const string &nextTypeName = typeName.substr( 1 ); 20 21 if( !StringToType( nextTypeName, type ) ){ 22 return false; 23 } 24 25 type.PtrLevelUp(); 26 27 return true; 28 } 29 30 { 31 int basicType; 32 if( Type::StringToBasicType( typeName, basicType ) ){ 33 // 基本型だったとき 34 type.SetBasicType( basicType ); 35 return true; 36 } 37 } 38 39 // Object型だったとき 40 if( typeName == "Object" ){ 41 type.SetType( DEF_OBJECT, compiler.GetMeta().GetClasses().GetObjectClassPtr() ); 42 return true; 43 } 44 45 // String型だったとき 46 if( typeName == "String" ){ 47 type.SetType( DEF_OBJECT, compiler.GetMeta().GetClasses().GetStringClassPtr() ); 48 return true; 49 } 50 51 52 //////////////////// 53 // TypeDefされた型 54 //////////////////// 55 int i=compiler.GetMeta().GetTypeDefs().GetIndex( typeName ); 56 if(i!=-1){ 57 type = compiler.GetMeta().GetTypeDefs()[i].GetBaseType(); 58 return true; 59 } 60 61 //クラス 62 const CClass *pobj_c = compiler.GetMeta().GetClasses().Find( typeName ); 63 if(pobj_c){ 64 type.SetClassPtr( pobj_c ); 65 66 if( pobj_c->IsStructure() ){ 67 type.SetBasicType( DEF_STRUCT ); 68 } 69 else{ 70 type.SetBasicType( DEF_OBJECT ); 71 } 72 return true; 73 } 74 75 return false; 76 } 77 78 const string Compiler::TypeToString( const Type &type ) 79 { 80 if( PTR_LEVEL( type.GetBasicType() ) ){ 81 //ポインタレベルが1以上の場合 82 Type tempType( type ); 83 tempType.PtrLevelDown(); 84 85 return (string)"*" + TypeToString( type ); 86 } 87 else if( type.IsObject() || type.IsStruct() ){ 88 //オブジェクトまたは構造体 89 90 if( !( type.GetIndex() == 0 || type.GetIndex() == -1 ) ){ 91 if( type.GetClass().GetNamespaceScopes().size() >= 1 ) 92 { 93 return type.GetClass().GetNamespaceScopes().ToString() + "." + type.GetClass().GetName(); 94 } 95 return type.GetClass().GetName(); 96 } 97 } 98 else if( type.IsProcPtr() ){ 99 if( type.GetIndex() == 0 || type.GetIndex() == -1 ){ 100 return "VoidPtr"; 101 } 102 else{ 103 if( compiler.GetMeta().GetProcPointers()[type.GetIndex()]->ReturnType().IsNull() ){ 104 return "*Sub"; 105 } 106 return "*Function"; 107 } 108 } 109 else{ 110 // 基本型 111 const char *lpszTypeName = Type::BasicTypeToCharPtr( type ); 112 if( lpszTypeName ) 113 { 114 return (const string)lpszTypeName; 115 } 116 } 117 118 SmoothieException::Throw( 1 ); 119 120 return (string)"(null)"; 121 } -
trunk/abdev/BasicCompiler_Common/src/ProcedureImpl.cpp
r185 r193 2 2 #include <jenga/include/smoothie/LexicalAnalysis.h> 3 3 4 #include <Compiler.h> 4 5 #include <ProcedureImpl.h> 5 6 … … 104 105 //cp = nowLine; 105 106 106 NumOpe_GetType( initValue, Type::String(), type );107 NumOpe_GetType( initValue, GetStringTypeInfo(), type ); 107 108 } 108 109 else if(sourceOfParams[i]==1&&sourceOfParams[i+1]==ESC_AS){ … … 129 130 } 130 131 131 Type::StringToType( temporary, type );132 Compiler::StringToType( temporary, type ); 132 133 133 134 if( type.IsNull() ){ … … 257 258 } 258 259 259 Type::StringToType( temporary, type );260 Compiler::StringToType( temporary, type ); 260 261 261 262 if( type.IsNull() ){ … … 326 327 temporary[i3]=sourceOfParams[i2]; 327 328 } 328 Type::StringToType( temporary, this->returnType );329 Compiler::StringToType( temporary, this->returnType ); 329 330 if( this->returnType.IsNull() ) SmoothieException::Throw(3,temporary,nowLine); 330 331 … … 387 388 } 388 389 389 return NamespaceScopes::IsSameArea( GetNamespaceScopes(), namespaceScopes );390 return compiler.IsSameAreaNamespace( GetNamespaceScopes(), namespaceScopes ); 390 391 } 391 392 bool GlobalProc::IsEqualSymbol( const GlobalProc &globalProc ) const … … 402 403 } 403 404 405 bool DllProcImpl::IsEqualSymbol( const NamespaceScopes &namespaceScopes, const string &name ) const 406 { 407 if( GetName() != name ){ 408 return false; 409 } 410 return compiler.IsSameAreaNamespace( this->GetNamespaceScopes(), namespaceScopes ); 411 } 404 412 bool DllProcImpl::SetParamsAndReturnType( const char *sourceOfParams, int nowLine ){ 405 413 int i = 0; … … 505 513 } 506 514 507 Type::StringToType( temporary, type );515 Compiler::StringToType( temporary, type ); 508 516 509 517 if( type.IsNull() ){ … … 559 567 temporary[i3]=sourceOfParams[i2]; 560 568 } 561 Type::StringToType( temporary, this->returnType );569 Compiler::StringToType( temporary, this->returnType ); 562 570 if( this->returnType.IsNull() ) SmoothieException::Throw(3,temporary,nowLine); 563 571 … … 676 684 } 677 685 678 Type::StringToType( temporary, type );686 Compiler::StringToType( temporary, type ); 679 687 680 688 if( type.IsNull() ){ … … 730 738 temporary[i3]=sourceOfParams[i2]; 731 739 } 732 Type::StringToType( temporary, this->returnType );740 Compiler::StringToType( temporary, this->returnType ); 733 741 if( this->returnType.IsNull() ) SmoothieException::Throw(3,temporary,nowLine); 734 742 -
trunk/abdev/BasicCompiler_Common/src/SmoothieImpl.cpp
r191 r193 6 6 #include <LexicalScopingImpl.h> 7 7 8 MetaImpl SmoothieImpl::metaImpl(9 new ClassesImpl()10 );11 12 8 CLexicalScopes *Smoothie::Temp::pLexicalScopes = new LexicalScopesImpl(); 13 14 15 Meta &Smoothie::GetMeta()16 {17 return SmoothieImpl::metaImpl;18 }
Note:
See TracChangeset
for help on using the changeset viewer.