From 9f320002800b0a8b7601528334f97ba64182bdd6 Mon Sep 17 00:00:00 2001 From: lemon Date: Wed, 24 Aug 2022 14:46:36 +0200 Subject: more llvm --- src/parse.cff | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'src/parse.cff') diff --git a/src/parse.cff b/src/parse.cff index e731d47..5a50e96 100644 --- a/src/parse.cff +++ b/src/parse.cff @@ -2481,7 +2481,11 @@ fn parsevardecl(P *Parser, toplevel bool, externp bool, letp bool, yield DeclYie decl.u.Static.id = id++; decl.u.#tag = :Static; } - yield(putdecl(P, tok.loc, decl), yarg); + let decll *Decl #?; + yield(decll = putdecl(P, tok.loc, decl), yarg); + if !letp and !fwd { + llvm_genstatic(decl.externp, decl.name, &decl.u.Static); + } if !lexmatch(P, &tok, ',') { lexexpects(P, ';', "`,' or `;'"); @@ -2516,8 +2520,8 @@ fn parsefn(P *Parser, loc Loc, toplevel bool, externp bool, name *const u8) *Dec if !lexmatch(P, #null, '{') { lexexpects(P, ';', "';' or '{'"); - if toplevel { - llvm_addfn(decl); + if toplevel or externp { + llvm_addglobl(decl, #f); } return decl; } @@ -2544,8 +2548,8 @@ fn parsefn(P *Parser, loc Loc, toplevel bool, externp bool, name *const u8) *Dec (as(*Arena)P.alloc.a)->destroy(); } } - if toplevel { - llvm_addfn(decl); + if toplevel or externp { + llvm_addglobl(decl, #f); } P.varid = varid; P.loopid = loopid; @@ -2855,8 +2859,11 @@ fn parsedecls(P *Parser, loc Loc, yield DeclYielder, yarg *void, toplevel bool) a.yield(decl, a.yarg); } // ir_genstatic(a.P.irctx, decl); + if a.toplevel or a.externp { + llvm_addglobl(decl, #t); + } } - parsevardecl(P, toplevel, externp, #{let?} #t, &varyield, &Arg { P, externp, toplevel, yield, yarg }); + parsevardecl(P, toplevel, externp, #{let?} #f, &varyield, &Arg { P, externp, toplevel, yield, yarg }); return; case lexmatch(P, &tok, :kw_def); -- cgit v1.2.3