Changeset 198 in dev for trunk/abdev/BasicCompiler64
- Timestamp:
- Jun 27, 2007, 2:41:17 AM (17 years ago)
- Location:
- trunk/abdev/BasicCompiler64
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler64/BasicCompiler.vcproj
r193 r198 66 66 DebugInformationFormat="3" 67 67 CallingConvention="0" 68 DisableSpecificWarnings="4103" 68 69 /> 69 70 <Tool … … 158 159 EnableIntrinsicFunctions="true" 159 160 FavorSizeOrSpeed="1" 161 WholeProgramOptimization="false" 160 162 AdditionalIncludeDirectories="..\..\;..\..\cpplibs\boost;..\BasicCompiler_Common\include" 161 163 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;JPN;_AMD64_;_WIN64" … … 163 165 ExceptionHandling="1" 164 166 BasicRuntimeChecks="0" 165 RuntimeLibrary=" 0"167 RuntimeLibrary="1" 166 168 RuntimeTypeInfo="true" 167 169 UsePrecompiledHeader="0" … … 176 178 DebugInformationFormat="0" 177 179 CallingConvention="0" 180 DisableSpecificWarnings="4103" 178 181 /> 179 182 <Tool … … 196 199 SuppressStartupBanner="true" 197 200 AdditionalLibraryDirectories="..\..\jenga\lib\amd64" 198 IgnoreDefaultLibraryNames="libcpmt d.lib"201 IgnoreDefaultLibraryNames="libcpmt.lib" 199 202 GenerateDebugInformation="false" 200 203 ProgramDatabaseFile=".\Release/BasicCompiler64.pdb" … … 258 261 > 259 262 </File> 263 <File 264 RelativePath="..\BasicCompiler_Common\include\option.h" 265 > 266 </File> 260 267 <Filter 261 268 Name="言語対応文字列" … … 306 313 </File> 307 314 <File 315 RelativePath="..\BasicCompiler_Common\include\MetaImpl.h" 316 > 317 </File> 318 <File 319 RelativePath="..\BasicCompiler_Common\include\NamespaceSupporter.h" 320 > 321 </File> 322 <File 308 323 RelativePath="..\BasicCompiler_Common\include\ProcedureImpl.h" 309 324 > … … 315 330 <File 316 331 RelativePath="..\BasicCompiler_Common\include\SmoothieImpl.h" 332 > 333 </File> 334 <File 335 RelativePath="..\BasicCompiler_Common\include\TypeDef.h" 336 > 337 </File> 338 <File 339 RelativePath="..\BasicCompiler_Common\include\VariableImpl.h" 317 340 > 318 341 </File> … … 1022 1045 </File> 1023 1046 <File 1047 RelativePath="..\BasicCompiler_Common\src\NamespaceSupporter.cpp" 1048 > 1049 </File> 1050 <File 1024 1051 RelativePath="..\BasicCompiler_Common\src\ProcedureImpl.cpp" 1025 1052 > … … 1031 1058 <File 1032 1059 RelativePath="..\BasicCompiler_Common\src\SmoothieImpl.cpp" 1060 > 1061 </File> 1062 <File 1063 RelativePath="..\BasicCompiler_Common\src\TypeDef.cpp" 1064 > 1065 </File> 1066 <File 1067 RelativePath="..\BasicCompiler_Common\src\VariableImpl.cpp" 1033 1068 > 1034 1069 </File> -
trunk/abdev/BasicCompiler64/Compile_Calc.cpp
r183 r198 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" … … 230 232 } 231 233 232 if( varType.IsObject() && Smoothie::GetMeta().blittableTypes.IsExist( calcType ) ){234 if( varType.IsObject() && compiler.GetMeta().GetBlittableTypes().IsExist( calcType ) ){ 233 235 // Blittable型をオブジェクトとして扱う 234 236 vector<UserProc *> userProcs; 235 Smoothie::GetMeta().blittableTypes.GetClass( calcType ).GetStaticMethods().Enum( "_Create", userProcs );237 compiler.GetMeta().GetBlittableTypes().GetClass( calcType ).GetStaticMethods().Enum( "_Create", userProcs ); 236 238 if( userProcs.size() != 1 ){ 237 239 SetError(); -
trunk/abdev/BasicCompiler64/Compile_CallProc.cpp
r183 r198 1 1 #include <jenga/include/smoothie/Smoothie.h> 2 3 #include <Compiler.h> 2 4 3 5 #include "../BasicCompiler_Common/common.h" … … 134 136 pobj_c = &varType.GetClass(); 135 137 if( NATURAL_TYPE( varType.GetBasicType() ) != DEF_OBJECT ){ 136 pobj_c= Smoothie::GetMeta().GetClasses().Find(ObjectName);138 pobj_c=compiler.GetMeta().GetClasses().Find(ObjectName); 137 139 if( pobj_c ){ 138 140 isStatic = true; -
trunk/abdev/BasicCompiler64/Compile_Func.cpp
r183 r198 1 1 #include <jenga/include/smoothie/Smoothie.h> 2 3 #include <Compiler.h> 2 4 3 5 #include "../BasicCompiler_Common/common.h" … … 32 34 tempParm=temp2; 33 35 34 type.SetType( DEF_OBJECT, Smoothie::GetMeta().GetClasses().GetStringClassPtr() );36 type.SetType( DEF_OBJECT, compiler.GetMeta().GetClasses().GetStringClassPtr() ); 35 37 } 36 38 … … 80 82 81 83 //オーバーロードを解決 82 pUserProc=OverloadSolution(name,subs, Smoothie::GetMeta().GetProcPointers()[ProcPtr_BaseIndex]->Params(), Type() );84 pUserProc=OverloadSolution(name,subs,compiler.GetMeta().GetProcPointers()[ProcPtr_BaseIndex]->Params(), Type() ); 83 85 84 86 if(!pUserProc){ … … 165 167 void Opcode_Func_SizeOf( const string &typeName ){ 166 168 Type tempType; 167 if( ! Type::StringToType( typeName, tempType ) ){169 if( !Compiler::StringToType( typeName, tempType ) ){ 168 170 SetError(3,typeName,cp); 169 171 return; -
trunk/abdev/BasicCompiler64/Compile_ProcOp.cpp
r183 r198 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> 9 #include <NamespaceSupporter.h> 7 10 8 11 #include "../BasicCompiler_Common/common.h" … … 56 59 57 60 //クラスに属する静的メンバを定義 58 Smoothie::GetMeta().GetClasses().InitStaticMember();61 compiler.GetMeta().GetClasses().InitStaticMember(); 59 62 60 63 GetGlobalDataForDll(); … … 215 218 && userProc.GetParentClass().GetName() == "_System_TypeBase" ){ 216 219 217 Smoothie::GetMeta().GetClasses().Compile_System_InitializeUserTypes();220 compiler.GetMeta().GetClasses().Compile_System_InitializeUserTypes(); 218 221 } 219 222 else if( userProc.GetName() == "RegisterGlobalRoots" … … 263 266 264 267 //コンパイルスタートをクラス管理クラスに追加 265 Smoothie::GetMeta().GetClasses().StartCompile( pUserProc );268 compiler.GetMeta().GetClasses().StartCompile( pUserProc ); 266 269 267 270 //コンパイル中の関数 … … 269 272 270 273 // コンパイル中の関数が属する名前空間 271 Smoothie::Temp::liveingNamespaceScopes = pUserProc->GetNamespaceScopes();274 namespaceSupporter.SetLivingNamespaceScopes( pUserProc->GetNamespaceScopes() ); 272 275 273 276 // コンパイル中の関数でImportsされている名前空間 274 Smoothie::Temp::importedNamespaces = pUserProc->GetImportedNamespaces();277 namespaceSupporter.SetImportedNamespaces( pUserProc->GetImportedNamespaces() ); 275 278 276 279 if(pUserProc->IsSystem()){ … … 358 361 Parameter ¶m = *pUserProc->RealParams()[i3]; 359 362 360 Variable *pVar = new Variable ( param.GetVarName(), param, false, param.IsRef() );363 Variable *pVar = new VariableImpl( param.GetVarName(), param, false, param.IsRef() ); 361 364 362 365 if( param.IsArray() ){ … … 479 482 else{ 480 483 if( pUserProc->ReturnType().IsObject() ){ 481 sprintf(temporary,"%s=Nothing%c%c%s",temp,1,ESC_AS, pUserProc->ReturnType().ToString().c_str() );484 sprintf(temporary,"%s=Nothing%c%c%s",temp,1,ESC_AS, Compiler::TypeToString( pUserProc->ReturnType() ).c_str() ); 482 485 } 483 486 else{ 484 487 //戻り値用の変数の定義 485 sprintf(temporary,"%s%c%c%s",temp,1,ESC_AS, pUserProc->ReturnType().ToString().c_str() );488 sprintf(temporary,"%s%c%c%s",temp,1,ESC_AS, Compiler::TypeToString( pUserProc->ReturnType() ).c_str() ); 486 489 } 487 490 -
trunk/abdev/BasicCompiler64/Compile_Statement.cpp
r183 r198 136 136 if(resultType.IsDouble()){ 137 137 double dbl=0; 138 offset= Compiler::GetNativeCode().GetDataTable().Add( dbl );138 offset=compiler.GetNativeCode().GetDataTable().Add( dbl ); 139 139 140 140 //comisd xmm0,qword ptr[data table offset] … … 150 150 else if(resultType.IsSingle()){ 151 151 float flt=0; 152 offset= Compiler::GetNativeCode().GetDataTable().Add( flt );152 offset=compiler.GetNativeCode().GetDataTable().Add( flt ); 153 153 154 154 //comiss xmm0,dword ptr[data table offset] -
trunk/abdev/BasicCompiler64/Compile_Var.cpp
r183 r198 5 5 #include <CodeGenerator.h> 6 6 #include <Compiler.h> 7 #include <VariableImpl.h> 7 8 8 9 #include "../BasicCompiler_Common/common.h" … … 395 396 // 名前空間を分離 396 397 char namespaceStr[VN_SIZE]="", simpleName[VN_SIZE]; 397 Smoothie::GetMeta().namespaceScopesCollection.SplitNamespace( variable, namespaceStr, simpleName );398 compiler.GetMeta().GetNamespaces().SplitNamespace( variable, namespaceStr, simpleName ); 398 399 399 400 // 先頭オブジェクトまたはクラス名と入れ子メンバに分割 … … 488 489 //Const修飾子のメソッド内でメンバ書き込みアクセスが発生したとき 489 490 //(コンストラクタ、デストラクタ内を除く) 490 const CMethod *pMethod = Smoothie::GetMeta().GetClasses().GetNowCompilingMethodInfo();491 const CMethod *pMethod = compiler.GetMeta().GetClasses().GetNowCompilingMethodInfo(); 491 492 if( isWriteAccess && 492 493 pMethod->IsConst() && … … 548 549 } 549 550 550 int typeDefIndex = Smoothie::GetMeta().typeDefs.GetIndex( VarName );551 int typeDefIndex = compiler.GetMeta().GetTypeDefs().GetIndex( VarName ); 551 552 if( typeDefIndex != -1 ){ 552 553 // TypeDef後の型名だったとき 553 lstrcpy( VarName, Smoothie::GetMeta().typeDefs[typeDefIndex].GetBaseName().c_str() );554 lstrcpy( VarName, compiler.GetMeta().GetTypeDefs()[typeDefIndex].GetBaseName().c_str() ); 554 555 } 555 556 … … 851 852 char *temp; 852 853 temp=(char *)i64data; 853 i2= Compiler::GetNativeCode().GetDataTable().AddString( temp );854 i2=compiler.GetNativeCode().GetDataTable().AddString( temp ); 854 855 HeapDefaultFree(temp); 855 856 … … 1001 1002 char *temp; 1002 1003 temp=(char *)i64data; 1003 i2= Compiler::GetNativeCode().GetDataTable().AddString( temp );1004 i2=compiler.GetNativeCode().GetDataTable().AddString( temp ); 1004 1005 HeapDefaultFree(temp); 1005 1006 … … 1082 1083 bool isConst = ( dwFlags & DIMFLAG_CONST ) ? true:false; 1083 1084 1084 Variable *pVar = new Variable ( VarName, type, isConst );1085 Variable *pVar = new VariableImpl( VarName, type, isConst ); 1085 1086 1086 1087 if( SubScripts[0] != -1 ){ -
trunk/abdev/BasicCompiler64/MakePeHdr.cpp
r193 r198 6 6 #include <ClassImpl.h> 7 7 #include <Compiler.h> 8 #include <NamespaceSupporter.h> 8 9 9 10 #include "../BasicCompiler_Common/common.h" … … 125 126 ////////////////// 126 127 // データテーブル 127 Compiler::GetNativeCode().GetDataTable().Init();128 compiler.GetNativeCode().GetDataTable().Init(); 128 129 if(bDebugCompile){ 129 Compiler::GetNativeCode().GetDataTable().Add( (long)0x00000002 );130 compiler.GetNativeCode().GetDataTable().Add( (long)0x00000002 ); 130 131 } 131 132 … … 151 152 152 153 //関数ポインタ情報を初期化 153 Smoothie::GetMeta().GetProcPointers().clear();154 compiler.GetMeta().GetProcPointers().clear(); 154 155 155 156 // 名前空間情報を取得 156 NamespaceS copesCollection::CollectNamespaces(157 NamespaceSupporter::CollectNamespaces( 157 158 Smoothie::Lexical::source.GetBuffer(), 158 Smoothie::GetMeta().namespaceScopesCollection159 compiler.GetMeta().GetNamespaces() 159 160 ); 160 161 … … 162 163 // GetSubInfo関数の中で参照されるオブジェクト名を事前に取得する。 163 164 // ※オブジェクトの内容までは取得しない 164 Smoothie::GetMeta().GetClasses().CollectClassesForNameOnly( Smoothie::Lexical::source );165 compiler.GetMeta().GetClasses().CollectClassesForNameOnly( Smoothie::Lexical::source ); 165 166 166 167 //TypeDef情報を初期化 167 Smoothie::GetMeta().typeDefs.Init();168 compiler.GetMeta().GetTypeDefs().Init(); 168 169 169 170 //定数情報を取得 … … 175 176 176 177 //クラス情報を取得(※注 - GetSubInfoの後に呼び出す) 177 Smoothie::GetMeta().GetClasses().GetAllClassInfo();178 179 Smoothie::GetMeta().AutoWrite( Jenga::Common::Environment::GetAppDir() + "\\meta_test.xml" );178 compiler.GetMeta().GetClasses().GetAllClassInfo(); 179 180 compiler.GetMeta().AutoWrite( Jenga::Common::Environment::GetAppDir() + "\\meta_test.xml" ); 180 181 181 182 //コードと行番号の関係 … … 318 319 if(!bDll){ 319 320 // 名前空間が初期化されているかをチェック 320 if( Smoothie::Temp::liveingNamespaceScopes.size() ){321 if( namespaceSupporter.GetLivingNamespaceScopes().size() ){ 321 322 SetError(); 322 323 } … … 369 370 370 371 //クラスに属する静的メンバを定義 371 Smoothie::GetMeta().GetClasses().InitStaticMember();372 compiler.GetMeta().GetClasses().InitStaticMember(); 372 373 373 374 //グローバル実行領域をコンパイル開始 … … 433 434 434 435 // 名前空間が正しく閉じられているかをチェック 435 if( Smoothie::Temp::liveingNamespaceScopes.size() ){436 if( namespaceSupporter.GetLivingNamespaceScopes().size() ){ 436 437 SetError(63,NULL,-1); 437 438 } … … 883 884 884 885 //データセクションのファイル上のサイズ 885 if( Compiler::GetNativeCode().GetDataTable().GetSize()%FILE_ALIGNMENT) FileSize_DataSection=Compiler::GetNativeCode().GetDataTable().GetSize()+(FILE_ALIGNMENT-Compiler::GetNativeCode().GetDataTable().GetSize()%FILE_ALIGNMENT);886 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(); 887 888 if(FileSize_DataSection) bUse_DataSection=1; 888 889 else bUse_DataSection=0; … … 1073 1074 //////////////////////////////////////// 1074 1075 //仮想関数データテーブルスケジュール 1075 Smoothie::GetMeta().GetClasses().ActionVtblSchedule(ImageBase,MemPos_CodeSection);1076 compiler.GetMeta().GetClasses().ActionVtblSchedule(ImageBase,MemPos_CodeSection); 1076 1077 1077 1078 … … 1609 1610 if(bUse_DataSection){ 1610 1611 //データ テーブル 1611 WriteFile(hFile, Compiler::GetNativeCode().GetDataTable().GetPtr(),Compiler::GetNativeCode().GetDataTable().GetSize(),(DWORD *)&i2,NULL);1612 WriteFile(hFile,compiler.GetNativeCode().GetDataTable().GetPtr(),compiler.GetNativeCode().GetDataTable().GetSize(),(DWORD *)&i2,NULL); 1612 1613 i+=i2; 1613 1614 } … … 1721 1722 1722 1723 //クラスに関するメモリを解放 1723 Smoothie::GetMeta().GetClasses().Clear();1724 compiler.GetMeta().GetClasses().Clear(); 1724 1725 } -
trunk/abdev/BasicCompiler64/NumOpe.cpp
r183 r198 23 23 SetStringQuotes( parameter ); 24 24 25 Operator_New( * Smoothie::GetMeta().GetClasses().GetStringClassPtr(), "", parameter, Type( DEF_OBJECT, *Smoothie::GetMeta().GetClasses().GetStringClassPtr() ) );25 Operator_New( *compiler.GetMeta().GetClasses().GetStringClassPtr(), "", parameter, Type( DEF_OBJECT, *compiler.GetMeta().GetClasses().GetStringClassPtr() ) ); 26 26 27 27 free( parameter ); … … 258 258 Type leftType; 259 259 if( GetTermType( termLeft, leftType, isLiteral, &isClassName ) ){ 260 if( isClassName == false && Smoothie::GetMeta().blittableTypes.IsExist( leftType ) ){260 if( isClassName == false && compiler.GetMeta().GetBlittableTypes().IsExist( leftType ) ){ 261 261 // 左側のオブジェクト部分がBlittable型のとき 262 262 … … 264 264 lstrcpy( temporary, termLeft ); 265 265 sprintf( termLeft, "%s(%s)", 266 Smoothie::GetMeta().blittableTypes.Find( leftType ).GetCreateStaticMethodFullName().c_str(),266 compiler.GetMeta().GetBlittableTypes().Find( leftType ).GetCreateStaticMethodFullName().c_str(), 267 267 temporary ); 268 268 } … … 292 292 293 293 if( pIsClassName ){ 294 if( Smoothie::GetMeta().GetClasses().Find( termFull ) ){294 if( compiler.GetMeta().GetClasses().Find( termFull ) ){ 295 295 *pIsClassName = true; 296 296 return true; … … 456 456 //////////////////////////////// 457 457 458 if( Type::StringToType( termFull, resultType ) ){458 if( Compiler::StringToType( termFull, resultType ) ){ 459 459 resultType.SetBasicType( resultType.GetBasicType() | FLAG_CAST ); 460 460 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 reg,i2 … … 742 742 // As演算子の右辺値 743 743 //型名 744 if( Type::StringToType( term, resultType ) ){744 if( Compiler::StringToType( term, resultType ) ){ 745 745 resultType.SetBasicType( resultType.GetBasicType() | FLAG_CAST ); 746 746 } … … 773 773 774 774 type_stack[sp]=DEF_OBJECT; 775 index_stack[sp]=(LONG_PTR) Smoothie::GetMeta().GetClasses().GetStringClassPtr();775 index_stack[sp]=(LONG_PTR)compiler.GetMeta().GetClasses().GetStringClassPtr(); 776 776 bLiteralCalculation=0; 777 777 … … 786 786 bLiteralCalculation=0; 787 787 788 i2 = Compiler::GetNativeCode().GetDataTable().AddString( term, i3 );788 i2 = compiler.GetNativeCode().GetDataTable().AddString( term, i3 ); 789 789 790 790 //mov reg,i2 … … 882 882 } 883 883 else{ 884 index_stack[sp] = (LONG_PTR) Smoothie::GetMeta().GetClasses().GetObjectClassPtr();884 index_stack[sp] = (LONG_PTR)compiler.GetMeta().GetClasses().GetObjectClassPtr(); 885 885 } 886 886 … … 971 971 } 972 972 else{ 973 i3 = Compiler::GetNativeCode().GetDataTable().Add( i64data );973 i3 = compiler.GetNativeCode().GetDataTable().Add( i64data ); 974 974 975 975 //movlpd xmm_reg,qword ptr[data table offset] … … 1000 1000 } 1001 1001 else{ 1002 i3= Compiler::GetNativeCode().GetDataTable().Add( i32data );1002 i3=compiler.GetNativeCode().GetDataTable().Add( i32data ); 1003 1003 1004 1004 //movss xmm_reg,dword ptr[data table offset] … … 1139 1139 1140 1140 if(resultType.IsDouble()){ 1141 i3 = Compiler::GetNativeCode().GetDataTable().Add( i64data );1141 i3 = compiler.GetNativeCode().GetDataTable().Add( i64data ); 1142 1142 1143 1143 //movlpd xmm_reg,qword ptr[data table offset] … … 1159 1159 memcpy(&i32data,&flt,sizeof(long)); 1160 1160 1161 i3 = Compiler::GetNativeCode().GetDataTable().Add( i32data );1161 i3 = compiler.GetNativeCode().GetDataTable().Add( i32data ); 1162 1162 1163 1163 //movss xmm_reg,dword ptr[data table offset] -
trunk/abdev/BasicCompiler64/NumOpe_Arithmetic.cpp
r183 r198 454 454 double dbl; 455 455 dbl=-1; 456 i32data = Compiler::GetNativeCode().GetDataTable().Add( dbl );456 i32data = compiler.GetNativeCode().GetDataTable().Add( dbl ); 457 457 458 458 //mulsd xmm_reg,qword ptr[data table offset] ※data = -1 … … 476 476 float flt; 477 477 flt=-1; 478 i32data = Compiler::GetNativeCode().GetDataTable().Add( flt );478 i32data = compiler.GetNativeCode().GetDataTable().Add( flt ); 479 479 480 480 //mulss xmm_reg,dword ptr[data table offset] ※data = -1 -
trunk/abdev/BasicCompiler64/NumOpe_TypeOperation.cpp
r183 r198 89 89 int temp; 90 90 _int64 i64data=0x43f0000000000000; 91 temp= Compiler::GetNativeCode().GetDataTable().Add( i64data );91 temp=compiler.GetNativeCode().GetDataTable().Add( i64data ); 92 92 OpBuffer[obp++]=(char)0xF2; 93 93 OpBuffer[obp++]=(char)0x0F; … … 148 148 int temp; 149 149 long i32data=0x5f800000; 150 temp= Compiler::GetNativeCode().GetDataTable().Add( i32data );150 temp=compiler.GetNativeCode().GetDataTable().Add( i32data ); 151 151 OpBuffer[obp++]=(char)0xF3; 152 152 OpBuffer[obp++]=(char)0x0F;
Note:
See TracChangeset
for help on using the changeset viewer.