mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-05-29 18:34:42 +00:00
Fixed #1888 AS3 - Coerce to string
This commit is contained in:
@@ -58,8 +58,47 @@ public class CoerceAVM2Item extends AVM2Item {
|
||||
|
||||
@Override
|
||||
public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException {
|
||||
//return hilight("(" + type + ")", highlight)+
|
||||
return value.toString(writer, localData);
|
||||
//Same for ConvertAVM2Item
|
||||
boolean displayCoerce = true;
|
||||
GraphTargetItem valueReturnType = value.returnType();
|
||||
switch (typeObj.toString()) {
|
||||
case "*":
|
||||
displayCoerce = false;
|
||||
break;
|
||||
case "Boolean":
|
||||
displayCoerce = !valueReturnType.equals(TypeItem.BOOLEAN) &&
|
||||
!valueReturnType.equals(TypeItem.UNBOUNDED);
|
||||
break;
|
||||
case "Number":
|
||||
case "int":
|
||||
case "uint":
|
||||
displayCoerce = !valueReturnType.equals(TypeItem.INT) &&
|
||||
!valueReturnType.equals(TypeItem.NUMBER) &&
|
||||
!valueReturnType.equals(TypeItem.UINT) &&
|
||||
!valueReturnType.equals(TypeItem.UNBOUNDED);
|
||||
break;
|
||||
case "String":
|
||||
displayCoerce = !valueReturnType.equals(TypeItem.STRING) &&
|
||||
!valueReturnType.equals(new TypeItem("XML")) &&
|
||||
!valueReturnType.equals(new TypeItem("XMLList")) &&
|
||||
!valueReturnType.equals(new TypeItem("null")) &&
|
||||
!valueReturnType.equals(TypeItem.UNBOUNDED);
|
||||
break;
|
||||
default:
|
||||
displayCoerce = false;
|
||||
break;
|
||||
//default:
|
||||
// there should be something like instanceof, or not, just comment it out...
|
||||
// displayCoerce = !valueReturnType.equals(typeObj);
|
||||
}
|
||||
if (displayCoerce) {
|
||||
typeObj.toString(writer, localData).append("(");
|
||||
}
|
||||
value.toString(writer, localData);
|
||||
if (displayCoerce) {
|
||||
writer.append(")");
|
||||
}
|
||||
return writer;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -49,12 +49,9 @@ public class ConvertAVM2Item extends AVM2Item {
|
||||
|
||||
@Override
|
||||
public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException {
|
||||
//Same for CoerceAVM2Item
|
||||
boolean displayConvert = true;
|
||||
GraphTargetItem valueReturnType = value.returnType();
|
||||
/*if (valueReturnType instanceof TypeItem) {
|
||||
TypeItem ti = (TypeItem)valueReturnType;
|
||||
ti.fullTypeName.toRawString()
|
||||
}*/
|
||||
switch (type.toString()) {
|
||||
case "Boolean":
|
||||
displayConvert = !valueReturnType.equals(TypeItem.BOOLEAN) &&
|
||||
@@ -70,6 +67,9 @@ public class ConvertAVM2Item extends AVM2Item {
|
||||
break;
|
||||
case "String":
|
||||
displayConvert = !valueReturnType.equals(TypeItem.STRING) &&
|
||||
!valueReturnType.equals(new TypeItem("XML")) &&
|
||||
!valueReturnType.equals(new TypeItem("XMLList")) &&
|
||||
!valueReturnType.equals(new TypeItem("null")) &&
|
||||
!valueReturnType.equals(TypeItem.UNBOUNDED);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -98,18 +98,7 @@ public class DeclarationAVM2Item extends AVM2Item {
|
||||
srcData.regIndex = lti.regIndex;
|
||||
|
||||
GraphTargetItem val = lti.value;
|
||||
GraphTargetItem coerType = TypeItem.UNBOUNDED;
|
||||
if (lti.value instanceof CoerceAVM2Item) {
|
||||
coerType = ((CoerceAVM2Item) lti.value).typeObj;
|
||||
}
|
||||
if (lti.value instanceof ConvertAVM2Item) {
|
||||
coerType = ((ConvertAVM2Item) lti.value).type;
|
||||
}
|
||||
//strip coerce if its declared as this type
|
||||
if ((lti.value instanceof CoerceAVM2Item) && coerType.equals(type) && !coerType.equals(TypeItem.UNBOUNDED)) {
|
||||
val = val.value;
|
||||
}
|
||||
srcData.declaredType = (coerType instanceof TypeItem) ? ((TypeItem) coerType).fullTypeName : DottedChain.ALL;
|
||||
srcData.declaredType = (type instanceof TypeItem) ? ((TypeItem) type).fullTypeName : DottedChain.ALL;
|
||||
writer.append("var ");
|
||||
writer.append(localName);
|
||||
writer.append(":");
|
||||
@@ -126,19 +115,7 @@ public class DeclarationAVM2Item extends AVM2Item {
|
||||
srcData.localName = ssti.getNameAsStr(localData);
|
||||
srcData.declaration = true;
|
||||
|
||||
GraphTargetItem val = ssti.value;
|
||||
GraphTargetItem coerType = TypeItem.UNBOUNDED;
|
||||
if (ssti.value instanceof CoerceAVM2Item) {
|
||||
coerType = ((CoerceAVM2Item) ssti.value).typeObj;
|
||||
}
|
||||
if (ssti.value instanceof ConvertAVM2Item) {
|
||||
coerType = ((ConvertAVM2Item) ssti.value).type;
|
||||
}
|
||||
//strip coerce if its declared as this type
|
||||
if ((ssti.value instanceof CoerceAVM2Item) && coerType.equals(type) && !coerType.equals(TypeItem.UNBOUNDED)) {
|
||||
val = val.value;
|
||||
}
|
||||
|
||||
GraphTargetItem val = ssti.value;
|
||||
srcData.declaredType = (type instanceof TypeItem) ? ((TypeItem) type).fullTypeName : DottedChain.ALL;
|
||||
writer.append("var ");
|
||||
ssti.getName(writer, localData);
|
||||
@@ -158,19 +135,7 @@ public class DeclarationAVM2Item extends AVM2Item {
|
||||
srcData.localName = ((FullMultinameAVM2Item) spti.propertyName).resolvedMultinameName;
|
||||
srcData.declaration = true;
|
||||
|
||||
GraphTargetItem val = spti.value;
|
||||
GraphTargetItem coerType = TypeItem.UNBOUNDED;
|
||||
if (spti.value instanceof CoerceAVM2Item) {
|
||||
coerType = ((CoerceAVM2Item) spti.value).typeObj;
|
||||
}
|
||||
if (spti.value instanceof ConvertAVM2Item) {
|
||||
coerType = ((ConvertAVM2Item) spti.value).type;
|
||||
}
|
||||
//strip coerce if its declared as this type
|
||||
if ((spti.value instanceof CoerceAVM2Item) && coerType.equals(type) && !coerType.equals(TypeItem.UNBOUNDED)) {
|
||||
val = val.value;
|
||||
}
|
||||
|
||||
GraphTargetItem val = spti.value;
|
||||
srcData.declaredType = (type instanceof TypeItem) ? ((TypeItem) type).fullTypeName : DottedChain.ALL;
|
||||
writer.append("var ");
|
||||
writer.append(IdentifiersDeobfuscation.printIdentifier(true, ((FullMultinameAVM2Item) spti.propertyName).resolvedMultinameName));
|
||||
|
||||
Reference in New Issue
Block a user