mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-06-23 02:35:33 +00:00
Fixed #1888 Casts in binary operations, not casting any type
This commit is contained in:
@@ -30,6 +30,7 @@ import com.jpexs.decompiler.graph.GraphTargetVisitorInterface;
|
||||
import com.jpexs.decompiler.graph.SourceGenerator;
|
||||
import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.LocalData;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
@@ -101,6 +102,9 @@ public class CoerceAVM2Item extends AVM2Item {
|
||||
|
||||
@Override
|
||||
public GraphTargetItem returnType() {
|
||||
if (typeObj instanceof UnboundedTypeItem) {
|
||||
return typeObj;
|
||||
}
|
||||
return new TypeItem(typeObj.toString());
|
||||
}
|
||||
|
||||
|
||||
@@ -59,15 +59,20 @@ public class ConvertAVM2Item extends AVM2Item {
|
||||
}*/
|
||||
switch (type.toString()) {
|
||||
case "Boolean":
|
||||
displayConvert = !valueReturnType.equals(TypeItem.BOOLEAN);
|
||||
displayConvert = !valueReturnType.equals(TypeItem.BOOLEAN) &&
|
||||
!valueReturnType.equals(TypeItem.UNBOUNDED);
|
||||
break;
|
||||
case "Number":
|
||||
case "int":
|
||||
case "uint":
|
||||
displayConvert = !valueReturnType.equals(TypeItem.INT) && !valueReturnType.equals(TypeItem.NUMBER) && !valueReturnType.equals(TypeItem.UINT);
|
||||
displayConvert = !valueReturnType.equals(TypeItem.INT) &&
|
||||
!valueReturnType.equals(TypeItem.NUMBER) &&
|
||||
!valueReturnType.equals(TypeItem.UINT) &&
|
||||
!valueReturnType.equals(TypeItem.UNBOUNDED);
|
||||
break;
|
||||
case "String":
|
||||
displayConvert = !valueReturnType.equals(TypeItem.STRING);
|
||||
displayConvert = !valueReturnType.equals(TypeItem.STRING) &&
|
||||
!valueReturnType.equals(TypeItem.UNBOUNDED);
|
||||
break;
|
||||
}
|
||||
if (displayConvert) {
|
||||
|
||||
@@ -31,7 +31,7 @@ import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.BinaryOpItem;
|
||||
import com.jpexs.decompiler.graph.model.CompoundableBinaryOp;
|
||||
import com.jpexs.decompiler.graph.model.LocalData;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -118,7 +118,7 @@ public class AddAVM2Item extends BinaryOpItem implements CompoundableBinaryOp {
|
||||
}
|
||||
|
||||
|
||||
return new UnboundedTypeItem();
|
||||
return TypeItem.NUMBER;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -26,7 +26,7 @@ import com.jpexs.decompiler.graph.SourceGenerator;
|
||||
import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.BinaryOpItem;
|
||||
import com.jpexs.decompiler.graph.model.CompoundableBinaryOp;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -55,7 +55,7 @@ public class BitAndAVM2Item extends BinaryOpItem implements CompoundableBinaryOp
|
||||
@Override
|
||||
public GraphTargetItem returnType() {
|
||||
return TypeItem.INT; //?
|
||||
//return new UnboundedTypeItem();
|
||||
//return TypeItem.UNBOUNDED;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -25,7 +25,7 @@ import com.jpexs.decompiler.graph.GraphTargetItem;
|
||||
import com.jpexs.decompiler.graph.SourceGenerator;
|
||||
import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.UnaryOpItem;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -53,6 +53,6 @@ public class BitNotAVM2Item extends UnaryOpItem {
|
||||
@Override
|
||||
public GraphTargetItem returnType() {
|
||||
return TypeItem.INT; //?
|
||||
//return new UnboundedTypeItem();
|
||||
//return TypeItem.UNBOUNDED;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ import com.jpexs.decompiler.graph.SourceGenerator;
|
||||
import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.BinaryOpItem;
|
||||
import com.jpexs.decompiler.graph.model.CompoundableBinaryOp;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -55,7 +55,7 @@ public class BitOrAVM2Item extends BinaryOpItem implements CompoundableBinaryOp
|
||||
@Override
|
||||
public GraphTargetItem returnType() {
|
||||
return TypeItem.INT; //?
|
||||
//return new UnboundedTypeItem();
|
||||
//return TypeItem.UNBOUNDED;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -26,7 +26,7 @@ import com.jpexs.decompiler.graph.SourceGenerator;
|
||||
import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.BinaryOpItem;
|
||||
import com.jpexs.decompiler.graph.model.CompoundableBinaryOp;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -55,7 +55,7 @@ public class BitXorAVM2Item extends BinaryOpItem implements CompoundableBinaryOp
|
||||
@Override
|
||||
public GraphTargetItem returnType() {
|
||||
return TypeItem.INT; //?
|
||||
//return new UnboundedTypeItem();
|
||||
//return TypeItem.UNBOUNDED;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -28,7 +28,7 @@ import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.BinaryOpItem;
|
||||
import com.jpexs.decompiler.graph.model.CompoundableBinaryOp;
|
||||
import com.jpexs.decompiler.graph.model.LocalData;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -85,7 +85,7 @@ public class DivideAVM2Item extends BinaryOpItem implements CompoundableBinaryOp
|
||||
@Override
|
||||
public GraphTargetItem returnType() {
|
||||
return TypeItem.NUMBER;
|
||||
//return new UnboundedTypeItem();
|
||||
//return TypeItem.UNBOUNDED;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -26,7 +26,7 @@ import com.jpexs.decompiler.graph.SourceGenerator;
|
||||
import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.BinaryOpItem;
|
||||
import com.jpexs.decompiler.graph.model.CompoundableBinaryOp;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -55,7 +55,7 @@ public class LShiftAVM2Item extends BinaryOpItem implements CompoundableBinaryOp
|
||||
@Override
|
||||
public GraphTargetItem returnType() {
|
||||
return TypeItem.INT; //?
|
||||
//return new UnboundedTypeItem();
|
||||
//return TypeItem.UNBOUNDED;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -28,7 +28,7 @@ import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.BinaryOpItem;
|
||||
import com.jpexs.decompiler.graph.model.CompoundableBinaryOp;
|
||||
import com.jpexs.decompiler.graph.model.LocalData;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -83,7 +83,7 @@ public class ModuloAVM2Item extends BinaryOpItem implements CompoundableBinaryOp
|
||||
@Override
|
||||
public GraphTargetItem returnType() {
|
||||
return TypeItem.INT; //?
|
||||
//return new UnboundedTypeItem();
|
||||
//return TypeItem.UNBOUNDED;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -28,7 +28,7 @@ import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.BinaryOpItem;
|
||||
import com.jpexs.decompiler.graph.model.CompoundableBinaryOp;
|
||||
import com.jpexs.decompiler.graph.model.LocalData;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -88,7 +88,7 @@ public class MultiplyAVM2Item extends BinaryOpItem implements CompoundableBinary
|
||||
return TypeItem.NUMBER;
|
||||
}
|
||||
|
||||
return new UnboundedTypeItem();
|
||||
return TypeItem.NUMBER;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -23,8 +23,9 @@ import com.jpexs.decompiler.graph.CompilationException;
|
||||
import com.jpexs.decompiler.graph.GraphSourceItem;
|
||||
import com.jpexs.decompiler.graph.GraphTargetItem;
|
||||
import com.jpexs.decompiler.graph.SourceGenerator;
|
||||
import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.UnaryOpItem;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -51,6 +52,6 @@ public class NegAVM2Item extends UnaryOpItem {
|
||||
|
||||
@Override
|
||||
public GraphTargetItem returnType() {
|
||||
return new UnboundedTypeItem();
|
||||
return TypeItem.UNBOUNDED;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ import com.jpexs.decompiler.graph.SourceGenerator;
|
||||
import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.BinaryOpItem;
|
||||
import com.jpexs.decompiler.graph.model.CompoundableBinaryOp;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -55,7 +55,7 @@ public class RShiftAVM2Item extends BinaryOpItem implements CompoundableBinaryOp
|
||||
@Override
|
||||
public GraphTargetItem returnType() {
|
||||
return TypeItem.INT; //?
|
||||
//return new UnboundedTypeItem();
|
||||
//return TypeItem.UNBOUNDED;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -29,7 +29,7 @@ import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.BinaryOpItem;
|
||||
import com.jpexs.decompiler.graph.model.CompoundableBinaryOp;
|
||||
import com.jpexs.decompiler.graph.model.LocalData;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -105,7 +105,7 @@ public class SubtractAVM2Item extends BinaryOpItem implements CompoundableBinary
|
||||
return TypeItem.NUMBER;
|
||||
}
|
||||
|
||||
return new UnboundedTypeItem();
|
||||
return TypeItem.NUMBER;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -27,7 +27,7 @@ import com.jpexs.decompiler.graph.GraphTargetItem;
|
||||
import com.jpexs.decompiler.graph.SourceGenerator;
|
||||
import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.UnaryOpItem;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -83,6 +83,6 @@ public class TypeOfAVM2Item extends UnaryOpItem {
|
||||
@Override
|
||||
public GraphTargetItem returnType() {
|
||||
return TypeItem.STRING;
|
||||
//return new UnboundedTypeItem();
|
||||
//return TypeItem.UNBOUNDED;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ import com.jpexs.decompiler.graph.SourceGenerator;
|
||||
import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.BinaryOpItem;
|
||||
import com.jpexs.decompiler.graph.model.CompoundableBinaryOp;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -55,7 +55,7 @@ public class URShiftAVM2Item extends BinaryOpItem implements CompoundableBinaryO
|
||||
@Override
|
||||
public GraphTargetItem returnType() {
|
||||
return TypeItem.INT; //?
|
||||
//return new UnboundedTypeItem();
|
||||
//return TypeItem.UNBOUNDED;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -101,7 +101,7 @@ import com.jpexs.decompiler.graph.model.PushItem;
|
||||
import com.jpexs.decompiler.graph.model.SwitchItem;
|
||||
import com.jpexs.decompiler.graph.model.TernarOpItem;
|
||||
import com.jpexs.decompiler.graph.model.TrueItem;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
|
||||
import com.jpexs.decompiler.graph.model.WhileItem;
|
||||
import com.jpexs.helpers.Reference;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
@@ -1523,7 +1523,7 @@ public class AVM2SourceGenerator implements SourceGenerator {
|
||||
}
|
||||
|
||||
public int typeName(SourceGeneratorLocalData localData, GraphTargetItem type) throws CompilationException {
|
||||
if (type instanceof UnboundedTypeItem) {
|
||||
if (type.equals(TypeItem.UNBOUNDED)) {
|
||||
return 0;
|
||||
}
|
||||
if (("" + type).equals("*")) {
|
||||
|
||||
@@ -113,7 +113,7 @@ import com.jpexs.decompiler.graph.model.PushItem;
|
||||
import com.jpexs.decompiler.graph.model.SwitchItem;
|
||||
import com.jpexs.decompiler.graph.model.TernarOpItem;
|
||||
import com.jpexs.decompiler.graph.model.TrueItem;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
|
||||
import com.jpexs.decompiler.graph.model.WhileItem;
|
||||
import com.jpexs.helpers.Helper;
|
||||
import com.jpexs.helpers.Reference;
|
||||
@@ -174,7 +174,7 @@ public class ActionScript3Parser {
|
||||
private GraphTargetItem type(List<List<NamespaceItem>> allOpenedNamespaces, TypeItem thisType, NamespaceItem pkg, Reference<Boolean> needsActivation, List<DottedChain> importedClasses, List<NamespaceItem> openedNamespaces, List<AssignableAVM2Item> variables) throws IOException, AVM2ParseException, InterruptedException {
|
||||
ParsedSymbol s = lex();
|
||||
if (s.type == SymbolType.MULTIPLY) {
|
||||
return new UnboundedTypeItem();
|
||||
return TypeItem.UNBOUNDED;
|
||||
} else if (s.type == SymbolType.VOID) {
|
||||
return new TypeItem(DottedChain.VOID);
|
||||
} else {
|
||||
@@ -531,7 +531,7 @@ public class ActionScript3Parser {
|
||||
paramTypes.add(currentType = type(allOpenedNamespaces, thisType, pkg, needsActivation, importedClasses, openedNamespaces, variables));
|
||||
s = lex();
|
||||
} else {
|
||||
paramTypes.add(currentType = new UnboundedTypeItem());
|
||||
paramTypes.add(currentType = TypeItem.UNBOUNDED);
|
||||
}
|
||||
if (s.type == SymbolType.ASSIGN) {
|
||||
GraphTargetItem currentValue = expression(allOpenedNamespaces, thisType, pkg, new Reference<>(false), importedClasses, openedNamespaces, null, isMethod, isMethod, isMethod, variables, false);
|
||||
@@ -554,7 +554,7 @@ public class ActionScript3Parser {
|
||||
if (s.type == SymbolType.COLON) {
|
||||
retType = type(allOpenedNamespaces, thisType, pkg, needsActivation, importedClasses, openedNamespaces, variables);
|
||||
} else {
|
||||
retType = new UnboundedTypeItem();
|
||||
retType = TypeItem.UNBOUNDED;
|
||||
lexer.pushback(s);
|
||||
}
|
||||
List<GraphTargetItem> body = null;
|
||||
@@ -1492,7 +1492,7 @@ public class ActionScript3Parser {
|
||||
type = type(allOpenedNamespaces, thisType, pkg, needsActivation, importedClasses, openedNamespaces, variables);
|
||||
s = lex();
|
||||
} else {
|
||||
type = new UnboundedTypeItem();
|
||||
type = TypeItem.UNBOUNDED;
|
||||
}
|
||||
|
||||
if (s.type == SymbolType.ASSIGN) {
|
||||
|
||||
@@ -22,9 +22,10 @@ import com.jpexs.decompiler.graph.Block;
|
||||
import com.jpexs.decompiler.graph.DottedChain;
|
||||
import com.jpexs.decompiler.graph.GraphTargetItem;
|
||||
import com.jpexs.decompiler.graph.GraphTargetVisitorInterface;
|
||||
import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.ContinueItem;
|
||||
import com.jpexs.decompiler.graph.model.LocalData;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -125,6 +126,6 @@ public class ClassAVM2Item extends AVM2Item implements Block {
|
||||
|
||||
@Override
|
||||
public GraphTargetItem returnType() {
|
||||
return new UnboundedTypeItem(); //FIXME
|
||||
return TypeItem.UNBOUNDED; //FIXME
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,8 +20,9 @@ import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item;
|
||||
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
|
||||
import com.jpexs.decompiler.graph.DottedChain;
|
||||
import com.jpexs.decompiler.graph.GraphTargetItem;
|
||||
import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.LocalData;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -76,6 +77,6 @@ public class InterfaceAVM2Item extends AVM2Item {
|
||||
|
||||
@Override
|
||||
public GraphTargetItem returnType() {
|
||||
return new UnboundedTypeItem(); //FIXME
|
||||
return TypeItem.UNBOUNDED; //FIXME
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ import com.jpexs.decompiler.graph.GraphTargetItem;
|
||||
import com.jpexs.decompiler.graph.SourceGenerator;
|
||||
import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.LocalData;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
|
||||
import com.jpexs.helpers.Reference;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
@@ -199,30 +199,26 @@ public class NameAVM2Item extends AssignableAVM2Item {
|
||||
ttype = ((UnresolvedAVM2Item) ttype).resolved;
|
||||
}
|
||||
AVM2Instruction ins;
|
||||
if (ttype instanceof UnboundedTypeItem) {
|
||||
ins = ins(AVM2Instructions.CoerceA);
|
||||
} else {
|
||||
switch (ttype.toString()) {
|
||||
case "int":
|
||||
ins = ins(AVM2Instructions.ConvertI);
|
||||
break;
|
||||
case "*":
|
||||
ins = ins(AVM2Instructions.CoerceA);
|
||||
break;
|
||||
case "String":
|
||||
ins = ins(AVM2Instructions.CoerceS);
|
||||
break;
|
||||
case "Boolean":
|
||||
ins = ins(AVM2Instructions.ConvertB);
|
||||
break;
|
||||
case "uint":
|
||||
ins = ins(AVM2Instructions.ConvertU);
|
||||
break;
|
||||
default:
|
||||
int type_index = AVM2SourceGenerator.resolveType(localData, ttype, ((AVM2SourceGenerator) generator).abcIndex);
|
||||
ins = ins(AVM2Instructions.Coerce, type_index);
|
||||
break;
|
||||
}
|
||||
switch (ttype.toString()) {
|
||||
case "int":
|
||||
ins = ins(AVM2Instructions.ConvertI);
|
||||
break;
|
||||
case "*":
|
||||
ins = ins(AVM2Instructions.CoerceA);
|
||||
break;
|
||||
case "String":
|
||||
ins = ins(AVM2Instructions.CoerceS);
|
||||
break;
|
||||
case "Boolean":
|
||||
ins = ins(AVM2Instructions.ConvertB);
|
||||
break;
|
||||
case "uint":
|
||||
ins = ins(AVM2Instructions.ConvertU);
|
||||
break;
|
||||
default:
|
||||
int type_index = AVM2SourceGenerator.resolveType(localData, ttype, ((AVM2SourceGenerator) generator).abcIndex);
|
||||
ins = ins(AVM2Instructions.Coerce, type_index);
|
||||
break;
|
||||
}
|
||||
return ins;
|
||||
}
|
||||
|
||||
@@ -20,8 +20,9 @@ import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item;
|
||||
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
|
||||
import com.jpexs.decompiler.graph.DottedChain;
|
||||
import com.jpexs.decompiler.graph.GraphTargetItem;
|
||||
import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.LocalData;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -51,7 +52,7 @@ public class PackageAVM2Item extends AVM2Item {
|
||||
|
||||
@Override
|
||||
public GraphTargetItem returnType() {
|
||||
return new UnboundedTypeItem(); //FIXME
|
||||
return TypeItem.UNBOUNDED; //FIXME
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -25,8 +25,8 @@ import com.jpexs.decompiler.graph.CompilationException;
|
||||
import com.jpexs.decompiler.graph.GraphSourceItem;
|
||||
import com.jpexs.decompiler.graph.GraphTargetItem;
|
||||
import com.jpexs.decompiler.graph.SourceGenerator;
|
||||
import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.LocalData;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -97,6 +97,6 @@ public abstract class ActionItem extends GraphTargetItem implements Serializable
|
||||
|
||||
@Override
|
||||
public GraphTargetItem returnType() {
|
||||
return new UnboundedTypeItem();
|
||||
return TypeItem.UNBOUNDED;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,8 +23,8 @@ import com.jpexs.decompiler.graph.CompilationException;
|
||||
import com.jpexs.decompiler.graph.GraphSourceItem;
|
||||
import com.jpexs.decompiler.graph.GraphTargetItem;
|
||||
import com.jpexs.decompiler.graph.SourceGenerator;
|
||||
import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.BinaryOpItem;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -54,7 +54,7 @@ public class AndActionItem extends BinaryOpItem {
|
||||
|
||||
@Override
|
||||
public GraphTargetItem returnType() {
|
||||
return new UnboundedTypeItem();
|
||||
return TypeItem.UNBOUNDED;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -23,9 +23,9 @@ import com.jpexs.decompiler.graph.CompilationException;
|
||||
import com.jpexs.decompiler.graph.GraphSourceItem;
|
||||
import com.jpexs.decompiler.graph.GraphTargetItem;
|
||||
import com.jpexs.decompiler.graph.SourceGenerator;
|
||||
import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.BinaryOpItem;
|
||||
import com.jpexs.decompiler.graph.model.CompoundableBinaryOp;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -55,7 +55,7 @@ public class BitAndActionItem extends BinaryOpItem implements CompoundableBinary
|
||||
|
||||
@Override
|
||||
public GraphTargetItem returnType() {
|
||||
return new UnboundedTypeItem();
|
||||
return TypeItem.UNBOUNDED;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -23,9 +23,9 @@ import com.jpexs.decompiler.graph.CompilationException;
|
||||
import com.jpexs.decompiler.graph.GraphSourceItem;
|
||||
import com.jpexs.decompiler.graph.GraphTargetItem;
|
||||
import com.jpexs.decompiler.graph.SourceGenerator;
|
||||
import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.BinaryOpItem;
|
||||
import com.jpexs.decompiler.graph.model.CompoundableBinaryOp;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -55,7 +55,7 @@ public class BitOrActionItem extends BinaryOpItem implements CompoundableBinaryO
|
||||
|
||||
@Override
|
||||
public GraphTargetItem returnType() {
|
||||
return new UnboundedTypeItem();
|
||||
return TypeItem.UNBOUNDED;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -25,10 +25,10 @@ import com.jpexs.decompiler.graph.CompilationException;
|
||||
import com.jpexs.decompiler.graph.GraphSourceItem;
|
||||
import com.jpexs.decompiler.graph.GraphTargetItem;
|
||||
import com.jpexs.decompiler.graph.SourceGenerator;
|
||||
import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.BinaryOpItem;
|
||||
import com.jpexs.decompiler.graph.model.CompoundableBinaryOp;
|
||||
import com.jpexs.decompiler.graph.model.LocalData;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -75,7 +75,7 @@ public class BitXorActionItem extends BinaryOpItem implements CompoundableBinary
|
||||
|
||||
@Override
|
||||
public GraphTargetItem returnType() {
|
||||
return new UnboundedTypeItem();
|
||||
return TypeItem.UNBOUNDED;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -22,9 +22,9 @@ import com.jpexs.decompiler.graph.CompilationException;
|
||||
import com.jpexs.decompiler.graph.GraphSourceItem;
|
||||
import com.jpexs.decompiler.graph.GraphTargetItem;
|
||||
import com.jpexs.decompiler.graph.SourceGenerator;
|
||||
import com.jpexs.decompiler.graph.TypeItem;
|
||||
import com.jpexs.decompiler.graph.model.BinaryOpItem;
|
||||
import com.jpexs.decompiler.graph.model.CompoundableBinaryOp;
|
||||
import com.jpexs.decompiler.graph.model.UnboundedTypeItem;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -59,7 +59,7 @@ public class DivideActionItem extends BinaryOpItem implements CompoundableBinary
|
||||
|
||||
@Override
|
||||
public GraphTargetItem returnType() {
|
||||
return new UnboundedTypeItem();
|
||||
return TypeItem.UNBOUNDED;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -31,6 +31,8 @@ import java.util.List;
|
||||
public class DottedChain implements Serializable, Comparable<DottedChain> {
|
||||
|
||||
public static final DottedChain EMPTY = new DottedChain(true);
|
||||
|
||||
public static final DottedChain UNBOUNDED = new DottedChain(new String[]{"*"});
|
||||
|
||||
public static final DottedChain TOPLEVEL = new DottedChain(new String[]{});
|
||||
|
||||
|
||||
@@ -332,13 +332,13 @@ public abstract class GraphTargetItem implements Serializable, Cloneable {
|
||||
|
||||
public GraphTextWriter appendTry(GraphTextWriter writer, LocalData localData, String implicitCoerce) throws InterruptedException {
|
||||
GraphTargetItem t = this;
|
||||
if (!implicitCoerce.isEmpty()) { //if implicit coerce equals explicit
|
||||
/*if (!implicitCoerce.isEmpty()) { //if implicit coerce equals explicit
|
||||
if (t instanceof ConvertAVM2Item) {
|
||||
if (implicitCoerce.equals((((ConvertAVM2Item) t).type.toString()))) {
|
||||
t = t.value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
if (!implicitCoerce.isEmpty() && Configuration.simplifyExpressions.get()) {
|
||||
t = t.simplify(implicitCoerce);
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ public class TypeFunctionItem extends GraphTargetItem {
|
||||
|
||||
public static TypeFunctionItem ARRAY = new TypeFunctionItem("Array");
|
||||
|
||||
public static UnboundedTypeItem UNBOUNDED = new UnboundedTypeItem();
|
||||
public static UnboundedTypeItem UNBOUNDED = TypeItem.UNBOUNDED;
|
||||
|
||||
public String fullTypeName;
|
||||
|
||||
|
||||
@@ -47,8 +47,12 @@ public class TypeItem extends GraphTargetItem {
|
||||
public static TypeItem ARRAY = new TypeItem(DottedChain.ARRAY);
|
||||
|
||||
public static UnboundedTypeItem UNBOUNDED = new UnboundedTypeItem();
|
||||
|
||||
public static TypeItem UNKNOWN = new TypeItem("--UNKNOWN--");
|
||||
|
||||
public final DottedChain fullTypeName;
|
||||
|
||||
public boolean printRaw = false;
|
||||
|
||||
public TypeItem(String s) {
|
||||
this(s == null ? new DottedChain(new String[]{}, new String[]{""}) : DottedChain.parseWithSuffix(s));
|
||||
|
||||
@@ -102,7 +102,7 @@ public class TernarOpItem extends GraphTargetItem {
|
||||
&& (onFalse.returnType().equals(TypeItem.NUMBER) || onFalse.returnType().equals(TypeItem.INT) || onFalse.returnType().equals(TypeItem.UINT))) {
|
||||
return TypeItem.NUMBER;
|
||||
}
|
||||
return TypeItem.UNBOUNDED;
|
||||
return TypeItem.UNKNOWN;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -50,4 +50,4 @@ public class UnboundedTypeItem extends AVM2Item {
|
||||
public boolean hasReturnValue() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user