Branch: Tag:

2015-05-15

2015-05-15 11:40:01 by Henrik Grubbström (Grubba) <grubba@grubba.org>

Compiler: Improved types for negative constants.

Some unary integer expressions are now evaluated by the compiler
during parsing.

Before:

typeof(-17) ==> int

Now:

typeof(-17) ==> int(-17..-17)

3371:    | TOK_INC expr4 { $$=mknode(F_INC,$2,0); }    | TOK_DEC expr4 { $$=mknode(F_DEC,$2,0); }    | TOK_NOT expr2 { $$=mkopernode("`!",$2,0); } -  | '~' expr2 { $$=mkopernode("`~",$2,0); } -  | '-' expr2 { $$=mkopernode("`-",$2,0); } +  | '~' expr2 +  { +  if ($2 && ($2->token == F_CONSTANT) && (TYPEOF($2->u.sval) == T_INT)) { +  $$ = mkintnode(~($2->u.sval.u.integer)); +  free_node($2); +  } else { +  $$ = mkopernode("`~", $2, 0); +  } +  } +  | '-' expr2 +  { +  if ($2 && ($2->token == F_CONSTANT) && (TYPEOF($2->u.sval) == T_INT) && +  !INT_TYPE_NEG_OVERFLOW($2->u.sval.u.integer)) { +  $$ = mkintnode(-($2->u.sval.u.integer)); +  free_node($2); +  } else { +  $$=mkopernode("`-", $2, 0); +  } +  }    ;      expr3: expr4