Changeset 94 in dev for BasicCompiler_Common/Class.cpp


Ignore:
Timestamp:
Apr 14, 2007, 8:36:04 PM (17 years ago)
Author:
dai_9181
Message:

New[]を禁止した。
一部の動的型情報が生成されないバグを修正。
As演算子によるダウンキャストを許可(プログラム的なチェックはまだ走っていない)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler_Common/Class.cpp

    r92 r94  
    742742    if( IsEquals( pClass ) ) return true;
    743743    return IsSubClass( pClass );
     744}
     745
     746// 自身と等しいまたは派生クラス、基底クラスかどうかを確認
     747bool 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;
    744753}
    745754
     
    15421551        if( !objClass.IsUsing() ){
    15431552            // 未使用のクラスは無視する
     1553            if( (string)objClass.name == "CTest"){
     1554                int test=0;
     1555            }
    15441556            continue;
    15451557        }
    15461558
     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
    15471577        sprintf( temporary
    1548             , "Add(%c%c_System_TypeForClass(\"%s\",\"%s\"))"
     1578            , "Add(%c%c_System_TypeForClass(\"%s\",\"%s\",[%s],%d))"
    15491579            , 1
    15501580            , ESC_NEW
    1551             , ""                // 名前空間 (TODO: 実装)
    1552             , objClass.name     // クラス名
     1581            , ""                        // 名前空間 (TODO: 実装)
     1582            , objClass.name             // クラス名
     1583            , referenceOffsetsBuffer    // 参照メンバオフセット配列
     1584            , numOfReference            // 参照メンバの個数
    15531585            );
    15541586
Note: See TracChangeset for help on using the changeset viewer.