Changeset 94 in dev for BasicCompiler_Common
- Timestamp:
- Apr 14, 2007, 8:36:04 PM (18 years ago)
- Location:
- BasicCompiler_Common
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler_Common/Class.cpp
r92 r94 742 742 if( IsEquals( pClass ) ) return true; 743 743 return IsSubClass( pClass ); 744 } 745 746 // 自身と等しいまたは派生クラス、基底クラスかどうかを確認 747 bool CClass::IsEqualsOrSubClassOrSuperClass( const CClass &objClass ) const 748 { 749 if( IsEquals( &objClass ) ) return true; 750 if( IsSubClass( &objClass ) ) return true; 751 if( objClass.IsSubClass( this ) ) return true; 752 return false; 744 753 } 745 754 … … 1542 1551 if( !objClass.IsUsing() ){ 1543 1552 // 未使用のクラスは無視する 1553 if( (string)objClass.name == "CTest"){ 1554 int test=0; 1555 } 1544 1556 continue; 1545 1557 } 1546 1558 1559 char referenceOffsetsBuffer[1024] = ""; 1560 int numOfReference = 0; 1561 for( int i=0; i<objClass.iMemberNum; i++ ){ 1562 CMember &member = *objClass.ppobj_Member[i]; 1563 1564 if( member.IsObject() || member.IsPointer() ){ 1565 if( referenceOffsetsBuffer[0] ){ 1566 lstrcat( referenceOffsetsBuffer, "," ); 1567 } 1568 1569 sprintf( referenceOffsetsBuffer + lstrlen( referenceOffsetsBuffer ), 1570 "%d", 1571 objClass.GetMemberOffset( member.name ) ); 1572 1573 numOfReference++; 1574 } 1575 } 1576 1547 1577 sprintf( temporary 1548 , "Add(%c%c_System_TypeForClass(\"%s\",\"%s\" ))"1578 , "Add(%c%c_System_TypeForClass(\"%s\",\"%s\",[%s],%d))" 1549 1579 , 1 1550 1580 , ESC_NEW 1551 , "" // 名前空間 (TODO: 実装) 1552 , objClass.name // クラス名 1581 , "" // 名前空間 (TODO: 実装) 1582 , objClass.name // クラス名 1583 , referenceOffsetsBuffer // 参照メンバオフセット配列 1584 , numOfReference // 参照メンバの個数 1553 1585 ); 1554 1586 -
BasicCompiler_Common/Class.h
r91 r94 157 157 158 158 // メンバのオフセットを取得 159 int GetMemberOffset( const char *memberName, int *pMemberNum ) const;159 int GetMemberOffset( const char *memberName, int *pMemberNum = NULL ) const; 160 160 161 161 private: … … 199 199 //自身と等しいまたは派生クラスかどうかを確認 200 200 bool IsEqualsOrSubClass( const CClass *pClass ) const; 201 202 // 自身と等しいまたは派生クラス、基底クラスかどうかを確認 203 bool IsEqualsOrSubClassOrSuperClass( const CClass &objClass ) const; 201 204 202 205 -
BasicCompiler_Common/NumOpe_GetType.cpp
r79 r94 309 309 } 310 310 311 if( expression[0] == '[' ){ 312 if( !baseType.IsPointer() ){ 313 SetError(1,NULL,cp); 314 return false; 315 } 316 317 resultType = baseType; 318 return true; 319 } 320 311 321 312 322 ///////////////////////////////// … … 353 363 || isNothing_stack[sp-2] ){ 354 364 // 同一の型、またはNothingに対するAsはAs演算子を呼び出さない 365 } 366 else if( idCalc == CALC_AS 367 && type_stack[sp-1] == ( DEF_OBJECT | FLAG_CAST ) 368 && ( ((CClass *)index_stack[sp-1])->IsEqualsOrSubClass( (CClass *)index_stack[sp-2] ) || ((CClass *)index_stack[sp-2])->IsEqualsOrSubClass( (CClass *)index_stack[sp-1] ) 369 )){ 370 // ダウンキャストを許可する 355 371 } 356 372 else{ -
BasicCompiler_Common/Subroutine.cpp
r88 r94 792 792 Smoothie::Meta::procPointers.clear(); 793 793 } 794 795 796 797 bool IsNeedProcCompile(){ 798 for(int i2=0;i2<MAX_HASH;i2++){ 799 extern UserProc **ppSubHash; 800 UserProc *pUserProc=ppSubHash[i2]; 801 while(pUserProc){ 802 if( pUserProc->IsUsing() && pUserProc->IsCompiled() == false ){ 803 return true; 804 } 805 806 pUserProc=pUserProc->pNextData; 807 } 808 } 809 return false; 810 } -
BasicCompiler_Common/common.h
r93 r94 445 445 int AddProcPtrInfo( const string &typeExpression, int nowLine ); 446 446 void DeleteProcPtrInfo(void); 447 bool IsNeedProcCompile(); 447 448 448 449 //OldStatement.cpp
Note:
See TracChangeset
for help on using the changeset viewer.