Changeset 436 in dev for trunk/abdev/BasicCompiler32/CParameter.cpp
- Timestamp:
- Mar 15, 2008, 3:33:36 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler32/CParameter.cpp
r435 r436 65 65 //変数ではないとき 66 66 Type calcType; 67 BOOL bUseHeap;68 NumOpe( Parms[i2], dummyType, calcType, & bUseHeap);67 bool isNeedHeapFreeStructure; 68 NumOpe( Parms[i2], dummyType, calcType, &isNeedHeapFreeStructure ); 69 69 //↑ここでスタックに積む 70 70 … … 86 86 i2); 87 87 88 if( result && bUseHeap ){ 88 if( result ) 89 { 89 90 useTempParameters[i2] = true; 91 isNeedFreeStructures[i2] = true; 90 92 useTempObject = true; 91 93 … … 107 109 for(int i2=ParmsNum-1;i2>=0;i2--){ 108 110 if( useTempParameters[i2] ){ 109 if( types[i2].IsStruct() ){ 111 if( types[i2].IsStruct() ) 112 { 110 113 // 構造体の一時メモリ 111 114 112 //メモリを解放する 113 114 //call free 115 extern const UserProc *pSub_free; 116 compiler.codeGenerator.op_call(pSub_free); 117 } 118 else{ 119 if( types[i2].Is64() ){ 115 if( isNeedFreeStructures[i2] ) 116 { 117 //メモリを解放する 118 119 //call free 120 extern const UserProc *pSub_free; 121 compiler.codeGenerator.op_call(pSub_free); 122 } 123 else 124 { 125 //pop ... 参照を消す 126 compiler.codeGenerator.op_add_esp( PTR_SIZE ); 127 } 128 } 129 else 130 { 131 if( types[i2].Is64() ) 132 { 120 133 //pop ... 参照を消す 121 134 //pop ... 上位32ビット … … 123 136 compiler.codeGenerator.op_add_esp( PTR_SIZE * 3 ); 124 137 } 125 else{ 138 else 139 { 126 140 //pop ... 参照を消す 127 141 //pop ... 値を消す … … 150 164 151 165 Type calcType; 152 BOOL bUseHeap;166 bool isNeedHeapFreeStructure; 153 167 NumOpe( expression, 154 168 baseType, 155 169 calcType, 156 & bUseHeap);170 &isNeedHeapFreeStructure ); 157 171 158 172 // ※スタックにある二つのデータ(コピー先、コピー元)の値を必要とする 159 SetStructVariable( baseType, calcType, bUseHeap);173 SetStructVariable( baseType, calcType, isNeedHeapFreeStructure ); 160 174 } 161 175 … … 234 248 } 235 249 236 BOOL bCalcUseHeap;237 250 Type calcType; 238 if( !NumOpe( Parms[i2], dummyType, calcType, &bCalcUseHeap ) ){ 251 bool isNeedHeapFreeStructure; 252 if( !NumOpe( Parms[i2], dummyType, calcType, &isNeedHeapFreeStructure ) ) 253 { 239 254 break; 240 255 } 241 256 242 if( calcType.IsObject() ){ 257 if( calcType.IsObject() ) 258 { 243 259 if( !dummyType.IsObject() 244 260 || 245 261 dummyType.IsObject() && 246 !dummyType.GetClass().IsEqualsOrSubClass( &calcType.GetClass() ) ){ 262 !dummyType.GetClass().IsEqualsOrSubClass( &calcType.GetClass() ) ) 263 { 247 264 //キャスト演算子のオーバーロードに対応する 248 CallCastOperatorProc( calcType, bCalcUseHeap,dummyType );265 CallCastOperatorProc( calcType, isNeedHeapFreeStructure,dummyType ); 249 266 } 250 267 }
Note:
See TracChangeset
for help on using the changeset viewer.