From a744bd5fcda35b086566ba961502d589eefd5fe9 Mon Sep 17 00:00:00 2001 From: lemon Date: Sun, 28 Aug 2022 09:20:07 +0200 Subject: fix some fold and add def const --- src/parse.cff | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/parse.cff') 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); -- cgit v1.2.3