Changeset 193 in dev for trunk/abdev/BasicCompiler_Common
- Timestamp:
- Jun 26, 2007, 5:04:50 AM (17 years ago)
- Location:
- trunk/abdev/BasicCompiler_Common
- Files:
-
- 4 added
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
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.