Changeset 204 in dev
- Timestamp:
- Jul 3, 2007, 3:49:56 AM (17 years ago)
- Location:
- trunk/abdev
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp
r199 r204 472 472 //(継承元がインターフェイスの場合も基底クラスと見なす) 473 473 BOOL bThisIsSuperClass; 474 if( Smoothie::Temp::pCompilingClass->pobj_InheritsClass==0) bThisIsSuperClass=1;475 else if( Smoothie::Temp::pCompilingClass-> pobj_InheritsClass->GetConstructorMethod() == NULL ){474 if( !Smoothie::Temp::pCompilingClass->HasSuperClass() ) bThisIsSuperClass=1; 475 else if( Smoothie::Temp::pCompilingClass->GetSuperClass().GetConstructorMethod() == NULL ){ 476 476 //インターフェイスを継承したときはコンストラクタを持たない 477 477 bThisIsSuperClass=1; … … 492 492 temporary[i4]=basbuf[i3]; 493 493 } 494 if( Smoothie::Temp::pCompilingClass-> pobj_InheritsClass->GetName() == temporary ){494 if( Smoothie::Temp::pCompilingClass->GetSuperClass().GetName() == temporary ){ 495 495 //基底クラスのコンストラクタを呼び出す 496 496 cp=i3; … … 509 509 Type dummyType; 510 510 CallProc( PROC_DEFAULT 511 , Smoothie::Temp::pCompilingClass-> pobj_InheritsClass->GetConstructorMethod()->pUserProc512 , Smoothie::Temp::pCompilingClass-> pobj_InheritsClass->GetConstructorMethod()->pUserProc->GetName().c_str()511 , Smoothie::Temp::pCompilingClass->GetSuperClass().GetConstructorMethod()->pUserProc 512 , Smoothie::Temp::pCompilingClass->GetSuperClass().GetConstructorMethod()->pUserProc->GetName().c_str() 513 513 , temporary 514 514 , dummyType ); … … 517 517 //基底クラスのコンストラクタを暗黙的に呼び出す 518 518 Opcode_CallProc("", 519 Smoothie::Temp::pCompilingClass-> pobj_InheritsClass->GetConstructorMethod()->pUserProc,519 Smoothie::Temp::pCompilingClass->GetSuperClass().GetConstructorMethod()->pUserProc, 520 520 0, 521 521 "", … … 590 590 Smoothie::Temp::pCompilingClass->NotifyFinishDestructorCompile(); 591 591 592 if( Smoothie::Temp::pCompilingClass->pobj_InheritsClass){592 if( Smoothie::Temp::pCompilingClass->HasSuperClass() ){ 593 593 /* サブクラスのデストラクタをコンパイルしているときは、 594 594 基底クラスのデストラクタを呼び出す */ 595 595 596 const CMethod *method = Smoothie::Temp::pCompilingClass-> pobj_InheritsClass->GetDestructorMethod();596 const CMethod *method = Smoothie::Temp::pCompilingClass->GetSuperClass().GetDestructorMethod(); 597 597 if( method ){ 598 598 Opcode_CallProc("", -
trunk/abdev/BasicCompiler64/Compile_ProcOp.cpp
r202 r204 523 523 //(継承元がインターフェイスの場合も基底クラスと見なす) 524 524 BOOL bThisIsSuperClass; 525 if( Smoothie::Temp::pCompilingClass->pobj_InheritsClass==0) bThisIsSuperClass=1;526 else if( Smoothie::Temp::pCompilingClass-> pobj_InheritsClass->GetConstructorMethod() == NULL ){525 if( !Smoothie::Temp::pCompilingClass->HasSuperClass() ) bThisIsSuperClass=1; 526 else if( Smoothie::Temp::pCompilingClass->GetSuperClass().GetConstructorMethod() == NULL ){ 527 527 //インターフェイスを継承したときはコンストラクタを持たない 528 528 bThisIsSuperClass=1; … … 543 543 temporary[i4]=basbuf[i3]; 544 544 } 545 if( Smoothie::Temp::pCompilingClass-> pobj_InheritsClass->GetName() == temporary ){545 if( Smoothie::Temp::pCompilingClass->GetSuperClass().GetName() == temporary ){ 546 546 //基底クラスのコンストラクタを呼び出す 547 547 cp=i3; … … 560 560 Type dummyType; 561 561 CallProc( PROC_DEFAULT 562 , Smoothie::Temp::pCompilingClass-> pobj_InheritsClass->GetConstructorMethod()->pUserProc563 , Smoothie::Temp::pCompilingClass-> pobj_InheritsClass->GetConstructorMethod()->pUserProc->GetName().c_str()562 , Smoothie::Temp::pCompilingClass->GetSuperClass().GetConstructorMethod()->pUserProc 563 , Smoothie::Temp::pCompilingClass->GetSuperClass().GetConstructorMethod()->pUserProc->GetName().c_str() 564 564 , temporary 565 565 , dummyType ); … … 568 568 //基底クラスのコンストラクタを暗黙的に呼び出す 569 569 Opcode_CallProc("", 570 Smoothie::Temp::pCompilingClass-> pobj_InheritsClass->GetConstructorMethod()->pUserProc,570 Smoothie::Temp::pCompilingClass->GetSuperClass().GetConstructorMethod()->pUserProc, 571 571 0, 572 572 "", … … 640 640 Smoothie::Temp::pCompilingClass->NotifyFinishDestructorCompile(); 641 641 642 if( Smoothie::Temp::pCompilingClass->pobj_InheritsClass){642 if( Smoothie::Temp::pCompilingClass->HasSuperClass() ){ 643 643 /* サブクラスのデストラクタをコンパイルしているときは、 644 644 基底クラスのデストラクタを呼び出す */ 645 645 646 const CMethod *method = Smoothie::Temp::pCompilingClass-> pobj_InheritsClass->GetDestructorMethod();646 const CMethod *method = Smoothie::Temp::pCompilingClass->GetSuperClass().GetDestructorMethod(); 647 647 if( method ){ 648 648 Opcode_CallProc("", -
trunk/abdev/BasicCompiler_Common/error.cpp
r182 r204 480 480 pobj_tempClass=(CClass *)lpCalcIndex; 481 481 while(pobj_tempClass&&(!IS_LITERAL((LONG_PTR)pobj_tempClass))){ 482 pobj_tempClass= pobj_tempClass->pobj_InheritsClass;482 pobj_tempClass=&pobj_tempClass->GetSuperClass(); 483 483 484 484 if(lpVarIndex==(LONG_PTR)pobj_tempClass){ -
trunk/abdev/BasicCompiler_Common/src/ClassImpl.cpp
r199 r204 241 241 242 242 //継承先のクラスをメンバとして保持する 243 pobj_InheritsClass = &inheritsClass;243 SetSuperClass( &inheritsClass ); 244 244 245 245 return true; … … 807 807 else{ 808 808 //継承無し 809 pobj_c->pobj_InheritsClass=0; 810 811 //仮想関数の数を初期化 812 pobj_c->SetVtblNum( 0 ); 809 if( &pobj_c->GetSuperClass() || pobj_c->GetVtblNum() ) 810 { 811 // TODO: ここに来ないことが実証できたらこの分岐は消す 812 throw; 813 } 813 814 } 814 815 Interface_InheritsError: … … 939 940 940 941 if( pobj_c->GetName() == "Object" || dwClassType == ESC_TYPE ){ 941 // 継承無し942 pobj_c->pobj_InheritsClass = NULL;943 944 // 仮想関数の数を初期化945 pobj_c->SetVtblNum( 0 );942 if( &pobj_c->GetSuperClass() || pobj_c->GetVtblNum() ) 943 { 944 // TODO: ここに来ないことが実証できたらこの分岐は消す 945 throw; 946 } 946 947 } 947 948 else{ … … 1243 1244 } 1244 1245 1245 if( objClass. pobj_InheritsClass){1246 if( objClass.HasSuperClass() ){ 1246 1247 sprintf( temporary 1247 1248 , "tempType=Search(\"%s\",\"%s\")" … … 1256 1257 , "tempType.SetBaseType(Search(\"%s\",\"%s\"))" 1257 1258 , "" // 名前空間 (TODO: 実装) 1258 , objClass. pobj_InheritsClass->GetName().c_str() // 基底クラス名1259 , objClass.GetSuperClass().GetName().c_str() // 基底クラス名 1259 1260 ); 1260 1261
Note:
See TracChangeset
for help on using the changeset viewer.