aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Forney <mforney@mforney.org>2019-04-13 23:44:09 -0700
committerMichael Forney <mforney@mforney.org>2019-04-13 23:44:09 -0700
commita0c8910f8f834b833ce2b8a38915b7857875c942 (patch)
treeaf92422075fc9b267a93da99e1bcef852cb03e13
parent8957f55d531472e8ee742cc1e8d74deba2b6997d (diff)
Revert "Fold constexpr function into intconstexpr"
This reverts commit a080e36dac54b82beef63580f36cb0da9ad31788.
-rw-r--r--cc.h1
-rw-r--r--expr.c8
2 files changed, 8 insertions, 1 deletions
diff --git a/cc.h b/cc.h
index 83c3afa..bc37221 100644
--- a/cc.h
+++ b/cc.h
@@ -440,6 +440,7 @@ extern struct scope filescope;
struct expr *expr(struct scope *);
struct expr *assignexpr(struct scope *);
+struct expr *constexpr(struct scope *);
uint64_t intconstexpr(struct scope *, _Bool);
void delexpr(struct expr *);
diff --git a/expr.c b/expr.c
index 099c3e8..a824873 100644
--- a/expr.c
+++ b/expr.c
@@ -820,12 +820,18 @@ condexpr(struct scope *s)
return e;
}
+struct expr *
+constexpr(struct scope *s)
+{
+ return eval(condexpr(s));
+}
+
uint64_t
intconstexpr(struct scope *s, bool allowneg)
{
struct expr *e;
- e = eval(condexpr(s));
+ e = constexpr(s);
if (e->kind != EXPRCONST || !(typeprop(e->type) & PROPINT))
error(&tok.loc, "not an integer constant expression");
if (!allowneg && e->type->basic.issigned && e->constant.i > INT64_MAX)