From db7cb5ab0ebf15f60e7b23e8edce95707fc451b1 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Sat, 27 Dec 2014 06:08:36 +0100 Subject: [PATCH] DynASM/ARM: Fix rollback for variant templates. --- dynasm/dasm_arm.lua | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dynasm/dasm_arm.lua b/dynasm/dasm_arm.lua index 3aa8dead..d5078f7e 100644 --- a/dynasm/dasm_arm.lua +++ b/dynasm/dasm_arm.lua @@ -929,13 +929,16 @@ map_op[".template__"] = function(params, template, nparams) -- A single opcode needs a maximum of 3 positions. if secpos+3 > maxsecpos then wflush() end local pos = wpos() - local apos, spos = #actargs, secpos + local lpos, apos, spos = #actlist, #actargs, secpos local ok, err for t in gmatch(template, "[^|]+") do ok, err = pcall(parse_template, params, t, nparams, pos) if ok then return end secpos = spos + actlist[lpos+1] = nil + actlist[lpos+2] = nil + actlist[lpos+3] = nil actargs[apos+1] = nil actargs[apos+2] = nil actargs[apos+3] = nil