diff options
| author | 2022-08-24 14:46:36 +0200 | |
|---|---|---|
| committer | 2022-08-24 14:46:36 +0200 | |
| commit | 9f320002800b0a8b7601528334f97ba64182bdd6 (patch) | |
| tree | eef77343a2ffbd74916d305610ff1e758467840c /src/parse.cff | |
| parent | 53fcd5e1647fb56511bbdd98925dd38a84fd7248 (diff) | |
more llvm
Diffstat (limited to 'src/parse.cff')
| -rw-r--r-- | src/parse.cff | 19 |
1 files changed, 13 insertions, 6 deletions
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); |