Changeset 50 in dev for BasicCompiler64/Compile_CallProc.cpp
- Timestamp:
- Feb 10, 2007, 5:44:58 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler64/Compile_CallProc.cpp
r47 r50 29 29 pLocalVarAddrSchedule[LocalVarAddrScheduleNum]=obp; 30 30 LocalVarAddrScheduleNum++; 31 }32 33 int CallProc(int idProc,void *pInfo,char *name,char *Parameter,LONG_PTR *plpRetIndex){34 int ret_type;35 36 if(idProc==PROC_DEFAULT){37 /////////////////////38 // ユーザー定義関数39 /////////////////////40 41 SUBINFO *psi;42 psi=(SUBINFO *)pInfo;43 44 //GetSubHash内でエラー提示が行われた場合45 if(psi==(SUBINFO *)-1) return -1;46 47 48 //オブジェクト名を取得49 char ObjectName[VN_SIZE];50 int RefType;51 SplitObjectName(name,ObjectName,&RefType);52 53 54 ////////////////////////55 // オーバーロードを解決56 ////////////////////////57 58 SUBINFO **ppsi;59 int num;60 ppsi=GetOverloadSubHash(name,&num);61 if(num){62 //オーバーロードを解決63 psi=OverloadSolutionWithStrParam(name,ppsi,num,Parameter,ObjectName,NULL);64 HeapDefaultFree(ppsi);65 66 if(!psi) return 0;67 }68 69 70 Opcode_CallProc(Parameter,psi,0,ObjectName,RefType);71 if( plpRetIndex ){72 *plpRetIndex = psi->u.ReturnIndex;73 }74 return psi->ReturnType;75 }76 else if(idProc==PROC_DLL){77 /////////////////////////78 // DLL関数79 /////////////////////////80 DECLAREINFO *pdi;81 pdi=(DECLAREINFO *)pInfo;82 83 ret_type=Opcode_CallDllProc(Parameter,pdi,plpRetIndex);84 }85 else if(idProc==PROC_BUILTIN){86 /////////////////////////87 // 組み込み関数88 /////////////////////////89 int FuncId;90 FuncId=(int)(_int64)pInfo;91 92 TYPEINFO ReturnTypeInfo = { DEF_LONG, NULL };93 Opcode_CallFunc( Parameter, FuncId, ReturnTypeInfo );94 if( plpRetIndex ){95 *plpRetIndex = ReturnTypeInfo.u.lpIndex;96 }97 return ReturnTypeInfo.type;98 }99 else if(idProc==PROC_PTR){100 /////////////////101 // 関数ポインタ102 /////////////////103 104 LONG_PTR lpIndex;105 GetVarType(name,&lpIndex,0);106 107 extern PROCPTRINFO *pProcPtrInfo;108 ret_type=Opcode_CallProcPtr(name,Parameter,&pProcPtrInfo[lpIndex],plpRetIndex);109 }110 111 return ret_type;112 }113 114 BOOL CallPropertyMethod(char *variable,char *RightSide,TYPEINFO *pRetTypeInfo){115 //プロパティ用のメソッドを呼び出す116 117 //配列要素を取得118 char VarName[VN_SIZE],ArrayElements[VN_SIZE];119 GetArrayElement(variable,VarName,ArrayElements);120 121 //オブジェクト名を取得122 char ObjectName[VN_SIZE];123 int RefType;124 SplitObjectName(VarName,ObjectName,&RefType);125 126 //オーバーロード用の関数リストを作成127 SUBINFO **ppsi;128 int num;129 ppsi=GetOverloadSubHash(VarName,&num);130 if(num==0){131 return 0;132 }133 134 //パラメータを整備135 char *Parameter;136 Parameter=(char *)HeapAlloc(hHeap,0,lstrlen(ArrayElements)+lstrlen(RightSide)+32);137 lstrcpy(Parameter,ArrayElements);138 if(RightSide){139 if(Parameter[0]&&RightSide[0]) lstrcat(Parameter,",");140 lstrcat(Parameter,RightSide);141 }142 143 //オーバーロードを解決144 SUBINFO *psi;145 psi=OverloadSolutionWithStrParam(VarName,ppsi,num,Parameter,ObjectName,NULL);146 HeapDefaultFree(ppsi);147 148 if(psi){149 //呼び出し150 Opcode_CallProc(Parameter,psi,0,ObjectName,RefType);151 152 if( pRetTypeInfo ){153 pRetTypeInfo->type = psi->ReturnType;154 pRetTypeInfo->u.lpIndex = psi->u.ReturnIndex;155 }156 }157 158 HeapDefaultFree(Parameter);159 160 return 1;161 31 } 162 32
Note:
See TracChangeset
for help on using the changeset viewer.