Changeset 64 in dev for BasicCompiler64/Compile_CallProc.cpp
- Timestamp:
- Mar 8, 2007, 2:49:34 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler64/Compile_CallProc.cpp
r63 r64 12 12 13 13 //mov rdx,rax 14 op_mov 64_ToReg_FromReg(REG_RDX,REG_RAX);14 op_mov_RR(REG_RDX,REG_RAX); 15 15 16 16 //mov rcx,rsp 17 op_mov 64_ToReg_FromReg(REG_RCX,REG_RSP);17 op_mov_RR(REG_RCX,REG_RSP); 18 18 19 19 //call _DebugSys_SaveContext … … 96 96 } 97 97 98 void Opcode_CallProc(c har *Parameter,SUBINFO *psi,DWORD dwFlags,char *ObjectName,int RefType){98 void Opcode_CallProc(const char *Parameter,SUBINFO *psi,DWORD dwFlags,char *ObjectName,int RefType){ 99 99 int i2; 100 100 … … 207 207 208 208 /////////////////////////////////////////////////////////////// 209 // _System_LocalThis 、_System_ReturnObjectのダミーをセット209 // _System_LocalThisのダミーをセット 210 210 /////////////////////////////////////////////////////////////// 211 211 … … 216 216 } 217 217 218 if(psi->ReturnType==DEF_OBJECT && psi->isReturnRef == false ){219 //_System_ReturnObject(第一または第二パラメータのダミーを作成)220 sprintf(temporary+lstrlen(temporary),"%c%c0,",1,ESC_BYVAL);221 }222 223 218 if(Parameter[0]=='\0'&&temporary[0]) 224 219 temporary[lstrlen(temporary)-1]=0; 225 220 else lstrcat(temporary,Parameter); 221 222 223 //パラメータセット前のspオフセットを取得(Newの場合はここにThisポインタが格納されている) 224 int this_sp_offset = pobj_sf->GetNowSp(); 226 225 227 226 … … 254 253 pobj_parameter->SetParameter(psi->name,psi->pRealParmInfo,psi->RealParmNum,psi->RealSecondParmNum); 255 254 256 257 if(psi->ReturnType==DEF_OBJECT && psi->isReturnRef == false){ 255 if(psi->ReturnType==DEF_STRUCT && psi->isReturnRef == false){ 258 256 ////////////////////////////////////////////////////// 259 // 戻り値に オブジェクトインスタンスを持つ場合260 // ※ByRef _System_Return Objectパラメータをセット257 // 戻り値に構造体インスタンスを持つ場合 258 // ※ByRef _System_ReturnValue パラメータをセット 261 259 ////////////////////////////////////////////////////// 262 260 … … 316 314 SetVarPtrToReg(REG_RCX,&RelativeVar); 317 315 318 //参照タイプが "->" の場合 319 if(RefType==DEF_PTR_OBJECT){ 320 //mov rcx,qword ptr[rcx] 321 op_mov_RM(sizeof(_int64),REG_RCX,REG_RCX,0,MOD_BASE); 322 } 316 // 参照を実体ポインタにする 317 //mov rcx,qword ptr[rcx] 318 op_mov_RM(sizeof(_int64),REG_RCX,REG_RCX,0,MOD_BASE); 323 319 } 324 320 } … … 329 325 330 326 //mov rcx,qword ptr[rsp+offset] ※スタックフレームを利用 331 pobj_sf->ref (REG_RCX);327 pobj_sf->ref_offset_data(REG_RCX, this_sp_offset); 332 328 } 333 329 else{
Note:
See TracChangeset
for help on using the changeset viewer.