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

Unified Diff: src/ast.h

Issue 12646003: Add parser support for generators. (Closed) Base URL: git://github.com/v8/v8.git@bleeding_edge
Patch Set: Fix bad initialization list in last preparser commit Created 7 years, 9 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
« no previous file with comments | « no previous file | src/ast.cc » ('j') | test/mjsunit/harmony/generators-parsing.js » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ast.h
diff --git a/src/ast.h b/src/ast.h
index 05f0653dc98ee4515390634551f5449e6ea0b46f..26f022c8f9922a2a12f5b8fded325175475e26cb 100644
--- a/src/ast.h
+++ b/src/ast.h
@@ -102,6 +102,7 @@ namespace internal {
V(ObjectLiteral) \
V(ArrayLiteral) \
V(Assignment) \
+ V(Yield) \
V(Throw) \
V(Property) \
V(Call) \
@@ -1923,6 +1924,31 @@ class Assignment: public Expression {
};
+class Yield: public Expression {
+ public:
+ DECLARE_NODE_TYPE(Yield)
+
+ Expression* expression() const { return expression_; }
+ bool is_delegating_yield() const { return is_delegating_yield_; }
+ virtual int position() const { return pos_; }
+
+ protected:
+ Yield(Isolate* isolate,
+ Expression* expression,
+ bool is_delegating_yield,
+ int pos)
+ : Expression(isolate),
+ expression_(expression),
+ is_delegating_yield_(is_delegating_yield),
+ pos_(pos) { }
+
+ private:
+ Expression* expression_;
+ bool is_delegating_yield_;
+ int pos_;
+};
+
+
class Throw: public Expression {
public:
DECLARE_NODE_TYPE(Throw)
@@ -1963,6 +1989,11 @@ class FunctionLiteral: public Expression {
kNotParenthesized
};
+ enum IsGeneratorFlag {
+ kIsGenerator,
+ kNotGenerator
+ };
+
DECLARE_NODE_TYPE(FunctionLiteral)
Handle<String> name() const { return name_; }
@@ -2023,6 +2054,10 @@ class FunctionLiteral: public Expression {
bitfield_ = IsParenthesized::update(bitfield_, kIsParenthesized);
}
+ bool is_generator() {
+ return IsGenerator::decode(bitfield_) == kIsGenerator;
+ }
+
int ast_node_count() { return ast_properties_.node_count(); }
AstProperties::Flags* flags() { return ast_properties_.flags(); }
void set_ast_properties(AstProperties* ast_properties) {
@@ -2043,7 +2078,8 @@ class FunctionLiteral: public Expression {
Type type,
ParameterFlag has_duplicate_parameters,
IsFunctionFlag is_function,
- IsParenthesizedFlag is_parenthesized)
+ IsParenthesizedFlag is_parenthesized,
+ IsGeneratorFlag is_generator)
: Expression(isolate),
name_(name),
scope_(scope),
@@ -2063,7 +2099,8 @@ class FunctionLiteral: public Expression {
Pretenure::encode(false) |
HasDuplicateParameters::encode(has_duplicate_parameters) |
IsFunction::encode(is_function) |
- IsParenthesized::encode(is_parenthesized);
+ IsParenthesized::encode(is_parenthesized) |
+ IsGenerator::encode(is_generator);
}
private:
@@ -2088,6 +2125,7 @@ class FunctionLiteral: public Expression {
class HasDuplicateParameters: public BitField<ParameterFlag, 4, 1> {};
class IsFunction: public BitField<IsFunctionFlag, 5, 1> {};
class IsParenthesized: public BitField<IsParenthesizedFlag, 6, 1> {};
+ class IsGenerator: public BitField<IsGeneratorFlag, 7, 1> {};
};
@@ -2886,6 +2924,12 @@ class AstNodeFactory BASE_EMBEDDED {
VISIT_AND_RETURN(Assignment, assign)
}
+ Yield* NewYield(Expression* expression, bool is_delegating_yield, int pos) {
+ Yield* yield =
+ new(zone_) Yield(isolate_, expression, is_delegating_yield, pos);
+ VISIT_AND_RETURN(Yield, yield)
+ }
+
Throw* NewThrow(Expression* exception, int pos) {
Throw* t = new(zone_) Throw(isolate_, exception, pos);
VISIT_AND_RETURN(Throw, t)
@@ -2904,13 +2948,14 @@ class AstNodeFactory BASE_EMBEDDED {
FunctionLiteral::ParameterFlag has_duplicate_parameters,
FunctionLiteral::Type type,
FunctionLiteral::IsFunctionFlag is_function,
- FunctionLiteral::IsParenthesizedFlag is_parenthesized) {
+ FunctionLiteral::IsParenthesizedFlag is_parenthesized,
+ FunctionLiteral::IsGeneratorFlag is_generator) {
FunctionLiteral* lit = new(zone_) FunctionLiteral(
isolate_, name, scope, body,
materialized_literal_count, expected_property_count, handler_count,
has_only_simple_this_property_assignments, this_property_assignments,
parameter_count, type, has_duplicate_parameters, is_function,
- is_parenthesized);
+ is_parenthesized, is_generator);
// Top-level literal doesn't count for the AST's properties.
if (is_function == FunctionLiteral::kIsFunction) {
visitor_.VisitFunctionLiteral(lit);
« no previous file with comments | « no previous file | src/ast.cc » ('j') | test/mjsunit/harmony/generators-parsing.js » ('J')

Powered by Google App Engine
This is Rietveld 408576698