From 465a3db3f2282943ca07103d9b9bd9bd47963278 Mon Sep 17 00:00:00 2001 From: Lukas Stadler <lukas.stadler@oracle.com> Date: Fri, 24 Aug 2018 14:08:43 +0200 Subject: [PATCH] allow \u and \U with braces in string literals --- .../src/com/oracle/truffle/r/parser/ParserGeneration.java | 1 + .../src/com/oracle/truffle/r/parser/R.g | 2 ++ .../src/com/oracle/truffle/r/test/ExpectedTestOutput.test | 8 ++++++++ .../src/com/oracle/truffle/r/test/parser/TestParser.java | 6 ++++++ 4 files changed, 17 insertions(+) diff --git a/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/ParserGeneration.java b/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/ParserGeneration.java index 23c7fa48bf..a6a6e6655c 100644 --- a/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/ParserGeneration.java +++ b/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/ParserGeneration.java @@ -101,5 +101,6 @@ public class ParserGeneration { ":: and ::: do not set argument names", "refactored: use file for interactive single-line source", "create lookups for field accesses where appropriate", + "allow unicode escape literals with {...}", }; } diff --git a/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/R.g b/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/R.g index 61e8a59794..3a1d809d79 100644 --- a/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/R.g +++ b/com.oracle.truffle.r.parser/src/com/oracle/truffle/r/parser/R.g @@ -789,6 +789,8 @@ fragment ESCAPE [StringBuilder buf] | 'x' a = HEX_DIGIT b = HEX_DIGIT { buf.append(hexChar($a.text, $b.text)); } | 'u' a = HEX_DIGIT b = HEX_DIGIT? c = HEX_DIGIT? d = HEX_DIGIT? { buf.append(hexChar($a.text, $b.text, $c.text, $d.text)); } | 'U' a = HEX_DIGIT b = HEX_DIGIT? c = HEX_DIGIT? d = HEX_DIGIT? e = HEX_DIGIT? f = HEX_DIGIT? g = HEX_DIGIT? h = HEX_DIGIT? { buf.append(hexChar($a.text, $b.text, $c.text, $d.text, $e.text, $f.text, $g.text, $h.text)); } + | 'u' '{' a = HEX_DIGIT b = HEX_DIGIT? c = HEX_DIGIT? d = HEX_DIGIT? '}' { buf.append(hexChar($a.text, $b.text, $c.text, $d.text)); } + | 'U' '{' a = HEX_DIGIT b = HEX_DIGIT? c = HEX_DIGIT? d = HEX_DIGIT? '}' { buf.append(hexChar($a.text, $b.text, $c.text, $d.text)); } ) ; diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test index 4a61db00c5..1729d773c0 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test @@ -171254,6 +171254,14 @@ see '?methods' for accessing help and source code "","double","bool","raw" "1",1231231234.5,TRUE,2a +##com.oracle.truffle.r.test.parser.TestParser.testBraceUnicodeLiterals# +#"\u{23}\u{9}\u{723}\u{1234}\U{23}\U{9}\U{723}\U{1234}" +[1] "#\tܣሴ#\tܣሴ" + +##com.oracle.truffle.r.test.parser.TestParser.testBraceUnicodeLiterals# +#'\u{23}\u{9}\u{723}\u{1234}\U{23}\U{9}\U{723}\U{1234}' +[1] "#\tܣሴ#\tܣሴ" + ##com.oracle.truffle.r.test.parser.TestParser.testDotIdentifiers# #{ .. <- 42; cat(..); } 42 diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/parser/TestParser.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/parser/TestParser.java index 524a536573..e02819ca63 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/parser/TestParser.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/parser/TestParser.java @@ -61,6 +61,12 @@ public class TestParser extends TestBase { assertEval("0xa.bp1i"); } + @Test + public void testBraceUnicodeLiterals() { + assertEval("\"\\u{23}\\u{9}\\u{723}\\u{1234}\\U{23}\\U{9}\\U{723}\\U{1234}\""); + assertEval("'\\u{23}\\u{9}\\u{723}\\u{1234}\\U{23}\\U{9}\\U{723}\\U{1234}'"); + } + private static final String[] HEX_VALUES = new String[]{"0xFFF", "0xFFFFFFFFFFF"}; @Test -- GitLab