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 177902b34d228318732f5c7a32d605c22e6d8115..26a20439edc635e06e8bcbcda476fd8decfc2584 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 1d55ebbc8d048b622032a4ea4790025fdfebdb9e..08a34adfe09cbfd428691e2662983018c2d2eede 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 a4ed9501b845b8a1d136c6dc81d157fb66f2d481..a9e76b8ee72c34108539805352efdaffc24c6933 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)"); } }