Ignore:
Timestamp:
Sep 28, 2007, 12:05:10 AM (17 years ago)
Author:
dai_9181
Message:
 
File:
1 edited

Legend:

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

    r332 r334  
    296296    userProc.Using();
    297297}
    298 void Opcode_CreateSimpleDelegate( const char *methodInstanceName, const UserProc &userProc )
     298void Opcode_CreateSimpleDelegate( const CClass &dgClass, const char *methodInstanceName, const UserProc &userProc )
    299299{
    300300    /////////////////////////////////////////////////////////////////
     
    339339    compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EAX, REG_EAX, 0, MOD_BASE );
    340340
    341     //push this
     341    //push eax
    342342    compiler.codeGenerator.op_push( REG_EAX );
    343343
     
    347347    /////////////////////////////////////////////////////////////////
    348348
     349    std::vector<const UserProc *> subs;
     350    dgClass.GetStaticMethods().Enum( "_CreateDelegate", subs );
     351
    349352    // call _System_CreateSimpleDynamicDelegate
    350     extern const UserProc *pSub_System_CreateSimpleDynamicDelegate;
    351     compiler.codeGenerator.op_call( pSub_System_CreateSimpleDynamicDelegate );
     353    compiler.codeGenerator.op_call( subs[0] );
    352354}
    353355void Opcode_Func_AddressOf( const char *name, const Type &baseType, bool isCallOn, Type &resultType ){
     
    356358
    357359    const Parameters *pBaseParams = NULL;
    358     bool isDelegate = false;
    359360    if( baseType.IsProcPtr() )
    360361    {
     
    362363        pBaseParams = &compiler.GetObjectModule().meta.GetProcPointers()[baseType.GetIndex()]->Params();
    363364    }
    364     else if( baseType.IsObject() && baseType.GetClass().GetName() == "_SimpleDelegate" )
    365     {
    366         extern const Delegate *pConstructingDelegate;
    367         if( !pConstructingDelegate )
    368         {
    369             SetError();
    370         }
     365    else if( baseType.IsDelegate() )
     366    {
    371367        // 左辺でデリゲートを要求されているとき
    372         pBaseParams = &pConstructingDelegate->Params();
    373 
    374         isDelegate = true;
     368        pBaseParams = &baseType.GetClass().GetDelegate().Params();
    375369    }
    376370
     
    402396    }
    403397
    404     if( isDelegate )
     398    if( baseType.IsDelegate() )
    405399    {
    406400        if( isCallOn )
    407401        {
    408402            // デリゲートのとき
    409             Opcode_CreateSimpleDelegate( name, *pUserProc );
     403            Opcode_CreateSimpleDelegate( baseType.GetClass(), name, *pUserProc );
    410404        }
    411405        resultType = baseType;
Note: See TracChangeset for help on using the changeset viewer.