Changeset 50 in dev for BasicCompiler64/OperatorProc.cpp


Ignore:
Timestamp:
Feb 10, 2007, 5:44:58 PM (17 years ago)
Author:
dai_9181
Message:

オーバーロード解決用の関数保持リストを "SUBINFO " ではなく、"vector<SUBINFO *>" に変更した。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler64/OperatorProc.cpp

    r38 r50  
    3131    pobj_c=(CClass *)index_stack[sp-2];
    3232
    33     SUBINFO **ppsi;
    34     int num;
    35     ppsi=pobj_c->GetOperatorSubInfo(idCalc,num);
    36     if(num==0){
    37         HeapDefaultFree(ppsi);
    38 
     33    std::vector<SUBINFO *> subs;
     34    pobj_c->EnumMethod( idCalc, subs );
     35    if( subs.size() == 0 ){
    3936        return 0;
    4037    }
     
    4845    int i;
    4946    BOOL bReturnTypeIsObject=1;
    50     TYPEINFO ReturnType={DEF_OBJECT,ppsi[0]->u.ReturnIndex};
    51     for(i=0;i<num;i++){
    52         if(ppsi[i]->ReturnType!=DEF_OBJECT)
     47    TYPEINFO ReturnType={DEF_OBJECT,subs[0]->u.ReturnIndex};
     48    for(i=0;i<subs.size();i++){
     49        if(subs[i]->ReturnType!=DEF_OBJECT)
    5350            bReturnTypeIsObject=0;
    5451    }
     
    8885    else GetCalcName(idCalc,temporary);
    8986    SUBINFO *psi;
    90     psi=OverloadSolution(temporary,ppsi,num,ppi,iParmNum,pBaseTypeInfo);
    91     HeapDefaultFree(ppsi);
     87    psi=OverloadSolution(temporary,subs,ppi,iParmNum,pBaseTypeInfo);
     88
    9289
    9390    if(!psi){
     
    438435//インデクサ(getter)を呼び出す
    439436void CallIndexerGetterProc(int reg,CClass *pobj_Class,char *ObjectName,char *Parameter,TYPEINFO &RetTypeInfo){
    440     SUBINFO **ppsi;
    441     int num;
    442     ppsi=pobj_Class->GetOperatorSubInfo(CALC_ARRAY_GET,num);
    443     if(num==0){
    444         HeapDefaultFree(ppsi);
    445 
     437
     438    std::vector<SUBINFO *> subs;
     439    pobj_Class->EnumMethod( CALC_ARRAY_GET, subs );
     440    if( subs.size() == 0 ){
    446441        return;
    447442    }
     
    452447    //////////////////////////////////////////////////////
    453448
    454         Opcode_CallProc(Parameter,ppsi[0],0,ObjectName,DEF_OBJECT);
    455         RetTypeInfo.type = ppsi[0]->ReturnType;
    456         RetTypeInfo.u.lpIndex = ppsi[0]->u.ReturnIndex;
     449        Opcode_CallProc(Parameter,subs[0],0,ObjectName,DEF_OBJECT);
     450        RetTypeInfo.type = subs[0]->ReturnType;
     451        RetTypeInfo.u.lpIndex = subs[0]->u.ReturnIndex;
    457452
    458453        //mov reg,rax
     
    464459    }////////////////////////////////////////////
    465460
    466     HeapDefaultFree(ppsi);
    467461}
Note: See TracChangeset for help on using the changeset viewer.