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