From baf11b7175c468d3d9408d332b1c0d529a4957ee Mon Sep 17 00:00:00 2001 From: Quentin Carbonneaux Date: Wed, 7 Jun 2023 10:11:58 +0200 Subject: parseline() tweaks --- parse.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/parse.c b/parse.c index 5b9f60e..44c9e19 100644 --- a/parse.c +++ b/parse.c @@ -589,6 +589,12 @@ parseline(PState ps) if (ps == PLbl && t != Tlbl && t != Trbrace) err("label or } expected"); switch (t) { + case Ttmp: + r = tmpref(tokval.str); + expect(Teq); + k = parsecls(&ty); + op = next(); + break; default: if (isstore(t)) { case Tblit: @@ -598,13 +604,11 @@ parseline(PState ps) r = R; k = Kw; op = t; - goto DoOp; + break; } err("label, instruction or jump expected"); case Trbrace: return PEnd; - case Ttmp: - break; case Tlbl: b = findblk(tokval.str); if (curb && curb->jmp.type == Jxxx) { @@ -658,21 +662,15 @@ parseline(PState ps) closeblk(); return PLbl; case Oloc: - expect(Tint); op = Oloc; k = Kw; r = R; + expect(Tint); arg[0] = INT(tokval.num); if (arg[0].val != tokval.num) err("line number too big"); - arg[1] = R; goto Ins; } - r = tmpref(tokval.str); - expect(Teq); - k = parsecls(&ty); - op = next(); -DoOp: if (op == Tcall) { arg[0] = parseref(); parserefl(1); @@ -681,8 +679,7 @@ DoOp: if (k == Kc) { k = Kl; arg[1] = TYPE(ty); - } else - arg[1] = R; + } if (k >= Ksb) k = Kw; goto Ins; -- cgit v1.2.3