diff --git a/CHANGELOG.md b/CHANGELOG.md index b8ce1bc56..711fd5dcb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ All notable changes to this project will be documented in this file. - AS1/2 - Allow globalfunc names as variable identifiers - AS1/2 - Registers in for..in clause, proper define - AS1/2 - loops and switch break/continue vs definefunction +- AS1/2 - callmethod on register instead of callfunction on var ## [14.5.2] - 2021-11-20 ### Fixed diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallFunctionActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallFunctionActionItem.java index 2baf88209..4881c2f55 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallFunctionActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallFunctionActionItem.java @@ -18,7 +18,12 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.IdentifiersDeobfuscation; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; +import com.jpexs.decompiler.flash.action.parser.script.ActionSourceGenerator; +import com.jpexs.decompiler.flash.action.parser.script.VariableActionItem; +import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; import com.jpexs.decompiler.flash.action.swf5.ActionCallFunction; +import com.jpexs.decompiler.flash.action.swf5.ActionCallMethod; +import com.jpexs.decompiler.flash.ecma.Undefined; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.flash.helpers.hilight.HighlightData; import com.jpexs.decompiler.graph.CompilationException; @@ -28,6 +33,7 @@ import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.LocalData; +import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.Set; @@ -160,6 +166,19 @@ public class CallFunctionActionItem extends ActionItem { @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { + + if (functionName instanceof VariableActionItem) { + VariableActionItem varItem = (VariableActionItem) functionName; + if (varItem.getBoxedValue() instanceof DirectValueActionItem) { + if (((DirectValueActionItem) varItem.getBoxedValue()).value instanceof RegisterNumber) { + return toSourceMerge(localData, generator, toSourceCall(localData, generator, arguments), varItem.getBoxedValue(), new DirectValueActionItem(Undefined.INSTANCE), new ActionCallMethod()); + } + } + String varName = varItem.getVariableName(); + ActionSourceGenerator asg = (ActionSourceGenerator) generator; + return toSourceMerge(localData, generator, toSourceCall(localData, generator, arguments), asg.pushConst(varName), new ActionCallFunction()); + } + return toSourceMerge(localData, generator, toSourceCall(localData, generator, arguments), functionName, new ActionCallFunction()); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/script/ActionScript2Parser.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/script/ActionScript2Parser.java index 5e1fa43a3..5d66faacb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/script/ActionScript2Parser.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/script/ActionScript2Parser.java @@ -2008,7 +2008,7 @@ public class ActionScript2Parser { && (Action.propertyNamesList.contains(((VariableActionItem) args.get(1)).getVariableName()))) { ret = new SetPropertyActionItem(null, null, args.get(0), Action.propertyNamesList.indexOf(((VariableActionItem) args.get(1)).getVariableName()), args.get(2)); } else { - ret = new CallFunctionActionItem(null, null, pushConst(var.getVariableName()), args); + ret = new CallFunctionActionItem(null, null, var, args); } } else if (ret instanceof EvalActionItem) { EvalActionItem ev = (EvalActionItem) ret;