Changeset 31 in dev
- Timestamp:
- Jan 13, 2007, 4:26:50 AM (18 years ago)
- Files:
-
- 23 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler32/CParameter.cpp
r28 r31 215 215 SUBINFO *psi; 216 216 psi=0; 217 if(lstrcmp(name,"Abs")==0){ 218 MessageBeep(0); 219 } 217 220 218 for(i=0;i<num;i++){ 221 219 psi=ppsi[i]; -
BasicCompiler32/Compile_CallProc.cpp
r29 r31 67 67 68 68 69 ret_type=Opcode_CallProc(Parameter,psi,plpRetIndex,0,ObjectName,RefType); 69 Opcode_CallProc(Parameter,psi,0,ObjectName,RefType); 70 if( plpRetIndex ){ 71 *plpRetIndex = psi->u.ReturnIndex; 72 } 73 return psi->ReturnType; 70 74 } 71 75 else if(idProc==PROC_DLL){ … … 138 142 if(psi){ 139 143 //呼び出し 140 int type; 141 LONG_PTR lpIndex; 142 type=Opcode_CallProc(Parameter,psi,&lpIndex,0,ObjectName,RefType); 144 Opcode_CallProc(Parameter,psi,0,ObjectName,RefType); 143 145 144 146 if(pRetTypeInfo){ 145 pRetTypeInfo->type =type;146 pRetTypeInfo->u.lpIndex =lpIndex;147 pRetTypeInfo->type = psi->ReturnType; 148 pRetTypeInfo->u.lpIndex = psi->u.ReturnIndex; 147 149 } 148 150 } … … 174 176 175 177 //エラーチェック 176 pobj_parameter->ErrorCheck(variable,pi->pParmInfo,pi->ParmNum,pi->ParmNum); 178 if( !pobj_parameter->ErrorCheck(variable,pi->pParmInfo,pi->ParmNum,pi->ParmNum) ){ 179 //パラメータにエラーがあるときは処理を終える 180 return pi->ReturnType; 181 } 177 182 178 183 //一時オブジェクトを生成 … … 213 218 } 214 219 215 int Opcode_CallProc(char *Parameter,SUBINFO *psi,LONG_PTR *plpIndex,DWORD dwFlags,char *ObjectName,int RefType){220 void Opcode_CallProc(char *Parameter,SUBINFO *psi,DWORD dwFlags,char *ObjectName,int RefType){ 216 221 int i,i2; 217 222 … … 219 224 if(lstrcmpi(psi->name,"Print")==0){ 220 225 Opcode_Print(Parameter,0); 221 return -1;226 return; 222 227 } 223 228 if(lstrcmpi(psi->name,"Input")==0){ 224 229 Opcode_Input(Parameter); 225 return -1;230 return; 226 231 } 227 232 if(lstrcmpi(psi->name,"Write")==0){ 228 233 Opcode_Print(Parameter,1); 229 return -1;234 return; 230 235 } 231 236 } … … 277 282 if( !pMethod ){ 278 283 SetError(300,NULL,cp); 279 return -1;284 return; 280 285 } 281 286 … … 296 301 if(dwAccess==ACCESS_NON){ 297 302 SetError(109,psi->name,cp); 298 return -1;303 return; 299 304 } 300 305 } … … 303 308 dwAccess==ACCESS_NON){ 304 309 SetError(109,psi->name,cp); 305 return -1;310 return; 306 311 } 307 312 if(dwAccess==ACCESS_PROTECTED){ 308 313 SetError(110,psi->name,cp); 309 return -1;314 return; 310 315 } 311 316 } … … 315 320 if(dwAccess==ACCESS_NON){ 316 321 SetError(109,psi->name,cp); 317 return -1;322 return; 318 323 } 319 324 } … … 352 357 353 358 //エラーチェック 354 pobj_parameter->ErrorCheck(psi->name,psi->pRealParmInfo,psi->RealParmNum,psi->RealSecondParmNum); 359 if( !pobj_parameter->ErrorCheck(psi->name,psi->pRealParmInfo,psi->RealParmNum,psi->RealSecondParmNum) ){ 360 //パラメータにエラーがあるときは処理を終える 361 return; 362 } 355 363 356 364 if(psi->dwType==SUBTYPE_MACRO){ … … 401 409 if( pMethod->isConst ){ 402 410 //Constアクセスが可能なメソッドの場合 403 if( !GetVarOffsetReadOnly( ObjectName, &i2, &RelativeVar, 0 ) ) return -1;411 if( !GetVarOffsetReadOnly( ObjectName, &i2, &RelativeVar, 0 ) ) return; 404 412 } 405 413 else{ 406 414 //Constアクセスが不可能なメソッドの場合 407 if( !GetVarOffsetReadWrite( ObjectName, &i2, &RelativeVar, 0 ) ) return -1;415 if( !GetVarOffsetReadWrite( ObjectName, &i2, &RelativeVar, 0 ) ) return; 408 416 } 409 417 … … 488 496 //パラメータオブジェクトを破棄 489 497 delete pobj_parameter; 490 491 if(plpIndex) *plpIndex=psi->u.ReturnIndex;492 493 return psi->ReturnType;494 498 } 495 499 … … 516 520 517 521 //エラーチェック 518 pobj_parameter->ErrorCheck(pdi->name,pdi->pParmInfo,pdi->ParmNum,pdi->ParmNum); 522 if( !pobj_parameter->ErrorCheck(pdi->name,pdi->pParmInfo,pdi->ParmNum,pdi->ParmNum) ){ 523 //パラメータにエラーがあるときは処理を終える 524 return pdi->ReturnType; 525 } 519 526 520 527 //レジスタ、スタックフレームにセット -
BasicCompiler32/Compile_Object.cpp
r28 r31 47 47 Opcode_CallProc(CreateParameter, 48 48 psi, 49 0,50 49 PROCFLAG_NEW,"",0); 51 50 -
BasicCompiler32/Compile_ProcOp.cpp
r28 r31 492 492 pobj_CompilingClass->ppobj_Method[i3]->psi, 493 493 0, 494 0,495 494 "", 496 495 0); … … 502 501 pobj_CompilingClass->ppobj_Method[i3]->psi, 503 502 0, 504 0,505 503 "", 506 504 0); … … 613 611 Opcode_CallProc("", 614 612 pobj_CompilingClass->ppobj_Method[i3]->psi, 615 0,616 613 0, 617 614 "", -
BasicCompiler32/Compile_Statement.cpp
r11 r31 60 60 if(psi->dwType!=SUBTYPE_MACRO) SetError(10,Command,cp); 61 61 62 Opcode_CallProc("",psi,0, 0,"",0);62 Opcode_CallProc("",psi,0,"",0); 63 63 64 64 return; … … 1210 1210 } 1211 1211 1212 PARAMETER_INFO *ppi ;1212 PARAMETER_INFO *ppi = (PARAMETER_INFO *)HeapAlloc(hHeap,0,sizeof(PARAMETER_INFO)*3); 1213 1213 int iParmNum=0; 1214 1215 //_System_LocalThis1216 ppi=(PARAMETER_INFO *)HeapAlloc(hHeap,0,sizeof(PARAMETER_INFO)*3);1217 ppi[iParmNum].bArray=0;1218 ppi[iParmNum].bByVal=0;1219 ppi[iParmNum].name=0;1220 ppi[iParmNum].type=DEF_PTR_VOID;1221 ppi[iParmNum].u.index=-1;1222 ppi[iParmNum].SubScripts[0]=-1;1223 iParmNum++;1224 1225 1214 ppi[iParmNum].bArray=0; 1226 1215 ppi[iParmNum].bByVal=0; … … 1600 1589 return; 1601 1590 } 1602 Opcode_CallProc(buffer,psi,0, 0,"",0);1591 Opcode_CallProc(buffer,psi,0,"",0); 1603 1592 } 1604 1593 void Opcode_PrintUsing(char *Parameter,char *buffer,BOOL bFile){ … … 1699 1688 return; 1700 1689 } 1701 Opcode_CallProc(buffer,psi,0, 0,"",0);1690 Opcode_CallProc(buffer,psi,0,"",0); 1702 1691 } 1703 1692 void Opcode_Print(char *Parameter,BOOL bWrite){ … … 1805 1794 return; 1806 1795 } 1807 Opcode_CallProc(buffer,psi,0, 0,"",0);1796 Opcode_CallProc(buffer,psi,0,"",0); 1808 1797 } 1809 1798 -
BasicCompiler32/Opcode.h
r20 r31 225 225 #define PROCFLAG_NEW 1 226 226 int Opcode_CallProcPtr(char *variable,char *Parameter,PROCPTRINFO *pi,LONG_PTR *plpIndex); 227 int Opcode_CallProc(char *Parameter,SUBINFO *psi,LONG_PTR *plpIndex,DWORD dwFlags,char *ObjectName,int RefType);227 void Opcode_CallProc(char *Parameter,SUBINFO *psi,DWORD dwFlags,char *ObjectName,int RefType); 228 228 int Opcode_CallDllProc(char *Parameter,DECLAREINFO *pdi,LONG_PTR *plpIndex); 229 229 -
BasicCompiler32/OperatorProc.cpp
r3 r31 64 64 ///////////////////////////////////////////// 65 65 66 PARAMETER_INFO *ppi ;66 PARAMETER_INFO *ppi = (PARAMETER_INFO *)HeapAlloc(hHeap,0,sizeof(PARAMETER_INFO)*3); 67 67 int iParmNum=0; 68 69 //_System_LocalThis70 ppi=(PARAMETER_INFO *)HeapAlloc(hHeap,0,sizeof(PARAMETER_INFO)*3);71 ppi[iParmNum].bArray=0;72 ppi[iParmNum].bByVal=0;73 ppi[iParmNum].name=0;74 ppi[iParmNum].type=DEF_PTR_VOID;75 ppi[iParmNum].u.index=-1;76 ppi[iParmNum].SubScripts[0]=-1;77 iParmNum++;78 68 79 69 if(bTwoTerm){ … … 282 272 } 283 273 284 RetTypeInfo.type=Opcode_CallProc(Parameter,ppsi[0],&RetTypeInfo.u.lpIndex,0,ObjectName,DEF_OBJECT); 274 Opcode_CallProc(Parameter,ppsi[0],0,ObjectName,DEF_OBJECT); 275 RetTypeInfo.type=ppsi[0]->ReturnType; 276 RetTypeInfo.u.lpIndex = ppsi[0]->u.ReturnIndex; 285 277 286 278 HeapDefaultFree(ppsi); -
BasicCompiler64/CParameter.cpp
r28 r31 664 664 else{ 665 665 //型チェック 666 // TODO: _System_ReturnValueが考慮されていない? 666 667 if(bHas_System_LocalThis) i3=i2-1; 667 668 else i3=i2; -
BasicCompiler64/Compile_CallProc.cpp
r29 r31 68 68 69 69 70 ret_type=Opcode_CallProc(Parameter,psi,plpRetIndex,0,ObjectName,RefType); 70 Opcode_CallProc(Parameter,psi,0,ObjectName,RefType); 71 if( plpRetIndex ){ 72 *plpRetIndex = psi->u.ReturnIndex; 73 } 74 return psi->ReturnType; 71 75 } 72 76 else if(idProc==PROC_DLL){ … … 139 143 if(psi){ 140 144 //呼び出し 141 int type; 142 LONG_PTR lpIndex; 143 type=Opcode_CallProc(Parameter,psi,&lpIndex,0,ObjectName,RefType); 144 145 if(pRetTypeInfo){ 146 pRetTypeInfo->type=type; 147 pRetTypeInfo->u.lpIndex=lpIndex; 145 Opcode_CallProc(Parameter,psi,0,ObjectName,RefType); 146 147 if( pRetTypeInfo ){ 148 pRetTypeInfo->type = psi->ReturnType; 149 pRetTypeInfo->u.lpIndex = psi->u.ReturnIndex; 148 150 } 149 151 } … … 175 177 176 178 //エラーチェック 177 pobj_parameter->ErrorCheck(variable,pi->pParmInfo,pi->ParmNum,pi->ParmNum); 179 if( !pobj_parameter->ErrorCheck(variable,pi->pParmInfo,pi->ParmNum,pi->ParmNum) ){ 180 //パラメータにエラーがあるときは処理を終える 181 return pi->ReturnType; 182 } 178 183 179 184 //スタックフレームに存在する既存のパラメータをバックアップ … … 213 218 delete pobj_parameter; 214 219 215 if(plpIndex) *plpIndex=pi->u.ReturnIndex;216 217 220 return pi->ReturnType; 218 221 } 219 222 220 int Opcode_CallProc(char *Parameter,SUBINFO *psi,LONG_PTR *plpIndex,DWORD dwFlags,char *ObjectName,int RefType){223 void Opcode_CallProc(char *Parameter,SUBINFO *psi,DWORD dwFlags,char *ObjectName,int RefType){ 221 224 int i,i2; 222 225 … … 224 227 if(lstrcmpi(psi->name,"Print")==0){ 225 228 Opcode_Print(Parameter,0); 226 return -1;229 return; 227 230 } 228 231 if(lstrcmpi(psi->name,"Input")==0){ 229 232 Opcode_Input(Parameter); 230 return -1;233 return; 231 234 } 232 235 if(lstrcmpi(psi->name,"Write")==0){ 233 236 Opcode_Print(Parameter,1); 234 return -1;237 return; 235 238 } 236 239 } … … 282 285 if( !pMethod ){ 283 286 SetError(300,NULL,cp); 284 return -1;287 return; 285 288 } 286 289 … … 301 304 if(dwAccess==ACCESS_NON){ 302 305 SetError(109,psi->name,cp); 303 return -1;306 return; 304 307 } 305 308 } … … 308 311 dwAccess==ACCESS_NON){ 309 312 SetError(109,psi->name,cp); 310 return -1;313 return; 311 314 } 312 315 if(dwAccess==ACCESS_PROTECTED){ 313 316 SetError(110,psi->name,cp); 314 return -1;317 return; 315 318 } 316 319 } … … 320 323 if(dwAccess==ACCESS_NON){ 321 324 SetError(109,psi->name,cp); 322 return -1;325 return; 323 326 } 324 327 } … … 355 358 356 359 //エラーチェック 357 pobj_parameter->ErrorCheck(psi->name,psi->pRealParmInfo,psi->RealParmNum,psi->SecondParmNum); 360 if( !pobj_parameter->ErrorCheck(psi->name,psi->pRealParmInfo,psi->RealParmNum,psi->SecondParmNum) ){ 361 //パラメータにエラーがあるときは処理を終える 362 return; 363 } 358 364 359 365 if(psi->dwType==SUBTYPE_MACRO){ … … 425 431 if( pMethod->isConst ){ 426 432 //Constアクセスが可能なメソッドの場合 427 if( !GetVarOffsetReadOnly( ObjectName, &i2, &RelativeVar, 0 ) ) return -1;433 if( !GetVarOffsetReadOnly( ObjectName, &i2, &RelativeVar, 0 ) ) return; 428 434 } 429 435 else{ 430 436 //Constアクセスが不可能なメソッドの場合 431 if( !GetVarOffsetReadWrite( ObjectName, &i2, &RelativeVar, 0 ) ) return -1;437 if( !GetVarOffsetReadWrite( ObjectName, &i2, &RelativeVar, 0 ) ) return; 432 438 } 433 439 … … 509 515 //パラメータオブジェクトを破棄 510 516 delete pobj_parameter; 511 512 if(plpIndex) *plpIndex=psi->u.ReturnIndex;513 514 return psi->ReturnType;515 517 } 516 518 … … 536 538 537 539 //エラーチェック 538 pobj_parameter->ErrorCheck(pdi->name,pdi->pParmInfo,pdi->ParmNum,pdi->ParmNum); 540 if( !pobj_parameter->ErrorCheck(pdi->name,pdi->pParmInfo,pdi->ParmNum,pdi->ParmNum) ){ 541 //パラメータにエラーがあるときは処理を終える 542 return pdi->ReturnType; 543 } 539 544 540 545 //スタックフレームに存在する既存のパラメータをバックアップ -
BasicCompiler64/Compile_Object.cpp
r28 r31 48 48 Opcode_CallProc(CreateParameter, 49 49 psi, 50 0,51 50 PROCFLAG_NEW,"",0); 52 51 -
BasicCompiler64/Compile_ProcOp.cpp
r28 r31 547 547 pobj_CompilingClass->ppobj_Method[i3]->psi, 548 548 0, 549 0,550 549 "", 551 550 0); … … 556 555 Opcode_CallProc("", 557 556 pobj_CompilingClass->ppobj_Method[i3]->psi, 558 0,559 557 0, 560 558 "", … … 663 661 pobj_CompilingClass->ppobj_Method[i3]->psi, 664 662 0, 665 0,666 663 "", 667 664 0); -
BasicCompiler64/Compile_Statement.cpp
r11 r31 60 60 if(psi->dwType!=SUBTYPE_MACRO) SetError(10,Command,cp); 61 61 62 Opcode_CallProc("",psi,0, 0,"",0);62 Opcode_CallProc("",psi,0,"",0); 63 63 64 64 return; … … 838 838 } 839 839 840 PARAMETER_INFO *ppi ;840 PARAMETER_INFO *ppi = (PARAMETER_INFO *)HeapAlloc(hHeap,0,sizeof(PARAMETER_INFO)*3); 841 841 int iParmNum=0; 842 843 //_System_LocalThis844 ppi=(PARAMETER_INFO *)HeapAlloc(hHeap,0,sizeof(PARAMETER_INFO)*3);845 ppi[iParmNum].bArray=0;846 ppi[iParmNum].bByVal=0;847 ppi[iParmNum].name=0;848 ppi[iParmNum].type=DEF_PTR_VOID;849 ppi[iParmNum].u.index=-1;850 ppi[iParmNum].SubScripts[0]=-1;851 iParmNum++;852 853 842 ppi[iParmNum].bArray=0; 854 843 ppi[iParmNum].bByVal=0; … … 1206 1195 return; 1207 1196 } 1208 Opcode_CallProc(buffer,psi,0, 0,"",0);1197 Opcode_CallProc(buffer,psi,0,"",0); 1209 1198 } 1210 1199 void Opcode_PrintUsing(char *Parameter,char *buffer,BOOL bFile){ … … 1305 1294 return; 1306 1295 } 1307 Opcode_CallProc(buffer,psi,0, 0,"",0);1296 Opcode_CallProc(buffer,psi,0,"",0); 1308 1297 } 1309 1298 void Opcode_Print(char *Parameter,BOOL bWrite){ … … 1411 1400 return; 1412 1401 } 1413 Opcode_CallProc(buffer,psi,0, 0,"",0);1402 Opcode_CallProc(buffer,psi,0,"",0); 1414 1403 } 1415 1404 -
BasicCompiler64/Opcode.h
r20 r31 389 389 #define PROCFLAG_NEW 1 390 390 int Opcode_CallProcPtr(char *variable,char *Parameter,PROCPTRINFO *pi,LONG_PTR *plpIndex); 391 int Opcode_CallProc(char *Parameter,SUBINFO *psi,LONG_PTR *plpIndex,DWORD dwFlags,char *ObjectName,int RefType);391 void Opcode_CallProc(char *Parameter,SUBINFO *psi,DWORD dwFlags,char *ObjectName,int RefType); 392 392 int Opcode_CallDllProc(char *Parameter,DECLAREINFO *pdi,LONG_PTR *plpIndex); 393 393 -
BasicCompiler64/OperatorProc.cpp
r11 r31 69 69 ///////////////////////////////////////////// 70 70 71 PARAMETER_INFO *ppi ;71 PARAMETER_INFO *ppi = (PARAMETER_INFO *)HeapAlloc(hHeap,0,sizeof(PARAMETER_INFO)*3); 72 72 int iParmNum=0; 73 74 //_System_LocalThis75 ppi=(PARAMETER_INFO *)HeapAlloc(hHeap,0,sizeof(PARAMETER_INFO)*3);76 ppi[iParmNum].bArray=0;77 ppi[iParmNum].bByVal=0;78 ppi[iParmNum].name=0;79 ppi[iParmNum].type=DEF_PTR_VOID;80 ppi[iParmNum].u.index=-1;81 ppi[iParmNum].SubScripts[0]=-1;82 iParmNum++;83 73 84 74 if(bTwoTerm){ … … 461 451 ////////////////////////////////////////////////////// 462 452 463 RetTypeInfo.type=Opcode_CallProc(Parameter,ppsi[0],&RetTypeInfo.u.lpIndex,0,ObjectName,DEF_OBJECT); 453 Opcode_CallProc(Parameter,ppsi[0],0,ObjectName,DEF_OBJECT); 454 RetTypeInfo.type = ppsi[0]->ReturnType; 455 RetTypeInfo.u.lpIndex = ppsi[0]->u.ReturnIndex; 464 456 465 457 //mov reg,rax -
BasicCompiler_Common/Class.cpp
r29 r31 698 698 699 699 //標準コンストラクタ(引数なし) 700 if(psi->ParmNum== 1) fConstructor=1;700 if(psi->ParmNum==0) fConstructor=1; 701 701 702 702 //コピーコンストラクタ 703 if(psi->ParmNum== 2){703 if(psi->ParmNum==1){ 704 704 if(psi->pParmInfo[1].type==DEF_OBJECT&& 705 705 psi->pParmInfo[1].u.pobj_c==pobj_c) fConstructor=2; -
BasicCompiler_Common/NumOpe_GetType.cpp
r11 r31 205 205 ///////////////////////////////////////////// 206 206 207 PARAMETER_INFO *ppi; 207 208 //_System_LocalThis 209 PARAMETER_INFO *ppi = (PARAMETER_INFO *)HeapAlloc(hHeap,0,sizeof(PARAMETER_INFO)*3); 208 210 int iParmNum=0; 209 210 //_System_LocalThis211 ppi=(PARAMETER_INFO *)HeapAlloc(hHeap,0,sizeof(PARAMETER_INFO)*3);212 ppi[iParmNum].bArray=0;213 ppi[iParmNum].bByVal=0;214 ppi[iParmNum].name=0;215 ppi[iParmNum].type=DEF_PTR_VOID;216 ppi[iParmNum].u.index=-1;217 ppi[iParmNum].SubScripts[0]=-1;218 iParmNum++;219 211 220 212 if(bTwoTerm){ -
BasicCompiler_Common/Object.cpp
r29 r31 226 226 i5=pVar[i3].u.pobj_c->DestructorMemberSubIndex; 227 227 if(i5!=-1) 228 Opcode_CallProc("",pVar[i3].u.pobj_c->ppobj_Method[i5]->psi,0, 0,pVar[i3].name,DEF_OBJECT);228 Opcode_CallProc("",pVar[i3].u.pobj_c->ppobj_Method[i5]->psi,0,pVar[i3].name,DEF_OBJECT); 229 229 230 230 //メモリを解放する … … 289 289 } 290 290 lstrcat(temporary,"]"); 291 Opcode_CallProc("",pVar[i3].u.pobj_c->ppobj_Method[i5]->psi,0, 0,temporary,DEF_OBJECT);291 Opcode_CallProc("",pVar[i3].u.pobj_c->ppobj_Method[i5]->psi,0,temporary,DEF_OBJECT); 292 292 293 293 ss[0]++; … … 303 303 } 304 304 else{ 305 Opcode_CallProc("",pVar[i3].u.pobj_c->ppobj_Method[i5]->psi,0, 0,pVar[i3].name,DEF_OBJECT);305 Opcode_CallProc("",pVar[i3].u.pobj_c->ppobj_Method[i5]->psi,0,pVar[i3].name,DEF_OBJECT); 306 306 } 307 307 } … … 313 313 i3=pVar[indexSystemGC].u.pobj_c->DestructorMemberSubIndex; 314 314 if(i3!=-1){ 315 Opcode_CallProc("",pVar[indexSystemGC].u.pobj_c->ppobj_Method[i3]->psi,0, 0,pVar[indexSystemGC].name,DEF_OBJECT);316 } 317 } 318 } 319 315 Opcode_CallProc("",pVar[indexSystemGC].u.pobj_c->ppobj_Method[i3]->psi,0,pVar[indexSystemGC].name,DEF_OBJECT); 316 } 317 } 318 } 319 -
BasicCompiler_Common/Overload.cpp
r28 r31 30 30 } 31 31 32 char temporary[VN_SIZE];33 if((ObjectName[0]||ppsi[0]->pobj_ParentClass) && isStatic == false ){34 //Thisポインタ(第一パラメータ)のダミーを作成35 if(Parameter[0]) sprintf(temporary,"0%c%cVoidPtr,%s",1,ESC_AS,Parameter);36 else sprintf(temporary,"0%c%cVoidPtr",1,ESC_AS);37 }38 else lstrcpy(temporary,Parameter);39 40 32 //パラメータオブジェクトを生成 41 pobj_parameter=new CParameter( temporary);33 pobj_parameter=new CParameter(Parameter); 42 34 if(pReturnTypeInfo) pobj_parameter->SetReturnType(pReturnTypeInfo); 43 35 -
BasicCompiler_Common/StrOperation.cpp
r15 r31 704 704 return 0; 705 705 } 706 707 void ShortPathToLongPath(const char *ShortPath,char *LongPath){ 708 HANDLE hFind; 709 WIN32_FIND_DATA wfd; 710 int i; 711 char dummy[MAX_PATH]; 712 for(i=0;i<MAX_PATH;i++){ 713 LongPath[i]=ShortPath[i]; 714 if((ShortPath[i-1]==':'&&ShortPath[i]=='\\')||(ShortPath[i-1]=='\\'&&ShortPath[i]=='\\')){ 715 LongPath[i+1]=0; 716 break; 717 } 718 } 719 if(ShortPath[i-1]=='\\'&&ShortPath[i]=='\\'){ 720 for(i++;i<MAX_PATH;i++){ 721 if(IsDBCSLeadByte(ShortPath[i])){ 722 i++; 723 continue; 724 } 725 LongPath[i]=ShortPath[i]; 726 if(ShortPath[i]=='\\'){ 727 LongPath[i+1]=0; 728 break; 729 } 730 } 731 for(i++;i<MAX_PATH;i++){ 732 if(IsDBCSLeadByte(ShortPath[i])){ 733 i++; 734 continue; 735 } 736 LongPath[i]=ShortPath[i]; 737 if(ShortPath[i]=='\\'){ 738 LongPath[i+1]=0; 739 break; 740 } 741 } 742 } 743 for(i++;i<MAX_PATH;i++){ 744 if(IsDBCSLeadByte(ShortPath[i])){ 745 i++; 746 continue; 747 } 748 if(ShortPath[i]=='\\'||ShortPath[i]=='\0'){ 749 strncpy(dummy,ShortPath,i); 750 dummy[i]=0; 751 if((hFind=FindFirstFile(dummy,&wfd))!=INVALID_HANDLE_VALUE) FindClose(hFind); 752 lstrcat(LongPath,wfd.cFileName); 753 754 if(ShortPath[i]=='\0') break; 755 lstrcat(LongPath,"\\"); 756 757 if(ShortPath[i]=='\\'&&ShortPath[i+1]=='\0'){ 758 break; 759 } 760 } 761 } 762 } -
BasicCompiler_Common/Subroutine.cpp
r30 r31 717 717 psi->ParmNum=0; 718 718 719 if(pobj_c&&bStatic==0){720 //オブジェクトメンバの場合は、第一パラメータをThisポインタ引き渡し用として利用721 psi->pParmInfo[psi->ParmNum].name=(char *)HeapAlloc(hHeap,0,lstrlen("_System_LocalThis")+1);722 lstrcpy(psi->pParmInfo[psi->ParmNum].name,"_System_LocalThis");723 psi->pParmInfo[psi->ParmNum].type=DEF_PTR_VOID;724 psi->pParmInfo[psi->ParmNum].u.index=-1;725 psi->pParmInfo[psi->ParmNum].bByVal=1;726 psi->pParmInfo[psi->ParmNum].bArray=0;727 psi->pParmInfo[psi->ParmNum].SubScripts[0]=-1;728 729 psi->ParmNum++;730 }731 732 719 //パラメータ 733 720 if(buffer[i]!='('){ … … 1008 995 } 1009 996 997 //リアルパラメータ領域を取得(_System_LocalThis、_System_ReturnValueを考慮して2つだけ多く確保する) 998 psi->pRealParmInfo=(PARAMETER_INFO *)HeapAlloc(hHeap,0,(psi->ParmNum+2)*sizeof(PARAMETER_INFO)); 999 psi->RealParmNum=0; 1000 1001 if(pobj_c&&bStatic==0){ 1002 i = psi->RealParmNum; 1003 1004 //オブジェクトメンバの場合は、第一パラメータを_System_LocalThis引き渡し用として利用 1005 psi->pRealParmInfo[i].name = "_System_LocalThis"; 1006 psi->pRealParmInfo[i].type=DEF_PTR_VOID; 1007 psi->pRealParmInfo[i].u.index=-1; 1008 psi->pRealParmInfo[i].bByVal=1; 1009 psi->pRealParmInfo[i].bArray=0; 1010 psi->pRealParmInfo[i].SubScripts[0]=-1; 1011 1012 psi->RealParmNum++; 1013 } 1014 1010 1015 if(psi->ReturnType==DEF_OBJECT){ 1011 //オブジェクト インスタンスを戻り値として持つ場合 1016 i = psi->RealParmNum; 1017 1018 //実体オブジェクトを戻り値として持つ場合 1012 1019 //※第一パラメータ(Thisポインタありの場合は第二パラメータ)を戻り値用の参照宣言にする 1013 1014 psi->RealParmNum=psi->ParmNum+1;1015 psi->RealSecondParmNum=psi->SecondParmNum+1;1016 1017 psi->pRealParmInfo=(PARAMETER_INFO *)HeapAlloc(hHeap,0,(psi->RealParmNum+1)*sizeof(PARAMETER_INFO));1018 1019 i=0;1020 if(pobj_c&&bStatic==0){1021 psi->pRealParmInfo[0]=psi->pParmInfo[0];1022 i++;1023 }1024 1020 1025 1021 if(psi->name[0]==1&&psi->name[1]==ESC_OPERATOR) … … 1031 1027 psi->pRealParmInfo[i].bArray=0; 1032 1028 psi->pRealParmInfo[i].SubScripts[0]=-1; 1033 i++; 1034 1035 for(;i<psi->RealParmNum;i++){ 1036 psi->pRealParmInfo[i]=psi->pParmInfo[i-1]; 1037 } 1038 } 1039 else{ 1040 psi->pRealParmInfo=psi->pParmInfo; 1041 psi->RealParmNum=psi->ParmNum; 1042 psi->RealSecondParmNum=psi->SecondParmNum; 1029 1030 psi->RealParmNum++; 1031 } 1032 1033 //パラメータをコピー 1034 for( i = 0; i < psi->ParmNum; i++, psi->RealParmNum++ ){ 1035 psi->pRealParmInfo[psi->RealParmNum]=psi->pParmInfo[i]; 1043 1036 } 1044 1037 … … 1191 1184 HeapDefaultFree(psi->pParmInfo[i2].name); 1192 1185 } 1193 if(psi->pRealParmInfo!=psi->pParmInfo)HeapDefaultFree(psi->pRealParmInfo);1186 HeapDefaultFree(psi->pRealParmInfo); 1194 1187 if(psi->pParmInfo) HeapDefaultFree(psi->pParmInfo); 1195 1188 psi->pRealParmInfo=0; -
BasicCompiler_Common/common.h
r29 r31 516 516 void GetCalcName(int idCalc,char *name); 517 517 BOOL IsFile(char *path); 518 BOOL ShortPathToLongPath(char ShortPath[MAX_PATH],char *LongPath); 518 519 BOOL GetFolder(HWND hWnd,char *folder,char *OpenFolderTitle); 520 void ShortPathToLongPath(const char *ShortPath,char *LongPath); 519 521 520 522 //calculation.cpp -
BasicCompiler_Common/hash.cpp
r28 r31 146 146 } 147 147 } 148 149 if(pobj_CompilingClass){ 150 //自身のオブジェクトのメンバ関数を検索 151 152 153 ////////////////////////////////////////////// 154 // 静的メソッド 155 ////////////////////////////////////////////// 156 157 CClass *pobj_c = pobj_CompilingClass; 158 159 for(i=0;i<pobj_c->iStaticMethodNum;i++){ 160 if(lstrcmp(name,pobj_c->ppobj_StaticMethod[i]->psi->name)==0){ 161 ppArray_si[num]=pobj_c->ppobj_StaticMethod[i]->psi; 162 num++; 163 } 164 } 165 166 167 /////////////////////// 168 // 動的メソッド(一般) 169 /////////////////////// 170 for(i=0;i<pobj_CompilingClass->iMethodNum;i++){ 171 //オーバーライドされた関数を飛び越す 172 if(pobj_CompilingClass->ppobj_Method[i]->pobj_InheritsClass==0) break; 173 } 174 for(;i<pobj_CompilingClass->iMethodNum;i++){ 175 if(lstrcmp(name,pobj_CompilingClass->ppobj_Method[i]->psi->name)==0){ 176 ppArray_si[num]=pobj_CompilingClass->ppobj_Method[i]->psi; 177 num++; 178 } 179 } 180 181 //オーバーライドされたメンバ関数 182 for(i=0;i<pobj_CompilingClass->iMethodNum;i++){ 183 //オーバーライドされた関数を飛び越す 184 if(pobj_CompilingClass->ppobj_Method[i]->pobj_InheritsClass){ 148 else{ 149 //オブジェクトが明示的に指定されていないとき 150 151 if(pobj_CompilingClass){ 152 //自身のオブジェクトのメンバ関数を検索 153 154 155 ////////////////////////////////////////////// 156 // 静的メソッド 157 ////////////////////////////////////////////// 158 159 CClass *pobj_c = pobj_CompilingClass; 160 161 for(i=0;i<pobj_c->iStaticMethodNum;i++){ 162 if(lstrcmp(name,pobj_c->ppobj_StaticMethod[i]->psi->name)==0){ 163 ppArray_si[num]=pobj_c->ppobj_StaticMethod[i]->psi; 164 num++; 165 } 166 } 167 168 169 /////////////////////// 170 // 動的メソッド(一般) 171 /////////////////////// 172 for(i=0;i<pobj_CompilingClass->iMethodNum;i++){ 173 //オーバーライドされた関数を飛び越す 174 if(pobj_CompilingClass->ppobj_Method[i]->pobj_InheritsClass==0) break; 175 } 176 for(;i<pobj_CompilingClass->iMethodNum;i++){ 185 177 if(lstrcmp(name,pobj_CompilingClass->ppobj_Method[i]->psi->name)==0){ 186 178 ppArray_si[num]=pobj_CompilingClass->ppobj_Method[i]->psi; … … 188 180 } 189 181 } 190 } 191 } 192 193 if(num) goto finish; 194 195 196 //ハッシュ値を取得 197 int key; 198 key=hash_default(name); 199 200 //格納位置を取得 201 extern SUBINFO **ppSubHash; 202 SUBINFO *psi; 203 psi=ppSubHash[key]; 204 while(psi){ 205 if(!psi->pobj_ParentClass){ 206 if(lstrcmp(psi->name,name)==0){ 207 ppArray_si[num]=psi; 208 num++; 209 } 210 } 211 212 psi=psi->pNextData; 213 } 214 182 183 //オーバーライドされたメンバ関数 184 for(i=0;i<pobj_CompilingClass->iMethodNum;i++){ 185 //オーバーライドされた関数を飛び越す 186 if(pobj_CompilingClass->ppobj_Method[i]->pobj_InheritsClass){ 187 if(lstrcmp(name,pobj_CompilingClass->ppobj_Method[i]->psi->name)==0){ 188 ppArray_si[num]=pobj_CompilingClass->ppobj_Method[i]->psi; 189 num++; 190 } 191 } 192 } 193 } 194 195 196 /////////////////////////// 197 // グローバル関数を検索 198 /////////////////////////// 199 200 //ハッシュ値を取得 201 int key; 202 key=hash_default(name); 203 204 //格納位置を取得 205 extern SUBINFO **ppSubHash; 206 SUBINFO *psi; 207 psi=ppSubHash[key]; 208 while(psi){ 209 if(!psi->pobj_ParentClass){ 210 if(lstrcmp(psi->name,name)==0){ 211 ppArray_si[num]=psi; 212 num++; 213 } 214 } 215 216 psi=psi->pNextData; 217 } 218 219 } 215 220 finish: 216 221 -
BasicCompiler_Common/preprocessor.cpp
r15 r31 8 8 9 9 10 11 ////////////////////////////////////// 12 // #requireの管理 13 ////////////////////////////////////// 14 class CRequireFiles{ 15 char **ppFilePath; 16 int count; 17 public: 18 CRequireFiles(){ 19 ppFilePath = (char **)malloc( 1 ); 20 count = 0; 21 } 22 ~CRequireFiles(){ 23 for( int i = 0; i < count; i++ ){ 24 free( ppFilePath[i] ); 25 } 26 free( ppFilePath ); 27 } 28 bool IsIncluded( const char *FilePath ){ 29 for( int i = 0; i < count; i++ ){ 30 if( lstrcmpi( ppFilePath[i], FilePath ) == 0 ){ 31 return true; 32 } 33 } 34 return false; 35 } 36 void Add( const char *FilePath ){ 37 //既に読み込まれているとき 38 if( IsIncluded( FilePath ) ) return; 39 40 //追加 41 ppFilePath = (char **)realloc(ppFilePath, ( count + 1 ) * sizeof(char *) ); 42 ppFilePath[count] = (char *)malloc( lstrlen(FilePath) + 1 ); 43 lstrcpy( ppFilePath[count], FilePath ); 44 count++; 45 } 46 }; 47 CRequireFiles *pRequireFiles; 48 49 50 ////////////////////////////////////// 51 // #define間するクラス 52 ////////////////////////////////////// 10 53 class CDefine{ 11 54 int num; … … 317 360 int i,i2,i3,sw1,FileSize,LineNum,FileLayer[255],layer,LastFileByte[255]; 318 361 char *buffer,temporary[MAX_PATH],temp2[MAX_PATH+255],*LayerDir[255]; 319 DWORD AccBytes;320 HANDLE hFile;321 362 322 363 IncludeFileInfo.ppFileNames=(char **)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,sizeof(char *)); … … 350 391 } 351 392 if(buffer[i-1]=='\n'&&buffer[i]=='#'){ 352 if(memcmp(buffer+i+1,"include",7)==0){ 353 i2=i+8; 354 while(buffer[i2]==' '||buffer[i2]=='\t') i2++; 355 356 if(buffer[i2]=='\"') sw1=0; 357 else if(buffer[i2]=='<') sw1=1; 358 i2++; 359 360 for(i3=0;;i2++,i3++){ 361 if((buffer[i2]=='\"'&&sw1==0)||(buffer[i2]=='>'&&sw1==1)||buffer[i2]=='\n'||buffer[i2]=='\0'){ 362 temporary[i3]=0; 363 break; 364 } 365 temporary[i3]=buffer[i2]; 366 } 367 while(buffer[i2]!='\n'&&buffer[i2]!='\0') i2++; 368 369 if(sw1){ 370 sprintf(temp2,"%s%s",szIncludeDir,temporary); 371 lstrcpy(temporary,temp2); 372 } 373 else GetFullPath(temporary,LayerDir[layer]); 393 bool isRequire = false; 394 if(memcmp( buffer + i + 1, "include", 7 ) == 0 395 || memcmp( buffer + i + 1, "require", 7 ) == 0){ 396 397 //#requireの場合 398 if( buffer[i + 1] == 'r' ) isRequire = true; 399 400 i2=i+8; 401 while(buffer[i2]==' '||buffer[i2]=='\t') i2++; 402 403 if(buffer[i2]=='\"') sw1=0; 404 else if(buffer[i2]=='<') sw1=1; 405 i2++; 406 407 for(i3=0;;i2++,i3++){ 408 if((buffer[i2]=='\"'&&sw1==0)||(buffer[i2]=='>'&&sw1==1)||buffer[i2]=='\n'||buffer[i2]=='\0'){ 409 temporary[i3]=0; 410 break; 411 } 412 temporary[i3]=buffer[i2]; 413 } 414 while(buffer[i2]!='\n'&&buffer[i2]!='\0') i2++; 415 416 if(sw1){ 417 sprintf(temp2,"%s%s",szIncludeDir,temporary); 418 lstrcpy(temporary,temp2); 419 } 420 else GetFullPath(temporary,LayerDir[layer]); 374 421 } 375 422 else if(memcmp(buffer+i+1,"prompt",6)==0){ … … 406 453 IncludeFileInfo.FilesNum++; 407 454 408 //インクルードファイルを読み込む 409 hFile=CreateFile(temporary,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); 410 if(hFile==INVALID_HANDLE_VALUE){ 411 sprintf(temp2,"インクルードファイル \"%s\" をオープンできません",temporary); 412 extern char *basbuf; 413 basbuf=base+2; 414 SetError(-1,temp2,i); 415 break; 416 } 417 FileSize=GetFileSize(hFile,NULL); 418 419 //読み込み 455 //#requireの場合では、既に読み込まれているファイルは読み込まないようにする 456 bool isFake = false; 457 if( isRequire ){ 458 if( pRequireFiles->IsIncluded( temporary ) ){ 459 //既に読み込まれているとき 460 isFake = true; 461 } 462 } 463 420 464 char *temp3; 421 temp3=(char *)HeapAlloc(hHeap,0,FileSize+1); 422 ReadFile(hFile,temp3,FileSize,&AccBytes,NULL); 423 temp3[AccBytes]=0; 424 425 //CRLFをLFに変換 426 ChangeReturnCode(temp3); 427 428 //コメント削除 429 DeleteComment(temp3); 430 431 //#ifdefディレクティブ 432 DirectiveIfdef(temp3); 433 434 FileSize=lstrlen(temp3); 465 if( isFake ){ 466 //既に読み込まれているときは空データを生成 467 temp3 = (char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);; 468 FileSize = 0; 469 } 470 else{ 471 //取り込まれたファイルを収集する 472 pRequireFiles->Add( temporary ); 473 474 //インクルードファイルを読み込む 475 DWORD AccBytes; 476 HANDLE hFile=CreateFile(temporary,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); 477 if(hFile==INVALID_HANDLE_VALUE){ 478 sprintf(temp2,"インクルードファイル \"%s\" をオープンできません",temporary); 479 extern char *basbuf; 480 basbuf=base+2; 481 SetError(-1,temp2,i); 482 break; 483 } 484 FileSize=GetFileSize(hFile,NULL); 485 486 //読み込み 487 temp3=(char *)HeapAlloc(hHeap,0,FileSize+1); 488 ReadFile(hFile,temp3,FileSize,&AccBytes,NULL); 489 temp3[AccBytes]=0; 490 CloseHandle(hFile); 491 492 //CRLFをLFに変換 493 ChangeReturnCode(temp3); 494 495 //コメント削除 496 DeleteComment(temp3); 497 498 //#ifdefディレクティブ 499 DirectiveIfdef(temp3); 500 501 FileSize=lstrlen(temp3); 502 } 435 503 436 504 i3=lstrlen(buffer)+FileSize; … … 441 509 442 510 //クローズ 443 CloseHandle(hFile);444 511 HeapDefaultFree(temp3); 445 512 … … 505 572 506 573 //インクルードファイルを読み込む 574 pRequireFiles = new CRequireFiles(); 507 575 base=IncludeFiles(base); 576 delete pRequireFiles; 508 577 509 578 //#define情報を破棄
Note:
See TracChangeset
for help on using the changeset viewer.