This commit is contained in:
2015-09-24 22:54:55 +02:00
parent f2ba519cf6
commit d5029139bb
7 changed files with 46 additions and 28 deletions
@@ -52,7 +52,9 @@ import com.jpexs.decompiler.flash.action.swf4.RegisterNumber;
import com.jpexs.decompiler.flash.action.swf5.ActionConstantPool;
import com.jpexs.decompiler.flash.action.swf5.ActionDefineFunction;
import com.jpexs.decompiler.flash.action.swf5.ActionEquals2;
import com.jpexs.decompiler.flash.action.swf5.ActionWith;
import com.jpexs.decompiler.flash.action.swf7.ActionDefineFunction2;
import com.jpexs.decompiler.flash.action.swf7.ActionTry;
import com.jpexs.decompiler.flash.configuration.Configuration;
import com.jpexs.decompiler.flash.ecma.Null;
import com.jpexs.decompiler.flash.ecma.Undefined;
@@ -976,9 +978,11 @@ public abstract class Action implements GraphSourceItem {
List<GraphTargetItem> out;
try {
HashMap<Integer, String> regNames = cnt.getRegNames();
for (Map.Entry<Integer, String> e : registerNames.entrySet()) {
if (!regNames.containsKey(e.getKey())) {
regNames.put(e.getKey(), e.getValue());
if (action instanceof ActionWith || action instanceof ActionTry) {
for (Map.Entry<Integer, String> e : registerNames.entrySet()) {
if (!regNames.containsKey(e.getKey())) {
regNames.put(e.getKey(), e.getValue());
}
}
}
out = ActionGraph.translateViaGraph(regNames, variables2, functions, actions.subList(adr2ip(actions, endAddr), adr2ip(actions, endAddr + size)), version, staticOperation, path + (cntName == null ? "" : "/" + cntName));
@@ -52,12 +52,12 @@ public class AsciiToCharActionItem extends ActionItem {
@Override
public Object getResult() {
Double res = EcmaScript.toNumber(value.getResult());
if (Double.isNaN(res) || Double.compare(res, 0) == 0) {
int res = (int) (double) (EcmaScript.toNumber(value.getResult()));
if (res == 0) {
return "";
}
return ((Character) (char) res.intValue()).toString();
return ((Character) (char) res).toString();
}
@Override
@@ -157,7 +157,7 @@ public class DirectValueActionItem extends ActionItem implements SimpleValue {
@Override
public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) {
if (value instanceof String) {
return writer.append("\"").append(Helper.escapeActionScriptString(EcmaScript.toString(value))).append("\"");
return writer.append("\"").append(Helper.escapeActionScriptString((String) value)).append("\"");
}
if (value instanceof ConstantIndex) {
return writer.append("\"").append(Helper.escapeActionScriptString(this.constants.get(((ConstantIndex) value).index))).append("\"");
@@ -165,7 +165,7 @@ public class DirectValueActionItem extends ActionItem implements SimpleValue {
if (value instanceof RegisterNumber) {
return writer.append(((RegisterNumber) value).translate());
}
return writer.append(EcmaScript.toString(value));
return writer.append(EcmaScript.toString(value, true));
}
@Override
@@ -52,12 +52,12 @@ public class MBAsciiToCharActionItem extends ActionItem {
@Override
public Object getResult() {
Double res = EcmaScript.toNumber(value.getResult());
if (Double.isNaN(res) || Double.compare(res, 0) == 0) {
int res = (int) (double) (EcmaScript.toNumber(value.getResult()));
if (res == 0) {
return "";
}
return ((Character) (char) res.intValue()).toString();
return ((Character) (char) res).toString();
}
@Override
@@ -19,6 +19,8 @@ package com.jpexs.decompiler.flash.action.swf5;
import com.jpexs.decompiler.flash.BaseLocalData;
import com.jpexs.decompiler.flash.action.Action;
import com.jpexs.decompiler.flash.action.model.DefineLocalActionItem;
import com.jpexs.decompiler.flash.action.model.DirectValueActionItem;
import com.jpexs.decompiler.flash.ecma.EcmaScript;
import com.jpexs.decompiler.graph.GraphTargetItem;
import com.jpexs.decompiler.graph.TranslateStack;
import com.jpexs.decompiler.graph.model.LocalData;
@@ -40,7 +42,13 @@ public class ActionDefineLocal extends Action {
public void translate(TranslateStack stack, List<GraphTargetItem> output, HashMap<Integer, String> regNames, HashMap<String, GraphTargetItem> variables, HashMap<String, GraphTargetItem> functions, int staticOperation, String path) {
GraphTargetItem value = stack.pop();
GraphTargetItem name = stack.pop();
variables.put(name.toStringNoQuotes(LocalData.empty), value);
String nameStr;
if (name instanceof DirectValueActionItem) {
nameStr = name.toStringNoQuotes(LocalData.empty);
} else {
nameStr = EcmaScript.toString(name.getResult());
}
variables.put(nameStr, value);
output.add(new DefineLocalActionItem(this, name, value));
}