Fixed #1888 Casts in binary operations, not casting any type

This commit is contained in:
Jindra Petřík
2022-11-26 14:18:08 +01:00
parent 954200484c
commit 9e8d00edba
40 changed files with 124 additions and 96 deletions

View File

@@ -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());
}

View File

@@ -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) {

View File

@@ -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

View File

@@ -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

View File

@@ -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;
}
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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;
}
}

View File

@@ -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

View File

@@ -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

View File

@@ -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;
}
}

View File

@@ -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

View File

@@ -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("*")) {

View File

@@ -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) {

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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;
}
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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[]{});

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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));

View File

@@ -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

View File

@@ -50,4 +50,4 @@ public class UnboundedTypeItem extends AVM2Item {
public boolean hasReturnValue() {
return true;
}
}
}