Changeset 59 in dev


Ignore:
Timestamp:
Feb 21, 2007, 1:50:32 AM (17 years ago)
Author:
dai_9181
Message:

派生クラスから基底クラスへのインスタンスコピーまたは参照を可能にした

Files:
5 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler32/CParameter.cpp

    r55 r59  
    369369                            if(DummyTypeInfo.type==VarType){
    370370                                if(DummyTypeInfo.type==DEF_OBJECT){
    371                                     if(DummyTypeInfo.u.lpIndex!=lpVarIndex){
     371                                    if( !DummyTypeInfo.u.pobj_Class->IsEqualsOrSubClass( (CClass *)lpVarIndex ) ){
    372372                                        SetError(11,Parms[i2],cp);
    373373                                    }
  • BasicCompiler64/CParameter.cpp

    r51 r59  
    416416                            if(DummyTypeInfo.type==VarType){
    417417                                if(DummyTypeInfo.type==DEF_OBJECT){
    418                                     if(DummyTypeInfo.u.lpIndex!=lpVarIndex){
     418                                    if( !DummyTypeInfo.u.pobj_Class->IsEqualsOrSubClass( (CClass *)lpVarIndex ) ){
    419419                                        SetError(11,Parms[i2],cp);
    420420                                    }
  • BasicCompiler_Common/Class.cpp

    r57 r59  
    540540    }
    541541    return false;
     542}
     543
     544//自身と等しいまたは派生クラスかどうかを確認
     545bool CClass::IsEqualsOrSubClass( CClass *pClass ){
     546    if( IsEquals( pClass ) ) return true;
     547    return IsSubClass( pClass );
    542548}
    543549
  • BasicCompiler_Common/Class.h

    r56 r59  
    170170    bool IsSubClass( CClass *pClass );
    171171
     172    //自身と等しいまたは派生クラスかどうかを確認
     173    bool IsEqualsOrSubClass( CClass *pClass );
     174
    172175
    173176    //線形リスト用
  • BasicCompiler_Common/error.cpp

    r46 r59  
    399399
    400400    if(VarType==DEF_OBJECT||CalcType==DEF_OBJECT){
    401         //オブジェクトインスタンスの場合
    402         if(!(VarType==CalcType&&lpVarIndex==lpCalcIndex)){
     401        //いずれかがオブジェクトインスタンスの場合
     402        if( VarType != CalcType ){
     403            DifferentTypeError(VarType,lpVarIndex,CalcType,lpCalcIndex,3,pszFuncName,ParmNum);
     404            return false;
     405        }
     406
     407        CClass *pClass = (CClass *)lpVarIndex;
     408        if( !pClass->IsEqualsOrSubClass( (CClass *)lpCalcIndex ) ){
     409            //等しくなく、派生クラスでもないとき
    403410            DifferentTypeError(VarType,lpVarIndex,CalcType,lpCalcIndex,3,pszFuncName,ParmNum);
    404411            return false;
Note: See TracChangeset for help on using the changeset viewer.