Changeset 327 in dev for trunk/abdev


Ignore:
Timestamp:
Sep 25, 2007, 9:23:38 PM (17 years ago)
Author:
dai_9181
Message:

デリゲートのベースがほぼ実装できた

Location:
trunk/abdev
Files:
7 edited

Legend:

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

    r319 r327  
    333333        int idProc=GetProc(procName,(void **)&pInfo);
    334334
    335         if(idProc){
    336             //閉じカッコ")"に続く文字がNULLでないとき
    337             if(termFull[i2+1+i4+1]!='\0'){
     335        if(idProc)
     336        {
     337            if(termFull[i2+1+i4+1]!='\0')
     338            {
     339                //閉じカッコ")"に続く文字がNULLでないとき
    338340                SetError(42,NULL,cp);
    339341            }
  • trunk/abdev/BasicCompiler32/Opcode.h

    r325 r327  
    1919#define breakpoint compiler.codeGenerator.PutOld( (char)0xCC );
    2020
    21 
    22 //プロシージャの種類
    23 #define PROC_DEFAULT    1   //ユーザー定義関数
    24 #define PROC_DLL        2   //DLL関数
    25 #define PROC_BUILTIN    3   //コンパイラ埋め込み型
    26 #define PROC_PTR        4   //関数ポインタ
    2721
    2822//プロシージャ
  • trunk/abdev/BasicCompiler64/Opcode.h

    r325 r327  
    1919#define breakpoint compiler.codeGenerator.PutOld( (char)0xCC );
    2020
    21 
    22 //プロシージャの種類
    23 #define PROC_DEFAULT    1   //ユーザー定義関数
    24 #define PROC_DLL        2   //DLL関数
    25 #define PROC_BUILTIN    3   //コンパイラ埋め込み型
    26 #define PROC_PTR        4   //関数ポインタ
    2721
    2822//プロシージャ
  • trunk/abdev/BasicCompiler_Common/Enum.cpp

    r322 r327  
    225225        }
    226226
     227        sprintf(buffer+length,"\tFunction Operator or (enumBase As %s) As %s\n",parent->GetName().c_str(),parent->GetName().c_str());
     228        length+=lstrlen(buffer+length);
     229        sprintf(buffer+length,"\t\tReturn New %s(This.value or enumBase.value, \"custom\")\n",parent->GetName().c_str());
     230        length+=lstrlen(buffer+length);
     231        lstrcpy(buffer+length,"\tEnd Function\n");
     232        length+=lstrlen(buffer+length);
     233
     234        sprintf(buffer+length,"\tFunction Operator and (enumBase As %s) As %s\n",parent->GetName().c_str(),parent->GetName().c_str());
     235        length+=lstrlen(buffer+length);
     236        sprintf(buffer+length,"\t\tReturn New %s(This.value and enumBase.value, \"custom\")\n",parent->GetName().c_str());
     237        length+=lstrlen(buffer+length);
     238        lstrcpy(buffer+length,"\tEnd Function\n");
     239        length+=lstrlen(buffer+length);
     240
    227241        /*
    228242        sprintf(buffer+length,"\tOverride Function ToString() As String\n",parent->TypeName);
  • trunk/abdev/BasicCompiler_Common/Intermediate_Step1.cpp

    r322 r327  
    371371    char *temporary,temp2[VN_SIZE];
    372372
    373     bool isBeforeCharDelimitation = false;
     373    bool isBeforeCharDelimitation = true;
    374374    temporary=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,(lstrlen(buffer)+255)*2);
    375375    for(i=0,i2=0,IsStr=0;;i++,i2++){
  • trunk/abdev/BasicCompiler_Common/Subroutine.cpp

    r319 r327  
    6161    if(*ppInfo) return PROC_BUILTIN;
    6262
    63     //関数ポインタ
     63
     64    /////////////////////////////////////////////////////////////////
     65    //関数ポインタ、またはデリゲート
     66    /////////////////////////////////////////////////////////////////
     67
    6468    Type type;
    6569    if( !GetVarType( name, type, false ) ){
    6670        return 0;
    6771    }
    68     if( type.IsProcPtr() ){
     72
     73    if( type.IsProcPtr() )
     74    {
     75        // 関数ポインタ
    6976        return PROC_PTR;
     77    }
     78
     79    if( type.IsObject() && type.GetClass().IsDelegate() )
     80    {
     81        // デリゲート
     82        return PROC_DELEGATE;
    7083    }
    7184
     
    185198            }
    186199        }
     200    }
     201    else if( kind == PROC_DELEGATE )
     202    {
     203        // デリゲート
     204        char tempName[VN_SIZE];
     205        lstrcpy( tempName, fullCallName );
     206        lstrcat( tempName, ".Call" );
     207
     208        void *pInfo=(void *)GetSubHash( tempName );
     209        if( !pInfo )
     210        {
     211            Jenga::Throw( "デリゲートの内部Callメソッドの取得に失敗" );
     212        }
     213
     214        return CallProc( PROC_DEFAULT, pInfo, tempName, lpszParms, resultType, isCallOn );
    187215    }
    188216    else{
  • trunk/abdev/BasicCompiler_Common/src/Delegate.cpp

    r325 r327  
    188188        destSource += sourceTemplate.GetResult( values );
    189189    }
    190 
    191     ts( destSource.c_str() );
    192190}
Note: See TracChangeset for help on using the changeset viewer.