mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-06-03 06:45:30 +00:00
Added: Harman AIR 51 float support compatibility
This commit is contained in:
@@ -784,6 +784,14 @@ public class ABC implements Openable {
|
||||
public boolean hasFloatSupport() {
|
||||
return minVersionCheck(47, 16);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the ABC has float4 support
|
||||
* @return Whether the ABC has float4 support
|
||||
*/
|
||||
public boolean hasFloat4Support() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets float support.
|
||||
@@ -927,6 +935,8 @@ public class ABC implements Openable {
|
||||
}
|
||||
ais.endDumpLevel();
|
||||
}
|
||||
}
|
||||
if (hasFloat4Support()) {
|
||||
// constant float4
|
||||
int constant_float4_pool_count = ais.readU30("float4_count");
|
||||
if (constant_float4_pool_count > 1) {
|
||||
@@ -1125,6 +1135,8 @@ public class ABC implements Openable {
|
||||
for (int i = 1; i < constants.getFloatCount(); i++) {
|
||||
aos.writeFloat(constants.getFloat(i));
|
||||
}
|
||||
}
|
||||
if (hasFloat4Support()) {
|
||||
aos.writeU30(constants.getFloat4Count());
|
||||
for (int i = 1; i < constants.getFloat4Count(); i++) {
|
||||
aos.writeFloat4(constants.getFloat4(i));
|
||||
@@ -2400,7 +2412,7 @@ public class ABC implements Openable {
|
||||
}
|
||||
break;
|
||||
case ValueKind.CONSTANT_Float4:
|
||||
if (hasFloatSupport()) {
|
||||
if (hasFloat4Support()) {
|
||||
valueMergeMap = mergeFloat4Map;
|
||||
}
|
||||
break;
|
||||
@@ -2675,7 +2687,7 @@ public class ABC implements Openable {
|
||||
}
|
||||
break;
|
||||
case ValueKind.CONSTANT_Float4:
|
||||
if (hasFloatSupport()) {
|
||||
if (hasFloat4Support()) {
|
||||
valueMergeMap = mergeFloat4Map;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -700,7 +700,7 @@ public class ABCInputStream implements AutoCloseable {
|
||||
*/
|
||||
public Float readFloat(String name) throws IOException {
|
||||
newDumpLevel(name, "Float");
|
||||
int intBits = (readInternal()) + (readInternal() << 8);
|
||||
int intBits = (readInternal()) + (readInternal() << 8) + (readInternal() << 16) + (readInternal() << 24);
|
||||
float ret = Float.intBitsToFloat(intBits);
|
||||
endDumpLevel(ret);
|
||||
return ret;
|
||||
|
||||
@@ -580,7 +580,7 @@ public class AVM2Code implements Cloneable {
|
||||
/*0x20*/ new PushNullIns(),
|
||||
/*0x21*/ new PushUndefinedIns(),
|
||||
/*0x22*/ new PushFloatIns(), //major 47+
|
||||
/*0x22*/ new PushConstantIns(), //before major 47
|
||||
/*0x22*/ //new PushConstantIns(), //before major 47
|
||||
/*0x23*/ new NextValueIns(),
|
||||
/*0x24*/ new PushByteIns(),
|
||||
/*0x25*/ new PushShortIns(),
|
||||
|
||||
@@ -87,6 +87,12 @@ public class CoerceAVM2Item extends AVM2Item {
|
||||
&& !valueReturnType.equals(TypeItem.UINT)
|
||||
&& !valueReturnType.equals(TypeItem.UNBOUNDED);
|
||||
break;
|
||||
case "float":
|
||||
displayCoerce = !valueReturnType.equals(TypeItem.INT)
|
||||
&& !valueReturnType.equals(new TypeItem("float"))
|
||||
&& !valueReturnType.equals(TypeItem.UINT)
|
||||
&& !valueReturnType.equals(TypeItem.UNBOUNDED);
|
||||
break;
|
||||
case "int":
|
||||
displayCoerce = !valueReturnType.equals(TypeItem.INT)
|
||||
&& !valueReturnType.equals(TypeItem.UNBOUNDED);
|
||||
|
||||
@@ -75,6 +75,12 @@ public class ConvertAVM2Item extends AVM2Item {
|
||||
&& !valueReturnType.equals(TypeItem.UINT)
|
||||
&& !valueReturnType.equals(TypeItem.UNBOUNDED);
|
||||
break;
|
||||
case "float":
|
||||
displayConvert = !valueReturnType.equals(TypeItem.INT)
|
||||
&& !valueReturnType.equals(new TypeItem("float"))
|
||||
&& !valueReturnType.equals(TypeItem.UINT)
|
||||
&& !valueReturnType.equals(TypeItem.UNBOUNDED);
|
||||
break;
|
||||
case "int":
|
||||
displayConvert = !valueReturnType.equals(TypeItem.INT)
|
||||
&& !valueReturnType.equals(TypeItem.UNBOUNDED);
|
||||
|
||||
@@ -84,7 +84,7 @@ public class FloatValueAVM2Item extends NumberValueAVM2Item {
|
||||
|
||||
@Override
|
||||
public GraphTargetItem returnType() {
|
||||
return TypeItem.NUMBER;
|
||||
return new TypeItem("float");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -2489,7 +2489,7 @@ public class ActionScript3Parser {
|
||||
allowMemberOrCall = true;
|
||||
break;
|
||||
case FLOAT4:
|
||||
if (!abc.hasFloatSupport()) {
|
||||
if (!abc.hasFloat4Support()) {
|
||||
//parse again as method call
|
||||
lexer.yypushbackstr(lexer.yytext().substring("float4".length()));
|
||||
lexer.pushback(new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, "float4"));
|
||||
|
||||
@@ -276,7 +276,8 @@ public class ABCCleaner {
|
||||
}
|
||||
newCpool.addFloat(abc.constants.getFloat(i));
|
||||
}
|
||||
|
||||
}
|
||||
if (abc.hasFloat4Support()) {
|
||||
for (int i = 1; i < abc.constants.getFloat4Count(); i++) {
|
||||
if (notReferencedIndices.get(ABCSimpleUsageDetector.ItemKind.FLOAT4).contains(i)) {
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user