OLD | NEW |
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 4152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4163 // Return the initialization flag of the given context local. | 4163 // Return the initialization flag of the given context local. |
4164 InitializationFlag ContextLocalInitFlag(int var); | 4164 InitializationFlag ContextLocalInitFlag(int var); |
4165 | 4165 |
4166 // Return the initialization flag of the given context local. | 4166 // Return the initialization flag of the given context local. |
4167 MaybeAssignedFlag ContextLocalMaybeAssignedFlag(int var); | 4167 MaybeAssignedFlag ContextLocalMaybeAssignedFlag(int var); |
4168 | 4168 |
4169 // Return true if this local was introduced by the compiler, and should not be | 4169 // Return true if this local was introduced by the compiler, and should not be |
4170 // exposed to the user in a debugger. | 4170 // exposed to the user in a debugger. |
4171 bool LocalIsSynthetic(int var); | 4171 bool LocalIsSynthetic(int var); |
4172 | 4172 |
4173 String* StrongModeFreeVariableName(int var); | |
4174 int StrongModeFreeVariableStartPosition(int var); | |
4175 int StrongModeFreeVariableEndPosition(int var); | |
4176 | |
4177 // Lookup support for serialized scope info. Returns the | 4173 // Lookup support for serialized scope info. Returns the |
4178 // the stack slot index for a given slot name if the slot is | 4174 // the stack slot index for a given slot name if the slot is |
4179 // present; otherwise returns a value < 0. The name must be an internalized | 4175 // present; otherwise returns a value < 0. The name must be an internalized |
4180 // string. | 4176 // string. |
4181 int StackSlotIndex(String* name); | 4177 int StackSlotIndex(String* name); |
4182 | 4178 |
4183 // Lookup support for serialized scope info. Returns the local context slot | 4179 // Lookup support for serialized scope info. Returns the local context slot |
4184 // index for a given slot name if the slot is present; otherwise | 4180 // index for a given slot name if the slot is present; otherwise |
4185 // returns a value < 0. The name must be an internalized string. | 4181 // returns a value < 0. The name must be an internalized string. |
4186 // If the slot is present and mode != NULL, sets *mode to the corresponding | 4182 // If the slot is present and mode != NULL, sets *mode to the corresponding |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4236 // 2. The number of parameters. This only applies to function scopes. For | 4232 // 2. The number of parameters. This only applies to function scopes. For |
4237 // non-function scopes this is 0. | 4233 // non-function scopes this is 0. |
4238 // 3. The number of non-parameter variables allocated on the stack. | 4234 // 3. The number of non-parameter variables allocated on the stack. |
4239 // 4. The number of non-parameter and parameter variables allocated in the | 4235 // 4. The number of non-parameter and parameter variables allocated in the |
4240 // context. | 4236 // context. |
4241 #define FOR_EACH_SCOPE_INFO_NUMERIC_FIELD(V) \ | 4237 #define FOR_EACH_SCOPE_INFO_NUMERIC_FIELD(V) \ |
4242 V(Flags) \ | 4238 V(Flags) \ |
4243 V(ParameterCount) \ | 4239 V(ParameterCount) \ |
4244 V(StackLocalCount) \ | 4240 V(StackLocalCount) \ |
4245 V(ContextLocalCount) \ | 4241 V(ContextLocalCount) \ |
4246 V(ContextGlobalCount) \ | 4242 V(ContextGlobalCount) |
4247 V(StrongModeFreeVariableCount) | |
4248 | 4243 |
4249 #define FIELD_ACCESSORS(name) \ | 4244 #define FIELD_ACCESSORS(name) \ |
4250 inline void Set##name(int value); \ | 4245 inline void Set##name(int value); \ |
4251 inline int name(); | 4246 inline int name(); |
4252 FOR_EACH_SCOPE_INFO_NUMERIC_FIELD(FIELD_ACCESSORS) | 4247 FOR_EACH_SCOPE_INFO_NUMERIC_FIELD(FIELD_ACCESSORS) |
4253 #undef FIELD_ACCESSORS | 4248 #undef FIELD_ACCESSORS |
4254 | 4249 |
4255 enum { | 4250 enum { |
4256 #define DECL_INDEX(name) k##name, | 4251 #define DECL_INDEX(name) k##name, |
4257 FOR_EACH_SCOPE_INFO_NUMERIC_FIELD(DECL_INDEX) | 4252 FOR_EACH_SCOPE_INFO_NUMERIC_FIELD(DECL_INDEX) |
(...skipping 21 matching lines...) Expand all Loading... |
4279 // Contains the names of local variables and parameters that are allocated | 4274 // Contains the names of local variables and parameters that are allocated |
4280 // in the context. They are stored in increasing order of the context slot | 4275 // in the context. They are stored in increasing order of the context slot |
4281 // index starting with Context::MIN_CONTEXT_SLOTS. One slot is used per | 4276 // index starting with Context::MIN_CONTEXT_SLOTS. One slot is used per |
4282 // context local, so in total this part occupies ContextLocalCount() slots | 4277 // context local, so in total this part occupies ContextLocalCount() slots |
4283 // in the array. | 4278 // in the array. |
4284 // 5. ContextLocalInfoEntries: | 4279 // 5. ContextLocalInfoEntries: |
4285 // Contains the variable modes and initialization flags corresponding to | 4280 // Contains the variable modes and initialization flags corresponding to |
4286 // the context locals in ContextLocalNameEntries. One slot is used per | 4281 // the context locals in ContextLocalNameEntries. One slot is used per |
4287 // context local, so in total this part occupies ContextLocalCount() | 4282 // context local, so in total this part occupies ContextLocalCount() |
4288 // slots in the array. | 4283 // slots in the array. |
4289 // 6. StrongModeFreeVariableNameEntries: | 4284 // 6. RecieverEntryIndex: |
4290 // Stores the names of strong mode free variables. | |
4291 // 7. StrongModeFreeVariablePositionEntries: | |
4292 // Stores the locations (start and end position) of strong mode free | |
4293 // variables. | |
4294 // 8. RecieverEntryIndex: | |
4295 // If the scope binds a "this" value, one slot is reserved to hold the | 4285 // If the scope binds a "this" value, one slot is reserved to hold the |
4296 // context or stack slot index for the variable. | 4286 // context or stack slot index for the variable. |
4297 // 9. FunctionNameEntryIndex: | 4287 // 7. FunctionNameEntryIndex: |
4298 // If the scope belongs to a named function expression this part contains | 4288 // If the scope belongs to a named function expression this part contains |
4299 // information about the function variable. It always occupies two array | 4289 // information about the function variable. It always occupies two array |
4300 // slots: a. The name of the function variable. | 4290 // slots: a. The name of the function variable. |
4301 // b. The context or stack slot index for the variable. | 4291 // b. The context or stack slot index for the variable. |
4302 int ParameterEntriesIndex(); | 4292 int ParameterEntriesIndex(); |
4303 int StackLocalFirstSlotIndex(); | 4293 int StackLocalFirstSlotIndex(); |
4304 int StackLocalEntriesIndex(); | 4294 int StackLocalEntriesIndex(); |
4305 int ContextLocalNameEntriesIndex(); | 4295 int ContextLocalNameEntriesIndex(); |
4306 int ContextGlobalNameEntriesIndex(); | 4296 int ContextGlobalNameEntriesIndex(); |
4307 int ContextLocalInfoEntriesIndex(); | 4297 int ContextLocalInfoEntriesIndex(); |
4308 int ContextGlobalInfoEntriesIndex(); | 4298 int ContextGlobalInfoEntriesIndex(); |
4309 int StrongModeFreeVariableNameEntriesIndex(); | |
4310 int StrongModeFreeVariablePositionEntriesIndex(); | |
4311 int ReceiverEntryIndex(); | 4299 int ReceiverEntryIndex(); |
4312 int FunctionNameEntryIndex(); | 4300 int FunctionNameEntryIndex(); |
4313 | 4301 |
4314 int Lookup(Handle<String> name, int start, int end, VariableMode* mode, | 4302 int Lookup(Handle<String> name, int start, int end, VariableMode* mode, |
4315 VariableLocation* location, InitializationFlag* init_flag, | 4303 VariableLocation* location, InitializationFlag* init_flag, |
4316 MaybeAssignedFlag* maybe_assigned_flag); | 4304 MaybeAssignedFlag* maybe_assigned_flag); |
4317 | 4305 |
4318 // Used for the function name variable for named function expressions, and for | 4306 // Used for the function name variable for named function expressions, and for |
4319 // the receiver. | 4307 // the receiver. |
4320 enum VariableAllocationInfo { NONE, STACK, CONTEXT, UNUSED }; | 4308 enum VariableAllocationInfo { NONE, STACK, CONTEXT, UNUSED }; |
(...skipping 2831 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7152 kDontFlush, | 7140 kDontFlush, |
7153 // byte 2 | 7141 // byte 2 |
7154 kFunctionKind, | 7142 kFunctionKind, |
7155 kIsArrow = kFunctionKind, | 7143 kIsArrow = kFunctionKind, |
7156 kIsGenerator, | 7144 kIsGenerator, |
7157 kIsConciseMethod, | 7145 kIsConciseMethod, |
7158 kIsAccessorFunction, | 7146 kIsAccessorFunction, |
7159 kIsDefaultConstructor, | 7147 kIsDefaultConstructor, |
7160 kIsSubclassConstructor, | 7148 kIsSubclassConstructor, |
7161 kIsBaseConstructor, | 7149 kIsBaseConstructor, |
7162 kIsInObjectLiteral, | |
7163 // byte 3 | 7150 // byte 3 |
7164 kDeserialized, | 7151 kDeserialized, |
7165 kNeverCompiled, | 7152 kNeverCompiled, |
7166 kCompilerHintsCount, // Pseudo entry | 7153 kCompilerHintsCount, // Pseudo entry |
7167 }; | 7154 }; |
7168 // Add hints for other modes when they're added. | 7155 // Add hints for other modes when they're added. |
7169 STATIC_ASSERT(LANGUAGE_END == 3); | 7156 STATIC_ASSERT(LANGUAGE_END == 3); |
7170 // kFunctionKind has to be byte-aligned | 7157 // kFunctionKind has to be byte-aligned |
7171 STATIC_ASSERT((kFunctionKind % kBitsPerByte) == 0); | 7158 STATIC_ASSERT((kFunctionKind % kBitsPerByte) == 0); |
7172 // Make sure that FunctionKind and byte 2 are in sync: | 7159 // Make sure that FunctionKind and byte 2 are in sync: |
7173 #define ASSERT_FUNCTION_KIND_ORDER(functionKind, compilerFunctionKind) \ | 7160 #define ASSERT_FUNCTION_KIND_ORDER(functionKind, compilerFunctionKind) \ |
7174 STATIC_ASSERT(FunctionKind::functionKind == \ | 7161 STATIC_ASSERT(FunctionKind::functionKind == \ |
7175 1 << (compilerFunctionKind - kFunctionKind)) | 7162 1 << (compilerFunctionKind - kFunctionKind)) |
7176 ASSERT_FUNCTION_KIND_ORDER(kArrowFunction, kIsArrow); | 7163 ASSERT_FUNCTION_KIND_ORDER(kArrowFunction, kIsArrow); |
7177 ASSERT_FUNCTION_KIND_ORDER(kGeneratorFunction, kIsGenerator); | 7164 ASSERT_FUNCTION_KIND_ORDER(kGeneratorFunction, kIsGenerator); |
7178 ASSERT_FUNCTION_KIND_ORDER(kConciseMethod, kIsConciseMethod); | 7165 ASSERT_FUNCTION_KIND_ORDER(kConciseMethod, kIsConciseMethod); |
7179 ASSERT_FUNCTION_KIND_ORDER(kAccessorFunction, kIsAccessorFunction); | 7166 ASSERT_FUNCTION_KIND_ORDER(kAccessorFunction, kIsAccessorFunction); |
7180 ASSERT_FUNCTION_KIND_ORDER(kDefaultConstructor, kIsDefaultConstructor); | 7167 ASSERT_FUNCTION_KIND_ORDER(kDefaultConstructor, kIsDefaultConstructor); |
7181 ASSERT_FUNCTION_KIND_ORDER(kSubclassConstructor, kIsSubclassConstructor); | 7168 ASSERT_FUNCTION_KIND_ORDER(kSubclassConstructor, kIsSubclassConstructor); |
7182 ASSERT_FUNCTION_KIND_ORDER(kBaseConstructor, kIsBaseConstructor); | 7169 ASSERT_FUNCTION_KIND_ORDER(kBaseConstructor, kIsBaseConstructor); |
7183 ASSERT_FUNCTION_KIND_ORDER(kInObjectLiteral, kIsInObjectLiteral); | |
7184 #undef ASSERT_FUNCTION_KIND_ORDER | 7170 #undef ASSERT_FUNCTION_KIND_ORDER |
7185 | 7171 |
7186 class FunctionKindBits : public BitField<FunctionKind, kIsArrow, 8> {}; | 7172 class FunctionKindBits : public BitField<FunctionKind, kIsArrow, 7> {}; |
7187 | 7173 |
7188 class DeoptCountBits : public BitField<int, 0, 4> {}; | 7174 class DeoptCountBits : public BitField<int, 0, 4> {}; |
7189 class OptReenableTriesBits : public BitField<int, 4, 18> {}; | 7175 class OptReenableTriesBits : public BitField<int, 4, 18> {}; |
7190 class ICAgeBits : public BitField<int, 22, 8> {}; | 7176 class ICAgeBits : public BitField<int, 22, 8> {}; |
7191 | 7177 |
7192 class OptCountBits : public BitField<int, 0, 22> {}; | 7178 class OptCountBits : public BitField<int, 0, 22> {}; |
7193 class DisabledOptimizationReasonBits : public BitField<int, 22, 8> {}; | 7179 class DisabledOptimizationReasonBits : public BitField<int, 22, 8> {}; |
7194 | 7180 |
7195 private: | 7181 private: |
7196 #if V8_HOST_ARCH_32_BIT | 7182 #if V8_HOST_ARCH_32_BIT |
(...skipping 3640 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10837 } | 10823 } |
10838 return value; | 10824 return value; |
10839 } | 10825 } |
10840 }; | 10826 }; |
10841 | 10827 |
10842 | 10828 |
10843 } // NOLINT, false-positive due to second-order macros. | 10829 } // NOLINT, false-positive due to second-order macros. |
10844 } // NOLINT, false-positive due to second-order macros. | 10830 } // NOLINT, false-positive due to second-order macros. |
10845 | 10831 |
10846 #endif // V8_OBJECTS_H_ | 10832 #endif // V8_OBJECTS_H_ |
OLD | NEW |