Changeset 73 in dev for BasicCompiler32
- Timestamp:
- Mar 16, 2007, 11:07:14 PM (18 years ago)
- Location:
- BasicCompiler32
- Files:
-
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler32/BasicCompiler.vcproj
r71 r73 1114 1114 > 1115 1115 </File> 1116 <File1117 RelativePath="..\BasicCompiler_Common\Type.h"1118 >1119 </File>1120 1116 </Filter> 1121 1117 <Filter … … 1278 1274 Name="Procedure" 1279 1275 > 1280 <File1281 RelativePath="..\BasicCompiler_Common\Parameter.h"1282 >1283 </File>1284 1276 <File 1285 1277 RelativePath="..\BasicCompiler_Common\ParamImpl.cpp" … … 1926 1918 /> 1927 1919 </FileConfiguration> 1920 </File> 1921 </Filter> 1922 <Filter 1923 Name="CommonClasses" 1924 > 1925 <File 1926 RelativePath="..\BasicCompiler_Common\Procedure.cpp" 1927 > 1928 </File> 1929 <File 1930 RelativePath="..\BasicCompiler_Common\Type.cpp" 1931 > 1928 1932 </File> 1929 1933 </Filter> … … 1974 1978 <File 1975 1979 RelativePath="..\BasicCompiler_Common\TypeDef.h" 1980 > 1981 </File> 1982 </Filter> 1983 <Filter 1984 Name="CommonClasses" 1985 > 1986 <File 1987 RelativePath="..\BasicCompiler_Common\Parameter.h" 1988 > 1989 </File> 1990 <File 1991 RelativePath="..\BasicCompiler_Common\Procedure.h" 1992 > 1993 </File> 1994 <File 1995 RelativePath="..\BasicCompiler_Common\Type.h" 1976 1996 > 1977 1997 </File> -
BasicCompiler32/CParameter.cpp
r71 r73 40 40 BOOL bByVal; 41 41 if(bEllipse){ 42 DummyTypeInfo.type=NumOpe_GetType (Parms[i2],NULL,&DummyTypeInfo.u.lpIndex);42 DummyTypeInfo.type=NumOpe_GetType_Old(Parms[i2],NULL,&DummyTypeInfo.u.lpIndex); 43 43 bByVal=1; 44 44 } … … 96 96 return nCountOfTempObjects * PTR_SIZE; 97 97 } 98 int ParamImpl::NewTempParameters( const char *procName, const Parameters ¶ms, int SecondParmNum ){ 99 /////////////////////////////////////////////////////// 100 // 一時オブジェクトをあらかじめスタックに積んでおく 101 /////////////////////////////////////////////////////// 102 103 useTempObject = false; 104 105 //一時参照の数 106 nCountOfTempObjects = 0; 107 108 BOOL bEllipse; 109 if(params.size()){ 110 if(params[params.size()-1]->GetBasicType()==DEF_ELLIPSE) bEllipse=1; 111 else bEllipse=0; 112 } 113 else bEllipse=0; 114 115 for(int i2=ParmsNum-1;i2>=0;i2--){ 116 useTempParameters[i2] = false; 117 118 if(bEllipse&&i2<=(int)params.size()-2) bEllipse=0; 119 120 if(i2==0){ 121 if( params[i2]->GetVarName() == "_System_LocalThis" ){ 122 //オブジェクトメンバの第一パラメータのThisポインタ 123 continue; 124 } 125 } 126 if( i2==0||i2==1 ){ 127 if( params[i2]->GetVarName() == procName ){ 128 //オブジェクトメンバの第一または第二パラメータの戻り値用オブジェクト 129 continue; 130 } 131 } 132 133 TYPEINFO DummyTypeInfo; 134 BOOL bByVal; 135 if(bEllipse){ 136 DummyTypeInfo.type=NumOpe_GetType_Old(Parms[i2],NULL,&DummyTypeInfo.u.lpIndex); 137 bByVal=1; 138 } 139 else{ 140 DummyTypeInfo.type=params[i2]->GetBasicType(); 141 DummyTypeInfo.u.lpIndex=params[i2]->GetIndex(); 142 bByVal = ( params[i2]->IsRef() == false ) ? TRUE:FALSE; 143 } 144 145 146 if( !bByVal ){ 147 //ポインタ参照 148 if(Parms[i2][0]==1&&Parms[i2][1]==ESC_BYVAL){ 149 //ポインタ指定 150 continue; 151 } 152 153 LONG_PTR lpVarIndex; 154 if( GetVarType( Parms[i2], &lpVarIndex, FALSE ) == -1 ){ 155 //変数ではないとき 156 int reg = REG_RAX; 157 int type = NumOpe( Parms[i2], DummyTypeInfo.type, DummyTypeInfo.u.lpIndex, &lpVarIndex ); 158 //↑ここでスタックに積む 159 160 nCountOfTempObjects++; 161 162 if( type != DEF_STRUCT ){ 163 //一時参照を作成 164 165 //push esp 166 op_push( REG_ESP ); 167 168 nCountOfTempObjects++; 169 } 170 171 bool result = CheckDifferentType( 172 DummyTypeInfo.type, 173 DummyTypeInfo.u.lpIndex, 174 type, 175 lpVarIndex, 176 procName, 177 i2); 178 179 if( result ){ 180 useTempParameters[i2] = true; 181 useTempObject = true; 182 183 types[i2].type = type; 184 types[i2].u.lpIndex = lpVarIndex; 185 } 186 } 187 } 188 } 189 190 return nCountOfTempObjects * PTR_SIZE; 191 } 98 192 99 193 void ParamImpl::DeleteTempParameters(){ … … 111 205 112 206 //call free 113 extern S UBINFO*pSub_free;207 extern SubInfo *pSub_free; 114 208 op_call(pSub_free); 115 209 } … … 138 232 139 233 //call calloc 140 extern S UBINFO*pSub_calloc;234 extern SubInfo *pSub_calloc; 141 235 op_call(pSub_calloc); 142 236 … … 147 241 TYPEINFO BaseType={DEF_STRUCT,(LONG_PTR)pobj_Class}; 148 242 TYPEINFO CalcType; 149 CalcType.type=NumOpe_GetType (Parameter,&BaseType,&CalcType.u.lpIndex);243 CalcType.type=NumOpe_GetType_Old(Parameter,&BaseType,&CalcType.u.lpIndex); 150 244 151 245 /* … … 267 361 BOOL bByVal; 268 362 if(bEllipse){ 269 DummyTypeInfo.type=NumOpe_GetType (Parms[i2],NULL,&DummyTypeInfo.u.lpIndex);363 DummyTypeInfo.type=NumOpe_GetType_Old(Parms[i2],NULL,&DummyTypeInfo.u.lpIndex); 270 364 bByVal=1; 271 365 } … … 436 530 return ParmSize; 437 531 } 532 int ParamImpl::SetParameter( const char *procName, const Parameters ¶ms, int SecondParmNum ){ 533 /////////////////////////////////////////////////////////// 534 // パラメータをレジスタ及びスタックフレームにセット 535 /////////////////////////////////////////////////////////// 536 int i2,i3; 537 538 BOOL bEllipse; 539 if( params.size() ){ 540 if(params[params.size()-1]->GetBasicType()==DEF_ELLIPSE) bEllipse=1; 541 else bEllipse=0; 542 } 543 else bEllipse=0; 544 545 BOOL bHas_System_LocalThis=0; 546 if(ParmsNum>=1){ 547 if( params[0]->GetVarName() == "_System_LocalThis" ){ 548 bHas_System_LocalThis=1; 549 } 550 } 551 552 //戻り値用の変数名を取得 553 const char *lpszVarNameToReturn = (procName[0]==1&&procName[1]==ESC_OPERATOR)?"_System_ReturnValue":procName; 554 555 //パラメータをレジスタとスタックに格納 556 int CalcType; 557 LONG_PTR lpCalcIndex; 558 BOOL bCalcUseHeap; 559 int ParmSize=0; 560 RELATIVE_VAR RelativeVar; 561 int nCountOfNowTempObjects = 0; 562 for(i2=ParmsNum-1;i2>=0;i2--){ 563 if(bEllipse&&i2<=(int)params.size()-2) bEllipse=0; 564 565 if(i2==0){ 566 if( params[i2]->GetVarName() == "_System_LocalThis" ){ 567 //オブジェクトメンバの第一パラメータのThisポインタ 568 continue; 569 } 570 } 571 if(i2==0||i2==1){ 572 if( params[i2]->GetVarName() == lpszVarNameToReturn ){ 573 //オブジェクトメンバの第一または第二パラメータの戻り値用オブジェクト 574 continue; 575 } 576 } 577 578 TYPEINFO DummyTypeInfo; 579 BOOL bByVal; 580 if(bEllipse){ 581 DummyTypeInfo.type=NumOpe_GetType_Old(Parms[i2],NULL,&DummyTypeInfo.u.lpIndex); 582 bByVal=1; 583 } 584 else{ 585 DummyTypeInfo.type=params[i2]->GetBasicType(); 586 DummyTypeInfo.u.lpIndex=params[i2]->GetIndex(); 587 bByVal = (params[i2]->IsRef() == false ) ? TRUE:FALSE; 588 } 589 590 if(bByVal==1){ 591 //値参照 592 593 if(Parms[i2][0]==1&&Parms[i2][1]==ESC_BYVAL){ 594 char temp2[255]; 595 sprintf(temp2,"%s関数の第%dパラメータ",procName,i2+1); 596 SetError(19,temp2,cp); 597 continue; 598 } 599 600 if(DummyTypeInfo.type==DEF_STRUCT){ 601 SetStructParameter(DummyTypeInfo.u.pobj_Class,Parms[i2]); 602 goto next; 603 } 604 605 606 extern LONG_PTR ProcPtr_BaseIndex; 607 LONG_PTR back_ProcPtr_BaseIndex; 608 back_ProcPtr_BaseIndex=ProcPtr_BaseIndex; 609 if(DummyTypeInfo.type==DEF_PTR_PROC) ProcPtr_BaseIndex=DummyTypeInfo.u.lpIndex; 610 else ProcPtr_BaseIndex=-1; 611 612 CalcType=NumOpe(Parms[i2],DummyTypeInfo.type,DummyTypeInfo.u.lpIndex,&lpCalcIndex,&bCalcUseHeap); 613 614 ProcPtr_BaseIndex=back_ProcPtr_BaseIndex; 615 616 if(CalcType==-1) break; 617 618 if(CalcType==DEF_OBJECT){ 619 if( DummyTypeInfo.type != DEF_OBJECT 620 || 621 DummyTypeInfo.type == DEF_OBJECT && 622 !DummyTypeInfo.u.pobj_Class->IsEqualsOrSubClass( (CClass *)lpCalcIndex ) ){ 623 //キャスト演算子のオーバーロードに対応する 624 CallCastOperatorProc(CalcType,lpCalcIndex,bCalcUseHeap,DummyTypeInfo.type,DummyTypeInfo.u.lpIndex); 625 } 626 } 627 628 if(!bEllipse){ 629 //型チェック 630 if(bHas_System_LocalThis) i3=i2-1; 631 else i3=i2; 632 CheckDifferentType( 633 DummyTypeInfo.type, 634 DummyTypeInfo.u.lpIndex, 635 CalcType, 636 lpCalcIndex, 637 procName, 638 i3); 639 } 640 641 if(DummyTypeInfo.type==DEF_DOUBLE){ 642 ChangeTypeToDouble(CalcType); 643 ParmSize+=sizeof(long)*2; 644 } 645 else if(DummyTypeInfo.type==DEF_SINGLE){ 646 ChangeTypeToSingle(CalcType); 647 ParmSize+=sizeof(long); 648 } 649 else if(DummyTypeInfo.type==DEF_INT64||DummyTypeInfo.type==DEF_QWORD){ 650 ChangeTypeToInt64(CalcType); 651 ParmSize+=sizeof(long)*2; 652 } 653 else if(DummyTypeInfo.type==DEF_LONG||DummyTypeInfo.type==DEF_DWORD||DummyTypeInfo.type==DEF_OBJECT||DummyTypeInfo.type==DEF_STRUCT|| 654 (IsPtrType(DummyTypeInfo.type)/*&&DummyTypeInfo.type!=DEF_PTR_VOID&&DummyTypeInfo.type!=DEF_PTR_BYTE*/)){ 655 ChangeTypeToLong(CalcType); 656 ParmSize+=sizeof(long); 657 } 658 else if(DummyTypeInfo.type==DEF_INTEGER||DummyTypeInfo.type==DEF_WORD || (isUnicode&&DummyTypeInfo.type==DEF_CHAR)){ 659 ChangeTypeToInteger(CalcType); 660 ParmSize+=sizeof(long); 661 } 662 else if(DummyTypeInfo.type==DEF_SBYTE||DummyTypeInfo.type==DEF_BYTE||DummyTypeInfo.type==DEF_BOOLEAN || (isUnicode==false&&DummyTypeInfo.type==DEF_CHAR)){ 663 ChangeTypeToByte(CalcType); 664 ParmSize+=sizeof(long); 665 } 666 else{ 667 SetError(300,NULL,cp); 668 } 669 } 670 else{ 671 //ポインタ参照 672 if(Parms[i2][0]==1&&Parms[i2][1]==ESC_BYVAL){ 673 //ポインタ指定 674 i3=NumOpe(Parms[i2]+2,0,0,0); 675 676 ChangeTypeToLong(i3); 677 } 678 else{ 679 if( useTempParameters[i2] ){ 680 //一時オブジェクトをコピー 681 682 if( types[i2].type != DEF_STRUCT ){ 683 // 一時参照のための領域を考慮する 684 nCountOfNowTempObjects++; 685 } 686 687 nCountOfNowTempObjects++; 688 689 //mov eax, dword ptr[esp+offset] 690 op_mov_RM( 691 sizeof(long), 692 REG_EAX, 693 REG_ESP, 694 ( ( ParmsNum - i2 - 1 ) + ( nCountOfTempObjects - nCountOfNowTempObjects ) ) * PTR_SIZE, 695 MOD_BASE_DISP32 ); 696 697 //push eax 698 op_push(REG_EAX); 699 } 700 else{ 701 //変数のアドレスを取得 702 int VarType; 703 LONG_PTR lpVarIndex; 704 if(GetVarOffset( 705 false, 706 false, 707 Parms[i2], 708 &VarType, 709 &RelativeVar, 710 &lpVarIndex)){ 711 if(DummyTypeInfo.type!=DEF_ANY){ 712 //型チェックを行う 713 if(DummyTypeInfo.type==VarType){ 714 if(DummyTypeInfo.type==DEF_OBJECT){ 715 if( !DummyTypeInfo.u.pobj_Class->IsEqualsOrSubClass( (CClass *)lpVarIndex ) ){ 716 SetError(11,Parms[i2],cp); 717 } 718 } 719 else if(DummyTypeInfo.type==DEF_STRUCT){ 720 if( !DummyTypeInfo.u.pobj_Class->IsEquals( (CClass *)lpVarIndex ) ){ 721 SetError(11,Parms[i2],cp); 722 } 723 } 724 } 725 else if((VarType&FLAG_PTR)&&((int)(VarType^FLAG_PTR)==DummyTypeInfo.type)){ 726 //仮引数がポインタ参照で、実引数が配列の先頭ポインタのとき 727 } 728 else{ 729 SetError(11,Parms[i2],cp); 730 } 731 } 732 733 //変数アドレスをレジスタにセット 734 SetVarPtrToEax(&RelativeVar); 735 736 //push eax 737 op_push(REG_EAX); 738 } 739 } 740 } 741 742 ParmSize+=PTR_SIZE; 743 } 744 745 next:; 746 } 747 748 return ParmSize; 749 } -
BasicCompiler32/Compile_CallProc.cpp
r71 r73 8 8 void Call_DebugSys_SaveContext(){ 9 9 //call _System_GetEip 10 extern S UBINFO*pSub_System_GetEip;10 extern SubInfo *pSub_System_GetEip; 11 11 op_call(pSub_System_GetEip); 12 12 … … 18 18 19 19 //call _DebugSys_SaveContext 20 extern S UBINFO*pSub_DebugSys_SaveContext;20 extern SubInfo *pSub_DebugSys_SaveContext; 21 21 op_call(pSub_DebugSys_SaveContext); 22 22 } … … 94 94 } 95 95 96 void Opcode_CallProc(const char *Parameter,S UBINFO*psi,DWORD dwFlags,char *ObjectName,int RefType){96 void Opcode_CallProc(const char *Parameter,SubInfo *psi,DWORD dwFlags,char *ObjectName,int RefType){ 97 97 int i2; 98 98 … … 230 230 231 231 //エラーチェック 232 if( !pobj_parameter->ErrorCheck(psi->name,psi-> pRealParmInfo,psi->RealParmNum,psi->SecondParmNum) ){232 if( !pobj_parameter->ErrorCheck(psi->name,psi->realParams,psi->SecondParmNum) ){ 233 233 //パラメータにエラーがあるときは処理を終える 234 234 return; … … 237 237 if(psi->dwType==SUBTYPE_MACRO){ 238 238 //マクロ関数の場合は、パラメータ省略を考慮する 239 pobj_parameter->MacroParameterSupport( psi->pRealParmInfo);239 pobj_parameter->MacroParameterSupport( psi->realParams ); 240 240 } 241 241 242 242 //一時オブジェクトを生成 243 int tempSize = pobj_parameter->NewTempParameters( psi->name,psi-> pRealParmInfo,psi->RealParmNum,psi->RealSecondParmNum );243 int tempSize = pobj_parameter->NewTempParameters( psi->name,psi->realParams,psi->RealSecondParmNum ); 244 244 245 245 //レジスタ、スタックフレームにセット 246 246 int ParmSize; 247 ParmSize=pobj_parameter->SetParameter(psi->name,psi-> pRealParmInfo,psi->RealParmNum,psi->RealSecondParmNum);247 ParmSize=pobj_parameter->SetParameter(psi->name,psi->realParams,psi->RealSecondParmNum); 248 248 249 249 if(psi->ReturnType==DEF_STRUCT && psi->isReturnRef == false){ … … 259 259 260 260 //call calloc 261 extern S UBINFO*pSub_calloc;261 extern SubInfo *pSub_calloc; 262 262 op_call(pSub_calloc); 263 263 -
BasicCompiler32/Compile_Func.cpp
r64 r73 243 243 void Opcode_Func_AddressOf(const char *name){ 244 244 extern int cp; 245 S UBINFO*psi;245 SubInfo *psi; 246 246 247 247 extern LONG_PTR ProcPtr_BaseIndex; … … 249 249 //左辺の型にのっとり、オーバーロードを解決 250 250 251 std::vector<S UBINFO*> subs;251 std::vector<SubInfo *> subs; 252 252 GetOverloadSubHash( name, subs ); 253 253 if( subs.size() == 0 ){ -
BasicCompiler32/Compile_Object.cpp
r68 r73 31 31 //////////////////////// 32 32 33 std::vector<S UBINFO*> subs;33 std::vector<SubInfo *> subs; 34 34 pobj_c->EnumMethod( pobj_c->name, subs ); 35 35 36 S UBINFO*psi;36 SubInfo *psi; 37 37 if( subs.size() > 0 ){ 38 38 //オーバーロードを解決 … … 133 133 134 134 //call _System_GC_malloc_ForObject 135 extern S UBINFO*pSub_System_GC_malloc_ForObject;135 extern SubInfo *pSub_System_GC_malloc_ForObject; 136 136 op_call(pSub_System_GC_malloc_ForObject); 137 137 } … … 140 140 141 141 //call _System_GC_malloc_ForObjectPtr 142 extern S UBINFO*pSub_System_GC_malloc_ForObjectPtr;142 extern SubInfo *pSub_System_GC_malloc_ForObjectPtr; 143 143 op_call(pSub_System_GC_malloc_ForObjectPtr); 144 144 } … … 208 208 // コンストラクタの呼び出し 209 209 //////////////////////////// 210 211 if( lstrcmp(classObj.name,"proc")==0){212 int i=0;213 }214 210 215 211 BOOL bSomeObjects; … … 380 376 if( isSweeping ){ 381 377 //call _System_GC_free_for_SweepingDelete 382 extern S UBINFO*pSub_System_GC_free_for_SweepingDelete;378 extern SubInfo *pSub_System_GC_free_for_SweepingDelete; 383 379 op_call(pSub_System_GC_free_for_SweepingDelete); 384 380 } 385 381 else{ 386 382 //call free 387 extern S UBINFO*pSub_free;383 extern SubInfo *pSub_free; 388 384 op_call(pSub_free); 389 385 } -
BasicCompiler32/Compile_ProcOp.cpp
r64 r73 214 214 } 215 215 216 void CompileBufferInProcedure(S UBINFO*psi){216 void CompileBufferInProcedure(SubInfo *psi){ 217 217 extern char *basbuf; 218 218 extern HANDLE hHeap; 219 extern S UBINFO**ppSubHash;219 extern SubInfo **ppSubHash; 220 220 extern BOOL bDebugCompile; 221 221 int i3,i4,VarSize,LocalVarSchedule,EspOffsetSchedule,BufferSize,BaseOffset; … … 280 280 281 281 //パラメータ用の変数データを考慮 282 for(i3=psi->RealParmNum-1;i3>=0;i3--){ 282 for(i3=psi->realParams.size()-1;i3>=0;i3--){ 283 Parameter ¶m = *psi->realParams[i3]; 284 283 285 //変数データを追加 284 286 LocalVar=(VARIABLE *)HeapReAlloc(hHeap,0,LocalVar,(MaxLocalVarNum+1)*sizeof(VARIABLE)); 285 287 286 lstrcpy( LocalVar[MaxLocalVarNum].name,psi->pRealParmInfo[i3].name);288 lstrcpy( LocalVar[MaxLocalVarNum].name,param.GetVarName().c_str() ); 287 289 288 290 // TODO: パラメータのConst定義の指定が未完成 289 291 LocalVar[MaxLocalVarNum].bConst=false; 290 292 291 LocalVar[MaxLocalVarNum].bArray=p si->pRealParmInfo[i3].bArray;292 memcpy(LocalVar[MaxLocalVarNum].SubScripts,p si->pRealParmInfo[i3].SubScripts,MAX_ARRAYDIM*sizeof(int));293 294 LocalVar[MaxLocalVarNum].type=p si->pRealParmInfo[i3].type;293 LocalVar[MaxLocalVarNum].bArray=param.IsArray()?TRUE:FALSE; 294 memcpy(LocalVar[MaxLocalVarNum].SubScripts,param.GetSubScriptsPtr(),MAX_ARRAYDIM*sizeof(int)); 295 296 LocalVar[MaxLocalVarNum].type=param.GetBasicType(); 295 297 if(LocalVar[MaxLocalVarNum].type==DEF_OBJECT 296 298 ||LocalVar[MaxLocalVarNum].type==DEF_STRUCT){ … … 299 301 } 300 302 301 LocalVar[MaxLocalVarNum].u.index=p si->pRealParmInfo[i3].u.index;302 303 if( psi->pRealParmInfo[i3].bByVal&&psi->pRealParmInfo[i3].type==DEF_STRUCT){303 LocalVar[MaxLocalVarNum].u.index=param.GetIndex(); 304 305 if( param.IsRef() == false && param.IsStruct() ){ 304 306 //構造体のByValパラメータ 305 307 LocalVar[MaxLocalVarNum].fRef=REF_PARAMETER | OBJECT_PARAMETER; … … 307 309 } 308 310 else{ 309 if( psi->pRealParmInfo[i3].bByVal&&psi->pRealParmInfo[i3].bArray==0){311 if( param.IsRef() == false && param.IsArray() == false ){ 310 312 LocalVar[MaxLocalVarNum].fRef=0; 311 313 VarSize=GetTypeSize(LocalVar[MaxLocalVarNum].type,LocalVar[MaxLocalVarNum].u.index); … … 344 346 345 347 //コンパイル中の関数 346 extern S UBINFO*pCompilingSubInfo;348 extern SubInfo *pCompilingSubInfo; 347 349 pCompilingSubInfo=psi; 348 350 … … 442 444 443 445 //call _DebugSys_StartProc 444 extern S UBINFO*pSub_DebugSys_StartProc;446 extern SubInfo *pSub_DebugSys_StartProc; 445 447 op_call(pSub_DebugSys_StartProc); 446 448 } … … 684 686 685 687 //call _DebugSys_EndProc 686 extern S UBINFO*pSub_DebugSys_EndProc;688 extern SubInfo *pSub_DebugSys_EndProc; 687 689 op_call(pSub_DebugSys_EndProc); 688 690 } … … 806 808 807 809 //call _esp_error 808 extern S UBINFO*pSub_esp_error;810 extern SubInfo *pSub_esp_error; 809 811 op_call( pSub_esp_error ); 810 812 … … 840 842 } 841 843 void CompileLocal(){ 842 extern S UBINFO**ppSubHash;844 extern SubInfo **ppSubHash; 843 845 int i2; 844 S UBINFO*psi;846 SubInfo *psi; 845 847 846 848 extern BOOL bDll; … … 856 858 //_System_InitStaticLocalVariablesは一番最後にコンパイル 857 859 //※一般関数内の静的変数オブジェクトをすべて収集しなければならない 858 extern S UBINFO*pSub_System_InitStaticLocalVariables;860 extern SubInfo *pSub_System_InitStaticLocalVariables; 859 861 pSub_System_InitStaticLocalVariables->bCompile=1; 860 862 861 863 //_System_Call_Destructor_of_GlobalObjectは一番最後にコンパイル 862 extern S UBINFO*pSub_System_Call_Destructor_of_GlobalObject;864 extern SubInfo *pSub_System_Call_Destructor_of_GlobalObject; 863 865 pSub_System_Call_Destructor_of_GlobalObject->bCompile=1; 864 866 -
BasicCompiler32/Compile_Set_Var.cpp
r67 r73 71 71 72 72 //call free 73 extern S UBINFO*pSub_free;73 extern SubInfo *pSub_free; 74 74 op_call(pSub_free); 75 75 } -
BasicCompiler32/Compile_Statement.cpp
r67 r73 5 5 int i,i2; 6 6 char buffer[8192]; 7 S UBINFO*psi;7 SubInfo *psi; 8 8 9 9 for(i=0;;i++){ … … 44 44 45 45 //GetSubHash内でエラー提示が行われた場合 46 if(psi==(S UBINFO*)-1) return;46 if(psi==(SubInfo *)-1) return; 47 47 48 48 if(psi==0){ … … 54 54 55 55 //GetSubHash内でエラー提示が行われた場合 56 if(psi==(S UBINFO*)-1) return;56 if(psi==(SubInfo *)-1) return; 57 57 } 58 58 … … 1076 1076 pobj_c=(CClass *)lpIndex; 1077 1077 1078 std::vector<S UBINFO*> subs;1078 std::vector<SubInfo *> subs; 1079 1079 pobj_c->EnumMethod( CALC_EQUAL, subs ); 1080 1080 if( subs.size() == 0 ){ … … 1093 1093 1094 1094 //オーバーロードを解決 1095 S UBINFO*psi;1095 SubInfo *psi; 1096 1096 psi=OverloadSolution("==",subs,ppi,iParmNum,NULL); 1097 1097 HeapDefaultFree(ppi); … … 1330 1330 //戻り値をセット 1331 1331 if(Parameter[0]){ 1332 extern S UBINFO*pCompilingSubInfo;1332 extern SubInfo *pCompilingSubInfo; 1333 1333 char *temp; 1334 1334 if(pCompilingSubInfo->name[0]==1&&pCompilingSubInfo->name[1]==ESC_OPERATOR) … … 1460 1460 OpcodeCalc(temp2); 1461 1461 1462 S UBINFO*psi;1462 SubInfo *psi; 1463 1463 if(bFile) psi=GetSubHash("INPUT_FromFile"); 1464 1464 else psi=GetSubHash("INPUT_FromPrompt"); … … 1562 1562 OpcodeCalc(temp2); 1563 1563 1564 S UBINFO*psi;1564 SubInfo *psi; 1565 1565 if(bFile) psi=GetSubHash("PRINTUSING_ToFile"); 1566 1566 else psi=GetSubHash("PRINTUSING_ToPrompt"); … … 1666 1666 if(sw) lstrcat(buffer,"+Ex\"\\r\\n\""); 1667 1667 1668 S UBINFO*psi;1668 SubInfo *psi; 1669 1669 if(bFile) psi=GetSubHash("PRINT_ToFile"); 1670 1670 else psi=GetSubHash("PRINT_ToPrompt"); -
BasicCompiler32/Compile_Var.cpp
r69 r73 520 520 521 521 char temporary[VN_SIZE]; 522 extern S UBINFO*pCompilingSubInfo;522 extern SubInfo *pCompilingSubInfo; 523 523 if(pCompilingSubInfo){ 524 524 GetNowStaticVarFullName(VarName,temporary); -
BasicCompiler32/MakePeHdr.cpp
r67 r73 8 8 // 特殊関数の構造体ポインタ 9 9 //////////////////////////// 10 S UBINFO10 SubInfo 11 11 *pSub_System_StartupProgram, 12 12 *pSub_DebugSys_StartProc, … … 391 391 392 392 //call _System_Call_Destructor_of_GlobalObject 393 extern S UBINFO*pSub_System_Call_Destructor_of_GlobalObject;393 extern SubInfo *pSub_System_Call_Destructor_of_GlobalObject; 394 394 op_call(pSub_System_Call_Destructor_of_GlobalObject); 395 395 … … 522 522 ExportNamesLength=lstrlen(lpExportNames)+1; 523 523 524 extern S UBINFO**ppSubHash;525 S UBINFO*psi,*psi2;524 extern SubInfo **ppSubHash; 525 SubInfo *psi,*psi2; 526 526 while(1){ 527 527 //辞書順にサーチ -
BasicCompiler32/NumOpe_Arithmetic.cpp
r67 r73 270 270 271 271 //call _allmul 272 extern S UBINFO*pSub_allmul;272 extern SubInfo *pSub_allmul; 273 273 op_call(pSub_allmul); 274 274 … … 460 460 461 461 //call _aullrem 462 extern S UBINFO*pSub_aullrem;462 extern SubInfo *pSub_aullrem; 463 463 op_call(pSub_aullrem); 464 464 } … … 467 467 468 468 //call _allrem 469 extern S UBINFO*pSub_allrem;469 extern SubInfo *pSub_allrem; 470 470 op_call(pSub_allrem); 471 471 } … … 720 720 721 721 //call _aulldiv 722 extern S UBINFO*pSub_aulldiv;722 extern SubInfo *pSub_aulldiv; 723 723 op_call(pSub_aulldiv); 724 724 } … … 727 727 728 728 //call _alldiv 729 extern S UBINFO*pSub_alldiv;729 extern SubInfo *pSub_alldiv; 730 730 op_call(pSub_alldiv); 731 731 } … … 1000 1000 1001 1001 //call pow 1002 extern S UBINFO*pSub_pow;1002 extern SubInfo *pSub_pow; 1003 1003 op_call(pSub_pow); 1004 1004 … … 1156 1156 1157 1157 //call _allshl 1158 extern S UBINFO*pSub_allshl;1158 extern SubInfo *pSub_allshl; 1159 1159 op_call(pSub_allshl); 1160 1160 … … 1361 1361 1362 1362 //call _aullshr 1363 extern S UBINFO*pSub_aullshr;1363 extern SubInfo *pSub_aullshr; 1364 1364 op_call(pSub_aullshr); 1365 1365 } … … 1368 1368 1369 1369 //call _allshr 1370 extern S UBINFO*pSub_allshr;1370 extern SubInfo *pSub_allshr; 1371 1371 op_call(pSub_allshr); 1372 1372 } -
BasicCompiler32/Opcode.h
r71 r73 214 214 ParamImpl(const char *buffer); 215 215 ParamImpl(const PARAMETER_INFO *pParamInfo, const int ParmNum); 216 ParamImpl::ParamImpl(const Parameters ¶ms); 216 217 ~ParamImpl(); 217 218 void SetReturnType(TYPEINFO *pTypeInfo); 218 219 219 220 private: 220 BOOL _overload_check( PARAMETER_INFO *ppi,int pi_num,TYPEINFO *pReturnTypeInfo,int overload_level);221 S UBINFO *OverloadSolutionWithReturnType( const char *name, std::vector<SUBINFO*> &subs );221 BOOL _overload_check( Parameters ¶ms,TYPEINFO *pReturnTypeInfo,int overload_level); 222 SubInfo *OverloadSolutionWithReturnType( const char *name, std::vector<SubInfo *> &subs ); 222 223 public: 223 S UBINFO *OverloadSolution( const char *name, std::vector<SUBINFO*> &subs );224 SubInfo *OverloadSolution( const char *name, std::vector<SubInfo *> &subs ); 224 225 225 226 BOOL ErrorCheck(const char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum); 227 bool ErrorCheck( const char *procName, const Parameters ¶ms, int SecondParmNum ); 226 228 void MacroParameterSupport(PARAMETER_INFO *ppi); 229 void MacroParameterSupport( const Parameters ¶ms ); 227 230 void SetStructParameter(CClass *pobj_Class,LPSTR Parameter); 228 231 int SetParameter(const char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum); 232 int SetParameter( const char *procName, const Parameters ¶ms, int SecondParmNum ); 229 233 230 234 //一時オブジェクトパラメータの生成と破棄 231 235 int NewTempParameters( const char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum ); 236 int NewTempParameters( const char *procName, const Parameters ¶ms, int SecondParmNum ); 232 237 void DeleteTempParameters(); 233 238 }; … … 237 242 #define PROCFLAG_NEW 1 238 243 int Opcode_CallProcPtr(char *variable,char *Parameter,PROCPTRINFO *pi,LONG_PTR *plpIndex); 239 void Opcode_CallProc(const char *Parameter,S UBINFO*psi,DWORD dwFlags,char *ObjectName,int RefType);244 void Opcode_CallProc(const char *Parameter,SubInfo *psi,DWORD dwFlags,char *ObjectName,int RefType); 240 245 int Opcode_CallDllProc(char *Parameter,DECLAREINFO *pdi,LONG_PTR *plpIndex); 241 246 … … 339 344 void fpu_cast_end(); 340 345 341 void op_call(S UBINFO*psi);346 void op_call(SubInfo *psi); -
BasicCompiler32/OperatorProc.cpp
r67 r73 18 18 19 19 //call free 20 extern S UBINFO*pSub_free;20 extern SubInfo *pSub_free; 21 21 op_call(pSub_free); 22 22 } … … 27 27 pobj_c=(CClass *)index_stack[sp-2]; 28 28 29 std::vector<S UBINFO*> subs;29 std::vector<SubInfo *> subs; 30 30 pobj_c->EnumMethod( idCalc, subs ); 31 31 if( subs.size() == 0 ){ … … 42 42 BOOL bReturnTypeIsObject=1; 43 43 TYPEINFO ReturnType={DEF_OBJECT,subs[0]->u.ReturnIndex}; 44 foreach( S UBINFO*psi, subs ){44 foreach( SubInfo *psi, subs ){ 45 45 if(psi->ReturnType!=DEF_OBJECT) 46 46 bReturnTypeIsObject=0; … … 79 79 if(idCalc==CALC_EQUAL) lstrcpy(temporary,"=="); 80 80 else GetCalcName(idCalc,temporary); 81 S UBINFO*psi;81 SubInfo *psi; 82 82 psi=OverloadSolution(temporary,subs,ppi,iParmNum,pBaseTypeInfo); 83 83 … … 88 88 else{ 89 89 //オーバーロードされていないが、パラメータ個数が一致しないとき 90 if(iParmNum!=psi-> ParmNum){90 if(iParmNum!=psi->params.size()){ 91 91 HeapDefaultFree(ppi); 92 92 return -1; … … 96 96 for(i=0;i<iParmNum;i++){ 97 97 CheckDifferentType( 98 psi->p ParmInfo[i].type,99 psi->p ParmInfo[i].u.index,98 psi->params[i]->GetBasicType(), 99 psi->params[i]->GetIndex(), 100 100 ppi[i].type, 101 101 ppi[i].u.index, … … 109 109 110 110 if(bTwoTerm){ 111 if( psi->pRealParmInfo[1].type==DEF_STRUCT&&psi->pRealParmInfo[1].bByVal){111 if( psi->realParams[1]->IsStruct() &&psi->realParams[1]->IsRef() == false ){ 112 112 //一時オブジェクトはメソッド内で破棄される 113 113 bUseHeap[sp-1]=0; … … 128 128 129 129 //call calloc 130 extern S UBINFO*pSub_calloc;130 extern SubInfo *pSub_calloc; 131 131 op_call(pSub_calloc); 132 132 … … 180 180 } 181 181 182 if( !psi->pRealParmInfo[1].bByVal){182 if( psi->realParams[1]->IsRef() ){ 183 183 //一時参照を作成 184 184 … … 203 203 204 204 if(bTwoTerm){ 205 if( !psi->pRealParmInfo[1].bByVal){205 if( psi->realParams[1]->IsRef() ){ 206 206 //一時参照を破棄 207 207 op_pop( REG_NON ); … … 273 273 } 274 274 void CallIndexerGetterProc(CClass *pobj_Class,char *ObjectName,char *Parameter,TYPEINFO &RetTypeInfo){ 275 std::vector<S UBINFO*> subs;275 std::vector<SubInfo *> subs; 276 276 pobj_Class->EnumMethod( CALC_ARRAY_GET, subs ); 277 277 if( subs.size() == 0 ){ -
BasicCompiler32/VarList.cpp
r69 r73 348 348 if(pobj_dti->lplpSpBase[i2]==0) return; 349 349 350 extern S UBINFO**ppSubHash;351 S UBINFO*psi;350 extern SubInfo **ppSubHash; 351 SubInfo *psi; 352 352 for(i3=0,sw=0;i3<MAX_HASH;i3++){ 353 353 psi=ppSubHash[i3]; … … 583 583 584 584 //プロシージャ コンボボックス 585 extern S UBINFO**ppSubHash;586 S UBINFO*psi;585 extern SubInfo **ppSubHash; 586 SubInfo *psi; 587 587 int sw; 588 588 SendMessage(hProcCombo,CB_RESETCONTENT,0,0); … … 706 706 707 707 if(pobj_dti->lplpSpBase[i2]){ 708 extern S UBINFO**ppSubHash;709 S UBINFO*psi;708 extern SubInfo **ppSubHash; 709 SubInfo *psi; 710 710 for(i3=0,sw=0;i3<MAX_HASH;i3++){ 711 711 psi=ppSubHash[i3]; -
BasicCompiler32/WatchList.cpp
r64 r73 308 308 ULONG_PTR Debugging_GetThisPtrOffset(LONG_PTR obp_Rip){ 309 309 int i; 310 S UBINFO*psi;310 SubInfo *psi; 311 311 312 312 //ripからプロシージャを取得 -
BasicCompiler32/op32_main.cpp
r67 r73 974 974 ///////////////////////////// 975 975 976 void op_call(S UBINFO*psi){976 void op_call(SubInfo *psi){ 977 977 OpBuffer[obp++]=(char)0xE8; 978 978 pobj_SubAddrSchedule->add(psi,1);
Note:
See TracChangeset
for help on using the changeset viewer.