diff options
| author | 2022-08-08 10:22:43 +0200 | |
|---|---|---|
| committer | 2022-08-08 10:25:08 +0200 | |
| commit | 013e4912833ebe5db705a0e8b3bd1c2ef62ef453 (patch) | |
| tree | a965a81bb47b559591fcc7e5a5f6a98784b70ec6 /bootstrap | |
| parent | 28eac2940efa05b3a99dd53870ea22b49e12c43a (diff) | |
expand macros at toplevel
Diffstat (limited to 'bootstrap')
| -rw-r--r-- | bootstrap/parse.c | 7 | ||||
| -rw-r--r-- | bootstrap/test2.cff | 4 |
2 files changed, 10 insertions, 1 deletions
diff --git a/bootstrap/parse.c b/bootstrap/parse.c index fd2d703..ccdb510 100644 --- a/bootstrap/parse.c +++ b/bootstrap/parse.c @@ -2962,7 +2962,14 @@ parsedecl(decl_yielder_t yield, void *yarg, struct parser *P, bool toplevel) { free(cf.decls.d); lexexpect(P, ';'); return; + } else if (lexmatch(P, &tok, TKident)) { + const struct decl *dm = finddecl(P, tok.str); + if (!dm || dm->t != Dmacro) + goto err; + parseexpandmacro(P, &dm->macro); + return parsedecl(yield, yarg, P, toplevel); } else { + err: fatal(P, tok.span, "expected declaration (near %s)", tok2str(tok)); } diff --git a/bootstrap/test2.cff b/bootstrap/test2.cff index 0d5d086..a48247e 100644 --- a/bootstrap/test2.cff +++ b/bootstrap/test2.cff @@ -16,7 +16,9 @@ struct Bit<T> { !fn foo(x T) T { return ~x + Y; } } -def Y = 3.3; +defmacro def2(x, v) [def x = (v)] + +def2(Y, 3.3); enum union Value { None, |