Fixed #1938 AS3 - coercion call type

This commit is contained in:
Jindra Petřík
2023-01-15 21:07:21 +01:00
parent 855e74a36f
commit 16a5edc841
3 changed files with 8 additions and 5 deletions

View File

@@ -180,7 +180,7 @@ public class GetPropertyIns extends InstructionDefinition {
GraphTargetItem ti = AbcIndexing.multinameToType(multiname.multinameIndex, localData.abc.constants);//new TypeItem(localData.abc.constants.getMultiname(multiname.multinameIndex).getNameWithNamespace(localData.abc.constants, true));
if (localData.abcIndex.findClass(ti, localData.abc, localData.scriptIndex) != null) {
type.setVal(ti);
callType.setVal(TypeItem.UNBOUNDED);
callType.setVal(ti); //coercion i = int(xx);
isStatic.setVal(true);
return;
}

View File

@@ -95,11 +95,13 @@ public class TernarOpItem extends GraphTargetItem {
@Override
public GraphTargetItem returnType() {
if (onTrue.returnType().equals(onFalse.returnType())) {
return onTrue.returnType();
GraphTargetItem onTrueType = onTrue.returnType();
GraphTargetItem onFalseType = onFalse.returnType();
if (onTrueType.equals(onFalseType)) {
return onTrueType;
}
if ((onTrue.returnType().equals(TypeItem.NUMBER) || onTrue.returnType().equals(TypeItem.INT) || onTrue.returnType().equals(TypeItem.UINT))
&& (onFalse.returnType().equals(TypeItem.NUMBER) || onFalse.returnType().equals(TypeItem.INT) || onFalse.returnType().equals(TypeItem.UINT))) {
if ((onTrueType.equals(TypeItem.NUMBER) || onTrueType.equals(TypeItem.INT) || onTrueType.equals(TypeItem.UINT))
&& (onFalseType.equals(TypeItem.NUMBER) || onFalseType.equals(TypeItem.INT) || onFalseType.equals(TypeItem.UINT))) {
return TypeItem.NUMBER;
}
return TypeItem.UNKNOWN;