From 808d92fc08d44308eca05de3997de2b7359f4dab Mon Sep 17 00:00:00 2001 From: Tomas Stupka <tomas.stupka@oracle.com> Date: Mon, 28 Aug 2017 16:23:16 +0200 Subject: [PATCH] do not check predefined classes in grep pattern if it is supposed to be macthed as is (fixed=TRUE) --- .../oracle/truffle/r/nodes/builtin/base/GrepFunctions.java | 4 ++-- .../truffle/r/test/builtins/TestBuiltin_gregexpr.java | 7 +++++++ .../truffle/r/test/builtins/TestBuiltin_regexpr.java | 6 ++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GrepFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GrepFunctions.java index 177902b34d..26a20439ed 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GrepFunctions.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GrepFunctions.java @@ -793,7 +793,7 @@ public class GrepFunctions { throw RInternalError.unimplemented("multi-element patterns in regexpr not implemented yet"); } String pattern = patternArg.getDataAt(0); - if (!perl) { + if (!perl && !fixed) { pattern = RegExp.checkPreDefinedClasses(pattern); } // TODO: useBytes normally depends on the value of the parameter and (if false) on @@ -1090,7 +1090,7 @@ public class GrepFunctions { throw RInternalError.unimplemented("multi-element patterns in gregexpr not implemented yet"); } String pattern = patternArg.getDataAt(0); - if (!perl) { + if (!perl && !fixed) { pattern = RegExp.checkPreDefinedClasses(pattern); } // TODO: useBytes normally depends on the value of the parameter and (if false) on diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_gregexpr.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_gregexpr.java index 1d55ebbc8d..08a34adfe0 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_gregexpr.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_gregexpr.java @@ -120,5 +120,12 @@ public class TestBuiltin_gregexpr extends TestBase { assertEval("{ x<-c(\"Aaa bbb Aaa Bbb\", \"Aaa bbb Aaa bbb\", \"Aaa bbb Aaa Bbb\"); p<-\"(?<first>[[:upper:]][[:lower:]]+) (?<last>[[:upper:]][[:lower:]]+)\"; gregexpr(p, x, perl=TRUE) }"); assertEval("{ x<-c(\"Aaa bbb Aaa bbb\", \"Aaa Bbb Aaa Bbb\", \"Aaa bbb Aaa bbb\"); p<-\"(?<first>[[:upper:]][[:lower:]]+) (?<last>[[:upper:]][[:lower:]]+)\"; gregexpr(p, x, perl=TRUE) }"); + assertEval("gregexpr(')', 'abc()', fixed = TRUE)"); + assertEval("gregexpr('(', 'abc()', fixed = TRUE)"); + assertEval("gregexpr(')', 'abc()', fixed = FALSE)"); + assertEval("gregexpr('\\\\)', 'abc()', fixed = FALSE)"); + assertEval(Output.IgnoreErrorMessage, "gregexpr('(', 'abc()', fixed = FALSE)"); + assertEval("gregexpr('\\\\(', 'abc()', fixed = FALSE)"); + } } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_regexpr.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_regexpr.java index a4ed9501b8..a9e76b8ee7 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_regexpr.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_regexpr.java @@ -118,5 +118,11 @@ public class TestBuiltin_regexpr extends TestBase { assertEval("{ x<-c(\"Aaa bbb Aaa bbb\", \"Aaa Bbb Aaa Bbb\"); p<-\"(?<first>[[:upper:]][[:lower:]]+) (?<last>[[:upper:]][[:lower:]]+)\"; regexpr(p, x, perl=TRUE) }"); assertEval("{ x<-c(\"Aaa bbb Aaa bbb\", \"Aaa Bbb Aaa Bbb\", \"Aaa bbb Aaa bbb\"); p<-\"(?<first>[[:upper:]][[:lower:]]+) (?<last>[[:upper:]][[:lower:]]+)\"; regexpr(p, x, perl=TRUE) }"); + assertEval("regexpr(')', 'abc()', fixed = TRUE)"); + assertEval("regexpr('(', 'abc()', fixed = TRUE)"); + assertEval("regexpr(')', 'abc()', fixed = FALSE)"); + assertEval("regexpr('\\\\)', 'abc()', fixed = FALSE)"); + assertEval(Output.IgnoreErrorMessage, "regexpr('(', 'abc()', fixed = FALSE)"); + assertEval("regexpr('\\\\(', 'abc()', fixed = FALSE)"); } } -- GitLab