Ignore:
Timestamp:
Mar 10, 2008, 5:39:36 PM (16 years ago)
Author:
dai_9181
Message:

・ジェネリックな型をパラメータに持つメソッドのオーバーロード解決に対応した。
・型パラメータの制約クラス指定に対応した。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler_Common/NumOpe_GetType.cpp

    r415 r424  
    194194}
    195195
    196 int GetReturnType_OperatorProc(int idCalc,const Type &baseType,int *type,LONG_PTR *index_stack,int &sp){
    197     //オーバーロードされたオペレータ関数の戻り値を取得
    198     CClass *pobj_c;
    199     pobj_c=(CClass *)index_stack[sp-2];
     196int GetReturnType_OperatorProc(int idCalc,const Type &baseType,int *type_stack,LONG_PTR *index_stack,int &sp){
     197    Type leftType( type_stack[sp-2], index_stack[sp-2] );
     198    Type rightType( type_stack[sp-1] & (~FLAG_CAST), index_stack[sp-1] );
     199
     200    //オーバーロードされたオペレータ関数を呼び出す
     201    const CClass *pobj_c = &leftType.GetClass();
    200202
    201203    std::vector<const UserProc *> subs;
     
    221223
    222224    if(bTwoTerm){
    223         params.push_back( new Parameter( "", Type( type[sp-1], index_stack[sp-1] ) ) );
     225        params.push_back( new Parameter( "", rightType ) );
    224226    }
    225227
     
    229231    if(idCalc==CALC_EQUAL) lstrcpy(temporary,"==");
    230232    else GetCalcName(idCalc,temporary);
    231     const UserProc *pUserProc = OverloadSolution( temporary, subs, params, baseType );
     233    const UserProc *pUserProc = OverloadSolution( temporary, subs, params, baseType, leftType );
    232234
    233235    if(bTwoTerm){
     
    246248
    247249    sp--;
    248     type[sp-1]=pUserProc->ReturnType().GetBasicType();
     250    type_stack[sp-1]=pUserProc->ReturnType().GetBasicType();
    249251    index_stack[sp-1]=pUserProc->ReturnType().GetIndex();
    250252
Note: See TracChangeset for help on using the changeset viewer.