comparison dmd/optimize.c @ 1587:def7a1d494fd

Merge DMD 1.051
author Christian Kamm <kamm incasoftware de>
date Fri, 06 Nov 2009 23:58:01 +0100
parents df11cdec45a2
children 20799faa301d
comparison
equal deleted inserted replaced
1586:7f728c52e63c 1587:def7a1d494fd
313 } 313 }
314 314
315 return this; 315 return this;
316 } 316 }
317 317
318 Expression *NewExp::optimize(int result)
319 {
320 if (thisexp)
321 thisexp = thisexp->optimize(WANTvalue);
322
323 // Optimize parameters
324 if (newargs)
325 {
326 for (size_t i = 0; i < newargs->dim; i++)
327 { Expression *e = (Expression *)newargs->data[i];
328
329 e = e->optimize(WANTvalue);
330 newargs->data[i] = (void *)e;
331 }
332 }
333
334 if (arguments)
335 {
336 for (size_t i = 0; i < arguments->dim; i++)
337 { Expression *e = (Expression *)arguments->data[i];
338
339 e = e->optimize(WANTvalue);
340 arguments->data[i] = (void *)e;
341 }
342 }
343 return this;
344 }
345
318 Expression *CallExp::optimize(int result) 346 Expression *CallExp::optimize(int result)
319 { Expression *e = this; 347 { Expression *e = this;
348
349 // Optimize parameters
350 if (arguments)
351 {
352 for (size_t i = 0; i < arguments->dim; i++)
353 { Expression *e = (Expression *)arguments->data[i];
354
355 e = e->optimize(WANTvalue);
356 arguments->data[i] = (void *)e;
357 }
358 }
320 359
321 e1 = e1->optimize(result); 360 e1 = e1->optimize(result);
322 if (e1->op == TOKvar && result & WANTinterpret) 361 if (e1->op == TOKvar && result & WANTinterpret)
323 { 362 {
324 FuncDeclaration *fd = ((VarExp *)e1)->var->isFuncDeclaration(); 363 FuncDeclaration *fd = ((VarExp *)e1)->var->isFuncDeclaration();
638 e = this; 677 e = this;
639 678
640 if (this->e1->isConst() && this->e2->isConst()) 679 if (this->e1->isConst() && this->e2->isConst())
641 { 680 {
642 e = Identity(op, type, this->e1, this->e2); 681 e = Identity(op, type, this->e1, this->e2);
682 if (e == EXP_CANT_INTERPRET)
683 e = this;
643 } 684 }
644 return e; 685 return e;
645 } 686 }
646 687
647 Expression *IndexExp::optimize(int result) 688 Expression *IndexExp::optimize(int result)