Changeset 64 in dev for BasicCompiler32/OperatorProc.cpp
- Timestamp:
- Mar 8, 2007, 2:49:34 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler32/OperatorProc.cpp
r63 r64 50 50 if(pBaseTypeInfo){ 51 51 if(pBaseTypeInfo->type==DEF_OBJECT){ 52 bReturnTypeIsObject=1;53 52 ReturnType.u.lpIndex=pBaseTypeInfo->u.lpIndex; 54 53 } … … 107 106 HeapDefaultFree(ppi); 108 107 109 int right_side_size; 110 if(type[sp-1]==DEF_OBJECT) right_side_size=PTR_SIZE; 111 else right_side_size=GetTypeSize(type[sp-1],index_stack[sp-1]); 112 113 if(bTwoTerm){ 114 if(psi->pParmInfo[1].type==DEF_OBJECT&&psi->pParmInfo[1].bByVal){ 108 int right_side_size = GetTypeSize(type[sp-1],index_stack[sp-1]); 109 110 if(bTwoTerm){ 111 if(psi->pRealParmInfo[1].type==DEF_STRUCT&&psi->pRealParmInfo[1].bByVal){ 115 112 //一時オブジェクトはメソッド内で破棄される 116 113 bUseHeap[sp-1]=0; … … 119 116 120 117 121 if(psi->ReturnType==DEF_ OBJECT){118 if(psi->ReturnType==DEF_STRUCT){ 122 119 ////////////////////////////////////////////////////// 123 // 戻り値に オブジェクトインスタンスを持つ場合124 // ※ByRef _System_Return Objectパラメータ用領域を取得120 // 戻り値に構造体インスタンスを持つ場合 121 // ※ByRef _System_ReturnValue パラメータ用領域を取得 125 122 ////////////////////////////////////////////////////// 126 123 … … 182 179 op_push(REG_EAX); 183 180 } 184 } 185 186 if(psi->ReturnType==DEF_OBJECT){ 181 182 if( !psi->pRealParmInfo[1].bByVal ){ 183 //一時参照を作成 184 185 //mov eax,esp 186 op_mov_RR( REG_EAX, REG_ESP ); 187 188 //push eax 189 op_push( REG_EAX ); 190 } 191 } 192 193 if(psi->ReturnType==DEF_STRUCT){ 187 194 //push ebx 188 195 op_push(REG_EBX); … … 195 202 op_call(psi); 196 203 197 if(psi->ReturnType!=-1){ 204 if(bTwoTerm){ 205 if( !psi->pRealParmInfo[1].bByVal ){ 206 //一時参照を破棄 207 op_pop( REG_NON ); 208 } 209 } 210 211 if(psi->ReturnType!=DEF_NON){ 198 212 //スタックへプッシュ 199 213 PushReturnValue(psi->ReturnType); … … 211 225 index_stack[sp-1]=psi->u.ReturnIndex; 212 226 213 if(psi->ReturnType==DEF_ OBJECT){214 // Object型が戻ったときはヒープ領域にインスタンスが格納されている227 if(psi->ReturnType==DEF_STRUCT){ 228 //構造体が戻ったときはヒープ領域にインスタンスが格納されている 215 229 //※後にfreeする必要あり 216 230 bUseHeap[sp-1]=1;
Note:
See TracChangeset
for help on using the changeset viewer.