Changeset 331 in dev
- Timestamp:
- Sep 27, 2007, 1:47:46 AM (17 years ago)
- Location:
- trunk/abdev
- Files:
-
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler32/CParameter.cpp
r301 r331 233 233 } 234 234 235 extern LONG_PTR ProcPtr_BaseIndex;236 LONG_PTR back_ProcPtr_BaseIndex = ProcPtr_BaseIndex;237 if( dummyType.IsProcPtr() ){238 ProcPtr_BaseIndex = dummyType.GetIndex();239 }240 else{241 ProcPtr_BaseIndex=-1;242 }243 244 235 BOOL bCalcUseHeap; 245 236 Type calcType; … … 247 238 break; 248 239 } 249 250 ProcPtr_BaseIndex=back_ProcPtr_BaseIndex;251 240 252 241 if( calcType.IsObject() ){ -
trunk/abdev/BasicCompiler32/Compile_Calc.cpp
r324 r331 517 517 void *pProc; 518 518 idProc=GetProc(temporary,(void **)&pProc); 519 if(idProc){ 520 CallProc(idProc,pProc,temporary,temp2,Type()); 519 if( idProc ) 520 { 521 CallProc( 522 idProc, 523 pProc, 524 temporary, 525 temp2, 526 Type(), // ベースタイプはなし 527 Type() 528 ); 521 529 return; 522 530 } … … 548 556 return; 549 557 } 550 551 extern LONG_PTR ProcPtr_BaseIndex;552 if(varType.IsProcPtr()) ProcPtr_BaseIndex=varType.GetIndex();553 else ProcPtr_BaseIndex=-1;554 558 555 559 RELATIVE_VAR VarRelativeVar; -
trunk/abdev/BasicCompiler32/Compile_Func.cpp
r325 r331 221 221 compiler.codeGenerator.op_mov_RV( REG_EAX, typeSize ); 222 222 } 223 void Opcode_Func_AddressOf( const char *name ){223 void Opcode_Func_AddressOf( const char *name, const Type &baseType ){ 224 224 extern int cp; 225 225 const UserProc *pUserProc; 226 226 227 extern LONG_PTR ProcPtr_BaseIndex;228 if(ProcPtr_BaseIndex!=-1){227 if( baseType.IsProcPtr() ) 228 { 229 229 //左辺の型にのっとり、オーバーロードを解決 230 230 … … 237 237 238 238 //オーバーロードを解決 239 pUserProc=OverloadSolution(name,subs,compiler.GetObjectModule().meta.GetProcPointers()[ ProcPtr_BaseIndex]->Params(), Type() );239 pUserProc=OverloadSolution(name,subs,compiler.GetObjectModule().meta.GetProcPointers()[baseType.GetIndex()]->Params(), Type() ); 240 240 241 241 if(!pUserProc){ … … 477 477 } 478 478 479 bool Opcode_CallFunc( const char *Parameter, const int FuncNum, Type &resultType, bool isCallOn ){ 479 bool Opcode_CallFunc( const char *Parameter, const int FuncNum, const Type &baseType, Type &resultType, bool isCallOn ) 480 { 480 481 switch(FuncNum){ 481 482 case FUNC_FIX: … … 492 493 break; 493 494 case FUNC_ADDRESSOF: 494 if( isCallOn ) Opcode_Func_AddressOf( Parameter);495 if( isCallOn ) Opcode_Func_AddressOf( Parameter, baseType ); 495 496 resultType.SetBasicType( DEF_PTR_VOID ); 496 497 break; -
trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp
r319 r331 525 525 , compiler.pCompilingClass->GetSuperClass().GetConstructorMethod()->GetUserProc().GetName().c_str() 526 526 , temporary 527 , dummyType ); 527 , Type() // baseTypeはなし 528 , dummyType 529 ); 528 530 } 529 531 else{ -
trunk/abdev/BasicCompiler32/NumOpe.cpp
r327 r331 258 258 bool isClassName = false; 259 259 Type leftType; 260 if( GetTermType( termLeft, leftType, isLiteral, &isClassName ) ){260 if( GetTermType( termLeft, Type(), leftType, isLiteral, &isClassName ) ){ 261 261 if( isClassName == false && compiler.GetObjectModule().meta.GetBlittableTypes().IsExist( leftType ) ){ 262 262 // 左側のオブジェクト部分がBlittable型のとき … … 347 347 //////////////// 348 348 349 CallProc(idProc,pInfo,procName,parameter, resultType);349 CallProc(idProc,pInfo,procName,parameter, baseType,resultType); 350 350 351 351 -
trunk/abdev/BasicCompiler32/Opcode.h
r327 r331 216 216 //Compile_Func.cpp 217 217 int GetFunctionFromName(char *FuncName); 218 bool Opcode_CallFunc( const char *Parameter, const int FuncNum, Type &resultType, bool isCallOn = true );218 bool Opcode_CallFunc( const char *Parameter, const int FuncNum, const Type &baseType, Type &resultType, bool isCallOn = true ); 219 219 220 220 //OperatorProc.cpp -
trunk/abdev/BasicCompiler64/CParameter.cpp
r316 r331 282 282 temp_reg=reg; 283 283 284 extern LONG_PTR ProcPtr_BaseIndex;285 LONG_PTR back_ProcPtr_BaseIndex = ProcPtr_BaseIndex;286 if( dummyType.IsProcPtr() ){287 ProcPtr_BaseIndex = dummyType.GetIndex();288 }289 else{290 ProcPtr_BaseIndex=-1;291 }292 293 284 BOOL bCalcUseHeap; 294 285 Type calcType; … … 296 287 break; 297 288 } 298 299 ProcPtr_BaseIndex=back_ProcPtr_BaseIndex;300 289 301 290 if( calcType.IsObject() ){ -
trunk/abdev/BasicCompiler64/Compile_Calc.cpp
r316 r331 150 150 void *pProc; 151 151 idProc=GetProc(temporary,(void **)&pProc); 152 if(idProc){ 153 CallProc(idProc,pProc,temporary,temp2,Type()); 152 if( idProc ) 153 { 154 CallProc( 155 idProc, 156 pProc, 157 temporary, 158 temp2, 159 Type(), // ベースタイプはなし 160 Type() 161 ); 154 162 return; 155 163 } … … 181 189 return; 182 190 } 183 184 extern LONG_PTR ProcPtr_BaseIndex;185 if(varType.IsProcPtr()) ProcPtr_BaseIndex=varType.GetIndex();186 else ProcPtr_BaseIndex=-1;187 191 188 192 //NumOpe...(rax、またはxmm0に答えが格納される) -
trunk/abdev/BasicCompiler64/Compile_Func.cpp
r330 r331 70 70 return; 71 71 } 72 void Opcode_Func_AddressOf( const char *name ){72 void Opcode_Func_AddressOf( const char *name, const Type &baseType ){ 73 73 extern int cp; 74 74 const UserProc *pUserProc; 75 75 76 extern LONG_PTR ProcPtr_BaseIndex;77 if(ProcPtr_BaseIndex!=-1){76 if( baseType.IsProcPtr() ) 77 { 78 78 //左辺の型にのっとり、オーバーロードを解決 79 79 … … 86 86 87 87 //オーバーロードを解決 88 pUserProc=OverloadSolution(name,subs,compiler.GetObjectModule().meta.GetProcPointers()[ ProcPtr_BaseIndex]->Params(), Type() );88 pUserProc=OverloadSolution(name,subs,compiler.GetObjectModule().meta.GetProcPointers()[baseType.GetIndex()]->Params(), Type() ); 89 89 90 90 if(!pUserProc){ … … 299 299 } 300 300 301 bool Opcode_CallFunc( const char *Parameter, const int FuncNum, Type &resultType, bool isCallOn ){ 301 bool Opcode_CallFunc( const char *Parameter, const int FuncNum, const Type &baseType, Type &resultType, bool isCallOn ) 302 { 302 303 switch(FuncNum){ 303 304 case FUNC_LEN: … … 306 307 break; 307 308 case FUNC_ADDRESSOF: 308 if( isCallOn ) Opcode_Func_AddressOf( Parameter);309 if( isCallOn ) Opcode_Func_AddressOf( Parameter, baseType ); 309 310 resultType.SetBasicType( DEF_PTR_VOID ); 310 311 break; -
trunk/abdev/BasicCompiler64/Compile_ProcOp.cpp
r319 r331 497 497 , compiler.pCompilingClass->GetSuperClass().GetConstructorMethod()->GetUserProc().GetName().c_str() 498 498 , temporary 499 , dummyType ); 499 , Type() // baseTypeはなし 500 , dummyType 501 ); 500 502 } 501 503 else{ -
trunk/abdev/BasicCompiler64/NumOpe.cpp
r319 r331 262 262 bool isClassName = false; 263 263 Type leftType; 264 if( GetTermType( termLeft, leftType, isLiteral, &isClassName ) ){264 if( GetTermType( termLeft, Type(), leftType, isLiteral, &isClassName ) ){ 265 265 if( isClassName == false && compiler.GetObjectModule().meta.GetBlittableTypes().IsExist( leftType ) ){ 266 266 // 左側のオブジェクト部分がBlittable型のとき … … 354 354 //////////////// 355 355 356 CallProc(idProc,pInfo,procName,parameter, resultType);356 CallProc(idProc,pInfo,procName,parameter, baseType,resultType); 357 357 358 358 -
trunk/abdev/BasicCompiler64/Opcode.h
r330 r331 334 334 //Compile_Func.cpp 335 335 int GetFunctionFromName(char *FuncName); 336 bool Opcode_CallFunc( const char *Parameter, const int FuncNum, Type &ReturnTypeInfo, bool isCallOn = true );336 bool Opcode_CallFunc( const char *Parameter, const int FuncNum, const Type &baseType, Type &resultType, bool isCallOn = true ); 337 337 338 338 //OperatorProc.cpp -
trunk/abdev/BasicCompiler_Common/BasicCompiler.h
r266 r331 61 61 62 62 63 //関数ポインタのベース タイプ インデックス(左辺の関数ポインタのパラメータを参考に、オーバーロードを解決)64 LONG_PTR ProcPtr_BaseIndex;65 66 67 63 int cp; 68 64 -
trunk/abdev/BasicCompiler_Common/NumOpe_GetType.cpp
r301 r331 301 301 } 302 302 303 bool GetTermType( const char *term, Type &resultType, bool &isLiteral, bool *pIsClassName )303 bool GetTermType( const char *term, const Type &baseType, Type &resultType, bool &isLiteral, bool *pIsClassName ) 304 304 { 305 305 char parameter[VN_SIZE]; … … 330 330 bool isClassName = false; 331 331 Type leftType; 332 if( GetTermType( termLeft, leftType, isLiteral, &isClassName ) ){332 if( GetTermType( termLeft, Type(), leftType, isLiteral, &isClassName ) ){ 333 333 if( isClassName == false && compiler.GetObjectModule().meta.GetBlittableTypes().IsExist( leftType ) ){ 334 334 // 左側のオブジェクト部分がBlittable型のとき … … 340 340 temporary ); 341 341 342 if( !GetTermType( termLeft, leftType, isLiteral, &isClassName ) ){342 if( !GetTermType( termLeft, Type(), leftType, isLiteral, &isClassName ) ){ 343 343 goto globalArea; 344 344 } … … 446 446 //////////////// 447 447 448 if( !CallProc(idProc,pProc,procName,parameter, resultType, false ) ){448 if( !CallProc(idProc,pProc,procName,parameter, baseType, resultType, false ) ){ 449 449 return false; 450 450 } … … 716 716 717 717 bool isLiteral = true; 718 if( GetTermType( term, resultType, isLiteral ) ){718 if( GetTermType( term, baseType, resultType, isLiteral ) ){ 719 719 type_stack[sp] = resultType.GetBasicType(); 720 720 index_stack[sp] = resultType.GetIndex(); -
trunk/abdev/BasicCompiler_Common/Object.cpp
r276 r331 60 60 temporary, 61 61 Parameter, 62 Type(), // baseTypeはなし 62 63 dummyType ); 63 64 … … 72 73 temporary, 73 74 Parameter, 75 Type(), // baseTypeはなし 74 76 dummyType ); 75 77 } -
trunk/abdev/BasicCompiler_Common/Subroutine.cpp
r327 r331 115 115 } 116 116 117 bool CallProc( int kind, const void *pProc, const char *fullCallName, const char *lpszParms, Type &resultType, bool isCallOn ){118 117 bool CallProc( int kind, const void *pProc, const char *fullCallName, const char *lpszParms, const Type &baseType, Type &resultType, bool isCallOn ) 118 { 119 119 //GetSubHash内でエラー提示が行われた場合 120 120 if(pProc==(Procedure *)-1){ … … 178 178 int FuncId = (int)(_int64)pProc; 179 179 180 if( !Opcode_CallFunc( lpszParms, FuncId, resultType, isCallOn ) ){180 if( !Opcode_CallFunc( lpszParms, FuncId, baseType, resultType, isCallOn ) ){ 181 181 return false; 182 182 } … … 212 212 } 213 213 214 return CallProc( PROC_DEFAULT, pInfo, tempName, lpszParms, resultType, isCallOn );214 return CallProc( PROC_DEFAULT, pInfo, tempName, lpszParms, baseType, resultType, isCallOn ); 215 215 } 216 216 else{ -
trunk/abdev/BasicCompiler_Common/common.h
r322 r331 347 347 int AutoBigCast(int BaseType,int CalcType); 348 348 BOOL CheckCalcType(int idCalc,int *type,int sp); 349 bool GetTermType( const char *term, Type &resultType, bool &isLiteral, bool *pIsClassName = NULL );349 bool GetTermType( const char *term, const Type &baseType, Type &resultType, bool &isLiteral, bool *pIsClassName = NULL ); 350 350 bool NumOpe_GetType( const char *expression, const Type &baseType, Type &resultType, bool *pIsLiteralCalculation = NULL ); 351 351 … … 354 354 int GetProc(char *name,void **ppInfo); 355 355 void SplitObjectName(const char *name,char *ObjectName, ReferenceKind &referenceFind ); 356 bool CallProc( int kind, const void *pProc, const char *fullCallName, const char *lpszParms, Type &resultType, bool isCallOn = true );356 bool CallProc( int kind, const void *pProc, const char *fullCallName, const char *lpszParms, const Type &baseType, Type &resultType, bool isCallOn = true ); 357 357 bool CallPropertyMethod( const char *variable, const char *rightSide, Type &resultType); 358 358 bool GetReturnTypeOfPropertyMethod( const char *variable, const char *rightSide, Type &resultType );
Note:
See TracChangeset
for help on using the changeset viewer.