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

Side by Side Diff: src/objects.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 unified diff | Download patch
« no previous file with comments | « src/globals.h ('k') | src/objects.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 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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_OBJECTS_H_ 5 #ifndef V8_OBJECTS_H_
6 #define V8_OBJECTS_H_ 6 #define V8_OBJECTS_H_
7 7
8 #include <iosfwd> 8 #include <iosfwd>
9 9
10 #include "src/allocation.h" 10 #include "src/allocation.h"
(...skipping 6756 matching lines...) Expand 10 before | Expand all | Expand 10 after
6767 inline void set_function_token_position(int function_token_position); 6767 inline void set_function_token_position(int function_token_position);
6768 6768
6769 // Position of this function in the script source. 6769 // Position of this function in the script source.
6770 inline int start_position() const; 6770 inline int start_position() const;
6771 inline void set_start_position(int start_position); 6771 inline void set_start_position(int start_position);
6772 6772
6773 // End position of this function in the script source. 6773 // End position of this function in the script source.
6774 inline int end_position() const; 6774 inline int end_position() const;
6775 inline void set_end_position(int end_position); 6775 inline void set_end_position(int end_position);
6776 6776
6777 // Is this function a function expression in the source code. 6777 // Is this function a named function expression in the source code.
6778 DECL_BOOLEAN_ACCESSORS(is_expression) 6778 DECL_BOOLEAN_ACCESSORS(is_named_expression)
6779 6779
6780 // Is this function a top-level function (scripts, evals). 6780 // Is this function a top-level function (scripts, evals).
6781 DECL_BOOLEAN_ACCESSORS(is_toplevel) 6781 DECL_BOOLEAN_ACCESSORS(is_toplevel)
6782 6782
6783 // Bit field containing various information collected by the compiler to 6783 // Bit field containing various information collected by the compiler to
6784 // drive optimization. 6784 // drive optimization.
6785 inline int compiler_hints() const; 6785 inline int compiler_hints() const;
6786 inline void set_compiler_hints(int value); 6786 inline void set_compiler_hints(int value);
6787 6787
6788 inline int ast_node_count() const; 6788 inline int ast_node_count() const;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
6836 6836
6837 // Indicate that this function should always be inlined in optimized code. 6837 // Indicate that this function should always be inlined in optimized code.
6838 DECL_BOOLEAN_ACCESSORS(force_inline) 6838 DECL_BOOLEAN_ACCESSORS(force_inline)
6839 6839
6840 // Indicates that the function was created by the Function function. 6840 // Indicates that the function was created by the Function function.
6841 // Though it's anonymous, toString should treat it as if it had the name 6841 // Though it's anonymous, toString should treat it as if it had the name
6842 // "anonymous". We don't set the name itself so that the system does not 6842 // "anonymous". We don't set the name itself so that the system does not
6843 // see a binding for it. 6843 // see a binding for it.
6844 DECL_BOOLEAN_ACCESSORS(name_should_print_as_anonymous) 6844 DECL_BOOLEAN_ACCESSORS(name_should_print_as_anonymous)
6845 6845
6846 // Indicates that the function is anonymous (the name field can be set 6846 // Indicates that the function is either an anonymous expression
6847 // through the API, which does not change this flag). 6847 // or an arrow function (the name field can be set through the API,
6848 DECL_BOOLEAN_ACCESSORS(is_anonymous) 6848 // which does not change this flag).
6849 DECL_BOOLEAN_ACCESSORS(is_anonymous_expression)
6849 6850
6850 // Is this a function or top-level/eval code. 6851 // Is this a function or top-level/eval code.
6851 DECL_BOOLEAN_ACCESSORS(is_function) 6852 DECL_BOOLEAN_ACCESSORS(is_function)
6852 6853
6853 // Indicates that code for this function cannot be compiled with Crankshaft. 6854 // Indicates that code for this function cannot be compiled with Crankshaft.
6854 DECL_BOOLEAN_ACCESSORS(dont_crankshaft) 6855 DECL_BOOLEAN_ACCESSORS(dont_crankshaft)
6855 6856
6856 // Indicates that code for this function cannot be flushed. 6857 // Indicates that code for this function cannot be flushed.
6857 DECL_BOOLEAN_ACCESSORS(dont_flush) 6858 DECL_BOOLEAN_ACCESSORS(dont_flush)
6858 6859
6859 // Indicates that this function is a generator. 6860 // Indicates that this function is a generator.
6860 DECL_BOOLEAN_ACCESSORS(is_generator) 6861 DECL_BOOLEAN_ACCESSORS(is_generator)
6861 6862
6862 // Indicates that this function is an arrow function. 6863 // Indicates that this function is an arrow function.
6863 DECL_BOOLEAN_ACCESSORS(is_arrow) 6864 DECL_BOOLEAN_ACCESSORS(is_arrow)
6864 6865
6865 // Indicates that this function is a concise method. 6866 // Indicates that this function is a concise method.
6866 DECL_BOOLEAN_ACCESSORS(is_concise_method) 6867 DECL_BOOLEAN_ACCESSORS(is_concise_method)
6867 6868
6868 // Indicates that this function is an accessor (getter or setter). 6869 // Indicates that this function is a getter.
6869 DECL_BOOLEAN_ACCESSORS(is_accessor_function) 6870 DECL_BOOLEAN_ACCESSORS(is_getter_function)
6871
6872 // Indicates that this function is a setter.
6873 DECL_BOOLEAN_ACCESSORS(is_setter_function)
6870 6874
6871 // Indicates that this function is a default constructor. 6875 // Indicates that this function is a default constructor.
6872 DECL_BOOLEAN_ACCESSORS(is_default_constructor) 6876 DECL_BOOLEAN_ACCESSORS(is_default_constructor)
6873 6877
6874 // Indicates that this function is an asm function. 6878 // Indicates that this function is an asm function.
6875 DECL_BOOLEAN_ACCESSORS(asm_function) 6879 DECL_BOOLEAN_ACCESSORS(asm_function)
6876 6880
6877 // Indicates that the the shared function info is deserialized from cache. 6881 // Indicates that the the shared function info is deserialized from cache.
6878 DECL_BOOLEAN_ACCESSORS(deserialized) 6882 DECL_BOOLEAN_ACCESSORS(deserialized)
6879 6883
6880 // Indicates that the the shared function info has never been compiled before. 6884 // Indicates that the the shared function info has never been compiled before.
6881 DECL_BOOLEAN_ACCESSORS(never_compiled) 6885 DECL_BOOLEAN_ACCESSORS(never_compiled)
6882 6886
6887 // Whether this function was created from a FunctionDeclaration.
6888 DECL_BOOLEAN_ACCESSORS(is_declaration)
6889
6883 inline FunctionKind kind(); 6890 inline FunctionKind kind();
6884 inline void set_kind(FunctionKind kind); 6891 inline void set_kind(FunctionKind kind);
6885 6892
6886 // Indicates whether or not the code in the shared function support 6893 // Indicates whether or not the code in the shared function support
6887 // deoptimization. 6894 // deoptimization.
6888 inline bool has_deoptimization_support(); 6895 inline bool has_deoptimization_support();
6889 6896
6890 // Enable deoptimization support through recompiled code. 6897 // Enable deoptimization support through recompiled code.
6891 void EnableDeoptimizationSupport(Code* recompiled); 6898 void EnableDeoptimizationSupport(Code* recompiled);
6892 6899
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
7106 7113
7107 static const int kAlignedSize = POINTER_SIZE_ALIGN(kSize); 7114 static const int kAlignedSize = POINTER_SIZE_ALIGN(kSize);
7108 7115
7109 typedef FixedBodyDescriptor<kNameOffset, 7116 typedef FixedBodyDescriptor<kNameOffset,
7110 kLastPointerFieldOffset + kPointerSize, 7117 kLastPointerFieldOffset + kPointerSize,
7111 kSize> BodyDescriptor; 7118 kSize> BodyDescriptor;
7112 7119
7113 // Bit positions in start_position_and_type. 7120 // Bit positions in start_position_and_type.
7114 // The source code start position is in the 30 most significant bits of 7121 // The source code start position is in the 30 most significant bits of
7115 // the start_position_and_type field. 7122 // the start_position_and_type field.
7116 static const int kIsExpressionBit = 0; 7123 static const int kIsNamedExpressionBit = 0;
7117 static const int kIsTopLevelBit = 1; 7124 static const int kIsTopLevelBit = 1;
7118 static const int kStartPositionShift = 2; 7125 static const int kStartPositionShift = 2;
7119 static const int kStartPositionMask = ~((1 << kStartPositionShift) - 1); 7126 static const int kStartPositionMask = ~((1 << kStartPositionShift) - 1);
7120 7127
7121 // Bit positions in compiler_hints. 7128 // Bit positions in compiler_hints.
7122 enum CompilerHints { 7129 enum CompilerHints {
7123 // byte 0 7130 // byte 0
7124 kAllowLazyCompilation, 7131 kAllowLazyCompilation,
7125 kAllowLazyCompilationWithoutContext, 7132 kAllowLazyCompilationWithoutContext,
7126 kOptimizationDisabled, 7133 kOptimizationDisabled,
7127 kNative, 7134 kNative,
7128 kStrictModeFunction, 7135 kStrictModeFunction,
7129 kStrongModeFunction, 7136 kStrongModeFunction,
7130 kUsesArguments, 7137 kUsesArguments,
7131 kNeedsHomeObject, 7138 kNeedsHomeObject,
7132 // byte 1 7139 // byte 1
7133 kHasDuplicateParameters, 7140 kHasDuplicateParameters,
7134 kForceInline, 7141 kForceInline,
7135 kIsAsmFunction, 7142 kIsAsmFunction,
7136 kIsAnonymous, 7143 kIsAnonymousExpression,
7137 kNameShouldPrintAsAnonymous, 7144 kNameShouldPrintAsAnonymous,
7138 kIsFunction, 7145 kIsFunction,
7139 kDontCrankshaft, 7146 kDontCrankshaft,
7140 kDontFlush, 7147 kDontFlush,
7141 // byte 2 7148 // byte 2
7142 kFunctionKind, 7149 kFunctionKind,
7143 kIsArrow = kFunctionKind, 7150 kIsArrow = kFunctionKind,
7144 kIsGenerator, 7151 kIsGenerator,
7145 kIsConciseMethod, 7152 kIsConciseMethod,
7146 kIsAccessorFunction,
7147 kIsDefaultConstructor, 7153 kIsDefaultConstructor,
7148 kIsSubclassConstructor, 7154 kIsSubclassConstructor,
7149 kIsBaseConstructor, 7155 kIsBaseConstructor,
7156 kIsGetterFunction,
7157 kIsSetterFunction,
7150 // byte 3 7158 // byte 3
7151 kDeserialized, 7159 kDeserialized,
7152 kNeverCompiled, 7160 kNeverCompiled,
7161 kIsDeclaration,
7153 kCompilerHintsCount, // Pseudo entry 7162 kCompilerHintsCount, // Pseudo entry
7154 }; 7163 };
7155 // Add hints for other modes when they're added. 7164 // Add hints for other modes when they're added.
7156 STATIC_ASSERT(LANGUAGE_END == 3); 7165 STATIC_ASSERT(LANGUAGE_END == 3);
7157 // kFunctionKind has to be byte-aligned 7166 // kFunctionKind has to be byte-aligned
7158 STATIC_ASSERT((kFunctionKind % kBitsPerByte) == 0); 7167 STATIC_ASSERT((kFunctionKind % kBitsPerByte) == 0);
7159 // Make sure that FunctionKind and byte 2 are in sync: 7168 // Make sure that FunctionKind and byte 2 are in sync:
7160 #define ASSERT_FUNCTION_KIND_ORDER(functionKind, compilerFunctionKind) \ 7169 #define ASSERT_FUNCTION_KIND_ORDER(functionKind, compilerFunctionKind) \
7161 STATIC_ASSERT(FunctionKind::functionKind == \ 7170 STATIC_ASSERT(FunctionKind::functionKind == \
7162 1 << (compilerFunctionKind - kFunctionKind)) 7171 1 << (compilerFunctionKind - kFunctionKind))
7163 ASSERT_FUNCTION_KIND_ORDER(kArrowFunction, kIsArrow); 7172 ASSERT_FUNCTION_KIND_ORDER(kArrowFunction, kIsArrow);
7164 ASSERT_FUNCTION_KIND_ORDER(kGeneratorFunction, kIsGenerator); 7173 ASSERT_FUNCTION_KIND_ORDER(kGeneratorFunction, kIsGenerator);
7165 ASSERT_FUNCTION_KIND_ORDER(kConciseMethod, kIsConciseMethod); 7174 ASSERT_FUNCTION_KIND_ORDER(kConciseMethod, kIsConciseMethod);
7166 ASSERT_FUNCTION_KIND_ORDER(kAccessorFunction, kIsAccessorFunction);
7167 ASSERT_FUNCTION_KIND_ORDER(kDefaultConstructor, kIsDefaultConstructor); 7175 ASSERT_FUNCTION_KIND_ORDER(kDefaultConstructor, kIsDefaultConstructor);
7168 ASSERT_FUNCTION_KIND_ORDER(kSubclassConstructor, kIsSubclassConstructor); 7176 ASSERT_FUNCTION_KIND_ORDER(kSubclassConstructor, kIsSubclassConstructor);
7169 ASSERT_FUNCTION_KIND_ORDER(kBaseConstructor, kIsBaseConstructor); 7177 ASSERT_FUNCTION_KIND_ORDER(kBaseConstructor, kIsBaseConstructor);
7178 ASSERT_FUNCTION_KIND_ORDER(kGetterFunction, kIsGetterFunction);
7179 ASSERT_FUNCTION_KIND_ORDER(kSetterFunction, kIsSetterFunction);
7170 #undef ASSERT_FUNCTION_KIND_ORDER 7180 #undef ASSERT_FUNCTION_KIND_ORDER
7171 7181
7172 class FunctionKindBits : public BitField<FunctionKind, kIsArrow, 7> {}; 7182 class FunctionKindBits : public BitField<FunctionKind, kIsArrow, 8> {};
7173 7183
7174 class DeoptCountBits : public BitField<int, 0, 4> {}; 7184 class DeoptCountBits : public BitField<int, 0, 4> {};
7175 class OptReenableTriesBits : public BitField<int, 4, 18> {}; 7185 class OptReenableTriesBits : public BitField<int, 4, 18> {};
7176 class ICAgeBits : public BitField<int, 22, 8> {}; 7186 class ICAgeBits : public BitField<int, 22, 8> {};
7177 7187
7178 class OptCountBits : public BitField<int, 0, 22> {}; 7188 class OptCountBits : public BitField<int, 0, 22> {};
7179 class DisabledOptimizationReasonBits : public BitField<int, 22, 8> {}; 7189 class DisabledOptimizationReasonBits : public BitField<int, 22, 8> {};
7180 7190
7181 private: 7191 private:
7182 #if V8_HOST_ARCH_32_BIT 7192 #if V8_HOST_ARCH_32_BIT
(...skipping 3637 matching lines...) Expand 10 before | Expand all | Expand 10 after
10820 } 10830 }
10821 return value; 10831 return value;
10822 } 10832 }
10823 }; 10833 };
10824 10834
10825 10835
10826 } // NOLINT, false-positive due to second-order macros. 10836 } // NOLINT, false-positive due to second-order macros.
10827 } // NOLINT, false-positive due to second-order macros. 10837 } // NOLINT, false-positive due to second-order macros.
10828 10838
10829 #endif // V8_OBJECTS_H_ 10839 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/globals.h ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698