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 #include <memory> | 9 #include <memory> |
10 | 10 |
(...skipping 7274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7285 // [function data]: This field holds some additional data for function. | 7285 // [function data]: This field holds some additional data for function. |
7286 // Currently it has one of: | 7286 // Currently it has one of: |
7287 // - a FunctionTemplateInfo to make benefit the API [IsApiFunction()]. | 7287 // - a FunctionTemplateInfo to make benefit the API [IsApiFunction()]. |
7288 // - a BytecodeArray for the interpreter [HasBytecodeArray()]. | 7288 // - a BytecodeArray for the interpreter [HasBytecodeArray()]. |
7289 // - a FixedArray with Asm->Wasm conversion [HasAsmWasmData()]. | 7289 // - a FixedArray with Asm->Wasm conversion [HasAsmWasmData()]. |
7290 DECL_ACCESSORS(function_data, Object) | 7290 DECL_ACCESSORS(function_data, Object) |
7291 | 7291 |
7292 inline bool IsApiFunction(); | 7292 inline bool IsApiFunction(); |
7293 inline FunctionTemplateInfo* get_api_func_data(); | 7293 inline FunctionTemplateInfo* get_api_func_data(); |
7294 inline void set_api_func_data(FunctionTemplateInfo* data); | 7294 inline void set_api_func_data(FunctionTemplateInfo* data); |
7295 inline bool HasBytecodeArray(); | 7295 inline bool HasBytecodeArray() const; |
7296 inline BytecodeArray* bytecode_array(); | 7296 inline BytecodeArray* bytecode_array() const; |
7297 inline void set_bytecode_array(BytecodeArray* bytecode); | 7297 inline void set_bytecode_array(BytecodeArray* bytecode); |
7298 inline void ClearBytecodeArray(); | 7298 inline void ClearBytecodeArray(); |
7299 inline bool HasAsmWasmData(); | 7299 inline bool HasAsmWasmData() const; |
7300 inline FixedArray* asm_wasm_data(); | 7300 inline FixedArray* asm_wasm_data() const; |
7301 inline void set_asm_wasm_data(FixedArray* data); | 7301 inline void set_asm_wasm_data(FixedArray* data); |
7302 inline void ClearAsmWasmData(); | 7302 inline void ClearAsmWasmData(); |
7303 | 7303 |
7304 // [function identifier]: This field holds an additional identifier for the | 7304 // [function identifier]: This field holds an additional identifier for the |
7305 // function. | 7305 // function. |
7306 // - a Smi identifying a builtin function [HasBuiltinFunctionId()]. | 7306 // - a Smi identifying a builtin function [HasBuiltinFunctionId()]. |
7307 // - a String identifying the function's inferred name [HasInferredName()]. | 7307 // - a String identifying the function's inferred name [HasInferredName()]. |
7308 // The inferred_name is inferred from variable or property | 7308 // The inferred_name is inferred from variable or property |
7309 // assignment of this function. It is used to facilitate debugging and | 7309 // assignment of this function. It is used to facilitate debugging and |
7310 // profiling of JavaScript code written in OO style, where almost | 7310 // profiling of JavaScript code written in OO style, where almost |
(...skipping 17 matching lines...) Expand all Loading... |
7328 | 7328 |
7329 // [start_position_and_type]: Field used to store both the source code | 7329 // [start_position_and_type]: Field used to store both the source code |
7330 // position, whether or not the function is a function expression, | 7330 // position, whether or not the function is a function expression, |
7331 // and whether or not the function is a toplevel function. The two | 7331 // and whether or not the function is a toplevel function. The two |
7332 // least significants bit indicates whether the function is an | 7332 // least significants bit indicates whether the function is an |
7333 // expression and the rest contains the source code position. | 7333 // expression and the rest contains the source code position. |
7334 inline int start_position_and_type() const; | 7334 inline int start_position_and_type() const; |
7335 inline void set_start_position_and_type(int value); | 7335 inline void set_start_position_and_type(int value); |
7336 | 7336 |
7337 // The function is subject to debugging if a debug info is attached. | 7337 // The function is subject to debugging if a debug info is attached. |
7338 inline bool HasDebugInfo(); | 7338 inline bool HasDebugInfo() const; |
7339 inline DebugInfo* GetDebugInfo(); | 7339 inline DebugInfo* GetDebugInfo() const; |
7340 | 7340 |
7341 // A function has debug code if the compiled code has debug break slots. | 7341 // A function has debug code if the compiled code has debug break slots. |
7342 inline bool HasDebugCode(); | 7342 inline bool HasDebugCode() const; |
7343 | 7343 |
7344 // [debug info]: Debug information. | 7344 // [debug info]: Debug information. |
7345 DECL_ACCESSORS(debug_info, Object) | 7345 DECL_ACCESSORS(debug_info, Object) |
7346 | 7346 |
| 7347 // Bit field containing various information collected for debugging. |
| 7348 // This field is either stored on the kDebugInfo slot or inside the |
| 7349 // debug info struct. |
| 7350 inline int debugger_hints() const; |
| 7351 inline void set_debugger_hints(int value); |
| 7352 |
| 7353 // Indicates that the function was created by the Function function. |
| 7354 // Though it's anonymous, toString should treat it as if it had the name |
| 7355 // "anonymous". We don't set the name itself so that the system does not |
| 7356 // see a binding for it. |
| 7357 DECL_BOOLEAN_ACCESSORS(name_should_print_as_anonymous) |
| 7358 |
| 7359 // Indicates that the function is either an anonymous expression |
| 7360 // or an arrow function (the name field can be set through the API, |
| 7361 // which does not change this flag). |
| 7362 DECL_BOOLEAN_ACCESSORS(is_anonymous_expression) |
| 7363 |
| 7364 // Indicates that the the shared function info is deserialized from cache. |
| 7365 DECL_BOOLEAN_ACCESSORS(deserialized) |
| 7366 |
| 7367 // Indicates that the function cannot cause side-effects. |
| 7368 DECL_BOOLEAN_ACCESSORS(has_no_side_effect) |
| 7369 |
| 7370 // Indicates that |has_no_side_effect| has been computed and set. |
| 7371 DECL_BOOLEAN_ACCESSORS(computed_has_no_side_effect) |
| 7372 |
7347 // The function's name if it is non-empty, otherwise the inferred name. | 7373 // The function's name if it is non-empty, otherwise the inferred name. |
7348 String* DebugName(); | 7374 String* DebugName(); |
7349 | 7375 |
7350 // The function cannot cause any side effects. | 7376 // The function cannot cause any side effects. |
7351 bool HasNoSideEffect(); | 7377 bool HasNoSideEffect(); |
7352 | 7378 |
7353 // Used for flags such as --hydrogen-filter. | 7379 // Used for flags such as --hydrogen-filter. |
7354 bool PassesFilter(const char* raw_filter); | 7380 bool PassesFilter(const char* raw_filter); |
7355 | 7381 |
7356 // Position of the 'function' token in the script source. | 7382 // Position of the 'function' token in the script source. |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7415 | 7441 |
7416 // Indicates whether the function is a native function. | 7442 // Indicates whether the function is a native function. |
7417 // These needs special treatment in .call and .apply since | 7443 // These needs special treatment in .call and .apply since |
7418 // null passed as the receiver should not be translated to the | 7444 // null passed as the receiver should not be translated to the |
7419 // global object. | 7445 // global object. |
7420 DECL_BOOLEAN_ACCESSORS(native) | 7446 DECL_BOOLEAN_ACCESSORS(native) |
7421 | 7447 |
7422 // Indicate that this function should always be inlined in optimized code. | 7448 // Indicate that this function should always be inlined in optimized code. |
7423 DECL_BOOLEAN_ACCESSORS(force_inline) | 7449 DECL_BOOLEAN_ACCESSORS(force_inline) |
7424 | 7450 |
7425 // Indicates that the function was created by the Function function. | |
7426 // Though it's anonymous, toString should treat it as if it had the name | |
7427 // "anonymous". We don't set the name itself so that the system does not | |
7428 // see a binding for it. | |
7429 DECL_BOOLEAN_ACCESSORS(name_should_print_as_anonymous) | |
7430 | |
7431 // Indicates that the function is either an anonymous expression | |
7432 // or an arrow function (the name field can be set through the API, | |
7433 // which does not change this flag). | |
7434 DECL_BOOLEAN_ACCESSORS(is_anonymous_expression) | |
7435 | |
7436 // Indicates that code for this function must be compiled through the | 7451 // Indicates that code for this function must be compiled through the |
7437 // Ignition / TurboFan pipeline, and is unsupported by | 7452 // Ignition / TurboFan pipeline, and is unsupported by |
7438 // FullCodegen / Crankshaft. | 7453 // FullCodegen / Crankshaft. |
7439 DECL_BOOLEAN_ACCESSORS(must_use_ignition_turbo) | 7454 DECL_BOOLEAN_ACCESSORS(must_use_ignition_turbo) |
7440 | 7455 |
7441 // Indicates that code for this function cannot be flushed. | 7456 // Indicates that code for this function cannot be flushed. |
7442 DECL_BOOLEAN_ACCESSORS(dont_flush) | 7457 DECL_BOOLEAN_ACCESSORS(dont_flush) |
7443 | 7458 |
7444 // Indicates that this function is an asm function. | 7459 // Indicates that this function is an asm function. |
7445 DECL_BOOLEAN_ACCESSORS(asm_function) | 7460 DECL_BOOLEAN_ACCESSORS(asm_function) |
7446 | 7461 |
7447 // Indicates that the the shared function info is deserialized from cache. | |
7448 DECL_BOOLEAN_ACCESSORS(deserialized) | |
7449 | |
7450 // Whether this function was created from a FunctionDeclaration. | 7462 // Whether this function was created from a FunctionDeclaration. |
7451 DECL_BOOLEAN_ACCESSORS(is_declaration) | 7463 DECL_BOOLEAN_ACCESSORS(is_declaration) |
7452 | 7464 |
7453 // Whether this function was marked to be tiered up. | 7465 // Whether this function was marked to be tiered up. |
7454 DECL_BOOLEAN_ACCESSORS(marked_for_tier_up) | 7466 DECL_BOOLEAN_ACCESSORS(marked_for_tier_up) |
7455 | 7467 |
7456 // Indicates that asm->wasm conversion failed and should not be re-attempted. | 7468 // Indicates that asm->wasm conversion failed and should not be re-attempted. |
7457 DECL_BOOLEAN_ACCESSORS(is_asm_wasm_broken) | 7469 DECL_BOOLEAN_ACCESSORS(is_asm_wasm_broken) |
7458 | 7470 |
7459 // Indicates that the function cannot cause side-effects. | |
7460 DECL_BOOLEAN_ACCESSORS(has_no_side_effect) | |
7461 | |
7462 // Indicates that |has_no_side_effect| has been computed and set. | |
7463 DECL_BOOLEAN_ACCESSORS(computed_has_no_side_effect) | |
7464 | |
7465 inline FunctionKind kind() const; | 7471 inline FunctionKind kind() const; |
7466 inline void set_kind(FunctionKind kind); | 7472 inline void set_kind(FunctionKind kind); |
7467 | 7473 |
7468 // Indicates whether or not the code in the shared function support | 7474 // Indicates whether or not the code in the shared function support |
7469 // deoptimization. | 7475 // deoptimization. |
7470 inline bool has_deoptimization_support(); | 7476 inline bool has_deoptimization_support(); |
7471 | 7477 |
7472 // Enable deoptimization support through recompiled code. | 7478 // Enable deoptimization support through recompiled code. |
7473 void EnableDeoptimizationSupport(Code* recompiled); | 7479 void EnableDeoptimizationSupport(Code* recompiled); |
7474 | 7480 |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7729 kMarkedForTierUp, | 7735 kMarkedForTierUp, |
7730 kOptimizationDisabled, | 7736 kOptimizationDisabled, |
7731 kHasDuplicateParameters, | 7737 kHasDuplicateParameters, |
7732 kNative, | 7738 kNative, |
7733 kStrictModeFunction, | 7739 kStrictModeFunction, |
7734 kUsesArguments, | 7740 kUsesArguments, |
7735 kNeedsHomeObject, | 7741 kNeedsHomeObject, |
7736 // byte 1 | 7742 // byte 1 |
7737 kForceInline, | 7743 kForceInline, |
7738 kIsAsmFunction, | 7744 kIsAsmFunction, |
7739 kIsAnonymousExpression, | |
7740 kNameShouldPrintAsAnonymous, | |
7741 kMustUseIgnitionTurbo, | 7745 kMustUseIgnitionTurbo, |
7742 kDontFlush, | 7746 kDontFlush, |
7743 kIsDeclaration, | 7747 kIsDeclaration, |
| 7748 kIsAsmWasmBroken, |
7744 | 7749 |
7745 kUnused, // unused. | 7750 kUnused1, // Unused fields. |
| 7751 kUnused2, |
| 7752 |
7746 // byte 2 | 7753 // byte 2 |
7747 kFunctionKind, | 7754 kFunctionKind, |
7748 // rest of byte 2 and first two bits of byte 3 are used by FunctionKind | 7755 // rest of byte 2 and first two bits of byte 3 are used by FunctionKind |
7749 // byte 3 | 7756 // byte 3 |
7750 kDeserialized = kFunctionKind + 10, | 7757 kCompilerHintsCount = kFunctionKind + 10, // Pseudo entry |
7751 kIsAsmWasmBroken, | 7758 }; |
| 7759 |
| 7760 // Bit positions in debugger_hints. |
| 7761 enum DebuggerHints { |
| 7762 kIsAnonymousExpression, |
| 7763 kNameShouldPrintAsAnonymous, |
| 7764 kDeserialized, |
7752 kHasNoSideEffect, | 7765 kHasNoSideEffect, |
7753 kComputedHasNoSideEffect, | 7766 kComputedHasNoSideEffect, |
7754 kCompilerHintsCount, // Pseudo entry | |
7755 }; | 7767 }; |
| 7768 |
7756 // kFunctionKind has to be byte-aligned | 7769 // kFunctionKind has to be byte-aligned |
7757 STATIC_ASSERT((kFunctionKind % kBitsPerByte) == 0); | 7770 STATIC_ASSERT((kFunctionKind % kBitsPerByte) == 0); |
7758 | 7771 |
7759 class FunctionKindBits : public BitField<FunctionKind, kFunctionKind, 10> {}; | 7772 class FunctionKindBits : public BitField<FunctionKind, kFunctionKind, 10> {}; |
7760 | 7773 |
7761 class DeoptCountBits : public BitField<int, 0, 4> {}; | 7774 class DeoptCountBits : public BitField<int, 0, 4> {}; |
7762 class OptReenableTriesBits : public BitField<int, 4, 18> {}; | 7775 class OptReenableTriesBits : public BitField<int, 4, 18> {}; |
7763 class ICAgeBits : public BitField<int, 22, 8> {}; | 7776 class ICAgeBits : public BitField<int, 22, 8> {}; |
7764 | 7777 |
7765 class OptCountBits : public BitField<int, 0, 22> {}; | 7778 class OptCountBits : public BitField<int, 0, 22> {}; |
(...skipping 3717 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11483 }; | 11496 }; |
11484 | 11497 |
11485 | 11498 |
11486 // The DebugInfo class holds additional information for a function being | 11499 // The DebugInfo class holds additional information for a function being |
11487 // debugged. | 11500 // debugged. |
11488 class DebugInfo: public Struct { | 11501 class DebugInfo: public Struct { |
11489 public: | 11502 public: |
11490 // The shared function info for the source being debugged. | 11503 // The shared function info for the source being debugged. |
11491 DECL_ACCESSORS(shared, SharedFunctionInfo) | 11504 DECL_ACCESSORS(shared, SharedFunctionInfo) |
11492 | 11505 |
| 11506 // Bit field containing various information collected for debugging. |
| 11507 DECL_INT_ACCESSORS(debugger_hints) |
| 11508 |
11493 DECL_ACCESSORS(debug_bytecode_array, Object) | 11509 DECL_ACCESSORS(debug_bytecode_array, Object) |
11494 // Fixed array holding status information for each active break point. | 11510 // Fixed array holding status information for each active break point. |
11495 DECL_ACCESSORS(break_points, FixedArray) | 11511 DECL_ACCESSORS(break_points, FixedArray) |
11496 | 11512 |
11497 // Check if there is a break point at a source position. | 11513 // Check if there is a break point at a source position. |
11498 bool HasBreakPoint(int source_position); | 11514 bool HasBreakPoint(int source_position); |
11499 // Attempt to clear a break point. Return true if successful. | 11515 // Attempt to clear a break point. Return true if successful. |
11500 static bool ClearBreakPoint(Handle<DebugInfo> debug_info, | 11516 static bool ClearBreakPoint(Handle<DebugInfo> debug_info, |
11501 Handle<Object> break_point_object); | 11517 Handle<Object> break_point_object); |
11502 // Set a break point. | 11518 // Set a break point. |
11503 static void SetBreakPoint(Handle<DebugInfo> debug_info, int source_position, | 11519 static void SetBreakPoint(Handle<DebugInfo> debug_info, int source_position, |
11504 Handle<Object> break_point_object); | 11520 Handle<Object> break_point_object); |
11505 // Get the break point objects for a source position. | 11521 // Get the break point objects for a source position. |
11506 Handle<Object> GetBreakPointObjects(int source_position); | 11522 Handle<Object> GetBreakPointObjects(int source_position); |
11507 // Find the break point info holding this break point object. | 11523 // Find the break point info holding this break point object. |
11508 static Handle<Object> FindBreakPointInfo(Handle<DebugInfo> debug_info, | 11524 static Handle<Object> FindBreakPointInfo(Handle<DebugInfo> debug_info, |
11509 Handle<Object> break_point_object); | 11525 Handle<Object> break_point_object); |
11510 // Get the number of break points for this function. | 11526 // Get the number of break points for this function. |
11511 int GetBreakPointCount(); | 11527 int GetBreakPointCount(); |
11512 | 11528 |
11513 static Smi* uninitialized() { return Smi::kZero; } | |
11514 | |
11515 inline bool HasDebugBytecodeArray(); | 11529 inline bool HasDebugBytecodeArray(); |
11516 inline bool HasDebugCode(); | 11530 inline bool HasDebugCode(); |
11517 | 11531 |
11518 inline BytecodeArray* OriginalBytecodeArray(); | 11532 inline BytecodeArray* OriginalBytecodeArray(); |
11519 inline BytecodeArray* DebugBytecodeArray(); | 11533 inline BytecodeArray* DebugBytecodeArray(); |
11520 inline Code* DebugCode(); | 11534 inline Code* DebugCode(); |
11521 | 11535 |
11522 DECLARE_CAST(DebugInfo) | 11536 DECLARE_CAST(DebugInfo) |
11523 | 11537 |
11524 // Dispatched behavior. | 11538 // Dispatched behavior. |
11525 DECLARE_PRINTER(DebugInfo) | 11539 DECLARE_PRINTER(DebugInfo) |
11526 DECLARE_VERIFIER(DebugInfo) | 11540 DECLARE_VERIFIER(DebugInfo) |
11527 | 11541 |
11528 static const int kSharedFunctionInfoIndex = Struct::kHeaderSize; | 11542 static const int kSharedFunctionInfoIndex = Struct::kHeaderSize; |
| 11543 static const int kDebuggerHintsIndex = |
| 11544 kSharedFunctionInfoIndex + kPointerSize; |
11529 static const int kDebugBytecodeArrayIndex = | 11545 static const int kDebugBytecodeArrayIndex = |
11530 kSharedFunctionInfoIndex + kPointerSize; | 11546 kDebuggerHintsIndex + kPointerSize; |
11531 static const int kBreakPointsStateIndex = | 11547 static const int kBreakPointsStateIndex = |
11532 kDebugBytecodeArrayIndex + kPointerSize; | 11548 kDebugBytecodeArrayIndex + kPointerSize; |
11533 static const int kSize = kBreakPointsStateIndex + kPointerSize; | 11549 static const int kSize = kBreakPointsStateIndex + kPointerSize; |
11534 | 11550 |
11535 static const int kEstimatedNofBreakPointsInFunction = 4; | 11551 static const int kEstimatedNofBreakPointsInFunction = 4; |
11536 | 11552 |
11537 private: | 11553 private: |
11538 // Get the break point info object for a source position. | 11554 // Get the break point info object for a source position. |
11539 Object* GetBreakPointInfo(int source_position); | 11555 Object* GetBreakPointInfo(int source_position); |
11540 | 11556 |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11697 } | 11713 } |
11698 }; | 11714 }; |
11699 | 11715 |
11700 | 11716 |
11701 } // NOLINT, false-positive due to second-order macros. | 11717 } // NOLINT, false-positive due to second-order macros. |
11702 } // NOLINT, false-positive due to second-order macros. | 11718 } // NOLINT, false-positive due to second-order macros. |
11703 | 11719 |
11704 #include "src/objects/object-macros-undef.h" | 11720 #include "src/objects/object-macros-undef.h" |
11705 | 11721 |
11706 #endif // V8_OBJECTS_H_ | 11722 #endif // V8_OBJECTS_H_ |
OLD | NEW |