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

Side by Side Diff: src/ast/ast.h

Issue 2629143002: [runtime] Remove SharedFunctionInfo::is_function which is the inverse of SFI::is_toplevel (Closed)
Patch Set: Also remove is_function from FunctionLiteral Created 3 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 unified diff | Download patch
« no previous file with comments | « no previous file | src/compiler-dispatcher/compiler-dispatcher.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_AST_AST_H_ 5 #ifndef V8_AST_AST_H_
6 #define V8_AST_AST_H_ 6 #define V8_AST_AST_H_
7 7
8 #include "src/assembler.h" 8 #include "src/assembler.h"
9 #include "src/ast/ast-types.h" 9 #include "src/ast/ast-types.h"
10 #include "src/ast/ast-value-factory.h" 10 #include "src/ast/ast-value-factory.h"
(...skipping 2611 matching lines...) Expand 10 before | Expand all | Expand 10 after
2622 inferred_name_ = Handle<String>(); 2622 inferred_name_ = Handle<String>();
2623 } 2623 }
2624 2624
2625 bool pretenure() const { return Pretenure::decode(bit_field_); } 2625 bool pretenure() const { return Pretenure::decode(bit_field_); }
2626 void set_pretenure() { bit_field_ = Pretenure::update(bit_field_, true); } 2626 void set_pretenure() { bit_field_ = Pretenure::update(bit_field_, true); }
2627 2627
2628 bool has_duplicate_parameters() const { 2628 bool has_duplicate_parameters() const {
2629 return HasDuplicateParameters::decode(bit_field_); 2629 return HasDuplicateParameters::decode(bit_field_);
2630 } 2630 }
2631 2631
2632 bool is_function() const { return IsFunction::decode(bit_field_); }
2633
2634 // This is used as a heuristic on when to eagerly compile a function 2632 // This is used as a heuristic on when to eagerly compile a function
2635 // literal. We consider the following constructs as hints that the 2633 // literal. We consider the following constructs as hints that the
2636 // function will be called immediately: 2634 // function will be called immediately:
2637 // - (function() { ... })(); 2635 // - (function() { ... })();
2638 // - var x = function() { ... }(); 2636 // - var x = function() { ... }();
2639 bool ShouldEagerCompile() const; 2637 bool ShouldEagerCompile() const;
2640 void SetShouldEagerCompile(); 2638 void SetShouldEagerCompile();
2641 2639
2642 // A hint that we expect this function to be called (exactly) once, 2640 // A hint that we expect this function to be called (exactly) once,
2643 // i.e. we suspect it's an initialization function. 2641 // i.e. we suspect it's an initialization function.
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2688 private: 2686 private:
2689 friend class AstNodeFactory; 2687 friend class AstNodeFactory;
2690 2688
2691 FunctionLiteral(Zone* zone, const AstString* name, 2689 FunctionLiteral(Zone* zone, const AstString* name,
2692 AstValueFactory* ast_value_factory, DeclarationScope* scope, 2690 AstValueFactory* ast_value_factory, DeclarationScope* scope,
2693 ZoneList<Statement*>* body, int materialized_literal_count, 2691 ZoneList<Statement*>* body, int materialized_literal_count,
2694 int expected_property_count, int parameter_count, 2692 int expected_property_count, int parameter_count,
2695 int function_length, FunctionType function_type, 2693 int function_length, FunctionType function_type,
2696 ParameterFlag has_duplicate_parameters, 2694 ParameterFlag has_duplicate_parameters,
2697 EagerCompileHint eager_compile_hint, int position, 2695 EagerCompileHint eager_compile_hint, int position,
2698 bool is_function, bool has_braces, int function_literal_id) 2696 bool has_braces, int function_literal_id)
2699 : Expression(position, kFunctionLiteral), 2697 : Expression(position, kFunctionLiteral),
2700 materialized_literal_count_(materialized_literal_count), 2698 materialized_literal_count_(materialized_literal_count),
2701 expected_property_count_(expected_property_count), 2699 expected_property_count_(expected_property_count),
2702 parameter_count_(parameter_count), 2700 parameter_count_(parameter_count),
2703 function_length_(function_length), 2701 function_length_(function_length),
2704 function_token_position_(kNoSourcePosition), 2702 function_token_position_(kNoSourcePosition),
2705 yield_count_(0), 2703 yield_count_(0),
2706 has_braces_(has_braces), 2704 has_braces_(has_braces),
2707 raw_name_(name), 2705 raw_name_(name),
2708 scope_(scope), 2706 scope_(scope),
2709 body_(body), 2707 body_(body),
2710 raw_inferred_name_(ast_value_factory->empty_string()), 2708 raw_inferred_name_(ast_value_factory->empty_string()),
2711 ast_properties_(zone), 2709 ast_properties_(zone),
2712 function_literal_id_(function_literal_id) { 2710 function_literal_id_(function_literal_id) {
2713 bit_field_ |= FunctionTypeBits::encode(function_type) | 2711 bit_field_ |= FunctionTypeBits::encode(function_type) |
2714 Pretenure::encode(false) | 2712 Pretenure::encode(false) |
2715 HasDuplicateParameters::encode(has_duplicate_parameters == 2713 HasDuplicateParameters::encode(has_duplicate_parameters ==
2716 kHasDuplicateParameters) | 2714 kHasDuplicateParameters) |
2717 IsFunction::encode(is_function) |
2718 ShouldNotBeUsedOnceHintField::encode(false) | 2715 ShouldNotBeUsedOnceHintField::encode(false) |
2719 DontOptimizeReasonField::encode(kNoReason); 2716 DontOptimizeReasonField::encode(kNoReason);
2720 if (eager_compile_hint == kShouldEagerCompile) SetShouldEagerCompile(); 2717 if (eager_compile_hint == kShouldEagerCompile) SetShouldEagerCompile();
2721 } 2718 }
2722 2719
2723 class FunctionTypeBits 2720 class FunctionTypeBits
2724 : public BitField<FunctionType, Expression::kNextBitFieldIndex, 2> {}; 2721 : public BitField<FunctionType, Expression::kNextBitFieldIndex, 2> {};
2725 class Pretenure : public BitField<bool, FunctionTypeBits::kNext, 1> {}; 2722 class Pretenure : public BitField<bool, FunctionTypeBits::kNext, 1> {};
2726 class HasDuplicateParameters : public BitField<bool, Pretenure::kNext, 1> {}; 2723 class HasDuplicateParameters : public BitField<bool, Pretenure::kNext, 1> {};
2727 class IsFunction : public BitField<bool, HasDuplicateParameters::kNext, 1> {};
2728 class ShouldNotBeUsedOnceHintField 2724 class ShouldNotBeUsedOnceHintField
2729 : public BitField<bool, IsFunction::kNext, 1> {}; 2725 : public BitField<bool, HasDuplicateParameters::kNext, 1> {};
2730 class DontOptimizeReasonField 2726 class DontOptimizeReasonField
2731 : public BitField<BailoutReason, ShouldNotBeUsedOnceHintField::kNext, 8> { 2727 : public BitField<BailoutReason, ShouldNotBeUsedOnceHintField::kNext, 8> {
2732 }; 2728 };
2733 2729
2734 int materialized_literal_count_; 2730 int materialized_literal_count_;
2735 int expected_property_count_; 2731 int expected_property_count_;
2736 int parameter_count_; 2732 int parameter_count_;
2737 int function_length_; 2733 int function_length_;
2738 int function_token_position_; 2734 int function_token_position_;
2739 int yield_count_; 2735 int yield_count_;
(...skipping 732 matching lines...) Expand 10 before | Expand all | Expand 10 after
3472 ZoneList<Statement*>* body, int materialized_literal_count, 3468 ZoneList<Statement*>* body, int materialized_literal_count,
3473 int expected_property_count, int parameter_count, int function_length, 3469 int expected_property_count, int parameter_count, int function_length,
3474 FunctionLiteral::ParameterFlag has_duplicate_parameters, 3470 FunctionLiteral::ParameterFlag has_duplicate_parameters,
3475 FunctionLiteral::FunctionType function_type, 3471 FunctionLiteral::FunctionType function_type,
3476 FunctionLiteral::EagerCompileHint eager_compile_hint, int position, 3472 FunctionLiteral::EagerCompileHint eager_compile_hint, int position,
3477 bool has_braces, int function_literal_id) { 3473 bool has_braces, int function_literal_id) {
3478 return new (zone_) FunctionLiteral( 3474 return new (zone_) FunctionLiteral(
3479 zone_, name, ast_value_factory_, scope, body, 3475 zone_, name, ast_value_factory_, scope, body,
3480 materialized_literal_count, expected_property_count, parameter_count, 3476 materialized_literal_count, expected_property_count, parameter_count,
3481 function_length, function_type, has_duplicate_parameters, 3477 function_length, function_type, has_duplicate_parameters,
3482 eager_compile_hint, position, true, has_braces, function_literal_id); 3478 eager_compile_hint, position, has_braces, function_literal_id);
3483 } 3479 }
3484 3480
3485 // Creates a FunctionLiteral representing a top-level script, the 3481 // Creates a FunctionLiteral representing a top-level script, the
3486 // result of an eval (top-level or otherwise), or the result of calling 3482 // result of an eval (top-level or otherwise), or the result of calling
3487 // the Function constructor. 3483 // the Function constructor.
3488 FunctionLiteral* NewScriptOrEvalFunctionLiteral( 3484 FunctionLiteral* NewScriptOrEvalFunctionLiteral(
3489 DeclarationScope* scope, ZoneList<Statement*>* body, 3485 DeclarationScope* scope, ZoneList<Statement*>* body,
3490 int materialized_literal_count, int expected_property_count, 3486 int materialized_literal_count, int expected_property_count,
3491 int parameter_count) { 3487 int parameter_count) {
3492 return new (zone_) FunctionLiteral( 3488 return new (zone_) FunctionLiteral(
3493 zone_, ast_value_factory_->empty_string(), ast_value_factory_, scope, 3489 zone_, ast_value_factory_->empty_string(), ast_value_factory_, scope,
3494 body, materialized_literal_count, expected_property_count, 3490 body, materialized_literal_count, expected_property_count,
3495 parameter_count, parameter_count, FunctionLiteral::kAnonymousExpression, 3491 parameter_count, parameter_count, FunctionLiteral::kAnonymousExpression,
3496 FunctionLiteral::kNoDuplicateParameters, 3492 FunctionLiteral::kNoDuplicateParameters,
3497 FunctionLiteral::kShouldLazyCompile, 0, false, true, 3493 FunctionLiteral::kShouldLazyCompile, 0, true,
3498 FunctionLiteral::kIdTypeTopLevel); 3494 FunctionLiteral::kIdTypeTopLevel);
3499 } 3495 }
3500 3496
3501 ClassLiteral::Property* NewClassLiteralProperty( 3497 ClassLiteral::Property* NewClassLiteralProperty(
3502 Expression* key, Expression* value, ClassLiteralProperty::Kind kind, 3498 Expression* key, Expression* value, ClassLiteralProperty::Kind kind,
3503 bool is_static, bool is_computed_name) { 3499 bool is_static, bool is_computed_name) {
3504 return new (zone_) 3500 return new (zone_)
3505 ClassLiteral::Property(key, value, kind, is_static, is_computed_name); 3501 ClassLiteral::Property(key, value, kind, is_static, is_computed_name);
3506 } 3502 }
3507 3503
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
3621 : NULL; \ 3617 : NULL; \
3622 } 3618 }
3623 AST_NODE_LIST(DECLARE_NODE_FUNCTIONS) 3619 AST_NODE_LIST(DECLARE_NODE_FUNCTIONS)
3624 #undef DECLARE_NODE_FUNCTIONS 3620 #undef DECLARE_NODE_FUNCTIONS
3625 3621
3626 3622
3627 } // namespace internal 3623 } // namespace internal
3628 } // namespace v8 3624 } // namespace v8
3629 3625
3630 #endif // V8_AST_AST_H_ 3626 #endif // V8_AST_AST_H_
OLDNEW
« no previous file with comments | « no previous file | src/compiler-dispatcher/compiler-dispatcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698