#include "../BasicCompiler_Common/common.h" #ifdef _AMD64_ #include "../BasicCompiler64/opcode.h" #else #include "../BasicCompiler32/opcode.h" #endif SUBINFO *OverloadSolutionWithStrParam(char *name,SUBINFO **ppsi,int num,char *Parameter,char *ObjectName,TYPEINFO *pReturnTypeInfo){ // オーバーロードの解決 //オーバーロードされていないとき if(num==1) return ppsi[0]; //////////////////////// // パラメータをセット //////////////////////// CParameter *pobj_parameter=0; BOOL bStatic=0; if(ObjectName[0]){ if(pobj_DBClass->check(ObjectName)) bStatic=1; } char temporary[VN_SIZE]; if((ObjectName[0]||ppsi[0]->pobj_ParentClass)&&bStatic==0){ //Thisポインタ(第一パラメータ)のダミーを作成 if(Parameter[0]) sprintf(temporary,"0%c%cVoidPtr,%s",1,ESC_AS,Parameter); else sprintf(temporary,"0%c%cVoidPtr",1,ESC_AS); } else lstrcpy(temporary,Parameter); //パラメータオブジェクトを生成 pobj_parameter=new CParameter(temporary); if(pReturnTypeInfo) pobj_parameter->SetReturnType(pReturnTypeInfo); SUBINFO *psi; psi=pobj_parameter->OverloadSolution(name,ppsi,num); //パラメータオブジェクトを破棄 delete pobj_parameter; pobj_parameter=0; return psi; } BOOL OverloadCheck(PARAMETER_INFO *ppi1,int ParmNum1,PARAMETER_INFO *ppi2,int ParmNum2){ //パラメータの個数が不一致の場合 if(ParmNum1!=ParmNum2) return 0; int i; for(i=0;iSetReturnType(pReturnTypeInfo); SUBINFO *psi; psi=pobj_Parameter->OverloadSolution(name,ppsi,num); delete pobj_Parameter; return psi; }