Harman air - Null coalesce and nullish member access operators - WIP

This commit is contained in:
Jindra Petřík
2024-11-20 17:05:37 +01:00
parent 26cfb56291
commit f73f2669c0
45 changed files with 341 additions and 273 deletions
@@ -3352,7 +3352,8 @@ public class Graph {
} else {
ternarOnFalse = filteredOnFalse.get(0).value;
}
stack.push(new TernarOpItem(null, localData.lineStartInstruction, expr.invert(null), ternarOnTrue, ternarOnFalse));
TernarOpItem top = new TernarOpItem(null, localData.lineStartInstruction, expr.invert(null), ternarOnTrue, ternarOnFalse);
stack.push(handleTernar(top, localData));
} else {
boolean isIf = true;
//If the ontrue is empty, switch ontrue and onfalse
@@ -4292,4 +4293,14 @@ public class Graph {
protected boolean partIsSwitch(GraphPart part) {
return false;
}
/**
* Replaces ternar with custom value
* @param ternar Ternar
* @param localData Local data
* @return Custom item
*/
protected GraphTargetItem handleTernar(TernarOpItem ternar, BaseLocalData localData) {
return ternar;
}
}
@@ -87,13 +87,15 @@ public abstract class GraphTargetItem implements Serializable, Cloneable {
public static final int PRECEDENCE_LOGICALOR = 12;
public static final int PRECEDENCE_CONDITIONAL = 13;
public static final int PRECEDENCE_NULLCOALESCE = 13;
public static final int PRECEDENCE_CONDITIONAL = 14;
public static final int PRECEDENCE_ASSIGNMENT = 14;
public static final int PRECEDENCE_ASSIGNMENT = 15;
public static final int PRECEDENCE_COMMA = 15;
public static final int PRECEDENCE_COMMA = 16;
public static final int NOPRECEDENCE = 16;
public static final int NOPRECEDENCE = 17;
/**
* Source item
@@ -85,6 +85,11 @@ public class LocalData {
*/
public ScriptExportMode exportMode;
/**
* SWF version
*/
public int swfVersion;
/**
* Creates a new local data
*
@@ -105,10 +110,11 @@ public class LocalData {
* @param localRegNames Local register names
* @param fullyQualifiedNames Fully qualified names
* @param seenMethods Seen methods
* @param exportMode
* @param exportMode Export mode
* @param swfVersion SWF version
* @return Local data
*/
public static LocalData create(List<MethodBody> callStack, AbcIndexing abcIndex, ABC abc, HashMap<Integer, String> localRegNames, List<DottedChain> fullyQualifiedNames, Set<Integer> seenMethods, ScriptExportMode exportMode) {
public static LocalData create(List<MethodBody> callStack, AbcIndexing abcIndex, ABC abc, HashMap<Integer, String> localRegNames, List<DottedChain> fullyQualifiedNames, Set<Integer> seenMethods, ScriptExportMode exportMode, int swfVersion) {
LocalData localData = new LocalData();
localData.abc = abc;
localData.constantsAvm2 = abc.constants;
@@ -118,6 +124,7 @@ public class LocalData {
localData.abcIndex = abcIndex;
localData.callStack = callStack;
localData.exportMode = exportMode;
localData.swfVersion = swfVersion;
return localData;
}
}