You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ah...@apache.org on 2018/08/08 17:39:23 UTC
[royale-compiler] 03/03: handle simple XML expressions. Sometimes
we don't get an XMLLiteralNode, just a plain LiteralNode.
This is an automated email from the ASF dual-hosted git repository.
aharui pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-compiler.git
commit f60899dbd4c81fbef43769a3977f09d636f6bafe
Author: Alex Harui <ah...@apache.org>
AuthorDate: Wed Aug 8 10:39:01 2018 -0700
handle simple XML expressions. Sometimes we don't get an XMLLiteralNode, just a plain LiteralNode.
---
.../internal/codegen/js/jx/LiteralEmitter.java | 124 +++++++++++----------
1 file changed, 68 insertions(+), 56 deletions(-)
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/LiteralEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/LiteralEmitter.java
index 467e587..6c79341 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/LiteralEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/LiteralEmitter.java
@@ -75,67 +75,79 @@ public class LiteralEmitter extends JSSubEmitter implements
}
}
}
- XMLLiteralNode xmlNode = (XMLLiteralNode) node;
- if (jsx)
+ if (node instanceof XMLLiteralNode)
{
- emitJSX(xmlNode);
- return;
+ XMLLiteralNode xmlNode = (XMLLiteralNode) node;
+ if (jsx)
+ {
+ emitJSX(xmlNode);
+ return;
+ }
+ else
+ {
+ newlineReplacement = "\\\\\n";
+ if (xmlNode.getContentsNode().getChildCount() == 1)
+ {
+ if (s.contains("'"))
+ s = "\"" + s + "\"";
+ else
+ s = "'" + s + "'";
+ }
+ else
+ {
+ StringBuilder sb = new StringBuilder();
+ // probably contains {initializers}
+ boolean inAttribute = false;
+ int n = xmlNode.getContentsNode().getChildCount();
+ for (int i = 0; i < n; i++)
+ {
+ if (i > 0)
+ sb.append(" + ");
+ IASNode child = xmlNode.getContentsNode().getChild(i);
+ if (child instanceof LiteralNode)
+ {
+ s = ((LiteralNode)child).getValue(true);
+ if (s.contains("'"))
+ sb.append("\"" + s + "\"");
+ else
+ sb.append("'" + s + "'");
+ }
+ else
+ {
+ s = getEmitter().stringifyNode(child);
+ if (inAttribute)
+ {
+ sb.append("'\"' + ");
+
+ sb.append(s);
+
+ sb.append(" + '\"'");
+ }
+ else
+ sb.append(s);
+ }
+ inAttribute = s.endsWith("=");
+ }
+ s = sb.toString();
+ }
+ char c = s.charAt(0);
+ if (c == '"')
+ {
+ s = s.substring(1, s.length() - 1);
+ s = s.replace("\"", "__QUOTE_PLACEHOLDER__");
+ s = "\"" + s + "\"";
+ }
+ // use formatQualifiedName to get XML in the usedNames dependencies
+ s = "new " + getEmitter().formatQualifiedName("XML") + "( " + s + ")";
+ }
}
else
{
- newlineReplacement = "\\\\\n";
- if (xmlNode.getContentsNode().getChildCount() == 1)
- {
- if (s.contains("'"))
- s = "\"" + s + "\"";
- else
- s = "'" + s + "'";
- }
- else
- {
- StringBuilder sb = new StringBuilder();
- // probably contains {initializers}
- boolean inAttribute = false;
- int n = xmlNode.getContentsNode().getChildCount();
- for (int i = 0; i < n; i++)
- {
- if (i > 0)
- sb.append(" + ");
- IASNode child = xmlNode.getContentsNode().getChild(i);
- if (child instanceof LiteralNode)
- {
- s = ((LiteralNode)child).getValue(true);
- if (s.contains("'"))
- sb.append("\"" + s + "\"");
- else
- sb.append("'" + s + "'");
- }
- else
- {
- s = getEmitter().stringifyNode(child);
- if (inAttribute)
- {
- sb.append("'\"' + ");
-
- sb.append(s);
-
- sb.append(" + '\"'");
- }
- else
- sb.append(s);
- }
- inAttribute = s.endsWith("=");
- }
- s = sb.toString();
- }
- char c = s.charAt(0);
- if (c == '"')
- {
- s = s.substring(1, s.length() - 1);
- s = s.replace("\"", "__QUOTE_PLACEHOLDER__");
+ s = node.getValue();
+ if (s.contains("'"))
s = "\"" + s + "\"";
- }
- // use formatQualifiedName to get XML in the usedNames dependencies
+ else
+ s = "'" + s + "'";
s = "new " + getEmitter().formatQualifiedName("XML") + "( " + s + ")";
}
}