Changeset 31 in dev for BasicCompiler_Common/Subroutine.cpp
- Timestamp:
- Jan 13, 2007, 4:26:50 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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;
Note:
See TracChangeset
for help on using the changeset viewer.