[cfe-dev] [PATCH] add constant expression evaluation to the AST and fix PR2413

Argiris Kirtzidis akyrtzi at gmail.com
Sat Jun 14 13:15:53 PDT 2008


Hi Eli,

Eli Friedman wrote:
> On Sun, Jun 8, 2008 at 7:05 PM, Eli Friedman <eli.friedman at gmail.com> wrote:
>   
>> Attached patch adds some capability to the AST to evaluate constant
>> expressions more general than integer constant expressions.  It then
>> uses that capability to remove the hack added for
>> Sema/darwin-align-cast.c, which fixes PR2413.
>>     

Having a general way to evaluate constant expressions is a great idea 
and very useful for consumers.
However, having

TryEvaluateExprFloat
TryEvaluateExprComplex
TryEvaluateExprInt
...

doesn't seem to me that it "scales" well. There's going to be a lot of 
code duplication between all those functions and there isn't a way for 
the consumer to do action based on the type of the constant:

if (expr is integer)
..
else if (expr is float)
...

How about having a single "EvaluateConstantExpr" method, that accepts a 
structure that can hold all the possible values in a union (APSInt, 
APFloat, etc.) plus an enum that can indicate what is the type of the 
value returned (vt_int, vt_float, vt_complex, etc) ?

To indicate a non constant expression, it could return a vt_notConstant 
enum, or it could be implemented as "TryEvaluateConstantExpr" and return 
false in that case.


-Argiris




More information about the cfe-dev mailing list