From baaa16cee7aa78cfd8ec4167bc1c1e20f7d319bb Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Wed, 20 Nov 2013 10:56:28 +0100
Subject: [PATCH] Make sure syntax errors in regular expressions raise
conforming exceptions
Just letting the error from new RegExp through creates an exception missing the
pos/loc/raisedAt properties.
Issue #82
Issue #81
---
acorn.js | 8 +++++++-
index.html | 8 +++++++-
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/acorn.js b/acorn.js
index e03f6f2e2e..ec3d4ed7e2 100644
--- a/acorn.js
+++ b/acorn.js
@@ -767,7 +767,13 @@
// here (don't ask).
var mods = readWord1();
if (mods && !/^[gmsiy]*$/.test(mods)) raise(start, "Invalid regexp flag");
- return finishToken(_regexp, new RegExp(content, mods));
+ try {
+ var value = new RegExp(content, mods);
+ } catch (e) {
+ if (e instanceof SyntaxError) raise(start, e.message);
+ raise(e);
+ }
+ return finishToken(_regexp, value);
}
// Read an integer in the given radix. Return null if zero digits
diff --git a/index.html b/index.html
index 8b53efce15..9c86b83d78 100644
--- a/index.html
+++ b/index.html
@@ -532,7 +532,13 @@ since a '/' inside a '[]' set does not end the expression.
++tokPos; | Need to use readWord1 because '\uXXXX' sequences are allowed
here (don't ask). | var mods = readWord1();
if (mods && !/^[gmsiy]*$/.test(mods)) raise(start, "Invalid regexp flag");
- return finishToken(_regexp, new RegExp(content, mods));
+ try {
+ var value = new RegExp(content, mods);
+ } catch (e) {
+ if (e instanceof SyntaxError) raise(start, e.message);
+ raise(e);
+ }
+ return finishToken(_regexp, value);
} |
| Read an integer in the given radix. Return null if zero digits
were read, the integer value otherwise. When len is given, this
will return null unless the integer has exactly len digits. | function readInt(radix, len) {
|