5#ifndef V8_OBJECTS_SHARED_FUNCTION_INFO_H_
6#define V8_OBJECTS_SHARED_FUNCTION_INFO_H_
25#include "testing/gtest/include/gtest/gtest_prod.h"
26#include "torque-generated/bit-fields.h"
46#if V8_ENABLE_WEBASSEMBLY
48class CanonicalValueType;
54#include "torque-generated/src/objects/shared-function-info-tq.inc"
79 :
public TorqueGeneratedPreparseData<PreparseData, HeapObject> {
84 inline uint8_t
get(
int index)
const;
85 inline void set(
int index, uint8_t value);
86 inline void copy_in(
int index,
const uint8_t* buffer,
int length);
106 static int SizeFor(
int data_length,
int children_length) {
119 :
public TorqueGeneratedUncompiledData<UncompiledData,
120 ExposedTrustedObject> {
127 gc_notify_updated_slot);
136 :
public TorqueGeneratedUncompiledDataWithoutPreparseData<
137 UncompiledDataWithoutPreparseData, UncompiledData> {
147 :
public TorqueGeneratedUncompiledDataWithPreparseData<
148 UncompiledDataWithPreparseData, UncompiledData> {
159 :
public TorqueGeneratedUncompiledDataWithoutPreparseDataWithJob<
160 UncompiledDataWithoutPreparseDataWithJob,
161 UncompiledDataWithoutPreparseData> {
171 :
public TorqueGeneratedUncompiledDataWithPreparseDataAndJob<
172 UncompiledDataWithPreparseDataAndJob,
173 UncompiledDataWithPreparseData> {
181 :
public TorqueGeneratedInterpreterData<InterpreterData,
182 ExposedTrustedObject> {
198 :
public TorqueGeneratedSharedFunctionInfo<SharedFunctionInfo, HeapObject> {
200 DEFINE_TORQUE_GENERATED_SHARED_FUNCTION_INFO_FLAGS()
201 DEFINE_TORQUE_GENERATED_SHARED_FUNCTION_INFO_FLAGS2()
229 int function_literal_id,
230 bool reset_preparsed_scope_data =
true);
246 static constexpr int kAgeSize = kAgeOffsetEnd - kAgeOffset + 1;
247 static constexpr uint16_t
kMaxAge = UINT16_MAX;
280 using TorqueGeneratedSharedFunctionInfo::
281 outer_scope_info_or_feedback_metadata;
282 using TorqueGeneratedSharedFunctionInfo::
283 set_outer_scope_info_or_feedback_metadata;
306 template <typename IsolateT>
323 using TorqueGeneratedSharedFunctionInfo::formal_parameter_count;
324 using TorqueGeneratedSharedFunctionInfo::set_formal_parameter_count;
394 template <typename IsolateT>
419#if V8_ENABLE_WEBASSEMBLY
420 inline bool HasAsmWasmData()
const;
421 inline bool HasWasmFunctionData()
const;
422 inline bool HasWasmExportedFunctionData()
const;
423 inline bool HasWasmJSFunctionData()
const;
424 inline bool HasWasmCapiFunctionData()
const;
425 inline bool HasWasmResumeData()
const;
507 using TorqueGeneratedSharedFunctionInfo::function_token_offset;
508 using TorqueGeneratedSharedFunctionInfo::set_function_token_offset;
563#if V8_ENABLE_WEBASSEMBLY
675 template <
typename IsolateT>
688 template <
typename IsolateT>
692 template <
typename IsolateT>
715 template <
typename IsolateT>
745 void PrintSourceCode(std::ostream& os);
776 static_assert(DisabledOptimizationReasonBits::is_valid(
777 BailoutReason::kLastErrorMessage));
780 static_assert(FunctionSyntaxKindBits::is_valid(
796 static bool UniqueIdsAreUnique(
Isolate* isolate);
825 template <
typename Impl>
845#define FIELD_LIST(V) \
846 V(kSharedInfoOffset, kTaggedSize) \
853 class BodyDescriptor;
859#ifdef V8_STATIC_ROOTS
MaybeHandle< HeapObject > retain_code_
IsCompiledScope(const Tagged< SharedFunctionInfo > shared, Isolate *isolate)
void copy_in(int index, const uint8_t *buffer, int length)
static int InnerOffset(int data_length)
void set_child(int index, Tagged< PreparseData > value, WriteBarrierMode mode=UPDATE_WRITE_BARRIER)
Tagged< Object > get_child_raw(int index) const
ObjectSlot inner_data_start() const
static const int kDataStartOffset
Tagged< PreparseData > get_child(int index) const
void set(int index, uint8_t value)
int inner_start_offset() const
static int SizeFor(int data_length, int children_length)
uint8_t get(int index) const
OBJECT_CONSTRUCTORS(SharedFunctionInfoWrapper, TrustedObject)
void Reset(Isolate *isolate, Tagged< Script > script)
ScriptIterator(const ScriptIterator &)=delete
Handle< WeakFixedArray > infos_
V8_EXPORT_PRIVATE ScriptIterator(Isolate *isolate, Tagged< Script > script)
ScriptIterator & operator=(const ScriptIterator &)=delete
V8_EXPORT_PRIVATE Tagged< SharedFunctionInfo > Next()
uint16_t internal_formal_parameter_count_with_receiver() const
void set_bytecode_array(Tagged< BytecodeArray > bytecode)
bool CanCollectSourcePosition(Isolate *isolate)
Tagged< Object > GetUntrustedData() const
static void UninstallDebugBytecode(Tagged< SharedFunctionInfo > shared, Isolate *isolate)
static constexpr uint16_t kMaxAge
void Init(ReadOnlyRoots roots, int unique_id)
Tagged< CoverageInfo > GetCoverageInfo(Isolate *isolate) const
Tagged< BytecodeArray > GetActiveBytecodeArray(IsolateForSandbox isolate) const
bool ShouldFlushCode(base::EnumSet< CodeFlushMode > code_flush_mode)
static const int kCachedCodeOffset
bool HasCoverageInfo(Isolate *isolate) const
BailoutReason disabled_optimization_reason() const
void SetFunctionTokenPosition(int function_token_position, int start_position)
bool IsApiFunction() const
LanguageMode language_mode() const
Tagged< UncompiledDataWithPreparseData > uncompiled_data_with_preparse_data(IsolateForSandbox isolate) const
bool has_simple_parameters()
Tagged< BytecodeArray > GetBytecodeArray(IsolateT *isolate) const
static DirectHandle< Object > GetSourceCode(Isolate *isolate, DirectHandle< SharedFunctionInfo > shared)
static const int kNotFound
static void InstallDebugBytecode(DirectHandle< SharedFunctionInfo > shared, Isolate *isolate)
static const uint16_t kFunctionTokenOutOfRange
void set_cached_tiering_decision(CachedTieringDecision decision)
int function_token_position() const
bool HasOuterScopeInfo() const
static const int kMaximumFunctionTokenOffset
bool HasTrustedData() const
void DisableOptimization(Isolate *isolate, BailoutReason reason)
bool is_repl_mode() const
void UpdateAndFinalizeExpectedNofPropertiesFromEstimate(FunctionLiteral *literal)
void set_uncompiled_data(Tagged< UncompiledData > data, WriteBarrierMode mode=UPDATE_WRITE_BARRIER)
static void EnsureSourcePositionsAvailable(Isolate *isolate, DirectHandle< SharedFunctionInfo > shared_info)
static void EnsureBytecodeArrayAvailable(Isolate *isolate, Handle< SharedFunctionInfo > shared_info, IsCompiledScope *is_compiled_scope, CreateSourcePositions flag=CreateSourcePositions::kNo)
bool is_class_constructor() const
bool HasUncompiledDataWithPreparseData() const
uint16_t get_property_estimate_from_literal(FunctionLiteral *literal)
void set_raw_scope_info(Tagged< ScopeInfo > scope_info, WriteBarrierMode mode=UPDATE_WRITE_BARRIER)
Tagged< ScopeInfo > EarlyScopeInfo(AcquireLoadTag tag)
bool PassesFilter(const char *raw_filter)
FunctionKind kind() const
void set_kind(FunctionKind kind)
int UniqueIdInScript() const
bool CanDiscardCompiled() const
V8_EXPORT_PRIVATE uint32_t Hash()
Tagged< AbstractCode > abstract_code(Isolate *isolate)
Tagged< Code > InterpreterTrampoline(IsolateForSandbox isolate) const
static Handle< Object > GetSourceCodeHarmony(Isolate *isolate, DirectHandle< SharedFunctionInfo > shared)
static V8_EXPORT_PRIVATE constexpr Tagged< Smi > const kNoSharedNameSentinel
void SetTrustedData(Tagged< ExposedTrustedObject > value, WriteBarrierMode mode=UPDATE_WRITE_BARRIER)
int32_t relaxed_flags() const
void ClearPreparseData(IsolateForSandbox isolate)
bool HasUncompiledData() const
static const int kEntriesStart
void ClearUncompiledDataJobPointer(IsolateForSandbox isolate)
uint16_t CompareExchangeAge(uint16_t expected_age, uint16_t new_age)
Tagged< String > Name() const
Tagged< ScopeInfo > GetOuterScopeInfo() const
static constexpr int kAgeSize
bool HasUntrustedData() const
bool construct_as_builtin() const
bool IsDontAdaptArguments() const
CachedTieringDecision cached_tiering_decision()
V8_EXPORT_PRIVATE std::optional< Tagged< DebugInfo > > TryGetDebugInfo(Isolate *isolate) const
Tagged< Object > GetTrustedData() const
V8_EXPORT_PRIVATE Tagged< DebugInfo > GetDebugInfo(Isolate *isolate) const
bool HasSharedName() const
void SetUntrustedData(Tagged< Object > value, WriteBarrierMode mode=UPDATE_WRITE_BARRIER)
void CopyFrom(Tagged< SharedFunctionInfo > other, IsolateForSandbox isolate)
V8_EXPORT_PRIVATE int StartPosition() const
Tagged< InterpreterData > interpreter_data(IsolateForSandbox isolate) const
Tagged< UncompiledData > uncompiled_data(IsolateForSandbox isolate) const
V8_EXPORT_PRIVATE void UpdateFromFunctionLiteralForLiveEdit(IsolateForSandbox isolate, FunctionLiteral *lit)
uint16_t internal_formal_parameter_count_without_receiver() const
bool BreakAtEntry(Isolate *isolate) const
static void CreateAndSetUncompiledData(IsolateT *isolate, FunctionLiteral *lit)
bool HasBuiltinId() const
static Handle< String > DebugName(Isolate *isolate, DirectHandle< SharedFunctionInfo > shared)
void SetActiveBytecodeArray(Tagged< BytecodeArray > bytecode, IsolateForSandbox isolate)
void SetName(Tagged< String > name)
void set_interpreter_data(Isolate *isolate, Tagged< InterpreterData > interpreter_data, WriteBarrierMode mode=UPDATE_WRITE_BARRIER)
static V8_EXPORT_PRIVATE void DiscardCompiled(Isolate *isolate, DirectHandle< SharedFunctionInfo > shared_info)
std::unique_ptr< char[]> DebugNameCStr() const
bool HasUncompiledDataWithoutPreparseData() const
void UpdateExpectedNofPropertiesFromEstimate(FunctionLiteral *literal)
V8_EXPORT_PRIVATE int EndPosition() const
bool HasSourceCode() const
static const int kInitialLength
bool IsSubjectToDebugging() const
bool has_script(AcquireLoadTag tag) const
void DontAdaptArguments()
bool HasFeedbackMetadata() const
void SetScopeInfo(Tagged< ScopeInfo > scope_info, WriteBarrierMode mode=UPDATE_WRITE_BARRIER)
V8_EXPORT_PRIVATE Tagged< Code > GetCode(Isolate *isolate) const
V8_EXPORT_PRIVATE void SetScript(IsolateForSandbox isolate, ReadOnlyRoots roots, Tagged< HeapObject > script_object, int function_literal_id, bool reset_preparsed_scope_data=true)
void set_internal_formal_parameter_count(int value)
void UpdateFunctionMapIndex()
static V8_EXPORT_PRIVATE void EnsureOldForTesting(Tagged< SharedFunctionInfo > sfu)
IsCompiledScope is_compiled_scope(IsolateT *isolate) const
void DiscardCompiledMetadata(Isolate *isolate, std::function< void(Tagged< HeapObject > object, ObjectSlot slot, Tagged< HeapObject > target)> gc_notify_updated_slot=[](Tagged< HeapObject > object, ObjectSlot slot, Tagged< HeapObject > target) {})
Inlineability GetInlineability(IsolateT *isolate) const
bool AreSourcePositionsAvailable(IsolateT *isolate) const
void CalculateConstructAsBuiltin()
bool needs_script_context() const
void overwrite_bytecode_array(Tagged< BytecodeArray > bytecode)
void set_relaxed_flags(int32_t flags)
V8_EXPORT_PRIVATE bool HasBreakInfo(Isolate *isolate) const
void set_language_mode(LanguageMode language_mode)
static const int kContextOffset
bool HasInterpreterData(IsolateForSandbox isolate) const
static const int kEntryLength
void set_uncompiled_data_with_preparse_data(Tagged< UncompiledDataWithPreparseData > data, WriteBarrierMode mode=UPDATE_WRITE_BARRIER)
@ kHasOptimizationDisabled
FRIEND_TEST(PreParserTest, LazyFunctionLength)
static void InitFromFunctionLiteral(IsolateT *isolate, FunctionLiteral *lit, bool is_toplevel)
bool optimization_disabled() const
bool HasDebugInfo(Isolate *isolate) const
bool IsUserJavaScript() const
static constexpr Tagged< Smi > zero()
static constexpr int kHeaderSize
void InitAfterBytecodeFlush(Isolate *isolate, Tagged< String > inferred_name, int start_position, int end_position, std::function< void(Tagged< HeapObject > object, ObjectSlot slot, Tagged< HeapObject > target)> gc_notify_updated_slot)
FunctionLiteral * literal
static constexpr int kStaticRootsSFISize
constexpr int kTaggedSize
SharedFunctionInfo::HasStaticPrivateMethodsOrAccessorsBit SharedFunctionInfo::MaglevCompilationFailedBit SharedFunctionInfo::FunctionSyntaxKindBits SharedFunctionInfo::HasDuplicateParametersBit SharedFunctionInfo::RequiresInstanceMembersInitializerBit has_reported_binary_coverage
SharedFunctionInfo::HasStaticPrivateMethodsOrAccessorsBit SharedFunctionInfo::MaglevCompilationFailedBit SharedFunctionInfo::FunctionSyntaxKindBits SharedFunctionInfo::HasDuplicateParametersBit SharedFunctionInfo::RequiresInstanceMembersInitializerBit SharedFunctionInfo::HasReportedBinaryCoverageBit SharedFunctionInfo::PropertiesAreFinalBit live_edited
SharedFunctionInfo::HasStaticPrivateMethodsOrAccessorsBit SharedFunctionInfo::MaglevCompilationFailedBit syntax_kind
SharedFunctionInfo::HasStaticPrivateMethodsOrAccessorsBit maglev_compilation_failed
SharedFunctionInfo::HasStaticPrivateMethodsOrAccessorsBit SharedFunctionInfo::MaglevCompilationFailedBit SharedFunctionInfo::FunctionSyntaxKindBits SharedFunctionInfo::HasDuplicateParametersBit SharedFunctionInfo::RequiresInstanceMembersInitializerBit SharedFunctionInfo::HasReportedBinaryCoverageBit properties_are_final
std::ostream & operator<<(std::ostream &os, AtomicMemoryOrder order)
SharedFunctionInfo::HasStaticPrivateMethodsOrAccessorsBit SharedFunctionInfo::MaglevCompilationFailedBit SharedFunctionInfo::FunctionSyntaxKindBits has_duplicate_parameters
@ kLastFunctionSyntaxKind
typename detail::FlattenUnionHelper< Union<>, Ts... >::type UnionOf
UnionOf< Smi, String, ScopeInfo > NameOrScopeInfoT
has_static_private_methods_or_accessors
SharedFunctionInfo::HasStaticPrivateMethodsOrAccessorsBit SharedFunctionInfo::MaglevCompilationFailedBit SharedFunctionInfo::FunctionSyntaxKindBits SharedFunctionInfo::HasDuplicateParametersBit requires_instance_members_initializer
raw_outer_scope_info_or_feedback_metadata
#define DECL_UINT16_ACCESSORS(name)
#define DECL_ACCESSORS(name,...)
#define DECL_GETTER(name,...)
#define DECL_ACQUIRE_GETTER(name,...)
#define DECL_VERIFIER(Name)
#define DECL_BOOLEAN_ACCESSORS(name)
#define DECL_UINT8_ACCESSORS(name)
#define DECL_PRIMITIVE_ACCESSORS(name, type)
#define DECL_PROTECTED_POINTER_ACCESSORS(name, type)
#define DECL_PRINTER(Name)
#define DECL_RELEASE_ACQUIRE_ACCESSORS(name,...)
#define DECL_RELAXED_INT32_ACCESSORS(name)
#define DECL_INT_ACCESSORS(name)
#define TQ_OBJECT_CONSTRUCTORS(Type)
constexpr T RoundUp(T x, intptr_t m)
#define V8_EXPORT_PRIVATE
SourceCodeOf(Tagged< SharedFunctionInfo > v, int max=-1)
const Tagged< SharedFunctionInfo > value
#define DEFINE_FIELD_OFFSET_CONSTANTS(StartOffset, LIST_MACRO)