Changeset 131 in dev
- Timestamp:
- Jun 4, 2007, 7:49:17 AM (17 years ago)
- Files:
-
- 1 added
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler32/BasicCompiler.vcproj
r124 r131 1949 1949 <File 1950 1950 RelativePath="..\BasicCompiler_Common\Procedure.h" 1951 > 1952 </File> 1953 <File 1954 RelativePath="..\BasicCompiler_Common\include\Prototype.h" 1951 1955 > 1952 1956 </File> -
BasicCompiler32/Compile_Object.cpp
r123 r131 36 36 37 37 std::vector<UserProc *> subs; 38 pobj_c->EnumMethod( pobj_c-> name, subs );38 pobj_c->EnumMethod( pobj_c->GetName().c_str(), subs ); 39 39 40 40 UserProc *pUserProc; 41 41 if( subs.size() > 0 ){ 42 42 //オーバーロードを解決 43 pUserProc=OverloadSolutionWithStrParam(pobj_c-> name,43 pUserProc=OverloadSolutionWithStrParam(pobj_c->GetName().c_str(), 44 44 subs,CreateParameter,""); 45 45 … … 59 59 if( subs.size() == 1 ){ 60 60 char temporary[VN_SIZE]; 61 sprintf( temporary, "_System_TypeBase.Search(\"\",\"%s\"))", pobj_c-> name);61 sprintf( temporary, "_System_TypeBase.Search(\"\",\"%s\"))", pobj_c->GetName().c_str() ); 62 62 63 63 Opcode_CallProc(temporary, … … 101 101 if(classObj.IsAbstract()){ 102 102 //抽象クラスだったとき 103 SetError(125,classObj. name,cp);103 SetError(125,classObj.GetName(),cp); 104 104 } 105 105 -
BasicCompiler32/Compile_ProcOp.cpp
r129 r131 215 215 if( userProc.GetName() == "InitializeUserTypes" 216 216 && userProc.HasParentClass() 217 && (string)userProc.GetParentClass().name== "_System_TypeBase" ){217 && userProc.GetParentClass().GetName() == "_System_TypeBase" ){ 218 218 219 219 pobj_DBClass->Compile_System_InitializeUserTypes(); … … 221 221 else if( userProc.GetName() == "RegisterGlobalRoots" 222 222 && userProc.HasParentClass() 223 && (string)userProc.GetParentClass().name== "_System_CGarbageCollection" ){223 && userProc.GetParentClass().GetName() == "_System_CGarbageCollection" ){ 224 224 225 225 Compile_AddGlobalRootsForGc(); … … 451 451 452 452 if(pobj_CompilingClass){ 453 if( pUserProc->GetName() == pobj_CompilingClass-> name){453 if( pUserProc->GetName() == pobj_CompilingClass->GetName() ){ 454 454 //////////////////////////////////// 455 455 // コンストラクタをコンパイルするとき … … 482 482 temporary[i4]=basbuf[i3]; 483 483 } 484 if(lstrcmp(temporary, 485 pobj_CompilingClass->pobj_InheritsClass->name)==0){ 484 if( pobj_CompilingClass->pobj_InheritsClass->GetName() == temporary ){ 486 485 //基底クラスのコンストラクタを呼び出す 487 486 cp=i3; -
BasicCompiler32/Compile_Var.cpp
r120 r131 534 534 //自身のクラスから静的メンバを参照する場合 535 535 char temp2[VN_SIZE]; 536 sprintf(temp2,"%s.%s",pobj_CompilingClass-> name,VarName);536 sprintf(temp2,"%s.%s",pobj_CompilingClass->GetName().c_str(),VarName); 537 537 pVar = globalVars.Find( temp2 ); 538 538 if( pVar ){ -
BasicCompiler64/BasicCompiler.vcproj
r128 r131 492 492 </File> 493 493 <File 494 RelativePath="..\BasicCompiler_Common\include\Prototype.h" 495 > 496 </File> 497 <File 494 498 RelativePath="..\BasicCompiler_Common\Type.h" 495 499 > … … 1127 1131 > 1128 1132 <File 1133 RelativePath=".\Compile_Interface.cpp" 1134 > 1135 </File> 1136 <File 1129 1137 RelativePath=".\Compile_Object.cpp" 1130 1138 > -
BasicCompiler64/Compile_Object.cpp
r123 r131 34 34 35 35 std::vector<UserProc *> subs; 36 pobj_c->EnumMethod( pobj_c-> name, subs );36 pobj_c->EnumMethod( pobj_c->GetName().c_str(), subs ); 37 37 38 38 UserProc *pUserProc; 39 39 if( subs.size() > 0 ){ 40 40 //オーバーロードを解決 41 pUserProc=OverloadSolutionWithStrParam(pobj_c-> name,41 pUserProc=OverloadSolutionWithStrParam(pobj_c->GetName().c_str(), 42 42 subs,CreateParameter,""); 43 43 … … 57 57 if( subs.size() == 1 ){ 58 58 char temporary[VN_SIZE]; 59 sprintf( temporary, "_System_TypeBase.Search(\"\",\"%s\"))", pobj_c-> name);59 sprintf( temporary, "_System_TypeBase.Search(\"\",\"%s\"))", pobj_c->GetName().c_str() ); 60 60 61 61 Opcode_CallProc(temporary, … … 97 97 if(classObj.IsAbstract()){ 98 98 //抽象クラスだったとき 99 SetError(125,classObj. name,cp);99 SetError(125,classObj.GetName().c_str(),cp); 100 100 } 101 101 -
BasicCompiler64/Compile_ProcOp.cpp
r129 r131 206 206 if( userProc.GetName() == "InitializeUserTypes" 207 207 && userProc.HasParentClass() 208 && (string)userProc.GetParentClass().name== "_System_TypeBase" ){208 && userProc.GetParentClass().GetName() == "_System_TypeBase" ){ 209 209 210 210 pobj_DBClass->Compile_System_InitializeUserTypes(); … … 212 212 else if( userProc.GetName() == "RegisterGlobalRoots" 213 213 && userProc.HasParentClass() 214 && (string)userProc.GetParentClass().name== "_System_CGarbageCollection" ){214 && userProc.GetParentClass().GetName() == "_System_CGarbageCollection" ){ 215 215 216 216 Compile_AddGlobalRootsForGc(); … … 503 503 504 504 if(pobj_CompilingClass){ 505 if( pUserProc->GetName() == pobj_CompilingClass-> name){505 if( pUserProc->GetName() == pobj_CompilingClass->GetName() ){ 506 506 //////////////////////////////////// 507 507 // コンストラクタをコンパイルするとき … … 534 534 temporary[i4]=basbuf[i3]; 535 535 } 536 if(lstrcmp(temporary, 537 pobj_CompilingClass->pobj_InheritsClass->name)==0){ 536 if( pobj_CompilingClass->pobj_InheritsClass->GetName() == temporary ){ 538 537 //基底クラスのコンストラクタを呼び出す 539 538 cp=i3; -
BasicCompiler64/Compile_Var.cpp
r129 r131 558 558 //自身のクラスから静的メンバを参照する場合 559 559 char temp2[VN_SIZE]; 560 sprintf(temp2,"%s.%s",pobj_CompilingClass-> name,VarName);560 sprintf(temp2,"%s.%s",pobj_CompilingClass->GetName().c_str(),VarName); 561 561 pVar = globalVars.Find( temp2 ); 562 562 if( pVar ){ -
BasicCompiler64/NumOpe.cpp
r129 r131 678 678 )){ 679 679 // ダウンキャストを許可する 680 } 681 else if( idCalc == CALC_AS 682 && type_stack[sp-1] == ( DEF_OBJECT | FLAG_CAST ) && ((CClass *)index_stack[sp-1])->IsInterface() 683 ){ 684 // インターフェイスへのキャスト 685 // TODO: 実装 686 CastToInterface( pobj_reg->GetLockingReg(), REG_R15, *(CClass *)index_stack[sp-2], *(CClass *)index_stack[sp-1] ); 680 687 } 681 688 else{ -
BasicCompiler64/Opcode.h
r129 r131 245 245 BOOL IsXmmReg(int reg); 246 246 BOOL IsVolatileReg(int reg); 247 void IfR14Push( int reg ); 247 248 248 249 //Compile_Calc.cpp … … 311 312 void SetXmmReg_SingleVariable(RELATIVE_VAR *pRelativeVar,int xmm_reg); 312 313 void SetReg_WholeVariable(int type,RELATIVE_VAR *pRelativeVar,int reg); 314 315 //Compile_Interface.cpp 316 bool CastToInterface( int reg, int vtblReg, const CClass &baseClass, const CClass &interfaceClass ); 313 317 314 318 //Compile_Object.cpp -
BasicCompiler64/Register.cpp
r19 r131 308 308 } 309 309 } 310 311 void IfR14Push( int reg ){ 312 if( reg == REG_R14 ){ 313 //mov qword ptr[rsp+offset],r14 ※スタックフレームを利用 314 pobj_sf->push( REG_R14 ); 315 } 316 } -
BasicCompiler_Common/Class.cpp
r129 r131 102 102 foreach( CMember *member, objClass.staticMembers ){ 103 103 char temporary[VN_SIZE]; 104 sprintf(temporary,"%s.%s",objClass. name,member->name);104 sprintf(temporary,"%s.%s",objClass.GetName().c_str(),member->name); 105 105 dim( 106 106 temporary, … … 151 151 152 152 153 CClass::CClass( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const char *name )154 : namespaceScopes( namespaceScopes)153 CClass::CClass( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const string &name ) 154 : Prototype( namespaceScopes, name ) 155 155 , importedNamespaces( importedNamespaces ) 156 156 , ConstructorMemberSubIndex( 0 ) … … 168 168 , pobj_NextClass( NULL ) 169 169 { 170 this->name=(char *)HeapAlloc(hHeap,0,lstrlen(name)+1);171 lstrcpy(this->name,name);172 170 } 173 171 CClass::~CClass(){ 174 172 int i; 175 176 //クラス名177 HeapDefaultFree(name);178 173 179 174 if(ppobj_Member){ … … 202 197 } 203 198 199 bool CClass::IsInheritsInterface( const CClass *pInterfaceClass ) const 200 { 201 BOOST_FOREACH( const InheritedInterface &objInterface, interfaces ){ 202 if( pInterfaceClass == &objInterface.GetInterfaceClass() ){ 203 return true; 204 } 205 } 206 return false; 207 } 208 204 209 bool CClass::IsEqualSymbol( const NamespaceScopes &namespaceScopes, const string &name ) const 205 210 { … … 253 258 } 254 259 255 bool CClass::Inherits( const CClass &inheritsClass, int nowLine ){ 260 bool CClass::Inherits( const char *inheritNames, int nowLine ){ 261 int i = 0; 262 bool isInheritsClass = false; 263 while( true ){ 264 265 char temporary[VN_SIZE]; 266 for( int i2=0;; i++, i2++ ){ 267 if( inheritNames[i] == '\0' || inheritNames[i] == ',' ){ 268 temporary[i2] = 0; 269 break; 270 } 271 temporary[i2] = inheritNames[i]; 272 } 273 274 //継承元クラスを取得 275 const CClass *pInheritsClass = pobj_DBClass->Find(temporary); 276 if( !pInheritsClass ){ 277 SetError(106,temporary,i); 278 return false; 279 } 280 281 if( pInheritsClass->IsInterface() ){ 282 // インターフェイスを継承する 283 if( !InheritsInterface( *pInheritsClass, nowLine ) ){ 284 return false; 285 } 286 } 287 else if( pInheritsClass->IsClass() ){ 288 // クラスを継承する 289 isInheritsClass = true; 290 291 if( !InheritsClass( *pInheritsClass, nowLine ) ){ 292 return false; 293 } 294 } 295 else{ 296 SetError(135,NULL,nowLine); 297 return false; 298 } 299 300 if( inheritNames[i] == '\0' ){ 301 break; 302 } 303 i++; 304 } 305 306 if( !isInheritsClass ){ 307 // クラスを一つも継承していないとき 308 const CClass *pObjectClass = pobj_DBClass->Find("Object"); 309 if( !pObjectClass ){ 310 SetError(106,"Object",i); 311 return false; 312 } 313 314 if( !InheritsClass( *pObjectClass, i ) ){ 315 return false; 316 } 317 } 318 319 return true; 320 } 321 bool CClass::InheritsClass( const CClass &inheritsClass, int nowLine ){ 256 322 257 323 //ループ継承でないかをチェック 258 324 if(pobj_LoopRefCheck->check(inheritsClass)){ 259 SetError(123,inheritsClass. name,nowLine);325 SetError(123,inheritsClass.GetName(),nowLine); 260 326 return false; 261 327 } … … 263 329 if( inheritsClass.ppobj_Member == 0 ){ 264 330 //継承先が読み取られていないとき 265 pobj_LoopRefCheck->add(this-> name);266 pobj_DBClass->GetClass_recur(inheritsClass. name);267 pobj_LoopRefCheck->del(this-> name);331 pobj_LoopRefCheck->add(this->GetName().c_str()); 332 pobj_DBClass->GetClass_recur(inheritsClass.GetName().c_str()); 333 pobj_LoopRefCheck->del(this->GetName().c_str()); 268 334 } 269 335 … … 317 383 //ループ継承でないかをチェック 318 384 if(pobj_LoopRefCheck->check(inheritsInterface)){ 319 SetError(123,inheritsInterface. name,nowLine);385 SetError(123,inheritsInterface.GetName(),nowLine); 320 386 return false; 321 387 } … … 323 389 if( inheritsInterface.ppobj_Member == 0 ){ 324 390 //継承先が読み取られていないとき 325 pobj_LoopRefCheck->add(this-> name);326 pobj_DBClass->GetClass_recur(inheritsInterface. name);327 pobj_LoopRefCheck->del(this-> name);391 pobj_LoopRefCheck->add(this->GetName().c_str()); 392 pobj_DBClass->GetClass_recur(inheritsInterface.GetName().c_str()); 393 pobj_LoopRefCheck->del(this->GetName().c_str()); 328 394 } 329 395 … … 348 414 } 349 415 416 interfaces.push_back( InheritedInterface( const_cast<CClass *>(&inheritsInterface), vtbl_num ) ); 417 350 418 //仮想関数の数 351 419 vtbl_num += inheritsInterface.vtbl_num; 352 353 /*354 TODO: インターフェイス向けの機構を作る355 //継承先のクラスをメンバとして保持する356 pobj_InheritsClass = &inheritsInterface;357 */358 420 359 421 return true; … … 404 466 //メンバ 405 467 for( int i=0;i<iMemberNum;i++){ 406 if( lstrcmp(name,ppobj_Member[i]->name)==0){468 if( GetName() == ppobj_Member[i]->name ){ 407 469 return 1; 408 470 } … … 411 473 //静的メンバ 412 474 foreach( CMember *member, staticMembers ){ 413 if( lstrcmp( name, member->name ) == 0){475 if( GetName() == member->name ){ 414 476 return 1; 415 477 } … … 1066 1128 BOOL fConstructor=0,bDestructor=0; 1067 1129 1068 if(lstrcmp(temporary,pobj_c-> name)==0){1130 if(lstrcmp(temporary,pobj_c->GetName().c_str())==0){ 1069 1131 //コンストラクタの場合 1070 1132 … … 1077 1139 else if(temporary[0]=='~'){ 1078 1140 //デストラクタの場合はその名前が正しいかチェックを行う 1079 if(lstrcmp(temporary+1,pobj_c-> name)!=0)1141 if(lstrcmp(temporary+1,pobj_c->GetName().c_str())!=0) 1080 1142 SetError(117,NULL,nowLine); 1081 1143 else … … 1170 1232 if(pobj_LoopRefCheck->check(pMember->GetClass())){ 1171 1233 extern int cp; 1172 SetError(124,pMember->GetClass(). name,cp);1234 SetError(124,pMember->GetClass().GetName(),cp); 1173 1235 return 0; 1174 1236 } 1175 1237 1176 pobj_LoopRefCheck->add(objClass. name);1238 pobj_LoopRefCheck->add(objClass.GetName().c_str()); 1177 1239 1178 1240 i2=MemberVar_LoopRefCheck(pMember->GetClass()); 1179 1241 if(bRet==1) bRet=i2; 1180 1242 1181 pobj_LoopRefCheck->del(objClass. name);1243 pobj_LoopRefCheck->del(objClass.GetName().c_str()); 1182 1244 } 1183 1245 } … … 1243 1305 1244 1306 if(lpszInheritsClass){ 1245 if(lstrcmp(lpszInheritsClass,pobj_c-> name)!=0){1307 if(lstrcmp(lpszInheritsClass,pobj_c->GetName().c_str())!=0){ 1246 1308 //継承先先読み用 1247 1309 continue; … … 1271 1333 } 1272 1334 1273 if(lstrcmpi(temporary,pobj_c-> name)==0){1335 if(lstrcmpi(temporary,pobj_c->GetName().c_str())==0){ 1274 1336 SetError(105,temporary,i); 1275 1337 goto Interface_InheritsError; … … 1284 1346 1285 1347 //継承させる 1286 if( !pobj_c->Inherits Interface( *pInheritsClass, i ) ){1348 if( !pobj_c->InheritsClass( *pInheritsClass, i ) ){ 1287 1349 goto Interface_InheritsError; 1288 1350 } … … 1394 1456 1395 1457 if(lpszInheritsClass){ 1396 if( lstrcmp(lpszInheritsClass,pobj_c->name)!=0){1458 if( pobj_c->GetName() != lpszInheritsClass ){ 1397 1459 //継承先先読み用 1398 1460 continue; … … 1418 1480 else dwAccess=ACCESS_PUBLIC; 1419 1481 1420 if( lstrcmp( pobj_c->name, "Object" ) == 0|| dwClassType == ESC_TYPE ){1421 // 継承無し1422 pobj_c->pobj_InheritsClass =0;1423 1424 // 仮想関数の数を初期化1425 pobj_c->vtbl_num =0;1482 if( pobj_c->GetName() == "Object" || dwClassType == ESC_TYPE ){ 1483 // 継承無し 1484 pobj_c->pobj_InheritsClass = NULL; 1485 1486 // 仮想関数の数を初期化 1487 pobj_c->vtbl_num = 0; 1426 1488 } 1427 1489 else{ … … 1439 1501 } 1440 1502 1441 if(lstrcmpi(temporary,pobj_c-> name)==0){1503 if(lstrcmpi(temporary,pobj_c->GetName().c_str())==0){ 1442 1504 SetError(105,temporary,i); 1443 1505 goto InheritsError; … … 1450 1512 } 1451 1513 1452 //継承元クラスを取得 1453 const CClass *pInheritsClass = Find(temporary); 1454 if( !pInheritsClass ){ 1455 SetError(106,temporary,i); 1456 goto InheritsError; 1457 } 1458 1459 if( pInheritsClass->IsInterface() ){ 1460 // クラスを継承していないとき 1461 const CClass *pObjectClass = Find("Object"); 1462 if( !pObjectClass ){ 1463 SetError(106,"Object",i); 1464 goto InheritsError; 1465 } 1466 1467 if( !pobj_c->Inherits( *pObjectClass, i ) ){ 1468 goto InheritsError; 1469 } 1470 } 1471 1472 //継承させる 1473 if( !pobj_c->Inherits( *pInheritsClass, i ) ){ 1474 goto InheritsError; 1475 } 1514 pobj_c->Inherits( temporary, i ); 1476 1515 } 1477 1516 InheritsError: … … 1596 1635 if(pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->GetClass().ppobj_Member==0){ 1597 1636 //参照先が読み取られていないとき 1598 GetClass_recur(pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->GetClass(). name);1637 GetClass_recur(pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->GetClass().GetName().c_str()); 1599 1638 } 1600 1639 } … … 1603 1642 if(pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->IsStruct()){ 1604 1643 //循環参照のチェック 1605 pobj_LoopRefCheck->add(pobj_c-> name);1644 pobj_LoopRefCheck->add(pobj_c->GetName().c_str()); 1606 1645 if(!MemberVar_LoopRefCheck(pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->GetClass())){ 1607 1646 //エラー回避 1608 1647 pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->SetBasicType( DEF_PTR_VOID ); 1609 1648 } 1610 pobj_LoopRefCheck->del(pobj_c-> name);1649 pobj_LoopRefCheck->del(pobj_c->GetName().c_str()); 1611 1650 } 1612 1651 } … … 1709 1748 , 1 1710 1749 , ESC_NEW 1711 , "" // 名前空間 (TODO: 実装)1712 , objClass. name// クラス名1713 , referenceOffsetsBuffer // 参照メンバオフセット配列1714 , numOfReference // 参照メンバの個数1750 , "" // 名前空間 (TODO: 実装) 1751 , objClass.GetName().c_str() // クラス名 1752 , referenceOffsetsBuffer // 参照メンバオフセット配列 1753 , numOfReference // 参照メンバの個数 1715 1754 ); 1716 1755 … … 1749 1788 sprintf( temporary 1750 1789 , "tempType=Search(\"%s\",\"%s\")" 1751 , "" // 名前空間 (TODO: 実装)1752 , objClass. name// クラス名1790 , "" // 名前空間 (TODO: 実装) 1791 , objClass.GetName().c_str() // クラス名 1753 1792 ); 1754 1793 … … 1759 1798 , "tempType.SetBaseType(Search(\"%s\",\"%s\"))" 1760 1799 , "" // 名前空間 (TODO: 実装) 1761 , objClass.pobj_InheritsClass-> name// 基底クラス名1800 , objClass.pobj_InheritsClass->GetName().c_str() // 基底クラス名 1762 1801 ); 1763 1802 -
BasicCompiler_Common/Class.h
r128 r131 2 2 3 3 #include <vector> 4 #include <string> 5 6 #include <Prototype.h> 4 7 #include "Type.h" 5 8 #include "Procedure.h" … … 57 60 class CDBClass; 58 61 class CDebugSection; 59 class CClass{ 62 class CClass; 63 class InheritedInterface 64 { 65 CClass *pInterfaceClass; 66 int vtblOffset; 67 public: 68 InheritedInterface( CClass *pInterfaceClass, int vtblOffset ) 69 : pInterfaceClass( pInterfaceClass ) 70 , vtblOffset( vtblOffset ) 71 { 72 } 73 74 CClass &GetInterfaceClass() const{ 75 return *pInterfaceClass; 76 } 77 int GetVtblOffset() const 78 { 79 return vtblOffset; 80 } 81 }; 82 typedef vector<InheritedInterface> Interfaces; 83 class CClass : public Prototype 84 { 60 85 friend CMember; 61 86 friend CDBClass; 62 87 friend CDebugSection; 63 88 64 // 名前空間 65 NamespaceScopes namespaceScopes; 89 // importされている名前空間 66 90 NamespaceScopesCollection importedNamespaces; 91 92 // 継承するインターフェイス 93 Interfaces interfaces; 67 94 68 95 // Blittable型情報 … … 93 120 94 121 public: 95 //クラス名96 char *name;97 122 98 123 //継承クラスへのポインタ … … 111 136 112 137 public: 113 CClass( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const char *name );138 CClass( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const string &name ); 114 139 ~CClass(); 115 140 116 const NamespaceScopes &GetNamespaceScopes() const117 {118 return namespaceScopes;119 }120 141 const NamespaceScopesCollection &GetImportedNamespaces() const 121 142 { … … 123 144 } 124 145 125 const string GetName() const 126 { 127 return name; 128 } 129 146 // インターフェイス 147 bool HasInterfaces() const 148 { 149 return ( interfaces.size() != 0 ); 150 } 151 bool IsInheritsInterface( const CClass *pInterfaceClass ) const; 152 153 // Blittable型 130 154 bool IsBlittableType() const 131 155 { … … 140 164 } 141 165 166 // シンボル比較 142 167 bool IsEqualSymbol( const NamespaceScopes &namespaceScopes, const string &name ) const; 143 168 bool IsEqualSymbol( const CClass &objClass ) const; … … 154 179 155 180 //継承させる 156 bool Inherits( const CClass &inheritsClass, int nowLine ); 181 bool Inherits( const char *inheritNames, int nowLine ); 182 bool InheritsClass( const CClass &inheritsClass, int nowLine ); 157 183 bool InheritsInterface( const CClass &inheritsClass, int nowLine ); 158 184 -
BasicCompiler_Common/DebugMiddleFile.cpp
r114 r131 12 12 void SetLpIndex_DebugFile(char *buffer,int *p,const Type &type){ 13 13 if(NATURAL_TYPE(type.GetBasicType())==DEF_OBJECT || NATURAL_TYPE(type.GetBasicType())==DEF_STRUCT){ 14 lstrcpy(buffer+(*p),type.GetClass(). name);14 lstrcpy(buffer+(*p),type.GetClass().GetName().c_str()); 15 15 (*p)+=lstrlen(buffer+(*p))+1; 16 16 } … … 127 127 128 128 //クラス名 129 lstrcpy(buffer+i2,pobj_c-> name);129 lstrcpy(buffer+i2,pobj_c->GetName().c_str()); 130 130 i2+=lstrlen(buffer+i2)+1; 131 131 } … … 214 214 while(pUserProc){ 215 215 if(pUserProc->GetParentClassPtr()){ 216 lstrcpy(buffer+i2,pUserProc->GetParentClassPtr()-> name);216 lstrcpy(buffer+i2,pUserProc->GetParentClassPtr()->GetName().c_str()); 217 217 i2+=lstrlen(buffer+i2)+1; 218 218 } … … 312 312 313 313 //クラス名 314 lstrcpy(buffer+i2,pobj_c-> name);314 lstrcpy(buffer+i2,pobj_c->GetName().c_str()); 315 315 i2+=lstrlen(buffer+i2)+1; 316 316 … … 357 357 i2+=sizeof(long); 358 358 if(method->pobj_InheritsClass){ 359 lstrcpy(buffer+i2,method->pobj_InheritsClass-> name);359 lstrcpy(buffer+i2,method->pobj_InheritsClass->GetName().c_str()); 360 360 i2+=lstrlen(buffer+i2)+1; 361 361 } -
BasicCompiler_Common/Diagnose.cpp
r100 r131 126 126 temporary[0]=0; 127 127 lstrcat( temporary, "------------------------------------------------------------------\n" ); 128 sprintf( temporary + lstrlen(temporary), "【 %s クラスのコード情報】\n", objClass. name);128 sprintf( temporary + lstrlen(temporary), "【 %s クラスのコード情報】\n", objClass.GetName().c_str() ); 129 129 sprintf( temporary + lstrlen(temporary), "class code size: %d bytes\n", codeSizeOfClass ); 130 130 lstrcat( temporary, "------------------------------------------------------------------\n" ); -
BasicCompiler_Common/LoopRefCheck.cpp
r90 r131 24 24 init(); 25 25 } 26 void CLoopRefCheck::add(c har *lpszInheritsClass){26 void CLoopRefCheck::add(const char *lpszInheritsClass){ 27 27 names=(char **)HeapReAlloc(hHeap,0,names,(num+1)*sizeof(char *)); 28 28 names[num]=(char *)HeapAlloc(hHeap,0,lstrlen(lpszInheritsClass)+1); … … 30 30 num++; 31 31 } 32 void CLoopRefCheck::del(c har *lpszInheritsClass){32 void CLoopRefCheck::del(const char *lpszInheritsClass){ 33 33 int i; 34 34 for(i=0;i<num;i++){ … … 50 50 int i; 51 51 for(i=0;i<num;i++){ 52 if(lstrcmp(names[i],inheritsClass.name)==0) return 1; 52 if( inheritsClass.GetName() == names[i] ){ 53 return 1; 54 } 53 55 } 54 56 return 0; -
BasicCompiler_Common/Object.cpp
r89 r131 20 20 21 21 UserProc *pUserProc; 22 pUserProc=GetMethodHash(ObjectName,type.GetClass(). name,Parameter);22 pUserProc=GetMethodHash(ObjectName,type.GetClass().GetName().c_str(),Parameter); 23 23 if(!pUserProc){ 24 if(Parameter[0]) SetError(113,type.GetClass(). name,cp);24 if(Parameter[0]) SetError(113,type.GetClass().GetName().c_str(),cp); 25 25 return; 26 26 } … … 53 53 54 54 Type dummyType; 55 sprintf(temporary+lstrlen(temporary),".%s",type.GetClass(). name);55 sprintf(temporary+lstrlen(temporary),".%s",type.GetClass().GetName().c_str()); 56 56 CallProc( PROC_DEFAULT, 57 57 pUserProc, … … 69 69 else{ 70 70 Type dummyType; 71 sprintf(temporary,"%s.%s",ObjectName,type.GetClass(). name);71 sprintf(temporary,"%s.%s",ObjectName,type.GetClass().GetName().c_str()); 72 72 CallProc( PROC_DEFAULT, 73 73 pUserProc, -
BasicCompiler_Common/Procedure.cpp
r128 r131 4 4 { 5 5 if( HasParentClass() ){ 6 return (string)GetParentClass().name+ "." + GetName();6 return GetParentClass().GetName() + "." + GetName(); 7 7 } 8 8 … … 153 153 //パラメータを追加 154 154 this->params.push_back( pParam ); 155 156 /* if( type.IsObject() && type.GetClass().IsInterface() ){ 157 // インターフェイスが引数だったとき 158 // vtblOffsetを引き渡すための引数も用意しておく 159 this->params.push_back( new Parameter( ((string)name + "_vtbl").c_str(), Type(DEF_LONG) ) ); 160 }*/ 155 161 156 162 if(sourceOfParams[i]==','){ … … 299 305 300 306 if( this->pParentClass ){ 301 if( this->GetName() == this->pParentClass-> name||307 if( this->GetName() == this->pParentClass->GetName() || 302 308 this->GetName()[0]=='~'){ 303 309 //クラスのコンストラクタ、デストラクタがFunction定義の場合はエラーをだす -
BasicCompiler_Common/Type.cpp
r128 r131 243 243 // オブジェクト 244 244 if(basicType==DEF_OBJECT){ 245 if( GetClass().IsInterface() ){ 246 // vtblOffsetのサイズを含める 247 return PTR_SIZE*2; 248 } 245 249 return PTR_SIZE; 246 250 } … … 433 437 { 434 438 if( basicType == DEF_OBJECT ){ 435 if( lstrcmp( pClass->name,"Object")==0){439 if( pClass->GetName() == "Object" ){ 436 440 return true; 437 441 } … … 442 446 { 443 447 if( basicType == DEF_OBJECT ){ 444 if( lstrcmp( pClass->name,"String")==0){448 if( pClass->GetName() == "String" ){ 445 449 return true; 446 450 } … … 486 490 487 491 if( !( index == 0 || index == -1 ) ){ 488 return pClass-> name;492 return pClass->GetName(); 489 493 } 490 494 } -
BasicCompiler_Common/VariableOpe.cpp
r128 r131 210 210 if(lpIndex==0) lstrcpy(name,"non"); 211 211 else{ 212 lstrcpy(name,((CClass *)lpIndex)-> name);212 lstrcpy(name,((CClass *)lpIndex)->GetName().c_str()); 213 213 } 214 214 } … … 751 751 //自身のクラスから静的メンバを参照する場合 752 752 char temp2[VN_SIZE]; 753 sprintf(temp2,"%s.%s",pobj_CompilingClass-> name,VarName);753 sprintf(temp2,"%s.%s",pobj_CompilingClass->GetName().c_str(),VarName); 754 754 755 755 pVar = globalVars.Find( temp2 ); … … 1009 1009 //クラス名 1010 1010 if(pobj_CompilingClass){ 1011 lstrcat(FullName,pobj_CompilingClass-> name);1011 lstrcat(FullName,pobj_CompilingClass->GetName().c_str()); 1012 1012 lstrcat(FullName,"%"); 1013 1013 } -
BasicCompiler_Common/common.h
r130 r131 472 472 CLoopRefCheck(); 473 473 ~CLoopRefCheck(); 474 void add(c har *lpszInheritsClass);475 void del(c har *lpszInheritsClass);474 void add(const char *lpszInheritsClass); 475 void del(const char *lpszInheritsClass); 476 476 BOOL check(const CClass &inheritsClass) const; 477 477 }; -
BasicCompiler_Common/error.cpp
r114 r131 191 191 if(num==133) lstrcpy(msg,"Thisに代入はできません。"); 192 192 if(num==134) lstrcpy( msg,"ObjPtr関数にはオブジェクト インスタンス以外を指定できません。" ); 193 if(num==135) lstrcpy( msg, "クラスまたはインターフェイス以外の型を継承元として指定することはできません。" ); 193 194 194 195 //Enum関連
Note:
See TracChangeset
for help on using the changeset viewer.