diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/AVM2Code.java b/trunk/src/com/jpexs/asdec/abc/avm2/AVM2Code.java index 62804eeca..4a8734d5d 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/AVM2Code.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/AVM2Code.java @@ -48,6 +48,7 @@ import com.jpexs.asdec.abc.avm2.treemodel.operations.PreIncrementTreeItem; import com.jpexs.asdec.abc.types.ABCException; import com.jpexs.asdec.abc.types.MethodBody; import com.jpexs.asdec.abc.types.MethodInfo; +import com.jpexs.asdec.abc.types.traits.TraitSlotConst; import com.jpexs.asdec.helpers.Helper; import com.jpexs.asdec.helpers.Highlighting; @@ -1871,7 +1872,16 @@ public HashMap getLocalRegNamesFromDebug(ABC abc){ String sub = ""; int level = 0; for (int t = 0; t < body.traits.traits.length; t++) { - sub += body.traits.traits[t].convert(constants, method_info,abc) + ";\r\n"; + //Skip traits with same name as local registers + if( + (body.traits.traits[t] instanceof TraitSlotConst) + &&(((TraitSlotConst)body.traits.traits[t]).isVar()) + &&(localRegNames.containsValue(((TraitSlotConst)body.traits.traits[t]).getName(constants)))) + { + continue; + }else{ + sub += body.traits.traits[t].convert(constants, method_info,abc) + ";\r\n"; + } } int regCount=getRegisterCount(); int paramCount=0; diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/instructions/other/SetSlotIns.java b/trunk/src/com/jpexs/asdec/abc/avm2/instructions/other/SetSlotIns.java index 4292d8133..d1200a85a 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/instructions/other/SetSlotIns.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/instructions/other/SetSlotIns.java @@ -23,6 +23,7 @@ import com.jpexs.asdec.abc.avm2.ConstantPool; import com.jpexs.asdec.abc.avm2.instructions.AVM2Instruction; import com.jpexs.asdec.abc.avm2.instructions.InstructionDefinition; import com.jpexs.asdec.abc.avm2.instructions.SetTypeIns; +import com.jpexs.asdec.abc.avm2.treemodel.NewActivationTreeItem; import com.jpexs.asdec.abc.avm2.treemodel.SetSlotTreeItem; import com.jpexs.asdec.abc.avm2.treemodel.TreeItem; import com.jpexs.asdec.abc.avm2.treemodel.clauses.ExceptionTreeItem; @@ -59,6 +60,14 @@ public class SetSlotIns extends InstructionDefinition implements SetTypeIns { } } + + //if new activation sets params of the function + if(obj instanceof NewActivationTreeItem){ + if(localRegNames.containsValue(slotname.getName(constants))){ + return; + } + } + output.add(new SetSlotTreeItem(ins, obj, slotname, value)); } diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/CallTreeItem.java b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/CallTreeItem.java index 700560c6d..58fe8b437 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/CallTreeItem.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/treemodel/CallTreeItem.java @@ -44,7 +44,16 @@ public class CallTreeItem extends TreeItem { } args = args + arguments.get(a).toString(constants,localRegNames); } - return receiver.toString(constants,localRegNames) + hilight(".") + function.toString(constants,localRegNames) + hilight("(") + args + hilight(")"); + String recPart=receiver.toString(constants,localRegNames) + hilight("."); + if(receiver instanceof NewActivationTreeItem) + { + recPart=""; + } + if(receiver instanceof ThisTreeItem) + { + recPart=""; + } + return recPart+ function.toString(constants,localRegNames) + hilight("(") + args + hilight(")"); } diff --git a/trunk/src/com/jpexs/asdec/abc/types/traits/TraitSlotConst.java b/trunk/src/com/jpexs/asdec/abc/types/traits/TraitSlotConst.java index 01ef9a9bf..f955c8364 100644 --- a/trunk/src/com/jpexs/asdec/abc/types/traits/TraitSlotConst.java +++ b/trunk/src/com/jpexs/asdec/abc/types/traits/TraitSlotConst.java @@ -63,9 +63,14 @@ public class TraitSlotConst extends Trait { if (kindType == TRAIT_CONST) { slotconst = "const"; } - return slotconst + " " + constants.constant_multiname[name_index].getName(constants) + ":" + typeStr + valueStr; + return slotconst + " " + getName(constants) + ":" + typeStr + valueStr; } + public String getName(ConstantPool constants) + { + return constants.constant_multiname[name_index].getName(constants); + } + @Override public String convert(ConstantPool constants, MethodInfo[] methodInfo,ABC abc, boolean isStatic) { String modifier = getModifiers(constants, isStatic) + " ";