Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(32)

Unified Diff: src/api.cc

Issue 1472323002: [es6] Correct parsing of regular expression literal flags. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix oversight in interpreter Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/ast.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/api.cc
diff --git a/src/api.cc b/src/api.cc
index 8203614ef27f4b42afdc951e1c3beb2bed4aa7ce..ac9de3df1e2b38764044bc0ca1ba03747b64e9a5 100644
--- a/src/api.cc
+++ b/src/api.cc
@@ -6142,28 +6142,14 @@ void v8::Date::DateTimeConfigurationChangeNotification(Isolate* isolate) {
}
-static i::Handle<i::String> RegExpFlagsToString(RegExp::Flags flags) {
- i::Isolate* isolate = i::Isolate::Current();
- uint8_t flags_buf[5];
- int num_flags = 0;
- if ((flags & RegExp::kGlobal) != 0) flags_buf[num_flags++] = 'g';
- if ((flags & RegExp::kMultiline) != 0) flags_buf[num_flags++] = 'm';
- if ((flags & RegExp::kIgnoreCase) != 0) flags_buf[num_flags++] = 'i';
- if ((flags & RegExp::kSticky) != 0) flags_buf[num_flags++] = 'y';
- if ((flags & RegExp::kUnicode) != 0) flags_buf[num_flags++] = 'u';
- DCHECK(num_flags <= static_cast<int>(arraysize(flags_buf)));
- return isolate->factory()->InternalizeOneByteString(
- i::Vector<const uint8_t>(flags_buf, num_flags));
-}
-
-
MaybeLocal<v8::RegExp> v8::RegExp::New(Local<Context> context,
Local<String> pattern, Flags flags) {
PREPARE_FOR_EXECUTION(context, "RegExp::New", RegExp);
Local<v8::RegExp> result;
- has_pending_exception = !ToLocal<RegExp>(
- i::JSRegExp::New(Utils::OpenHandle(*pattern), RegExpFlagsToString(flags)),
- &result);
+ has_pending_exception =
+ !ToLocal<RegExp>(i::JSRegExp::New(Utils::OpenHandle(*pattern),
+ static_cast<i::JSRegExp::Flags>(flags)),
+ &result);
RETURN_ON_FAILED_EXECUTION(RegExp);
RETURN_ESCAPED(result);
}
@@ -6184,20 +6170,20 @@ Local<v8::String> v8::RegExp::GetSource() const {
// Assert that the static flags cast in GetFlags is valid.
-#define REGEXP_FLAG_ASSERT_EQ(api_flag, internal_flag) \
- STATIC_ASSERT(static_cast<int>(v8::RegExp::api_flag) == \
- static_cast<int>(i::JSRegExp::internal_flag))
-REGEXP_FLAG_ASSERT_EQ(kNone, NONE);
-REGEXP_FLAG_ASSERT_EQ(kGlobal, GLOBAL);
-REGEXP_FLAG_ASSERT_EQ(kIgnoreCase, IGNORE_CASE);
-REGEXP_FLAG_ASSERT_EQ(kMultiline, MULTILINE);
-REGEXP_FLAG_ASSERT_EQ(kSticky, STICKY);
-REGEXP_FLAG_ASSERT_EQ(kUnicode, UNICODE_ESCAPES);
+#define REGEXP_FLAG_ASSERT_EQ(flag) \
+ STATIC_ASSERT(static_cast<int>(v8::RegExp::flag) == \
+ static_cast<int>(i::JSRegExp::flag))
+REGEXP_FLAG_ASSERT_EQ(kNone);
+REGEXP_FLAG_ASSERT_EQ(kGlobal);
+REGEXP_FLAG_ASSERT_EQ(kIgnoreCase);
+REGEXP_FLAG_ASSERT_EQ(kMultiline);
+REGEXP_FLAG_ASSERT_EQ(kSticky);
+REGEXP_FLAG_ASSERT_EQ(kUnicode);
#undef REGEXP_FLAG_ASSERT_EQ
v8::RegExp::Flags v8::RegExp::GetFlags() const {
i::Handle<i::JSRegExp> obj = Utils::OpenHandle(this);
- return static_cast<RegExp::Flags>(obj->GetFlags().value());
+ return RegExp::Flags(static_cast<int>(obj->GetFlags()));
}
« no previous file with comments | « no previous file | src/ast.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698