| Index: src/scopeinfo.h
|
| ===================================================================
|
| --- src/scopeinfo.h (revision 5039)
|
| +++ src/scopeinfo.h (working copy)
|
| @@ -37,7 +37,7 @@
|
| // Scope information represents information about a functions's
|
| // scopes (currently only one, because we don't do any inlining)
|
| // and the allocation of the scope's variables. Scope information
|
| -// is stored in a compressed form with Code objects and is used
|
| +// is stored in a compressed form in FixedArray objects and is used
|
| // at runtime (stack dumps, deoptimization, etc.).
|
| //
|
| // Historical note: In other VMs built by this team, ScopeInfo was
|
| @@ -54,23 +54,16 @@
|
| // Create a ScopeInfo instance from a scope.
|
| explicit ScopeInfo(Scope* scope);
|
|
|
| - // Create a ScopeInfo instance from a Code object.
|
| - explicit ScopeInfo(Code* code);
|
| + // Create a ScopeInfo instance from an Object holding the serialized data.
|
| + explicit ScopeInfo(Object* data);
|
|
|
| - // Write the ScopeInfo data into a Code object, and returns the
|
| - // amount of space that was needed. If no Code object is provided
|
| - // (NULL handle), Serialize() only returns the amount of space needed.
|
| - //
|
| - // This operations requires that the Code object has the correct amount
|
| - // of space for the ScopeInfo data; otherwise the operation fails (fatal
|
| - // error). Any existing scope info in the Code object is simply overwritten.
|
| - int Serialize(Code* code);
|
| + // Creates a heap object holding the serialized scope info.
|
| + Handle<Object> Serialize();
|
|
|
| - // Garbage collection support for scope info embedded in Code objects.
|
| - // This code is in ScopeInfo because only here we should have to know
|
| - // about the encoding.
|
| - static void IterateScopeInfo(Code* code, ObjectVisitor* v);
|
| + static Handle<Object> CreateHeapObject(Scope* scope);
|
|
|
| + // Serializes empty scope info.
|
| + static Object* EmptyHeapObject();
|
|
|
| // --------------------------------------------------------------------------
|
| // Lookup
|
| @@ -100,44 +93,44 @@
|
| // object.
|
| //
|
| // ScopeInfo is the only class which should have to know about the
|
| - // encoding of it's information in a Code object, which is why these
|
| + // encoding of it's information in a FixedArray object, which is why these
|
| // functions are in this class.
|
|
|
| // Does this scope call eval.
|
| - static bool CallsEval(Code* code);
|
| + static bool CallsEval(Object* data);
|
|
|
| // Return the number of stack slots for code.
|
| - static int NumberOfStackSlots(Code* code);
|
| + static int NumberOfStackSlots(Object* data);
|
|
|
| // Return the number of context slots for code.
|
| - static int NumberOfContextSlots(Code* code);
|
| + static int NumberOfContextSlots(Object* data);
|
|
|
| // Return if this has context slots besides MIN_CONTEXT_SLOTS;
|
| - static bool HasHeapAllocatedLocals(Code* code);
|
| + static bool HasHeapAllocatedLocals(Object* data);
|
|
|
| - // Lookup support for scope info embedded in Code objects. Returns
|
| + // 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 a symbol
|
| // (canonicalized).
|
| - static int StackSlotIndex(Code* code, String* name);
|
| + static int StackSlotIndex(Object* data, String* name);
|
|
|
| - // Lookup support for scope info embedded in Code objects. Returns the
|
| + // Lookup support for serialized scope info. Returns the
|
| // context slot index for a given slot name if the slot is present; otherwise
|
| // returns a value < 0. The name must be a symbol (canonicalized).
|
| // If the slot is present and mode != NULL, sets *mode to the corresponding
|
| // mode for that variable.
|
| - static int ContextSlotIndex(Code* code, String* name, Variable::Mode* mode);
|
| + static int ContextSlotIndex(Object* data, String* name, Variable::Mode* mode);
|
|
|
| - // Lookup support for scope info embedded in Code objects. Returns the
|
| + // 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 a symbol (canonicalized).
|
| - static int ParameterIndex(Code* code, String* name);
|
| + static int ParameterIndex(Object* data, String* name);
|
|
|
| - // Lookup support for scope info embedded in Code objects. Returns the
|
| + // Lookup support for serialized scope info. Returns the
|
| // function context slot index if the function name is present (named
|
| // function expressions, only), otherwise returns a value < 0. The name
|
| // must be a symbol (canonicalized).
|
| - static int FunctionContextSlotIndex(Code* code, String* name);
|
| + static int FunctionContextSlotIndex(Object* data, String* name);
|
|
|
| // --------------------------------------------------------------------------
|
| // Debugging support
|
| @@ -155,32 +148,21 @@
|
| List<Variable::Mode, Allocator > context_modes_;
|
| };
|
|
|
| -class ZoneScopeInfo: public ScopeInfo<ZoneListAllocationPolicy> {
|
| - public:
|
| - // Create a ZoneScopeInfo instance from a scope.
|
| - explicit ZoneScopeInfo(Scope* scope)
|
| - : ScopeInfo<ZoneListAllocationPolicy>(scope) {}
|
|
|
| - // Create a ZoneScopeInfo instance from a Code object.
|
| - explicit ZoneScopeInfo(Code* code)
|
| - : ScopeInfo<ZoneListAllocationPolicy>(code) {}
|
| -};
|
| -
|
| -
|
| -// Cache for mapping (code, property name) into context slot index.
|
| +// Cache for mapping (data, property name) into context slot index.
|
| // The cache contains both positive and negative results.
|
| // Slot index equals -1 means the property is absent.
|
| // Cleared at startup and prior to mark sweep collection.
|
| class ContextSlotCache {
|
| public:
|
| - // Lookup context slot index for (code, name).
|
| + // Lookup context slot index for (data, name).
|
| // If absent, kNotFound is returned.
|
| - static int Lookup(Code* code,
|
| + static int Lookup(Object* data,
|
| String* name,
|
| Variable::Mode* mode);
|
|
|
| // Update an element in the cache.
|
| - static void Update(Code* code,
|
| + static void Update(Object* data,
|
| String* name,
|
| Variable::Mode mode,
|
| int slot_index);
|
| @@ -190,10 +172,10 @@
|
|
|
| static const int kNotFound = -2;
|
| private:
|
| - inline static int Hash(Code* code, String* name);
|
| + inline static int Hash(Object* data, String* name);
|
|
|
| #ifdef DEBUG
|
| - static void ValidateEntry(Code* code,
|
| + static void ValidateEntry(Object* data,
|
| String* name,
|
| Variable::Mode mode,
|
| int slot_index);
|
| @@ -201,7 +183,7 @@
|
|
|
| static const int kLength = 256;
|
| struct Key {
|
| - Code* code;
|
| + Object* data;
|
| String* name;
|
| };
|
|
|
|
|