aboutsummaryrefslogtreecommitdiff
path: root/src/parse.cff
diff options
context:
space:
mode:
Diffstat (limited to 'src/parse.cff')
-rw-r--r--src/parse.cff7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/parse.cff b/src/parse.cff
index a065739..5c3ac63 100644
--- a/src/parse.cff
+++ b/src/parse.cff
@@ -3060,6 +3060,8 @@ fn parsedecls(P *Parser, loc Loc, yield DeclYielder, yarg *void, toplevel bool)
case lexmatch(P, &tok, :kw_def);
do {
+ let konst = lexmatch(P, #null, :kw_const);
+
let tok = lexexpect(P, :ident),
name = tok.u.ident,
ini Expr #?,
@@ -3076,7 +3078,10 @@ fn parsedecls(P *Parser, loc Loc, yield DeclYielder, yarg *void, toplevel bool)
if !typematchestarg(ty, ini.ty) {
err(P, ini.loc, "incompatible initializer (%t, expected %t)", ini.ty, ty);
}
- fold(&ini);
+ let f = fold(&ini);
+ if konst and !f {
+ err(P, ini.loc, "cannot evaluate expression at compile time");
+ }
decl = putdecl(P, tok.loc, { name, tok.loc, .u: :Def(ini) });
if yield {
yield(decl, yarg);