This is an automated email from the ASF dual-hosted git repository. joshtynjala pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/royale-compiler.git
commit fb068a0a625be4a1d80ae168e97a9eba6f171620 Author: Josh Tynjala <[email protected]> AuthorDate: Tue Mar 16 10:23:19 2021 -0700 playerglobalc: special case for global constants: undefined, NaN, and Infinity --- .../royale/compiler/clients/PLAYERGLOBALC.java | 23 +++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/compiler-playerglobalc/src/main/java/org/apache/royale/compiler/clients/PLAYERGLOBALC.java b/compiler-playerglobalc/src/main/java/org/apache/royale/compiler/clients/PLAYERGLOBALC.java index aae41b4..1f23f42 100644 --- a/compiler-playerglobalc/src/main/java/org/apache/royale/compiler/clients/PLAYERGLOBALC.java +++ b/compiler-playerglobalc/src/main/java/org/apache/royale/compiler/clients/PLAYERGLOBALC.java @@ -67,6 +67,12 @@ class PLAYERGLOBALC implements FlexTool { "propertyIsEnumerable", "setPropertyIsEnumerable", "toString", "toLocaleString", "valueOf"); private static final List<String> ANY_CONSTRUCTORS = Arrays.asList("Boolean", "Date", "int", "Number", "RegExp", "String", "uint", "XML", "XMLList"); + private static final Map<String, String> GLOBAL_CONSTANTS = new HashMap<String, String>(); + { + GLOBAL_CONSTANTS.put("Infinity", "1 / 0"); + GLOBAL_CONSTANTS.put("NaN", "0 / 0"); + GLOBAL_CONSTANTS.put("undefined", "void 0"); + } private static final Map<String, List<String>> REST_METHODS = new HashMap<String, List<String>>(); { REST_METHODS.put("__AS3__.vec.Vector$object", Arrays.asList("sort")); @@ -432,7 +438,7 @@ class PLAYERGLOBALC implements FlexTool { parseFunction(apiOperationElement, fullyQualifiedName, false, classBuilder); } for (Element apiValueElement : apiValueElements) { - parseVariable(apiValueElement, false, classBuilder); + parseVariable(apiValueElement, false, false, classBuilder); } classBuilder.append("\t"); classBuilder.append("}"); @@ -529,7 +535,7 @@ class PLAYERGLOBALC implements FlexTool { parseFunction(apiOperationElement, null, true, interfaceBuilder); } for (Element apiValueElement : apiValueElements) { - parseVariable(apiValueElement, true, interfaceBuilder); + parseVariable(apiValueElement, true, false, interfaceBuilder); } interfaceBuilder.append("\t"); interfaceBuilder.append("}"); @@ -627,15 +633,15 @@ class PLAYERGLOBALC implements FlexTool { variableBuilder.append("{"); variableBuilder.append("\n"); writeImports(importFullyQualifiedNames, variableBuilder); - parseVariable(apiValueElement, false, variableBuilder); + parseVariable(apiValueElement, false, true, variableBuilder); variableBuilder.append("}"); variableBuilder.append("\n"); writeFileForDefinition(fullyQualifiedName, isAIROnly, variableBuilder.toString()); } - private void parseVariable(Element apiValueElement, boolean forInterface, StringBuilder variableBuilder) - throws Exception { + private void parseVariable(Element apiValueElement, boolean forInterface, boolean isInPackage, + StringBuilder variableBuilder) throws Exception { boolean isAIROnly = isAIROnly(apiValueElement.element("prolog")); if (isAIROnly && !configuration.getAir()) { return; @@ -766,7 +772,7 @@ class PLAYERGLOBALC implements FlexTool { if (isStatic) { variableBuilder.append("static "); } - if (isConst) { + if (isConst || (isInPackage && GLOBAL_CONSTANTS.containsKey(variableName))) { variableBuilder.append("const "); } else { variableBuilder.append("var "); @@ -774,7 +780,10 @@ class PLAYERGLOBALC implements FlexTool { variableBuilder.append(variableName); variableBuilder.append(":"); variableBuilder.append(variableType); - if (apiDataElement != null) { + if (isInPackage && GLOBAL_CONSTANTS.containsKey(variableName)) { + variableBuilder.append(" = "); + variableBuilder.append(GLOBAL_CONSTANTS.get(variableName)); + } else if (apiDataElement != null) { writeVariableOrParameterValue(apiDataElement, variableType, variableBuilder); } variableBuilder.append(";");
