Mercurial > projects > ldc
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) |