| Index: src/objects.h
|
| diff --git a/src/objects.h b/src/objects.h
|
| index 5be6657e263f756374eddecd7ee35e64e4355b1f..88be60fb2ecc8ef6672ef69e59c86ac3d1eddf51 100644
|
| --- a/src/objects.h
|
| +++ b/src/objects.h
|
| @@ -19,6 +19,7 @@
|
| #include "src/flags.h"
|
| #include "src/list.h"
|
| #include "src/messages.h"
|
| +#include "src/objects/object-macros.h"
|
| #include "src/property-details.h"
|
| #include "src/unicode-decoder.h"
|
| #include "src/unicode.h"
|
| @@ -943,25 +944,6 @@ enum class ComparisonResult {
|
| };
|
|
|
|
|
| -#define DECL_BOOLEAN_ACCESSORS(name) \
|
| - inline bool name() const; \
|
| - inline void set_##name(bool value);
|
| -
|
| -#define DECL_INT_ACCESSORS(name) \
|
| - inline int name() const; \
|
| - inline void set_##name(int value);
|
| -
|
| -
|
| -#define DECL_ACCESSORS(name, type) \
|
| - inline type* name() const; \
|
| - inline void set_##name(type* value, \
|
| - WriteBarrierMode mode = UPDATE_WRITE_BARRIER); \
|
| -
|
| -
|
| -#define DECLARE_CAST(type) \
|
| - INLINE(static type* cast(Object* object)); \
|
| - INLINE(static const type* cast(const Object* object));
|
| -
|
| class AbstractCode;
|
| class AccessorPair;
|
| class AllocationSite;
|
| @@ -4430,314 +4412,6 @@ class WeakHashTable: public HashTable<WeakHashTable,
|
| };
|
|
|
|
|
| -// ScopeInfo represents information about different scopes of a source
|
| -// program and the allocation of the scope's variables. Scope information
|
| -// is stored in a compressed form in ScopeInfo objects and is used
|
| -// at runtime (stack dumps, deoptimization, etc.).
|
| -
|
| -// This object provides quick access to scope info details for runtime
|
| -// routines.
|
| -class ScopeInfo : public FixedArray {
|
| - public:
|
| - DECLARE_CAST(ScopeInfo)
|
| -
|
| - // Return the type of this scope.
|
| - ScopeType scope_type();
|
| -
|
| - // Does this scope call eval?
|
| - bool CallsEval();
|
| -
|
| - // Return the language mode of this scope.
|
| - LanguageMode language_mode();
|
| -
|
| - // True if this scope is a (var) declaration scope.
|
| - bool is_declaration_scope();
|
| -
|
| - // Does this scope make a sloppy eval call?
|
| - bool CallsSloppyEval() { return CallsEval() && is_sloppy(language_mode()); }
|
| -
|
| - // Return the total number of locals allocated on the stack and in the
|
| - // context. This includes the parameters that are allocated in the context.
|
| - int LocalCount();
|
| -
|
| - // Return the number of stack slots for code. This number consists of two
|
| - // parts:
|
| - // 1. One stack slot per stack allocated local.
|
| - // 2. One stack slot for the function name if it is stack allocated.
|
| - int StackSlotCount();
|
| -
|
| - // Return the number of context slots for code if a context is allocated. This
|
| - // number consists of three parts:
|
| - // 1. Size of fixed header for every context: Context::MIN_CONTEXT_SLOTS
|
| - // 2. One context slot per context allocated local.
|
| - // 3. One context slot for the function name if it is context allocated.
|
| - // Parameters allocated in the context count as context allocated locals. If
|
| - // no contexts are allocated for this scope ContextLength returns 0.
|
| - int ContextLength();
|
| -
|
| - // Does this scope declare a "this" binding?
|
| - bool HasReceiver();
|
| -
|
| - // Does this scope declare a "this" binding, and the "this" binding is stack-
|
| - // or context-allocated?
|
| - bool HasAllocatedReceiver();
|
| -
|
| - // Does this scope declare a "new.target" binding?
|
| - bool HasNewTarget();
|
| -
|
| - // Is this scope the scope of a named function expression?
|
| - bool HasFunctionName();
|
| -
|
| - // Return if this has context allocated locals.
|
| - bool HasHeapAllocatedLocals();
|
| -
|
| - // Return if contexts are allocated for this scope.
|
| - bool HasContext();
|
| -
|
| - // Return if this is a function scope with "use asm".
|
| - inline bool IsAsmModule();
|
| -
|
| - // Return if this is a nested function within an asm module scope.
|
| - inline bool IsAsmFunction();
|
| -
|
| - inline bool HasSimpleParameters();
|
| -
|
| - // Return the function_name if present.
|
| - String* FunctionName();
|
| -
|
| - ModuleInfo* ModuleDescriptorInfo();
|
| -
|
| - // Return the name of the given parameter.
|
| - String* ParameterName(int var);
|
| -
|
| - // Return the name of the given local.
|
| - String* LocalName(int var);
|
| -
|
| - // Return the name of the given stack local.
|
| - String* StackLocalName(int var);
|
| -
|
| - // Return the name of the given stack local.
|
| - int StackLocalIndex(int var);
|
| -
|
| - // Return the name of the given context local.
|
| - String* ContextLocalName(int var);
|
| -
|
| - // Return the mode of the given context local.
|
| - VariableMode ContextLocalMode(int var);
|
| -
|
| - // Return the initialization flag of the given context local.
|
| - InitializationFlag ContextLocalInitFlag(int var);
|
| -
|
| - // Return the initialization flag of the given context local.
|
| - MaybeAssignedFlag ContextLocalMaybeAssignedFlag(int var);
|
| -
|
| - // Return true if this local was introduced by the compiler, and should not be
|
| - // exposed to the user in a debugger.
|
| - static bool VariableIsSynthetic(String* name);
|
| -
|
| - // Lookup support for serialized scope info. Returns the
|
| - // the stack slot index for a given slot name if the slot is
|
| - // present; otherwise returns a value < 0. The name must be an internalized
|
| - // string.
|
| - int StackSlotIndex(String* name);
|
| -
|
| - // Lookup support for serialized scope info. Returns the local context slot
|
| - // index for a given slot name if the slot is present; otherwise
|
| - // returns a value < 0. The name must be an internalized string.
|
| - // If the slot is present and mode != NULL, sets *mode to the corresponding
|
| - // mode for that variable.
|
| - static int ContextSlotIndex(Handle<ScopeInfo> scope_info, Handle<String> name,
|
| - VariableMode* mode, InitializationFlag* init_flag,
|
| - MaybeAssignedFlag* maybe_assigned_flag);
|
| -
|
| - // Lookup metadata of a MODULE-allocated variable. Return 0 if there is no
|
| - // module variable with the given name (the index value of a MODULE variable
|
| - // is never 0).
|
| - int ModuleIndex(Handle<String> name, VariableMode* mode,
|
| - InitializationFlag* init_flag,
|
| - MaybeAssignedFlag* maybe_assigned_flag);
|
| -
|
| - // Lookup the name of a certain context slot by its index.
|
| - String* ContextSlotName(int slot_index);
|
| -
|
| - // Lookup support for serialized scope info. Returns the
|
| - // parameter index for a given parameter name if the parameter is present;
|
| - // otherwise returns a value < 0. The name must be an internalized string.
|
| - int ParameterIndex(String* name);
|
| -
|
| - // Lookup support for serialized scope info. Returns the function context
|
| - // slot index if the function name is present and context-allocated (named
|
| - // function expressions, only), otherwise returns a value < 0. The name
|
| - // must be an internalized string.
|
| - int FunctionContextSlotIndex(String* name);
|
| -
|
| - // Lookup support for serialized scope info. Returns the receiver context
|
| - // slot index if scope has a "this" binding, and the binding is
|
| - // context-allocated. Otherwise returns a value < 0.
|
| - int ReceiverContextSlotIndex();
|
| -
|
| - FunctionKind function_kind();
|
| -
|
| - // Returns true if this ScopeInfo is linked to a outer ScopeInfo.
|
| - bool HasOuterScopeInfo();
|
| -
|
| - // Returns true if this ScopeInfo was created for a debug-evaluate scope.
|
| - bool IsDebugEvaluateScope();
|
| -
|
| - // Can be used to mark a ScopeInfo that looks like a with-scope as actually
|
| - // being a debug-evaluate scope.
|
| - void SetIsDebugEvaluateScope();
|
| -
|
| - // Return the outer ScopeInfo if present.
|
| - ScopeInfo* OuterScopeInfo();
|
| -
|
| -#ifdef DEBUG
|
| - bool Equals(ScopeInfo* other) const;
|
| -#endif
|
| -
|
| - static Handle<ScopeInfo> Create(Isolate* isolate, Zone* zone, Scope* scope,
|
| - MaybeHandle<ScopeInfo> outer_scope);
|
| - static Handle<ScopeInfo> CreateForWithScope(
|
| - Isolate* isolate, MaybeHandle<ScopeInfo> outer_scope);
|
| - static Handle<ScopeInfo> CreateGlobalThisBinding(Isolate* isolate);
|
| -
|
| - // Serializes empty scope info.
|
| - V8_EXPORT_PRIVATE static ScopeInfo* Empty(Isolate* isolate);
|
| -
|
| -#ifdef DEBUG
|
| - void Print();
|
| -#endif
|
| -
|
| - // The layout of the static part of a ScopeInfo is as follows. Each entry is
|
| - // numeric and occupies one array slot.
|
| -// 1. A set of properties of the scope.
|
| -// 2. The number of parameters. For non-function scopes this is 0.
|
| -// 3. The number of non-parameter variables allocated on the stack.
|
| -// 4. The number of non-parameter and parameter variables allocated in the
|
| -// context.
|
| -#define FOR_EACH_SCOPE_INFO_NUMERIC_FIELD(V) \
|
| - V(Flags) \
|
| - V(ParameterCount) \
|
| - V(StackLocalCount) \
|
| - V(ContextLocalCount)
|
| -
|
| -#define FIELD_ACCESSORS(name) \
|
| - inline void Set##name(int value); \
|
| - inline int name();
|
| - FOR_EACH_SCOPE_INFO_NUMERIC_FIELD(FIELD_ACCESSORS)
|
| -#undef FIELD_ACCESSORS
|
| -
|
| - enum {
|
| -#define DECL_INDEX(name) k##name,
|
| - FOR_EACH_SCOPE_INFO_NUMERIC_FIELD(DECL_INDEX)
|
| -#undef DECL_INDEX
|
| - kVariablePartIndex
|
| - };
|
| -
|
| - private:
|
| - // The layout of the variable part of a ScopeInfo is as follows:
|
| - // 1. ParameterNames:
|
| - // This part stores the names of the parameters for function scopes. One
|
| - // slot is used per parameter, so in total this part occupies
|
| - // ParameterCount() slots in the array. For other scopes than function
|
| - // scopes ParameterCount() is 0.
|
| - // 2. StackLocalFirstSlot:
|
| - // Index of a first stack slot for stack local. Stack locals belonging to
|
| - // this scope are located on a stack at slots starting from this index.
|
| - // 3. StackLocalNames:
|
| - // Contains the names of local variables that are allocated on the stack,
|
| - // in increasing order of the stack slot index. First local variable has a
|
| - // stack slot index defined in StackLocalFirstSlot (point 2 above).
|
| - // One slot is used per stack local, so in total this part occupies
|
| - // StackLocalCount() slots in the array.
|
| - // 4. ContextLocalNames:
|
| - // Contains the names of local variables and parameters that are allocated
|
| - // in the context. They are stored in increasing order of the context slot
|
| - // index starting with Context::MIN_CONTEXT_SLOTS. One slot is used per
|
| - // context local, so in total this part occupies ContextLocalCount() slots
|
| - // in the array.
|
| - // 5. ContextLocalInfos:
|
| - // Contains the variable modes and initialization flags corresponding to
|
| - // the context locals in ContextLocalNames. One slot is used per
|
| - // context local, so in total this part occupies ContextLocalCount()
|
| - // slots in the array.
|
| - // 6. ReceiverInfo:
|
| - // If the scope binds a "this" value, one slot is reserved to hold the
|
| - // context or stack slot index for the variable.
|
| - // 7. FunctionNameInfo:
|
| - // If the scope belongs to a named function expression this part contains
|
| - // information about the function variable. It always occupies two array
|
| - // slots: a. The name of the function variable.
|
| - // b. The context or stack slot index for the variable.
|
| - // 8. OuterScopeInfoIndex:
|
| - // The outer scope's ScopeInfo or the hole if there's none.
|
| - // 9. ModuleInfo, ModuleVariableCount, and ModuleVariables:
|
| - // For a module scope, this part contains the ModuleInfo, the number of
|
| - // MODULE-allocated variables, and the metadata of those variables. For
|
| - // non-module scopes it is empty.
|
| - int ParameterNamesIndex();
|
| - int StackLocalFirstSlotIndex();
|
| - int StackLocalNamesIndex();
|
| - int ContextLocalNamesIndex();
|
| - int ContextLocalInfosIndex();
|
| - int ReceiverInfoIndex();
|
| - int FunctionNameInfoIndex();
|
| - int OuterScopeInfoIndex();
|
| - int ModuleInfoIndex();
|
| - int ModuleVariableCountIndex();
|
| - int ModuleVariablesIndex();
|
| -
|
| - int Lookup(Handle<String> name, int start, int end, VariableMode* mode,
|
| - VariableLocation* location, InitializationFlag* init_flag,
|
| - MaybeAssignedFlag* maybe_assigned_flag);
|
| -
|
| - // Get metadata of i-th MODULE-allocated variable, where 0 <= i <
|
| - // ModuleVariableCount. The metadata is returned via out-arguments, which may
|
| - // be nullptr if the corresponding information is not requested
|
| - void ModuleVariable(int i, String** name, int* index,
|
| - VariableMode* mode = nullptr,
|
| - InitializationFlag* init_flag = nullptr,
|
| - MaybeAssignedFlag* maybe_assigned_flag = nullptr);
|
| -
|
| - // Used for the function name variable for named function expressions, and for
|
| - // the receiver.
|
| - enum VariableAllocationInfo { NONE, STACK, CONTEXT, UNUSED };
|
| -
|
| - // Properties of scopes.
|
| - class ScopeTypeField : public BitField<ScopeType, 0, 4> {};
|
| - class CallsEvalField : public BitField<bool, ScopeTypeField::kNext, 1> {};
|
| - STATIC_ASSERT(LANGUAGE_END == 2);
|
| - class LanguageModeField
|
| - : public BitField<LanguageMode, CallsEvalField::kNext, 1> {};
|
| - class DeclarationScopeField
|
| - : public BitField<bool, LanguageModeField::kNext, 1> {};
|
| - class ReceiverVariableField
|
| - : public BitField<VariableAllocationInfo, DeclarationScopeField::kNext,
|
| - 2> {};
|
| - class HasNewTargetField
|
| - : public BitField<bool, ReceiverVariableField::kNext, 1> {};
|
| - class FunctionVariableField
|
| - : public BitField<VariableAllocationInfo, HasNewTargetField::kNext, 2> {};
|
| - class AsmModuleField
|
| - : public BitField<bool, FunctionVariableField::kNext, 1> {};
|
| - class AsmFunctionField : public BitField<bool, AsmModuleField::kNext, 1> {};
|
| - class HasSimpleParametersField
|
| - : public BitField<bool, AsmFunctionField::kNext, 1> {};
|
| - class FunctionKindField
|
| - : public BitField<FunctionKind, HasSimpleParametersField::kNext, 10> {};
|
| - class HasOuterScopeInfoField
|
| - : public BitField<bool, FunctionKindField::kNext, 1> {};
|
| - class IsDebugEvaluateScopeField
|
| - : public BitField<bool, HasOuterScopeInfoField::kNext, 1> {};
|
| -
|
| - // Properties of variables.
|
| - class VariableModeField : public BitField<VariableMode, 0, 3> {};
|
| - class InitFlagField : public BitField<InitializationFlag, 3, 1> {};
|
| - class MaybeAssignedFlagField : public BitField<MaybeAssignedFlag, 4, 1> {};
|
| -
|
| - friend class ScopeIterator;
|
| -};
|
| -
|
| // The cache for maps used by normalized (dictionary mode) objects.
|
| // Such maps do not have property descriptors, so a typical program
|
| // needs very limited number of distinct normalized maps.
|
| @@ -12028,4 +11702,6 @@ class BooleanBit : public AllStatic {
|
| } // NOLINT, false-positive due to second-order macros.
|
| } // NOLINT, false-positive due to second-order macros.
|
|
|
| +#include "src/objects/object-macros-undef.h"
|
| +
|
| #endif // V8_OBJECTS_H_
|
|
|