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

Unified Diff: src/ast/ast.h

Issue 1712833002: Don't reflect ES2015 Function name inference in Function.prototype.toString (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Move bits around to make STATIC_ASSERT happy Created 4 years, 10 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/ast.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 ba35956da8b651fbe12af3ca5c88789456da0629..b611d2701addfb06b91be3ef2578324f67169dcf 100644
--- a/src/ast/ast.h
+++ b/src/ast/ast.h
@@ -1429,9 +1429,7 @@ class ObjectLiteralProperty final : public ZoneObject {
void set_receiver_type(Handle<Map> map) { receiver_type_ = map; }
- bool NeedsSetFunctionName() const {
- return is_computed_name_ && value_->IsAnonymousFunctionDefinition();
- }
+ bool NeedsSetFunctionName() const;
protected:
friend class AstNodeFactory;
@@ -2575,15 +2573,13 @@ class FunctionLiteral final : public Expression {
kAnonymousExpression,
kNamedExpression,
kDeclaration,
- kGlobalOrEval
+ kAccessorOrMethod
};
enum ParameterFlag { kNoDuplicateParameters, kHasDuplicateParameters };
enum EagerCompileHint { kShouldEagerCompile, kShouldLazyCompile };
- enum ArityRestriction { kNormalArity, kGetterArity, kSetterArity };
-
DECLARE_NODE_TYPE(FunctionLiteral)
Handle<String> name() const { return raw_name_->string(); }
@@ -2596,8 +2592,13 @@ class FunctionLiteral final : public Expression {
int start_position() const;
int end_position() const;
int SourceSize() const { return end_position() - start_position(); }
- bool is_expression() const { return IsExpression::decode(bitfield_); }
- bool is_anonymous() const { return IsAnonymous::decode(bitfield_); }
+ bool is_declaration() const { return IsDeclaration::decode(bitfield_); }
+ bool is_named_expression() const {
+ return IsNamedExpression::decode(bitfield_);
+ }
+ bool is_anonymous_expression() const {
+ return IsAnonymousExpression::decode(bitfield_);
+ }
LanguageMode language_mode() const;
static bool NeedsHomeObject(Expression* expr);
@@ -2690,10 +2691,7 @@ class FunctionLiteral final : public Expression {
}
bool IsAnonymousFunctionDefinition() const final {
- // TODO(adamk): This isn't quite accurate, as many non-expressions
- // (such as concise methods) are marked as anonymous, but it's
- // sufficient for the current callers.
- return is_anonymous();
+ return is_anonymous_expression();
}
protected:
@@ -2704,7 +2702,7 @@ class FunctionLiteral final : public Expression {
FunctionType function_type,
ParameterFlag has_duplicate_parameters,
EagerCompileHint eager_compile_hint, FunctionKind kind,
- int position)
+ int position, bool is_function)
: Expression(zone, position),
raw_name_(name),
scope_(scope),
@@ -2717,26 +2715,28 @@ class FunctionLiteral final : public Expression {
parameter_count_(parameter_count),
function_token_position_(RelocInfo::kNoPosition) {
bitfield_ =
- IsExpression::encode(function_type != kDeclaration) |
- IsAnonymous::encode(function_type == kAnonymousExpression) |
+ IsDeclaration::encode(function_type == kDeclaration) |
+ IsNamedExpression::encode(function_type == kNamedExpression) |
+ IsAnonymousExpression::encode(function_type == kAnonymousExpression) |
Pretenure::encode(false) |
HasDuplicateParameters::encode(has_duplicate_parameters ==
kHasDuplicateParameters) |
- IsFunction::encode(function_type != kGlobalOrEval) |
+ IsFunction::encode(is_function) |
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> {};
+ class IsDeclaration : public BitField16<bool, 0, 1> {};
+ class IsNamedExpression : public BitField16<bool, 1, 1> {};
+ class IsAnonymousExpression : public BitField16<bool, 2, 1> {};
+ class Pretenure : public BitField16<bool, 3, 1> {};
+ class HasDuplicateParameters : public BitField16<bool, 4, 1> {};
+ class IsFunction : public BitField16<bool, 5, 1> {};
+ class ShouldEagerCompile : public BitField16<bool, 6, 1> {};
+ class ShouldBeUsedOnceHint : public BitField16<bool, 7, 1> {};
+ class FunctionKindBits : public BitField16<FunctionKind, 8, 8> {};
// Start with 16-bit field, which should get packed together
// with Expression's trailing 16-bit field.
@@ -3413,7 +3413,22 @@ class AstNodeFactory final BASE_EMBEDDED {
parser_zone_, name, ast_value_factory_, scope, body,
materialized_literal_count, expected_property_count, parameter_count,
function_type, has_duplicate_parameters, eager_compile_hint, kind,
- position);
+ position, true);
+ }
+
+ // Creates a FunctionLiteral representing a top-level script, the
+ // result of an eval (top-level or otherwise), or the result of calling
+ // the Function constructor.
+ FunctionLiteral* NewScriptOrEvalFunctionLiteral(
+ Scope* scope, ZoneList<Statement*>* body, int materialized_literal_count,
+ int expected_property_count) {
+ return new (parser_zone_) FunctionLiteral(
+ parser_zone_, ast_value_factory_->empty_string(), ast_value_factory_,
+ scope, body, materialized_literal_count, expected_property_count, 0,
+ FunctionLiteral::kAnonymousExpression,
+ FunctionLiteral::kNoDuplicateParameters,
+ FunctionLiteral::kShouldLazyCompile, FunctionKind::kNormalFunction, 0,
+ false);
}
ClassLiteral* NewClassLiteral(Scope* scope, VariableProxy* proxy,
« no previous file with comments | « no previous file | src/ast/ast.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698