From e17d839714c4c1d6509720879ff266d7c9e6fbf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=F8=EDk?= Date: Sun, 30 Dec 2012 13:56:44 +0100 Subject: [PATCH] AS3: set_local..get_local..kill fix --- trunk/src/com/jpexs/asdec/abc/avm2/AVM2Code.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/AVM2Code.java b/trunk/src/com/jpexs/asdec/abc/avm2/AVM2Code.java index c5cd26265..df456b95c 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/AVM2Code.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/AVM2Code.java @@ -1444,6 +1444,20 @@ public class AVM2Code { } else { throw new ConvertException("Unknown pattern: back jump ", ip); } + } else if ((ins.definition instanceof SetLocalTypeIns)&&(ip+1<=end)&&(isKilled(((SetLocalTypeIns)ins.definition).getRegisterId(ins), ip, end))){ //set_local_x,get_local_x..kill x + + AVM2Instruction insAfter=code.get(ip+1); + if((insAfter.definition instanceof GetLocalTypeIns)&&(((GetLocalTypeIns)insAfter.definition).getRegisterId(insAfter)==((SetLocalTypeIns)ins.definition).getRegisterId(ins))){ + TreeItem before=stack.peek(); + ins.definition.translate(isStatic, classIndex, localRegs, stack, scopeStack, constants, ins, method_info, output, body, abc, localRegNames); + stack.push(before); + ip+=2; + continue iploop; + }else{ + ins.definition.translate(isStatic, classIndex, localRegs, stack, scopeStack, constants, ins, method_info, output, body, abc, localRegNames); + ip++; + continue iploop; + } } else if (ins.definition instanceof DupIns) { int nextPos; do {