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

Unified Diff: src/ast/ast.h

Issue 1566053002: Clean up FunctionLiteral AST node cruft (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 11 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/parsing/parser.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ast/ast.h
diff --git a/src/ast/ast.h b/src/ast/ast.h
index 8c9ef323ad29b422fb735a92c0ba154e905cac9e..73a180ad6e3152796df1229fefd539377fa7db6c 100644
--- a/src/ast/ast.h
+++ b/src/ast/ast.h
@@ -2561,30 +2561,17 @@ class Throw final : public Expression {
class FunctionLiteral final : public Expression {
public:
enum FunctionType {
- ANONYMOUS_EXPRESSION,
- NAMED_EXPRESSION,
- DECLARATION
+ kAnonymousExpression,
+ kNamedExpression,
+ kDeclaration,
+ kGlobalOrEval
};
- enum ParameterFlag {
- kNoDuplicateParameters = 0,
- kHasDuplicateParameters = 1
- };
-
- enum IsFunctionFlag {
- kGlobalOrEval,
- kIsFunction
- };
+ enum ParameterFlag { kNoDuplicateParameters, kHasDuplicateParameters };
enum EagerCompileHint { kShouldEagerCompile, kShouldLazyCompile };
- enum ShouldBeUsedOnceHint { kShouldBeUsedOnce, kDontKnowIfShouldBeUsedOnce };
-
- enum ArityRestriction {
- NORMAL_ARITY,
- GETTER_ARITY,
- SETTER_ARITY
- };
+ enum ArityRestriction { kNormalArity, kGetterArity, kSetterArity };
DECLARE_NODE_TYPE(FunctionLiteral)
@@ -2645,14 +2632,14 @@ class FunctionLiteral final : public Expression {
inferred_name_ = Handle<String>();
}
- bool pretenure() { return Pretenure::decode(bitfield_); }
- void set_pretenure() { bitfield_ |= Pretenure::encode(true); }
+ bool pretenure() const { return Pretenure::decode(bitfield_); }
+ void set_pretenure() { bitfield_ = Pretenure::update(bitfield_, true); }
- bool has_duplicate_parameters() {
+ bool has_duplicate_parameters() const {
return HasDuplicateParameters::decode(bitfield_);
}
- bool is_function() { return IsFunction::decode(bitfield_) == kIsFunction; }
+ bool is_function() const { return IsFunction::decode(bitfield_); }
// This is used as a heuristic on when to eagerly compile a function
// literal. We consider the following constructs as hints that the
@@ -2660,19 +2647,19 @@ class FunctionLiteral final : public Expression {
// - (function() { ... })();
// - var x = function() { ... }();
bool should_eager_compile() const {
- return EagerCompileHintBit::decode(bitfield_) == kShouldEagerCompile;
+ return ShouldEagerCompile::decode(bitfield_);
}
void set_should_eager_compile() {
- bitfield_ = EagerCompileHintBit::update(bitfield_, kShouldEagerCompile);
+ bitfield_ = ShouldEagerCompile::update(bitfield_, true);
}
// A hint that we expect this function to be called (exactly) once,
// i.e. we suspect it's an initialization function.
bool should_be_used_once_hint() const {
- return ShouldBeUsedOnceHintBit::decode(bitfield_) == kShouldBeUsedOnce;
+ return ShouldBeUsedOnceHint::decode(bitfield_);
}
void set_should_be_used_once_hint() {
- bitfield_ = ShouldBeUsedOnceHintBit::update(bitfield_, kShouldBeUsedOnce);
+ bitfield_ = ShouldBeUsedOnceHint::update(bitfield_, true);
}
FunctionKind kind() const { return FunctionKindBits::decode(bitfield_); }
@@ -2698,7 +2685,6 @@ class FunctionLiteral final : public Expression {
int expected_property_count, int parameter_count,
FunctionType function_type,
ParameterFlag has_duplicate_parameters,
- IsFunctionFlag is_function,
EagerCompileHint eager_compile_hint, FunctionKind kind,
int position)
: Expression(zone, position),
@@ -2712,20 +2698,33 @@ class FunctionLiteral final : public Expression {
expected_property_count_(expected_property_count),
parameter_count_(parameter_count),
function_token_position_(RelocInfo::kNoPosition) {
- bitfield_ = IsExpression::encode(function_type != DECLARATION) |
- IsAnonymous::encode(function_type == ANONYMOUS_EXPRESSION) |
- Pretenure::encode(false) |
- HasDuplicateParameters::encode(has_duplicate_parameters) |
- IsFunction::encode(is_function) |
- EagerCompileHintBit::encode(eager_compile_hint) |
- FunctionKindBits::encode(kind) |
- ShouldBeUsedOnceHintBit::encode(kDontKnowIfShouldBeUsedOnce);
+ bitfield_ =
+ IsExpression::encode(function_type != kDeclaration) |
+ IsAnonymous::encode(function_type == kAnonymousExpression) |
+ Pretenure::encode(false) |
+ HasDuplicateParameters::encode(has_duplicate_parameters ==
+ kHasDuplicateParameters) |
+ IsFunction::encode(function_type != kGlobalOrEval) |
+ ShouldEagerCompile::encode(eager_compile_hint == kShouldEagerCompile) |
+ FunctionKindBits::encode(kind) | ShouldBeUsedOnceHint::encode(false);
DCHECK(IsValidFunctionKind(kind));
}
private:
+ class IsExpression : public BitField16<bool, 0, 1> {};
+ class IsAnonymous : public BitField16<bool, 1, 1> {};
+ class Pretenure : public BitField16<bool, 2, 1> {};
+ class HasDuplicateParameters : public BitField16<bool, 3, 1> {};
+ class IsFunction : public BitField16<bool, 4, 1> {};
+ class ShouldEagerCompile : public BitField16<bool, 5, 1> {};
+ class FunctionKindBits : public BitField16<FunctionKind, 6, 8> {};
+ class ShouldBeUsedOnceHint : public BitField16<bool, 15, 1> {};
+
+ // Start with 16-bit field, which should get packed together
+ // with Expression's trailing 16-bit field.
+ uint16_t bitfield_;
+
const AstString* raw_name_;
- Handle<String> name_;
Scope* scope_;
ZoneList<Statement*>* body_;
const AstString* raw_inferred_name_;
@@ -2737,17 +2736,6 @@ class FunctionLiteral final : public Expression {
int expected_property_count_;
int parameter_count_;
int function_token_position_;
-
- unsigned bitfield_;
- class IsExpression : public BitField<bool, 0, 1> {};
- class IsAnonymous : public BitField<bool, 1, 1> {};
- class Pretenure : public BitField<bool, 2, 1> {};
- class HasDuplicateParameters : public BitField<ParameterFlag, 3, 1> {};
- class IsFunction : public BitField<IsFunctionFlag, 4, 1> {};
- class EagerCompileHintBit : public BitField<EagerCompileHint, 5, 1> {};
- class FunctionKindBits : public BitField<FunctionKind, 6, 8> {};
- class ShouldBeUsedOnceHintBit : public BitField<ShouldBeUsedOnceHint, 15, 1> {
- };
};
@@ -3680,19 +3668,18 @@ class AstNodeFactory final BASE_EMBEDDED {
}
FunctionLiteral* NewFunctionLiteral(
- const AstRawString* name, AstValueFactory* ast_value_factory,
- Scope* scope, ZoneList<Statement*>* body, int materialized_literal_count,
- int expected_property_count, int parameter_count,
+ const AstRawString* name, Scope* scope, ZoneList<Statement*>* body,
+ int materialized_literal_count, int expected_property_count,
+ int parameter_count,
FunctionLiteral::ParameterFlag has_duplicate_parameters,
FunctionLiteral::FunctionType function_type,
- FunctionLiteral::IsFunctionFlag is_function,
FunctionLiteral::EagerCompileHint eager_compile_hint, FunctionKind kind,
int position) {
return new (parser_zone_) FunctionLiteral(
- parser_zone_, name, ast_value_factory, scope, body,
+ parser_zone_, name, ast_value_factory_, scope, body,
materialized_literal_count, expected_property_count, parameter_count,
- function_type, has_duplicate_parameters, is_function,
- eager_compile_hint, kind, position);
+ function_type, has_duplicate_parameters, eager_compile_hint, kind,
+ position);
}
ClassLiteral* NewClassLiteral(const AstRawString* name, Scope* scope,
« no previous file with comments | « no previous file | src/parsing/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698