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 b6f6660570c376713f8d83f4b433b66d39096d3a
Author: Josh Tynjala <[email protected]>
AuthorDate: Mon Nov 28 13:23:55 2022 -0800

    ASParser: remove @ from verbatim strings to turn them into regular 
double-quoted strings (references #222)
---
 .../royale/compiler/internal/parsing/as/ASParser.g      |  2 +-
 .../compiler/internal/parsing/as/BaseASParser.java      | 17 +++++++++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git 
a/compiler/src/main/antlr/org/apache/royale/compiler/internal/parsing/as/ASParser.g
 
b/compiler/src/main/antlr/org/apache/royale/compiler/internal/parsing/as/ASParser.g
index c5a8105ae..934bdfdf7 100644
--- 
a/compiler/src/main/antlr/org/apache/royale/compiler/internal/parsing/as/ASParser.g
+++ 
b/compiler/src/main/antlr/org/apache/royale/compiler/internal/parsing/as/ASParser.g
@@ -2498,7 +2498,7 @@ primaryExpression returns [ExpressionNodeBase n]
     |   token=numericLiteral
         { n = new NumericLiteralNode(token); }
     |   TOKEN_LITERAL_STRING
-        { n = new LiteralNode(token, LiteralType.STRING); }
+        { n = transformStringLiteral(token); }
     |   TOKEN_VOID_0
         { n = new LiteralNode(token, LiteralType.OBJECT); }
     |   TOKEN_LITERAL_REGEXP
diff --git 
a/compiler/src/main/java/org/apache/royale/compiler/internal/parsing/as/BaseASParser.java
 
b/compiler/src/main/java/org/apache/royale/compiler/internal/parsing/as/BaseASParser.java
index 99fbc0b0c..01cdd12cd 100644
--- 
a/compiler/src/main/java/org/apache/royale/compiler/internal/parsing/as/BaseASParser.java
+++ 
b/compiler/src/main/java/org/apache/royale/compiler/internal/parsing/as/BaseASParser.java
@@ -3101,4 +3101,21 @@ abstract class BaseASParser extends LLkParser implements 
IProblemReporter
     {
         return parsingProjectConfigVariables;
     }
+
+    protected final LiteralNode transformStringLiteral(ASToken token)
+    {
+        String tokenText = token.getText();
+        if (tokenText.startsWith("@"))
+        {
+            // the only change needed is to remove the @ symbol
+            // the escape sequences are already handled for us
+            String newText = tokenText.substring(1);
+            ASToken newToken = new ASToken(ASTokenTypes.TOKEN_LITERAL_STRING, 
token.getStart(), token.getEnd(), token.getLine(), token.getColumn(), newText);
+            newToken.setEndLine(token.getEndLine());
+            newToken.setEndColumn(token.getEndColumn());
+            return new LiteralNode(newToken, LiteralType.STRING);
+        }
+
+        return new LiteralNode(token, LiteralType.STRING);
+    }
 }

Reply via email to