Changeset 310
- Timestamp:
- 12/24/09 23:45:11 (15 years ago)
- Files:
-
- branches/dmd-1.x/src/interpret.c (modified) (1 diff)
- trunk/src/interpret.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/dmd-1.x/src/interpret.c
r304 r310 211 211 */ 212 212 assert(istate); 213 213 for (size_t i = 0; i < istate->vars.dim; i++) 214 214 { VarDeclaration *v = (VarDeclaration *)istate->vars.data[i]; 215 215 if (v == v2) 216 216 { istate->vars.data[i] = NULL; 217 217 break; 218 218 } 219 219 } 220 220 } 221 221 else 222 222 { // Value parameters and non-trivial references 223 223 v->value = earg; 224 224 } 225 225 #if LOG 226 226 printf("interpreted arg[%d] = %s\n", i, earg->toChars()); 227 227 #endif 228 228 } 229 229 } 230 230 // Don't restore the value of 'this' upon function return 231 if (needThis() && thisarg->op==TOKvar) { 231 if (needThis() && thisarg->op == TOKvar && istate) 232 { 232 233 VarDeclaration *thisvar = ((VarExp *)(thisarg))->var->isVarDeclaration(); 233 234 for (size_t i = 0; i < istate->vars.dim; i++) 234 235 { VarDeclaration *v = (VarDeclaration *)istate->vars.data[i]; 235 236 if (v == thisvar) 236 237 { istate->vars.data[i] = NULL; 237 238 break; 238 239 } 239 240 } 240 241 } 241 242 242 243 /* Save the values of the local variables used 243 244 */ 244 245 Expressions valueSaves; 245 246 if (istate && !isNested()) 246 247 { 247 248 //printf("saving local variables...\n"); 248 249 valueSaves.setDim(istate->vars.dim); 249 250 for (size_t i = 0; i < istate->vars.dim; i++) 250 251 { VarDeclaration *v = (VarDeclaration *)istate->vars.data[i]; 251 252 if (v) trunk/src/interpret.c
r304 r310 230 230 */ 231 231 assert(istate); 232 232 for (size_t i = 0; i < istate->vars.dim; i++) 233 233 { VarDeclaration *v = (VarDeclaration *)istate->vars.data[i]; 234 234 if (v == v2) 235 235 { istate->vars.data[i] = NULL; 236 236 break; 237 237 } 238 238 } 239 239 } 240 240 else 241 241 { // Value parameters and non-trivial references 242 242 v->value = earg; 243 243 } 244 244 #if LOG 245 245 printf("interpreted arg[%d] = %s\n", i, earg->toChars()); 246 246 #endif 247 247 } 248 248 } 249 249 // Don't restore the value of 'this' upon function return 250 if (needThis() && thisarg->op==TOKvar) { 250 if (needThis() && thisarg->op == TOKvar && istate) 251 { 251 252 VarDeclaration *thisvar = ((VarExp *)(thisarg))->var->isVarDeclaration(); 252 253 for (size_t i = 0; i < istate->vars.dim; i++) 253 254 { VarDeclaration *v = (VarDeclaration *)istate->vars.data[i]; 254 255 if (v == thisvar) 255 256 { istate->vars.data[i] = NULL; 256 257 break; 257 258 } 258 259 } 259 260 } 260 261 261 262 /* Save the values of the local variables used 262 263 */ 263 264 Expressions valueSaves; 264 265 if (istate && !isNested()) 265 266 { 266 267 //printf("saving local variables...\n"); 267 268 valueSaves.setDim(istate->vars.dim); 268 269 for (size_t i = 0; i < istate->vars.dim; i++) 269 270 { VarDeclaration *v = (VarDeclaration *)istate->vars.data[i]; 270 271 if (v)
