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

Unified Diff: src/preparser.h

Issue 1399893002: [es7] implement |do| expressions proposal (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Less code duplication in Rewriter Created 5 years, 2 months 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
Index: src/preparser.h
diff --git a/src/preparser.h b/src/preparser.h
index d890ae5c216d7b497d0f3801288bd2fe7c4123fb..2608628b747e0feeccdcfa1c5def4ea23d2a5cca 100644
--- a/src/preparser.h
+++ b/src/preparser.h
@@ -88,6 +88,7 @@ class ParserBase : public Traits {
typedef typename Traits::Type::FunctionLiteral FunctionLiteralT;
typedef typename Traits::Type::Literal LiteralT;
typedef typename Traits::Type::ObjectLiteralProperty ObjectLiteralPropertyT;
+ typedef typename Traits::Type::StatementList StatementListT;
ParserBase(Zone* zone, Scanner* scanner, uintptr_t stack_limit,
v8::Extension* extension, AstValueFactory* ast_value_factory,
@@ -117,7 +118,8 @@ class ParserBase : public Traits {
allow_harmony_spread_arrays_(false),
allow_harmony_new_target_(false),
allow_strong_mode_(false),
- allow_legacy_const_(true) {}
+ allow_legacy_const_(true),
+ allow_harmony_do_expressions_(false) {}
#define ALLOW_ACCESSORS(name) \
bool allow_##name() const { return allow_##name##_; } \
@@ -136,8 +138,18 @@ class ParserBase : public Traits {
ALLOW_ACCESSORS(harmony_new_target);
ALLOW_ACCESSORS(strong_mode);
ALLOW_ACCESSORS(legacy_const);
+ ALLOW_ACCESSORS(harmony_do_expressions);
#undef ALLOW_ACCESSORS
+ INLINE(bool CheckStackOverflow()) {
adamk 2015/10/15 10:59:33 I don't think you need this anymore.
+ if (stack_overflow_) return true;
+ if (GetCurrentStackPosition() >= stack_limit_) return false;
+ stack_overflow_ = true;
+ return true;
+ }
+
+ uintptr_t stack_limit() const { return stack_limit_; }
+
protected:
enum AllowRestrictedIdentifiers {
kAllowRestrictedIdentifiers,
@@ -841,6 +853,7 @@ class ParserBase : public Traits {
bool allow_harmony_new_target_;
bool allow_strong_mode_;
bool allow_legacy_const_;
+ bool allow_harmony_do_expressions_;
};
@@ -1697,6 +1710,7 @@ class PreParserTraits {
// Temporary glue; these functions will move to ParserBase.
PreParserExpression ParseV8Intrinsic(bool* ok);
+ V8_INLINE PreParserExpression ParseDoExpression(bool* ok);
PreParserExpression ParseFunctionLiteral(
PreParserIdentifier name, Scanner::Location function_name_location,
FunctionNameValidity function_name_validity, FunctionKind kind,
@@ -1837,6 +1851,7 @@ class PreParser : public ParserBase<PreParserTraits> {
Expression ParseConditionalExpression(bool accept_IN, bool* ok);
Expression ParseObjectLiteral(bool* ok);
Expression ParseV8Intrinsic(bool* ok);
+ Expression ParseDoExpression(bool* ok);
V8_INLINE void SkipLazyFunctionBody(int* materialized_literal_count,
int* expected_property_count, bool* ok);
@@ -1902,6 +1917,11 @@ void PreParserTraits::ParseArrowFunctionFormalParameterList(
}
+PreParserExpression PreParserTraits::ParseDoExpression(bool* ok) {
+ return pre_parser_->ParseDoExpression(ok);
+}
+
+
PreParserStatementList PreParser::ParseEagerFunctionBody(
PreParserIdentifier function_name, int pos,
const PreParserFormalParameters& parameters, FunctionKind kind,
@@ -2222,6 +2242,7 @@ ParserBase<Traits>::ParsePrimaryExpression(ExpressionClassifier* classifier,
// ClassLiteral
// '(' Expression ')'
// TemplateLiteral
+ // do Block
int beg_pos = scanner()->peek_location().beg_pos;
int end_pos = scanner()->peek_location().end_pos;
@@ -2402,6 +2423,13 @@ ParserBase<Traits>::ParsePrimaryExpression(ExpressionClassifier* classifier,
result = this->ParseV8Intrinsic(CHECK_OK);
break;
}
+
+ case Token::DO:
+ if (token == Token::DO && allow_harmony_do_expressions()) {
adamk 2015/10/15 10:59:33 Didn't we just switch on |token|?
caitp (gmail) 2015/10/15 11:24:17 It can fall through from the above, unfortunately
adamk 2015/10/15 12:01:25 What if you restructured the cases to have returns
caitp (gmail) 2015/10/15 12:34:07 I think doing that will add a lot of unrelated noi
adamk 2015/10/15 12:42:27 If you want to wait on it, please add a TODO.
+ BindingPatternUnexpectedToken(classifier);
+ result = Traits::ParseDoExpression(CHECK_OK);
+ break;
+ }
// If we're not allowing special syntax we fall-through to the
// default case.

Powered by Google App Engine
This is Rietveld 408576698