Changeset 327 in dev for trunk/abdev/BasicCompiler_Common


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

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

Location:
trunk/abdev/BasicCompiler_Common
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • 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.