Changeset 350 in dev for trunk/abdev
- Timestamp:
- Oct 14, 2007, 9:41:03 PM (17 years ago)
- Location:
- trunk/abdev
- Files:
-
- 1 deleted
- 28 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler32/Compile_CallProc.cpp
r349 r350 156 156 ///////////////////////////////// 157 157 pMethod = NULL; 158 if( ! isStatic ) pMethod = pobj_c->GetDynamicMethodO fInterfaceMethod( pUserProc );158 if( ! isStatic ) pMethod = pobj_c->GetDynamicMethodOrInterfaceMethod( pUserProc ); 159 159 if( ! pMethod ){ 160 160 //動的メソッドが取得できなかったときは静的メソッドを当たる … … 280 280 ////////////////////////////////////////////////////// 281 281 // メンバ関数の場合 282 // ※_System_LocalThis パラメータを セット282 // ※_System_LocalThis パラメータをecxにセット 283 283 ////////////////////////////////////////////////////// 284 284 … … 319 319 } 320 320 } 321 322 //push ecx 323 compiler.codeGenerator.op_push(REG_ECX); 324 } 325 326 if( pUserProc->IsVirtual() && !isFixedClass ){ 327 //仮想関数(オブジェクトメソッド)呼び出し 328 //pObj->func_table->func1 329 // ->func2 330 // ->func3 331 321 } 322 323 if( pUserProc->IsVirtual() && !isFixedClass ) 324 { 332 325 int vtblIndex; 333 326 if( pobj_c->IsInterface() ) … … 347 340 348 341 // インターフェイスの場合は更に__thisを取得する 349 //mov rcx,qword ptr[rcx+offset_this]342 //mov ecx,qword ptr[ecx+offset_this] 350 343 compiler.codeGenerator.op_mov_RM( sizeof(long), REG_ECX, REG_ECX, offset_this, MOD_BASE_DISP8 ); 351 344 … … 376 369 // vtblのポインタを取得 377 370 //mov edx,dword ptr[edx+vtblMasterListIndex] 378 compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EDX, REG_EDX, vtblMasterListIndex, MOD_BASE_DISP32 ); 379 } 371 compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EDX, REG_EDX, vtblMasterListIndex*PTR_SIZE, MOD_BASE_DISP32 ); 372 } 373 374 //push ecx 375 compiler.codeGenerator.op_push(REG_ECX); 380 376 381 377 //call dword ptr[edx+func_index] … … 399 395 //通常呼び出し 400 396 397 if( pUserProc->GetParentClassPtr() && isStatic == false ) 398 { 399 //push ecx 400 compiler.codeGenerator.op_push(REG_ECX); 401 } 402 401 403 //call ProcAddr 402 404 compiler.codeGenerator.op_call(pUserProc); -
trunk/abdev/BasicCompiler32/Compile_Func.cpp
r349 r350 315 315 // vtblのポインタを取得 316 316 //mov edx,dword ptr[edx+vtblMasterListIndex] 317 compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EDX, REG_EDX, vtblMasterListIndex , MOD_BASE_DISP32 );317 compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EDX, REG_EDX, vtblMasterListIndex*PTR_SIZE, MOD_BASE_DISP32 ); 318 318 } 319 319 -
trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp
r331 r350 258 258 UserProc::CompileStartForUserProc( pBackUserProc ); 259 259 cp=BackCp; 260 } 261 else if( userProc.HasParentClass() 262 && userProc.IsCastOperator() 263 && userProc.ReturnType().IsInterface() ) 264 { 265 // インターフェイス型にキャストするためのメソッド 266 267 int vtblMasterListIndex = userProc.GetParentClass().GetVtblMasterListIndex( &userProc.ReturnType().GetClass() ); 268 269 char temporary[1024]; 270 sprintf( temporary, 271 "Return New %s(ObjPtr( This ),Get_LONG_PTR( (Get_LONG_PTR( ObjPtr(This) ) + SizeOf(LONG_PTR)*%d) As VoidPtr ) As VoidPtr )", 272 userProc.ReturnType().GetClass().GetName().c_str(), 273 vtblMasterListIndex 274 ); 275 MakeMiddleCode( temporary ); 276 277 ChangeOpcode( temporary ); 260 278 } 261 279 else{ -
trunk/abdev/BasicCompiler32/Compile_Var.cpp
r334 r350 1214 1214 1215 1215 //New呼び出し 1216 if( type.IsObject() &&(dwFlags&DIMFLAG_NONCALL_CONSTRACTOR)==0&&InitBuf[0]=='\0'){ 1216 if( type.IsObject() 1217 && !type.IsInterface() 1218 &&(dwFlags&DIMFLAG_NONCALL_CONSTRACTOR)==0 1219 &&InitBuf[0]=='\0') 1220 { 1217 1221 char objectSize[255]; 1218 1222 if( subscripts.size() == 0 ){ -
trunk/abdev/BasicCompiler32/NumOpe.cpp
r347 r350 232 232 GetVarFormatString(methodName,parameter,lpPtrOffset,dummy,refType); 233 233 234 objClass.EnumDynamicMethodsO fInterfaceMethods( methodName, userProcs );234 objClass.EnumDynamicMethodsOrInterfaceMethods( methodName, userProcs ); 235 235 if(userProcs.size()){ 236 236 //オーバーロードを解決 … … 819 819 || term[0] == '\"' ) 820 820 { 821 if( baseType.IsObject() || baseType.IsNull() )821 if( !baseType.IsPointer() ) 822 822 { 823 823 //要求タイプがオブジェクト、または未定のとき -
trunk/abdev/BasicCompiler32/Opcode.h
r334 r350 220 220 //OperatorProc.cpp 221 221 void FreeTempObject(int reg,const CClass *pobj_c); 222 int CallOperatorProc(int idCalc, const Type &baseType, int *type_stack, LONG_PTR *index_stack,BOOL *bUseHeap,int &sp);222 int CallOperatorProc(int idCalc, const Type &baseType, int *type_stack, LONG_PTR *index_stack,BOOL *bUseHeap,int &sp); 223 223 void CallCastOperatorProc(Type &calcType,BOOL bCalcUseHeap,const Type &toType); 224 224 void CallIndexerGetterProc( const Type &classType, const char *ObjectName, char *Parameter,Type &resultType, DWORD dwProcFlags = 0 ); -
trunk/abdev/BasicCompiler32/OperatorProc.cpp
r342 r350 28 28 } 29 29 30 int CallOperatorProc(int idCalc, const Type &baseType, int *type_stack,LONG_PTR *index_stack,BOOL *bUseHeap,int &sp){ 30 int CallOperatorProc(int idCalc, const Type &baseType, int *type_stack, LONG_PTR *index_stack,BOOL *bUseHeap,int &sp) 31 { 32 Type leftType( type_stack[sp-2], index_stack[sp-2] ); 33 Type rightType( type_stack[sp-1] & (~FLAG_CAST), index_stack[sp-1] ); 34 31 35 //オーバーロードされたオペレータ関数を呼び出す 32 CClass *pobj_c; 33 pobj_c=(CClass *)index_stack[sp-2]; 36 const CClass *pobj_c = &leftType.GetClass(); 34 37 35 38 std::vector<const UserProc *> subs; … … 52 55 53 56 if(bTwoTerm){ 54 params.push_back( new Parameter( "", Type( type_stack[sp-1], index_stack[sp-1] )) );57 params.push_back( new Parameter( "", rightType ) ); 55 58 } 56 59 … … 89 92 } 90 93 91 int right_side_size = Type(type_stack[sp-1],index_stack[sp-1]).GetSize();94 int right_side_size = rightType.GetSize(); 92 95 93 96 if(bTwoTerm){ -
trunk/abdev/BasicCompiler64/BasicCompiler.vcproj
r345 r350 795 795 > 796 796 <File 797 RelativePath=".\Compile_Interface.cpp"798 >799 <FileConfiguration800 Name="Debug|Win32"801 >802 <Tool803 Name="VCCLCompilerTool"804 UsePrecompiledHeader="2"805 />806 </FileConfiguration>807 <FileConfiguration808 Name="Release|Win32"809 >810 <Tool811 Name="VCCLCompilerTool"812 UsePrecompiledHeader="2"813 />814 </FileConfiguration>815 </File>816 <File817 797 RelativePath=".\Compile_Object.cpp" 818 798 > -
trunk/abdev/BasicCompiler64/Compile_CallProc.cpp
r349 r350 164 164 ///////////////////////////////// 165 165 pMethod = NULL; 166 if( ! isStatic ) pMethod = pobj_c->GetDynamicMethodO fInterfaceMethod( pUserProc );166 if( ! isStatic ) pMethod = pobj_c->GetDynamicMethodOrInterfaceMethod( pUserProc ); 167 167 if( ! pMethod ){ 168 168 //動的メソッドが取得できなかったときは静的メソッドを当たる -
trunk/abdev/BasicCompiler64/Compile_ProcOp.cpp
r331 r350 179 179 UserProc::CompileStartForUserProc( pBackUserProc ); 180 180 cp=BackCp; 181 } 182 else if( userProc.HasParentClass() 183 && userProc.IsCastOperator() 184 && userProc.ReturnType().IsInterface() ) 185 { 186 // インターフェイス型にキャストするためのメソッド 187 188 int vtblMasterListIndex = userProc.GetParentClass().GetVtblMasterListIndex( &userProc.ReturnType().GetClass() ); 189 190 char temporary[1024]; 191 sprintf( temporary, 192 "Return New %s(ObjPtr( This ),Get_LONG_PTR( (Get_LONG_PTR( ObjPtr(This) ) + SizeOf(LONG_PTR)*%d) As VoidPtr ) As VoidPtr )", 193 userProc.ReturnType().GetClass().GetName().c_str(), 194 vtblMasterListIndex 195 ); 196 MakeMiddleCode( temporary ); 197 198 ChangeOpcode( temporary ); 181 199 } 182 200 else{ -
trunk/abdev/BasicCompiler64/Compile_Var.cpp
r339 r350 1226 1226 } 1227 1227 1228 //コンストラクタ呼び出し 1229 if( type.IsObject() &&(dwFlags&DIMFLAG_NONCALL_CONSTRACTOR)==0&&InitBuf[0]=='\0'){ 1228 //New呼び出し 1229 if( type.IsObject() 1230 && !type.IsInterface() 1231 &&(dwFlags&DIMFLAG_NONCALL_CONSTRACTOR)==0 1232 &&InitBuf[0]=='\0') 1233 { 1230 1234 char objectSize[255]; 1231 1235 if( subscripts.size() == 0 ){ -
trunk/abdev/BasicCompiler64/NumOpe.cpp
r347 r350 233 233 GetVarFormatString(methodName,parameter,lpPtrOffset,dummy,refType); 234 234 235 objClass.EnumDynamicMethodsO fInterfaceMethods( methodName, userProcs );235 objClass.EnumDynamicMethodsOrInterfaceMethods( methodName, userProcs ); 236 236 if(userProcs.size()){ 237 237 //オーバーロードを解決 … … 751 751 752 752 753 if( strstr(expression,"xxxxx")) 754 { 755 int test=0; 756 } 753 757 754 758 //////////////////////////////// … … 789 793 // ダウンキャストを許可する 790 794 } 791 else if( idCalc == CALC_AS792 && type_stack[sp-1] == ( DEF_OBJECT | FLAG_CAST ) && ((CClass *)index_stack[sp-1])->IsInterface()793 ){794 // インターフェイスへのキャスト795 // TODO: 実装796 CastToInterface( pobj_reg->GetLockingReg(), REG_R15, *(CClass *)index_stack[sp-2], *(CClass *)index_stack[sp-1] );797 }798 795 else{ 799 796 //オーバーロードされたオペレータを呼び出す … … 853 850 || term[0] == '\"' ) 854 851 { 855 if( baseType.IsObject() || baseType.IsNull() )852 if( !baseType.IsPointer() ) 856 853 { 857 854 //要求タイプがオブジェクト、または未定のとき -
trunk/abdev/BasicCompiler64/Opcode.h
r339 r350 245 245 void SetReg_WholeVariable( const Type &type, RELATIVE_VAR *pRelativeVar,int reg); 246 246 247 //Compile_Interface.cpp248 bool CastToInterface( int reg, int vtblReg, const CClass &baseClass, const CClass &interfaceClass );249 250 247 //Compile_Object.cpp 251 248 void Operator_New( const CClass &classObj, const char *objectSizeStr, const char *parameter,const Type &baseTypeInfo ); -
trunk/abdev/BasicCompiler64/OperatorProc.cpp
r345 r350 33 33 } 34 34 35 int CallOperatorProc(BYTE idCalc, const Type &baseType, int *type_stack,LONG_PTR *index_stack,BOOL *bUseHeap,int &sp){ 35 int CallOperatorProc(BYTE idCalc, const Type &baseType, int *type_stack,LONG_PTR *index_stack,BOOL *bUseHeap,int &sp) 36 { 37 Type leftType( type_stack[sp-2], index_stack[sp-2] ); 38 Type rightType( type_stack[sp-1] & (~FLAG_CAST), index_stack[sp-1] ); 39 36 40 //オーバーロードされたオペレータ関数を呼び出す 37 CClass *pobj_c; 38 pobj_c=(CClass *)index_stack[sp-2]; 41 const CClass *pobj_c = &leftType.GetClass(); 39 42 40 43 std::vector<const UserProc *> subs; … … 56 59 Parameters params; 57 60 58 if(bTwoTerm){ 59 params.push_back( new Parameter( "", Type( type_stack[sp-1], index_stack[sp-1] ) ) ); 61 if(bTwoTerm) 62 { 63 params.push_back( new Parameter( "", rightType ) ); 60 64 } 61 65 … … 94 98 } 95 99 96 int right_side_size = Type(type_stack[sp-1],index_stack[sp-1]).GetSize();100 int right_side_size = rightType.GetSize(); 97 101 98 102 if(bTwoTerm){ -
trunk/abdev/BasicCompiler_Common/MakeExe.cpp
r322 r350 11 11 extern HWND hMainDlg; 12 12 PostMessage(GetDlgItem(hMainDlg,IDC_PROGRESS),PBM_STEPIT,0,0); 13 } 14 15 void MakeMiddleCode( char *buffer ) 16 { 17 // 改行コードをCRLFからLFにする 18 ChangeReturnCode( buffer ); 19 20 // コメントを除去 21 DeleteComment( buffer ); 22 23 //エスケープシーケンス設定 24 SetEscapeSequenceFormat( buffer ); 25 26 //コマンド対応 27 ChangeCommandToCode( buffer ); 13 28 } 14 29 … … 18 33 lstrcpy(temp,buffer); 19 34 20 // 改行コードをCRLFからLFにする 21 ChangeReturnCode(temp); 22 23 // コメントを除去 24 DeleteComment( temp ); 25 26 //エスケープシーケンス設定 27 SetEscapeSequenceFormat(temp); 28 29 //コマンド対応 30 ChangeCommandToCode(temp); 35 MakeMiddleCode( temp ); 31 36 32 37 //最後尾に貼り付け -
trunk/abdev/BasicCompiler_Common/NumOpe_GetType.cpp
r347 r350 342 342 343 343 vector<const UserProc *> userProcs; 344 leftType.GetClass().EnumDynamicMethodsO fInterfaceMethods( methodName, userProcs );344 leftType.GetClass().EnumDynamicMethodsOrInterfaceMethods( methodName, userProcs ); 345 345 if(userProcs.size()){ 346 346 //オーバーロードを解決 … … 597 597 if( expression[0] == '[' ){ 598 598 if( !baseType.IsPointer() ){ 599 SetError(1,NULL,cp);600 599 return false; 601 600 } … … 716 715 StrLiteral: 717 716 718 if( baseType.IsObject() || baseType.IsNull() ){717 if( !baseType.IsPointer() ){ 719 718 //要求タイプがオブジェクト、または未定のとき 720 719 type_stack[sp]=DEF_OBJECT; -
trunk/abdev/BasicCompiler_Common/common.h
r331 r350 274 274 //MakeExe.cpp 275 275 void StepCompileProgress(void); 276 void MakeMiddleCode( char *buffer ); 276 277 void AddSourceCode(const char *buffer); 277 278 void OutputExe(void); -
trunk/abdev/BasicCompiler_Common/hash.cpp
r347 r350 90 90 else{ 91 91 //動的メソッドから列挙 92 pobj_c->EnumDynamicMethodsO fInterfaceMethods( NestMember, subs );92 pobj_c->EnumDynamicMethodsOrInterfaceMethods( NestMember, subs ); 93 93 } 94 94 … … 105 105 106 106 // 動的メソッド 107 compiler.pCompilingClass->EnumDynamicMethodsO fInterfaceMethods( name, subs );107 compiler.pCompilingClass->EnumDynamicMethodsOrInterfaceMethods( name, subs ); 108 108 } 109 109 … … 157 157 if( pClass ){ 158 158 vector<const UserProc *> userProcs; 159 pClass->EnumDynamicMethodsO fInterfaceMethods( methodName, userProcs );159 pClass->EnumDynamicMethodsOrInterfaceMethods( methodName, userProcs ); 160 160 if( userProcs.size() == 1 ){ 161 161 return userProcs[0]; -
trunk/abdev/BasicCompiler_Common/include/Class.h
r349 r350 386 386 387 387 void AddMethod(CClass *pobj_c, Prototype::Accessibility accessibility, BOOL bStatic, bool isConst, bool isAbstract, 388 bool isVirtual, bool isOverride, char *buffer, int nowLine);388 bool isVirtual, bool isOverride, bool isAutoGeneration, char *buffer, int nowLine); 389 389 390 390 //重複チェック … … 409 409 } 410 410 411 void EnumDynamicMethodsO fInterfaceMethods( const char *methodName, std::vector<const UserProc *> &subs ) const;412 const CMethod *GetDynamicMethodO fInterfaceMethod( const UserProc *pUserProc ) const;411 void EnumDynamicMethodsOrInterfaceMethods( const char *methodName, std::vector<const UserProc *> &subs ) const; 412 const CMethod *GetDynamicMethodOrInterfaceMethod( const UserProc *pUserProc ) const; 413 413 414 414 const Methods &GetStaticMethods() const … … 494 494 public: 495 495 void GetVtblMasterListIndexAndVtblIndex( const UserProc *pUserProc, int &vtblMasterListIndex, int &vtblIndex ) const; 496 int GetVtblMasterListIndex( const CClass *pClass ) const; 496 497 long GetVtblMasterListOffset() const; 497 498 void GenerateVTableMasterList( const std::vector<long> &vtableMasterList, long &offset ); … … 513 514 , pStringClass( NULL ) 514 515 , pObjectClass( NULL ) 516 , pInterfaceInfo( NULL ) 515 517 { 516 518 } -
trunk/abdev/BasicCompiler_Common/include/Procedure.h
r336 r350 323 323 324 324 std::string GetFullName() const; 325 bool IsCastOperator() const; 325 326 326 327 bool IsVirtual() const; -
trunk/abdev/BasicCompiler_Common/include/Type.h
r332 r350 189 189 bool IsAny() const; 190 190 bool IsDelegate() const; 191 bool IsInterface() const; 191 192 192 193 // オブジェクトや構造体など、メンバを持つ型かどうかを判別する -
trunk/abdev/BasicCompiler_Common/include/option.h
r312 r350 19 19 #ifdef USE_TRACE 20 20 // オーバーロードに関するログを生成する 21 //#define USE_TRACE_FOR_OVERLOAD21 #define USE_TRACE_FOR_OVERLOAD 22 22 23 23 // モジュールサイズに関するログを生成する 24 #define USE_TRACE_FOR_SIZE24 //#define USE_TRACE_FOR_SIZE 25 25 26 26 // XMLシリアライズに関するログを生成する 27 #define USE_TRACE_FOR_SERIALIZE27 //#define USE_TRACE_FOR_SERIALIZE 28 28 29 29 // ソースコードステップに関するログを生成する 30 #define USE_TRACE_FOR_SOURCECODESTEP30 //#define USE_TRACE_FOR_SOURCECODESTEP 31 31 #endif 32 32 -
trunk/abdev/BasicCompiler_Common/include/ver.h
r340 r350 6 6 // バージョン付加文字列 7 7 #ifdef _AMD64_ 8 #define VER_INFO "(x64) (rev.35 1)"8 #define VER_INFO "(x64) (rev.356)" 9 9 #else 10 #define VER_INFO "(rev.35 1)"10 #define VER_INFO "(rev.356)" 11 11 #endif -
trunk/abdev/BasicCompiler_Common/src/Class.cpp
r349 r350 449 449 interfaces.push_back( new ::Interface( &interfaceClass ) ); 450 450 451 // キャストメソッドを追加(内部コードは自動生成すること) 452 { 453 // Function Operator() As ITest 454 455 char temporary[1024]; 456 sprintf(temporary,"%c%c%c%c()%c%c%s", 457 1, ESC_FUNCTION, 458 1, ESC_OPERATOR, 459 1, ESC_AS, 460 interfaceClass.GetName().c_str() 461 ); 462 463 this->AddMethod(this, 464 Prototype::Public, 465 0, 466 false, // isConst 467 false, // isAbstract 468 false, // isVirtual 469 false, // isOverride 470 true, // isAutoGeneration 471 temporary, 472 -1 473 ); 474 } 475 451 476 return true; 452 477 } … … 505 530 506 531 void CClass::AddMethod(CClass *pobj_c, Prototype::Accessibility accessibility, BOOL bStatic, bool isConst, bool isAbstract, 507 bool isVirtual, bool isOverride, char *buffer, int nowLine){532 bool isVirtual, bool isOverride, bool isAutoGeneration, char *buffer, int nowLine){ 508 533 int i,i2; 509 534 char temporary[VN_SIZE]; … … 522 547 UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Add( NamespaceScopes(), NamespaceScopesCollection(), buffer,nowLine,isVirtual,pobj_c, (bStatic!=0) ); 523 548 if(!pUserProc) return; 549 550 if( isAutoGeneration ) 551 { 552 // コード自動生成 553 pUserProc->ThisIsAutoGenerationProc(); 554 } 524 555 525 556 … … 665 696 } 666 697 667 void CClass::EnumDynamicMethodsO fInterfaceMethods( const char *methodName, std::vector<const UserProc *> &subs ) const698 void CClass::EnumDynamicMethodsOrInterfaceMethods( const char *methodName, std::vector<const UserProc *> &subs ) const 668 699 { 669 700 // 動的メソッド … … 676 707 } 677 708 } 678 const CMethod *CClass::GetDynamicMethodO fInterfaceMethod( const UserProc *pUserProc ) const709 const CMethod *CClass::GetDynamicMethodOrInterfaceMethod( const UserProc *pUserProc ) const 679 710 { 680 711 // 動的メソッド … … 687 718 { 688 719 result = pInterface->GetDynamicMethods().GetMethodPtr( pUserProc ); 720 if( result ) 721 { 722 return result; 723 } 689 724 } 690 725 } … … 854 889 SetError(); 855 890 return; 891 } 892 int CClass::GetVtblMasterListIndex( const CClass *pClass ) const 893 { 894 int result = 0; 895 896 BOOST_FOREACH( const ::Interface *pInterface, interfaces ) 897 { 898 result++; 899 900 if( &pInterface->GetClass() == pClass ) 901 { 902 return result; 903 } 904 } 905 906 SetError(); 907 return 0; 856 908 } 857 909 long CClass::GetVtblMasterListOffset() const … … 1428 1480 pobj_c->AddMethod(pobj_c, 1429 1481 Prototype::Public, //Publicアクセス権 1430 0, //Static指定なし 1431 false, //Constではない 1432 1, //Abstract 1433 1, //Virtual 1434 0, 1482 0, // bStatic 1483 false, // isConst 1484 true, // isAbstract 1485 true, // isVirtual 1486 false, // isOverride 1487 false, // isAutoGeneration 1435 1488 temporary, 1436 1489 sub_address … … 1719 1772 isVirtual, 1720 1773 isOverride, 1774 false, 1721 1775 temporary, 1722 1776 sub_address); … … 1946 2000 } 1947 2001 1948 pCompilingMethod = pParentClass->GetDynamicMethodO fInterfaceMethod( pUserProc );2002 pCompilingMethod = pParentClass->GetDynamicMethodOrInterfaceMethod( pUserProc ); 1949 2003 if( !pCompilingMethod ){ 1950 2004 pCompilingMethod = pParentClass->GetStaticMethods().GetMethodPtr( pUserProc ); -
trunk/abdev/BasicCompiler_Common/src/Procedure.cpp
r336 r350 24 24 25 25 return GetName(); 26 } 27 bool UserProc::IsCastOperator() const 28 { 29 if( GetName()[0] == 1 && GetName()[1] == ESC_OPERATOR && GetName()[2] == CALC_AS ) 30 { 31 return true; 32 } 33 return false; 26 34 } 27 35 const NamespaceScopes &UserProc::GetNamespaceScopes() const -
trunk/abdev/BasicCompiler_Common/src/Type.cpp
r335 r350 211 211 if( IsObject() ) 212 212 { 213 if( GetClass().IsInterface() ){214 // vtblOffsetのサイズを含める215 return PTR_SIZE*2;216 }217 213 return PTR_SIZE; 218 214 } … … 298 294 bool Type::IsPointer( int basicType ) 299 295 { 296 if( basicType == DEF_NON ) 297 { 298 return false; 299 } 300 300 301 if(PTR_LEVEL( basicType )|| basicType == DEF_PTR_VOID || basicType == DEF_PTR_PROC 301 302 || ( basicType & FLAG_PTR ) ){ … … 448 449 return ( IsObject() && GetClass().IsDelegate() ); 449 450 } 451 bool Type::IsInterface() const 452 { 453 return ( IsObject() && GetClass().IsInterface() ); 454 } 455 450 456 451 457 bool Type::HasMember() const -
trunk/abdev/ProjectEditor/Common.h
r308 r350 66 66 #define APPLICATION_NAME "ActiveBasic 5.0" 67 67 #define VERSION_APPLI_NAME APPLICATION_NAME 68 #define VERSION_STRING "5.00.00 (rev.3 17)"68 #define VERSION_STRING "5.00.00 (rev.356)" 69 69 70 70 #endif -
trunk/abdev/ProjectEditor/SubOperation.cpp
r302 r350 519 519 if(lstrcmpi(str,"If")==0) return COM_IF; 520 520 if(lstrcmpi(str,"Imports")==0) return -1; 521 if(lstrcmpi(str,"Implements")==0) return -1; 521 522 if(lstrcmpi(str,"Inherits")==0) return COM_INHERITS; 522 523 if(lstrcmpi(str,"Input")==0) return COM_INPUT;
Note:
See TracChangeset
for help on using the changeset viewer.