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

Side by Side Diff: src/preparser.h

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 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 unified diff | Download patch
« no previous file with comments | « src/objects.cc ('k') | src/prettyprinter.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_PREPARSER_H 5 #ifndef V8_PREPARSER_H
6 #define V8_PREPARSER_H 6 #define V8_PREPARSER_H
7 7
8 #include "src/bailout-reason.h" 8 #include "src/bailout-reason.h"
9 #include "src/expression-classifier.h" 9 #include "src/expression-classifier.h"
10 #include "src/func-name-inferrer.h" 10 #include "src/func-name-inferrer.h"
(...skipping 1232 matching lines...) Expand 10 before | Expand all | Expand 10 after
1243 explicit PreParserFactory(void* unused_value_factory) {} 1243 explicit PreParserFactory(void* unused_value_factory) {}
1244 PreParserExpression NewStringLiteral(PreParserIdentifier identifier, 1244 PreParserExpression NewStringLiteral(PreParserIdentifier identifier,
1245 int pos) { 1245 int pos) {
1246 return PreParserExpression::Default(); 1246 return PreParserExpression::Default();
1247 } 1247 }
1248 PreParserExpression NewNumberLiteral(double number, 1248 PreParserExpression NewNumberLiteral(double number,
1249 int pos) { 1249 int pos) {
1250 return PreParserExpression::Default(); 1250 return PreParserExpression::Default();
1251 } 1251 }
1252 PreParserExpression NewRegExpLiteral(PreParserIdentifier js_pattern, 1252 PreParserExpression NewRegExpLiteral(PreParserIdentifier js_pattern,
1253 PreParserIdentifier js_flags, 1253 int js_flags, int literal_index,
1254 int literal_index, 1254 bool is_strong, int pos) {
1255 bool is_strong,
1256 int pos) {
1257 return PreParserExpression::Default(); 1255 return PreParserExpression::Default();
1258 } 1256 }
1259 PreParserExpression NewArrayLiteral(PreParserExpressionList values, 1257 PreParserExpression NewArrayLiteral(PreParserExpressionList values,
1260 int literal_index, 1258 int literal_index,
1261 bool is_strong, 1259 bool is_strong,
1262 int pos) { 1260 int pos) {
1263 return PreParserExpression::ArrayLiteral(); 1261 return PreParserExpression::ArrayLiteral();
1264 } 1262 }
1265 PreParserExpression NewArrayLiteral(PreParserExpressionList values, 1263 PreParserExpression NewArrayLiteral(PreParserExpressionList values,
1266 int first_spread_index, int literal_index, 1264 int first_spread_index, int literal_index,
(...skipping 952 matching lines...) Expand 10 before | Expand all | Expand 10 after
2219 if (!scanner()->ScanRegExpPattern(seen_equal)) { 2217 if (!scanner()->ScanRegExpPattern(seen_equal)) {
2220 Next(); 2218 Next();
2221 ReportMessage(MessageTemplate::kUnterminatedRegExp); 2219 ReportMessage(MessageTemplate::kUnterminatedRegExp);
2222 *ok = false; 2220 *ok = false;
2223 return Traits::EmptyExpression(); 2221 return Traits::EmptyExpression();
2224 } 2222 }
2225 2223
2226 int literal_index = function_state_->NextMaterializedLiteralIndex(); 2224 int literal_index = function_state_->NextMaterializedLiteralIndex();
2227 2225
2228 IdentifierT js_pattern = this->GetNextSymbol(scanner()); 2226 IdentifierT js_pattern = this->GetNextSymbol(scanner());
2229 if (!scanner()->ScanRegExpFlags()) { 2227 Maybe<RegExp::Flags> flags = scanner()->ScanRegExpFlags();
2228 if (flags.IsNothing()) {
2230 Next(); 2229 Next();
2231 ReportMessage(MessageTemplate::kMalformedRegExpFlags); 2230 ReportMessage(MessageTemplate::kMalformedRegExpFlags);
2232 *ok = false; 2231 *ok = false;
2233 return Traits::EmptyExpression(); 2232 return Traits::EmptyExpression();
2234 } 2233 }
2235 IdentifierT js_flags = this->GetNextSymbol(scanner()); 2234 int js_flags = flags.FromJust();
2236 Next(); 2235 Next();
2237 return factory()->NewRegExpLiteral(js_pattern, js_flags, literal_index, 2236 return factory()->NewRegExpLiteral(js_pattern, js_flags, literal_index,
2238 is_strong(language_mode()), pos); 2237 is_strong(language_mode()), pos);
2239 } 2238 }
2240 2239
2241 2240
2242 #define CHECK_OK ok); \ 2241 #define CHECK_OK ok); \
2243 if (!*ok) return this->EmptyExpression(); \ 2242 if (!*ok) return this->EmptyExpression(); \
2244 ((void)0 2243 ((void)0
2245 #define DUMMY ) // to make indentation work 2244 #define DUMMY ) // to make indentation work
(...skipping 2008 matching lines...) Expand 10 before | Expand all | Expand 10 after
4254 return; 4253 return;
4255 } 4254 }
4256 has_seen_constructor_ = true; 4255 has_seen_constructor_ = true;
4257 return; 4256 return;
4258 } 4257 }
4259 } 4258 }
4260 } // namespace internal 4259 } // namespace internal
4261 } // namespace v8 4260 } // namespace v8
4262 4261
4263 #endif // V8_PREPARSER_H 4262 #endif // V8_PREPARSER_H
OLDNEW
« no previous file with comments | « src/objects.cc ('k') | src/prettyprinter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698