Changeset 304 in dev for trunk


Ignore:
Timestamp:
Aug 26, 2007, 2:54:38 AM (17 years ago)
Author:
dai_9181
Message:

Superが機能しないバグを修正。
ソースコードが小さいとソース付加に失敗するバグを修正。

Location:
trunk/abdev
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler32/Compile_CallProc.cpp

    r301 r304  
    105105    const CMethod *pMethod = NULL;
    106106    Type leftType;
     107    bool isFixedClass = false;
    107108    if( pUserProc->GetParentClassPtr() ){
    108109        //クラスのメンバ関数を呼び出す場合はアクセスチェックを行う
    109         if(ObjectName[0] && (dwFlags&PROCFLAG_NEW)==0){
    110             if(lstrcmpi(ObjectName,"Super")==0){
     110        if(ObjectName[0] && (dwFlags&PROCFLAG_NEW)==0)
     111        {
     112            if(lstrcmpi(ObjectName,"Super")==0)
     113            {
    111114                //クラスメンバ関数内から基底クラスの呼び出し
    112                 pobj_c=compiler.pCompilingClass;
    113             }
    114             else{
     115                pobj_c=&compiler.pCompilingClass->GetSuperClass();
     116
     117                isFixedClass = true;
     118            }
     119            else
     120            {
    115121                //"->"によってオブジェクトを指定する通常のメンバ関数呼び出し
    116122                Type varType;
     
    313319    }
    314320
    315     if( pUserProc->IsVirtual() ){
     321    if( pUserProc->IsVirtual() && !isFixedClass ){
    316322        //仮想関数(オブジェクトメソッド)呼び出し
    317323        //pObj->func_table->func1
  • trunk/abdev/BasicCompiler64/Compile_CallProc.cpp

    r266 r304  
    113113    const CClass *pobj_c = NULL;
    114114    const CMethod *pMethod = NULL;
     115    Type leftType;
     116    bool isFixedClass = false;
    115117    if( pUserProc->GetParentClassPtr() ){
    116118        //クラスのメンバ関数を呼び出す場合はアクセスチェックを行う
    117         if(ObjectName[0] && (dwFlags&PROCFLAG_NEW)==0){
    118             if(lstrcmpi(ObjectName,"Super")==0){
     119        if(ObjectName[0] && (dwFlags&PROCFLAG_NEW)==0)
     120        {
     121            if(lstrcmpi(ObjectName,"Super")==0)
     122            {
    119123                //クラスメンバ関数内から基底クラスの呼び出し
    120                 pobj_c=compiler.pCompilingClass;
    121             }
    122             else{
     124                pobj_c=&compiler.pCompilingClass->GetSuperClass();
     125
     126                isFixedClass = true;
     127            }
     128            else
     129            {
    123130                //"->"によってオブジェクトを指定する通常のメンバ関数呼び出し
    124131                Type varType;
     
    336343    }
    337344
    338     if( pUserProc->IsVirtual() ){
     345    if( pUserProc->IsVirtual() && !isFixedClass ){
    339346        //仮想関数(オブジェクトメソッド)呼び出し
    340347        //pObj->func_table->func1
  • trunk/abdev/BasicCompiler_Common/MakeExe.cpp

    r299 r304  
    119119
    120120    ChangeCommandToCode(basbuf);
     121    compiler.GetObjectModule().GetSources()[0]._ResetLength();
    121122
    122123    //重複エラー情報管理のメモリを解放
  • trunk/abdev/BasicCompiler_Common/hash.cpp

    r265 r304  
    6363        bool isStatic = false;
    6464        const CClass *pobj_c = NULL;
    65         if(lstrcmpi(ObjName,"Super")==0){
     65        if(lstrcmpi(ObjName,"Super")==0)
     66        {
    6667            //クラスメンバ関数内から基底クラスの呼び出し
    67             pobj_c=compiler.pCompilingClass;
     68            pobj_c=&compiler.pCompilingClass->GetSuperClass();
    6869        }
    69         else{
     70        else
     71        {
    7072            //"->"によってオブジェクトを指定する通常のメンバ関数呼び出し
    7173            Type type;
     
    9092                pobj_c->GetMethods().Enum( NestMember, subs );
    9193            }
     94
    9295            return;
    9396        }
  • trunk/abdev/BasicCompiler_Common/include/Source.h

    r282 r304  
    222222        return length-2;
    223223    }
     224    void _ResetLength()
     225    {
     226        length = lstrlen( buffer );
     227    }
    224228
    225229    const IncludedFilesRelation &GetIncludedFilesRelation() const
  • trunk/abdev/BasicCompiler_Common/include/option.h

    r302 r304  
    1414// バージョン付加文字列
    1515#ifdef _AMD64_
    16 #define VER_INFO        "(x64) (rev.299)"
     16#define VER_INFO        "(x64) (rev.306)"
    1717#else
    18 #define VER_INFO        "(rev.299)"
     18#define VER_INFO        "(rev.306)"
    1919#endif
    2020
Note: See TracChangeset for help on using the changeset viewer.