Fix an issue with invalid code-gen of certain XML literals with 'binding-like' value injections at construction
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 8a83b84..1883667 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
@@ -60,6 +60,7 @@
String s = node.getValue(true);
if (!(node instanceof RegExpLiteralNode))
{
+ boolean withEscapedSingleQuote = false;
if (node.getLiteralType() == LiteralType.XML)
{
boolean jsx = false;
@@ -110,10 +111,12 @@
{
s = ((LiteralNode)child).getValue(true);
s = s.replace("\n", "");
- if (s.contains("'"))
- sb.append("\"" + s + "\"");
- else
- sb.append("'" + s + "'");
+ if (s.contains("'")) {
+ s = s.replace("'","__ESC_SNGLE_QUOT_PLACEHOLDER__");
+ withEscapedSingleQuote = true;
+ }
+
+ sb.append("'" + s + "'");
}
else
{
@@ -182,6 +185,7 @@
//s = "\'" + s.replaceAll("\'", "\\\\\'") + "\'";
s = s.replaceAll("__QUOTE_PLACEHOLDER__", "\\\\\"");
s = s.replaceAll("__ESCAPE_PLACEHOLDER__", "\\\\\\\\");
+ if (withEscapedSingleQuote) s = s.replaceAll("__ESC_SNGLE_QUOT_PLACEHOLDER__", "\\\\'");
s = s.replaceAll("__BACKSPACE_PLACEHOLDER__", "\\\\b");
s = s.replaceAll("__FORMFEED_PLACEHOLDER__", "\\\\f");
s = s.replaceAll("__TAB_PLACEHOLDER__", "\\\\t");