diff options
Diffstat (limited to 'src/parse.cff')
| -rw-r--r-- | src/parse.cff | 7 |
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); |