Changeset 416 in dev for trunk/abdev/BasicCompiler64/Compile_CallProc.cpp
- Timestamp:
- Mar 6, 2008, 11:28:05 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler64/Compile_CallProc.cpp
r370 r416 128 128 //"->"によってオブジェクトを指定する通常のメンバ関数呼び出し 129 129 Type varType; 130 GetVarType( ObjectName, varType, false ); 131 if( NATURAL_TYPE( varType.GetBasicType() ) == DEF_OBJECT ) 130 if( GetTermType( ObjectName, varType ) ) 132 131 { 133 pobj_c = &varType.GetClass(); 134 leftType = varType; 132 if( varType.IsObject() ) 133 { 134 pobj_c = &varType.GetClass(); 135 leftType = varType; 136 } 135 137 } 136 else 138 139 if( !pobj_c ) 137 140 { 138 141 pobj_c=compiler.GetObjectModule().meta.GetClasses().Find(ObjectName); … … 319 322 if(lstrcmpi(ObjectName,"Super")==0) goto InClassMember; 320 323 else{ 321 RELATIVE_VAR RelativeVar; 322 if( pMethod->IsConst() ){ 323 //Constアクセスが可能なメソッドの場合 324 if( !GetVarOffsetReadOnly( ObjectName, &RelativeVar, Type() ) ){ 325 return false; 326 } 324 bool isLiteral; 325 if( !TermOpe( ObjectName, Type(), Type(), isLiteral, NULL, NULL, false, !pMethod->IsConst() ) ) 326 { 327 return false; 327 328 } 328 else{ 329 //Constアクセスが不可能なメソッドの場合 330 if( !GetVarOffsetReadWrite( ObjectName, &RelativeVar, Type() ) ){ 331 return false; 332 } 333 } 334 335 SetVarPtrToReg(REG_RCX,&RelativeVar); 336 337 // 参照を実体ポインタにする 338 //mov rcx,qword ptr[rcx] 339 compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_RCX,REG_RCX,0,MOD_BASE); 329 330 // 実態ポインタをraxにコピー 331 compiler.codeGenerator.op_mov_RR( REG_RCX, REG_RAX ); 340 332 } 341 333 }
Note:
See TracChangeset
for help on using the changeset viewer.