Fixed: #2355 AS3 Simplify expressions feature colliding with some other features like hex values

This commit is contained in:
Jindra Petřík
2025-05-02 09:11:27 +02:00
parent d9c866c7d6
commit d6683839cf
7 changed files with 25 additions and 12 deletions

View File

@@ -113,4 +113,8 @@ public class DoubleValueAVM2Item extends NumberValueAVM2Item {
return true;
}
@Override
public long getAsLong() {
return (long)(double) value;
}
}

View File

@@ -213,5 +213,9 @@ public class IntegerValueAVM2Item extends NumberValueAVM2Item implements Integer
}
return true;
}
@Override
public long getAsLong() {
return (long) value;
}
}

View File

@@ -17,7 +17,9 @@
package com.jpexs.decompiler.flash.abc.avm2.model.operations;
import com.jpexs.decompiler.flash.abc.avm2.graph.AVM2GraphTargetDialect;
import com.jpexs.decompiler.flash.abc.avm2.model.DoubleValueAVM2Item;
import com.jpexs.decompiler.flash.abc.avm2.model.IntegerValueAVM2Item;
import com.jpexs.decompiler.flash.ecma.EcmaScript;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphTargetItem;
@@ -49,10 +51,10 @@ public abstract class BitwiseBinaryOpAVM2Item extends BinaryOpItem implements Co
@Override
protected void operandToString(GraphTargetItem operand, GraphTextWriter writer, LocalData localData) throws InterruptedException {
if (operand instanceof IntegerValueAVM2Item) {
Integer val = ((IntegerValueAVM2Item) operand).value;
if ((operand instanceof IntegerValueAVM2Item) || (operand instanceof DoubleValueAVM2Item)) {
long val = operand.getAsLong();
if (val > 9) {
String valHex = Integer.toHexString(val).toUpperCase();
String valHex = Long.toHexString(val).toUpperCase();
if (valHex.length() % 2 == 1) {
valHex = "0" + valHex;
}

View File

@@ -317,4 +317,9 @@ public class DirectValueActionItem extends ActionItem implements SimpleValue {
public String toString() {
return "" + getResult();
}
@Override
public long getAsLong() {
return (long) (double) EcmaScript.toNumberAs2(value);
}
}

View File

@@ -49,8 +49,9 @@ public abstract class BitwiseBinaryOpActionItem extends BinaryOpItem implements
@Override
protected void operandToString(GraphTargetItem operand, GraphTextWriter writer, LocalData localData) throws InterruptedException {
if ((operand instanceof DirectValueActionItem) && (((DirectValueActionItem) operand).value instanceof Long)) {
long val = (long) (Long) ((DirectValueActionItem) operand).value;
if ((operand instanceof DirectValueActionItem)
&& ((((DirectValueActionItem) operand).value instanceof Long) || (((DirectValueActionItem) operand).value instanceof Double))) {
long val = operand.getAsLong();
if (val > 9) {
String valHex = Long.toHexString(val).toUpperCase();
if (valHex.length() % 2 == 1) {

View File

@@ -18,6 +18,7 @@ package com.jpexs.decompiler.graph;
import com.jpexs.decompiler.flash.SourceGeneratorLocalData;
import com.jpexs.decompiler.flash.abc.avm2.model.ConvertAVM2Item;
import com.jpexs.decompiler.flash.abc.avm2.model.DoubleValueAVM2Item;
import com.jpexs.decompiler.flash.action.model.DirectValueActionItem;
import com.jpexs.decompiler.flash.configuration.Configuration;
import com.jpexs.decompiler.flash.ecma.EcmaScript;
@@ -1065,11 +1066,7 @@ public abstract class GraphTargetItem implements Serializable, Cloneable {
* @return This as long
*/
public long getAsLong() {
if (this instanceof DirectValueActionItem) {
DirectValueActionItem dvai = (DirectValueActionItem) this;
return (long) (double) EcmaScript.toNumberAs2(dvai.value);
}
//override as needed
return 0;
}