Changeset 45 in dev
- Timestamp:
- Feb 2, 2007, 2:58:14 AM (18 years ago)
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler32/CParameter.cpp
r36 r45 395 395 //↑ここでスタックに積む 396 396 397 useTempParameters[i2] = true; 398 useTempObject = true; 399 400 types[i2].type = type; 401 types[i2].u.lpIndex = lpVarIndex; 397 bool result = CheckDifferentType( 398 DummyTypeInfo.type, 399 DummyTypeInfo.u.lpIndex, 400 type, 401 lpVarIndex, 402 FuncName, 403 i2); 404 405 if( result ){ 406 useTempParameters[i2] = true; 407 useTempObject = true; 408 409 types[i2].type = type; 410 types[i2].u.lpIndex = lpVarIndex; 411 } 402 412 403 413 nCountOfTempObjects++; … … 430 440 //call destructor 431 441 int i5 = types[i2].u.pobj_Class->DestructorMemberSubIndex; 432 op_call( types[i2].u.pobj_Class->ppobj_Method[i5]->psi ); 442 if( i5 != -1 ){ 443 op_call( types[i2].u.pobj_Class->ppobj_Method[i5]->psi ); 444 } 433 445 434 446 -
BasicCompiler32/Compile_CallProc.cpp
r40 r45 357 357 358 358 //エラーチェック 359 if( !pobj_parameter->ErrorCheck(psi->name,psi->pRealParmInfo,psi->RealParmNum,psi-> RealSecondParmNum) ){359 if( !pobj_parameter->ErrorCheck(psi->name,psi->pRealParmInfo,psi->RealParmNum,psi->SecondParmNum) ){ 360 360 //パラメータにエラーがあるときは処理を終える 361 361 return; … … 524 524 } 525 525 526 //一時オブジェクトを生成 527 pobj_parameter->NewTempParameters( pdi->name,pdi->pParmInfo,pdi->ParmNum,pdi->ParmNum ); 528 526 529 //レジスタ、スタックフレームにセット 527 530 int ParmSize; 528 531 ParmSize=pobj_parameter->SetParameter(pdi->name,pdi->pParmInfo,pdi->ParmNum,pdi->ParmNum); 529 530 //パラメータオブジェクトを破棄531 delete pobj_parameter;532 532 533 533 … … 545 545 } 546 546 547 //一時オブジェクトを破棄 548 pobj_parameter->DeleteTempParameters(); 549 550 //パラメータオブジェクトを破棄 551 delete pobj_parameter; 552 547 553 if(plpIndex) *plpIndex=pdi->u.ReturnIndex; 548 554 -
BasicCompiler64/CParameter.cpp
r31 r45 391 391 StackOffsetOfTempObject[i2] = pobj_sf->push(reg); 392 392 393 useTempParameters[i2] = true; 394 useTempObject = true; 395 396 types[i2].type = type; 397 types[i2].u.lpIndex = lpVarIndex; 393 bool result = CheckDifferentType( 394 DummyTypeInfo.type, 395 DummyTypeInfo.u.lpIndex, 396 type, 397 lpVarIndex, 398 FuncName, 399 i2); 400 401 if( result ){ 402 useTempParameters[i2] = true; 403 useTempObject = true; 404 405 types[i2].type = type; 406 types[i2].u.lpIndex = lpVarIndex; 407 } 398 408 } 399 409 } … … 415 425 //call destructor 416 426 int i5 = types[i2].u.pobj_Class->DestructorMemberSubIndex; 417 op_call( types[i2].u.pobj_Class->ppobj_Method[i5]->psi ); 427 if( i5 != -1 ){ 428 op_call( types[i2].u.pobj_Class->ppobj_Method[i5]->psi ); 429 } 418 430 419 431 //メモリを解放する -
BasicCompiler64/Compile_CallProc.cpp
r40 r45 546 546 pobj_parameter->BackupParameter(pdi->ParmNum); 547 547 548 //一時オブジェクトを生成 549 pobj_parameter->NewTempParameters( pdi->name,pdi->pParmInfo,pdi->ParmNum,pdi->ParmNum ); 550 548 551 //レジスタ、スタックフレームにセット 549 552 pobj_parameter->SetParameter(pdi->name,pdi->pParmInfo,pdi->ParmNum,pdi->ParmNum); … … 564 567 }*/ 565 568 569 //一時オブジェクトを破棄 570 pobj_parameter->DeleteTempParameters(); 571 566 572 //スタックフレームに存在する既存のパラメータを復元 567 573 pobj_parameter->RestoreParameter(pdi->ParmNum); -
BasicCompiler_Common/common.h
r43 r45 578 578 void SetError(int ErrorNum,const char *KeyWord,int pos); 579 579 void CompileMessage(char *buffer); 580 voidCheckDifferentType(int VarType,LONG_PTR lpVarIndex,int CalcType,LONG_PTR lpCalcIndex,char *pszFuncName,int ParmNum);580 bool CheckDifferentType(int VarType,LONG_PTR lpVarIndex,int CalcType,LONG_PTR lpCalcIndex,char *pszFuncName,int ParmNum); 581 581 582 582 //Compile.cpp -
BasicCompiler_Common/error.cpp
r40 r45 393 393 if(iWarning==1) SetError(-101,temporary,cp); 394 394 else if(iWarning==2) SetError(-102,temporary,cp); 395 else if(iWarning==3) SetError(50,temporary,cp); 395 396 } 396 397 397 voidCheckDifferentType(int VarType,LONG_PTR lpVarIndex,int CalcType,LONG_PTR lpCalcIndex,char *pszFuncName,int ParmNum){398 bool CheckDifferentType(int VarType,LONG_PTR lpVarIndex,int CalcType,LONG_PTR lpCalcIndex,char *pszFuncName,int ParmNum){ 398 399 399 400 if(VarType==DEF_OBJECT||CalcType==DEF_OBJECT){ 400 401 //オブジェクトインスタンスの場合 401 402 if(!(VarType==CalcType&&lpVarIndex==lpCalcIndex)){ 402 DifferentTypeError(VarType,lpVarIndex,CalcType,lpCalcIndex, 2,pszFuncName,ParmNum);403 return ;403 DifferentTypeError(VarType,lpVarIndex,CalcType,lpCalcIndex,3,pszFuncName,ParmNum); 404 return false; 404 405 } 405 406 } … … 407 408 //#strictが指定されていないときは型チェックを行わないようにする 408 409 extern BOOL bStrict; 409 if(bStrict==0) return ;410 if(bStrict==0) return true; 410 411 411 412 if(CalcType&FLAG_PTR){ … … 421 422 if(IsPtrType(VarType)&&lpCalcIndex==LITERAL_NULL){ 422 423 //リテラルNULL値の場合 423 return ;424 return true; 424 425 } 425 426 426 427 if(VarType==DEF_PTR_VOID){ 427 428 //左辺がVoidPtr型の場合は、ポインタ型すべてを受け入れる 428 if(IsPtrType(CalcType)) return ;429 if(IsPtrType(CalcType)) return true; 429 430 } 430 431 431 432 if(CalcType==DEF_PTR_VOID){ 432 433 //右辺がVoidPtr型の場合は、ポインタ型すべてを受け入れる 433 if(IsPtrType(VarType)) return ;434 if(IsPtrType(VarType)) return true; 434 435 } 435 436 436 437 if(VarType!=CalcType){ 437 438 DifferentTypeError(VarType,lpVarIndex,CalcType,lpCalcIndex,2,pszFuncName,ParmNum); 438 return ;439 return true; 439 440 } 440 441 … … 449 450 if(lpVarIndex==(LONG_PTR)pobj_tempClass){ 450 451 //継承先が等しいとき 451 return ;452 return true; 452 453 } 453 454 } 454 455 DifferentTypeError(VarType,lpVarIndex,CalcType,lpCalcIndex,2,pszFuncName,ParmNum); 455 return ;456 return true; 456 457 } 457 458 } … … 507 508 } 508 509 } 510 511 return true; 509 512 }
Note:
See TracChangeset
for help on using the changeset viewer.