diff --git a/src/com/jpexs/decompiler/flash/action/model/SetMemberActionItem.java b/src/com/jpexs/decompiler/flash/action/model/SetMemberActionItem.java index 39cccb1d2..d1c3cd3c0 100644 --- a/src/com/jpexs/decompiler/flash/action/model/SetMemberActionItem.java +++ b/src/com/jpexs/decompiler/flash/action/model/SetMemberActionItem.java @@ -1,136 +1,137 @@ -/* - * Copyright (C) 2010-2014 JPEXS - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.jpexs.decompiler.flash.action.model; - -import com.jpexs.decompiler.flash.SourceGeneratorLocalData; -import com.jpexs.decompiler.flash.action.Action; -import com.jpexs.decompiler.flash.action.parser.script.ActionSourceGenerator; -import com.jpexs.decompiler.flash.action.swf4.ActionPush; -import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; -import com.jpexs.decompiler.flash.action.swf5.ActionSetMember; -import com.jpexs.decompiler.flash.action.swf5.ActionStoreRegister; -import com.jpexs.decompiler.flash.helpers.GraphTextWriter; -import com.jpexs.decompiler.graph.CompilationException; -import com.jpexs.decompiler.graph.GraphPart; -import com.jpexs.decompiler.graph.GraphSourceItem; -import com.jpexs.decompiler.graph.GraphSourceItemPos; -import com.jpexs.decompiler.graph.GraphTargetItem; -import com.jpexs.decompiler.graph.SourceGenerator; -import com.jpexs.decompiler.graph.model.LocalData; -import java.util.ArrayList; -import java.util.List; - -public class SetMemberActionItem extends ActionItem implements SetTypeActionItem { - - public GraphTargetItem object; - public GraphTargetItem objectName; - //public GraphTargetItem value; - private int tempRegister = -1; - - @Override - public List getAllSubItems() { - List ret = new ArrayList<>(); - ret.add(object); - ret.add(value); - return ret; - } - - @Override - public GraphPart getFirstPart() { - return value.getFirstPart(); - } - - @Override - public void setValue(GraphTargetItem value) { - this.value = value; - } - - @Override - public int getTempRegister() { - return tempRegister; - } - - @Override - public void setTempRegister(int tempRegister) { - this.tempRegister = tempRegister; - } - - @Override - public GraphTargetItem getValue() { - return value; - } - - public SetMemberActionItem(GraphSourceItem instruction, GraphTargetItem object, GraphTargetItem objectName, GraphTargetItem value) { - super(instruction, PRECEDENCE_ASSIGMENT); - this.object = object; - this.objectName = objectName; - this.value = value; - } - - @Override - public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { - object.toString(writer, localData); - if ((objectName instanceof DirectValueActionItem) && (((DirectValueActionItem) objectName).value instanceof String) && !Action.isReservedWord((String) ((DirectValueActionItem) objectName).value)) { - writer.append("."); - stripQuotes(objectName, localData, writer); - } else { - writer.append("["); - objectName.toString(writer, localData); - writer.append("]"); - - } - writer.append(" = "); - return value.toString(writer, localData); - - } - - @Override - public GraphTargetItem getObject() { - return new GetMemberActionItem(src, object, objectName); - } - - @Override - public List getNeededSources() { - List ret = super.getNeededSources(); - ret.addAll(object.getNeededSources()); - ret.addAll(objectName.getNeededSources()); - ret.addAll(value.getNeededSources()); - return ret; - } - - @Override - public boolean hasSideEffect() { - return true; - } - - @Override - public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { - ActionSourceGenerator asGenerator = (ActionSourceGenerator) generator; - int tmpReg = asGenerator.getTempRegister(localData); - return toSourceMerge(localData, generator, object, objectName, value, new ActionStoreRegister(tmpReg), new ActionSetMember(), new ActionPush(new RegisterNumber(tmpReg))); - } - - @Override - public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { - return toSourceMerge(localData, generator, object, objectName, value, new ActionSetMember()); - } - - @Override - public boolean hasReturnValue() { - return false; - } -} +/* + * Copyright (C) 2010-2014 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.action.model; + +import com.jpexs.decompiler.flash.SourceGeneratorLocalData; +import com.jpexs.decompiler.flash.action.Action; +import com.jpexs.decompiler.flash.action.Deobfuscation; +import com.jpexs.decompiler.flash.action.parser.script.ActionSourceGenerator; +import com.jpexs.decompiler.flash.action.swf4.ActionPush; +import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; +import com.jpexs.decompiler.flash.action.swf5.ActionSetMember; +import com.jpexs.decompiler.flash.action.swf5.ActionStoreRegister; +import com.jpexs.decompiler.flash.helpers.GraphTextWriter; +import com.jpexs.decompiler.graph.CompilationException; +import com.jpexs.decompiler.graph.GraphPart; +import com.jpexs.decompiler.graph.GraphSourceItem; +import com.jpexs.decompiler.graph.GraphSourceItemPos; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.SourceGenerator; +import com.jpexs.decompiler.graph.model.LocalData; +import java.util.ArrayList; +import java.util.List; + +public class SetMemberActionItem extends ActionItem implements SetTypeActionItem { + + public GraphTargetItem object; + public GraphTargetItem objectName; + //public GraphTargetItem value; + private int tempRegister = -1; + + @Override + public List getAllSubItems() { + List ret = new ArrayList<>(); + ret.add(object); + ret.add(value); + return ret; + } + + @Override + public GraphPart getFirstPart() { + return value.getFirstPart(); + } + + @Override + public void setValue(GraphTargetItem value) { + this.value = value; + } + + @Override + public int getTempRegister() { + return tempRegister; + } + + @Override + public void setTempRegister(int tempRegister) { + this.tempRegister = tempRegister; + } + + @Override + public GraphTargetItem getValue() { + return value; + } + + public SetMemberActionItem(GraphSourceItem instruction, GraphTargetItem object, GraphTargetItem objectName, GraphTargetItem value) { + super(instruction, PRECEDENCE_ASSIGMENT); + this.object = object; + this.objectName = objectName; + this.value = value; + } + + @Override + public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { + object.toString(writer, localData); + + if((!(objectName instanceof DirectValueActionItem)) || (!((DirectValueActionItem)objectName).isString()) ||(!Deobfuscation.isValidName(((DirectValueActionItem)objectName).toStringNoQuotes(localData)))){ + writer.append("["); + objectName.toString(writer, localData); + writer.append("]"); + }else{ + writer.append("."); + stripQuotes(objectName, localData, writer); + } + writer.append(" = "); + return value.toString(writer, localData); + + } + + @Override + public GraphTargetItem getObject() { + return new GetMemberActionItem(src, object, objectName); + } + + @Override + public List getNeededSources() { + List ret = super.getNeededSources(); + ret.addAll(object.getNeededSources()); + ret.addAll(objectName.getNeededSources()); + ret.addAll(value.getNeededSources()); + return ret; + } + + @Override + public boolean hasSideEffect() { + return true; + } + + @Override + public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { + ActionSourceGenerator asGenerator = (ActionSourceGenerator) generator; + int tmpReg = asGenerator.getTempRegister(localData); + return toSourceMerge(localData, generator, object, objectName, value, new ActionStoreRegister(tmpReg), new ActionSetMember(), new ActionPush(new RegisterNumber(tmpReg))); + } + + @Override + public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { + return toSourceMerge(localData, generator, object, objectName, value, new ActionSetMember()); + } + + @Override + public boolean hasReturnValue() { + return false; + } +} diff --git a/src/com/jpexs/decompiler/flash/action/model/SetVariableActionItem.java b/src/com/jpexs/decompiler/flash/action/model/SetVariableActionItem.java index de1dc0876..3d201e5fd 100644 --- a/src/com/jpexs/decompiler/flash/action/model/SetVariableActionItem.java +++ b/src/com/jpexs/decompiler/flash/action/model/SetVariableActionItem.java @@ -1,134 +1,135 @@ -/* - * Copyright (C) 2010-2014 JPEXS - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.jpexs.decompiler.flash.action.model; - -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.ActionPush; -import com.jpexs.decompiler.flash.action.swf4.ActionSetVariable; -import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; -import com.jpexs.decompiler.flash.action.swf5.ActionStoreRegister; -import com.jpexs.decompiler.flash.helpers.GraphTextWriter; -import com.jpexs.decompiler.graph.CompilationException; -import com.jpexs.decompiler.graph.GraphPart; -import com.jpexs.decompiler.graph.GraphSourceItem; -import com.jpexs.decompiler.graph.GraphSourceItemPos; -import com.jpexs.decompiler.graph.GraphTargetItem; -import com.jpexs.decompiler.graph.SourceGenerator; -import com.jpexs.decompiler.graph.model.LocalData; -import java.util.List; -import java.util.Set; - -public class SetVariableActionItem extends ActionItem implements SetTypeActionItem { - - public GraphTargetItem name; - //public GraphTargetItem value; - private int tempRegister = -1; - - @Override - public GraphPart getFirstPart() { - return value.getFirstPart(); - } - - @Override - public void setValue(GraphTargetItem value) { - this.value = value; - } - - @Override - public int getTempRegister() { - return tempRegister; - } - - @Override - public void setTempRegister(int tempRegister) { - this.tempRegister = tempRegister; - } - - @Override - public GraphTargetItem getValue() { - return value; - } - - public SetVariableActionItem(GraphSourceItem instruction, GraphTargetItem name, GraphTargetItem value) { - super(instruction, PRECEDENCE_ASSIGMENT); - this.name = name; - this.value = value; - } - - @Override - public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { - if (name instanceof DirectValueActionItem || name instanceof VariableActionItem) { - stripQuotes(name, localData, writer); - writer.append(" = "); - return value.toString(writer, localData); - } else { - writer.append("set"); - writer.spaceBeforeCallParenthesies(2); - writer.append("("); - name.toString(writer, localData); - writer.append(","); - value.toString(writer, localData); - return writer.append(")"); - } - } - - @Override - public GraphTargetItem getObject() { - return new GetVariableActionItem(src, name); - } - - @Override - public List getNeededSources() { - List ret = super.getNeededSources(); - ret.addAll(name.getNeededSources()); - ret.addAll(value.getNeededSources()); - return ret; - } - - @Override - public boolean isCompileTime(Set dependencies) { - if (dependencies.contains(value)) { - return false; - } - dependencies.add(value); - return value.isCompileTime(dependencies); - } - - @Override - public boolean hasSideEffect() { - return true; - } - - @Override - public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { - ActionSourceGenerator asGenerator = (ActionSourceGenerator) generator; - int tmpReg = asGenerator.getTempRegister(localData); - return toSourceMerge(localData, generator, name, value, new ActionStoreRegister(tmpReg), new ActionSetVariable(), new ActionPush(new RegisterNumber(tmpReg))); - } - - @Override - public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { - return toSourceMerge(localData, generator, name, value, new ActionSetVariable()); - } - - @Override - public boolean hasReturnValue() { - return false; - } -} +/* + * Copyright (C) 2010-2014 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.action.model; + +import com.jpexs.decompiler.flash.SourceGeneratorLocalData; +import com.jpexs.decompiler.flash.action.Deobfuscation; +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.ActionPush; +import com.jpexs.decompiler.flash.action.swf4.ActionSetVariable; +import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; +import com.jpexs.decompiler.flash.action.swf5.ActionStoreRegister; +import com.jpexs.decompiler.flash.helpers.GraphTextWriter; +import com.jpexs.decompiler.graph.CompilationException; +import com.jpexs.decompiler.graph.GraphPart; +import com.jpexs.decompiler.graph.GraphSourceItem; +import com.jpexs.decompiler.graph.GraphSourceItemPos; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.SourceGenerator; +import com.jpexs.decompiler.graph.model.LocalData; +import java.util.List; +import java.util.Set; + +public class SetVariableActionItem extends ActionItem implements SetTypeActionItem { + + public GraphTargetItem name; + //public GraphTargetItem value; + private int tempRegister = -1; + + @Override + public GraphPart getFirstPart() { + return value.getFirstPart(); + } + + @Override + public void setValue(GraphTargetItem value) { + this.value = value; + } + + @Override + public int getTempRegister() { + return tempRegister; + } + + @Override + public void setTempRegister(int tempRegister) { + this.tempRegister = tempRegister; + } + + @Override + public GraphTargetItem getValue() { + return value; + } + + public SetVariableActionItem(GraphSourceItem instruction, GraphTargetItem name, GraphTargetItem value) { + super(instruction, PRECEDENCE_ASSIGMENT); + this.name = name; + this.value = value; + } + + @Override + public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { + if (((name instanceof DirectValueActionItem)&&((DirectValueActionItem)name).isString() && Deobfuscation.isValidName(((DirectValueActionItem)name).toStringNoQuotes(localData))) || name instanceof VariableActionItem) { + stripQuotes(name, localData, writer); + writer.append(" = "); + return value.toString(writer, localData); + } else { + writer.append("set"); + writer.spaceBeforeCallParenthesies(2); + writer.append("("); + name.toString(writer, localData); + writer.append(","); + value.toString(writer, localData); + return writer.append(")"); + } + } + + @Override + public GraphTargetItem getObject() { + return new GetVariableActionItem(src, name); + } + + @Override + public List getNeededSources() { + List ret = super.getNeededSources(); + ret.addAll(name.getNeededSources()); + ret.addAll(value.getNeededSources()); + return ret; + } + + @Override + public boolean isCompileTime(Set dependencies) { + if (dependencies.contains(value)) { + return false; + } + dependencies.add(value); + return value.isCompileTime(dependencies); + } + + @Override + public boolean hasSideEffect() { + return true; + } + + @Override + public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { + ActionSourceGenerator asGenerator = (ActionSourceGenerator) generator; + int tmpReg = asGenerator.getTempRegister(localData); + return toSourceMerge(localData, generator, name, value, new ActionStoreRegister(tmpReg), new ActionSetVariable(), new ActionPush(new RegisterNumber(tmpReg))); + } + + @Override + public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { + return toSourceMerge(localData, generator, name, value, new ActionSetVariable()); + } + + @Override + public boolean hasReturnValue() { + return false; + } +}