template<class Allocator>
ScopeInfo<Allocator>::ScopeInfo(Scope* scope)
: function_name_(Factory::empty_symbol()),
- supports_eval_(scope->SupportsEval()),
parameters_(scope->num_parameters()),
stack_slots_(scope->num_stack_slots()),
context_slots_(scope->num_heap_slots()),
// Encoding format in the Code object:
//
// - function name
-// - supports eval info
//
// - number of variables in the context object (smi) (= function context
// slot index + 1)
template<class Allocator>
ScopeInfo<Allocator>::ScopeInfo(Code* code)
: function_name_(Factory::empty_symbol()),
- supports_eval_(false),
parameters_(4),
stack_slots_(8),
context_slots_(8),
Object** p0 = &Memory::Object_at(code->sinfo_start());
Object** p = p0;
p = ReadSymbol(p, &function_name_);
- p = ReadBool(p, &supports_eval_);
p = ReadList<Allocator>(p, &context_slots_, &context_modes_);
p = ReadList<Allocator>(p, ¶meters_);
p = ReadList<Allocator>(p, &stack_slots_);
template<class Allocator>
int ScopeInfo<Allocator>::Serialize(Code* code) {
- // function name, supports eval, length & sentinel for 3 tables:
- const int extra_slots = 1 + 1 + 2 * 3;
+ // function name, length & sentinel for 3 tables:
+ const int extra_slots = 1 + 2 * 3;
int size = (extra_slots +
context_slots_.length() * 2 +
parameters_.length() +
Object** p0 = &Memory::Object_at(code->sinfo_start());
Object** p = p0;
p = WriteSymbol(p, function_name_);
- p = WriteInt(p, supports_eval_);
p = WriteList(p, &context_slots_, &context_modes_);
p = WriteList(p, ¶meters_);
p = WriteList(p, &stack_slots_);
static Object** ContextEntriesAddr(Code* code) {
ASSERT(code->sinfo_size() > 0);
- // +2 for function name, supports eval:
- return &Memory::Object_at(code->sinfo_start()) + 2;
+ // +1 for function name:
+ return &Memory::Object_at(code->sinfo_start()) + 1;
}
template<class Allocator>
-bool ScopeInfo<Allocator>::SupportsEval(Code* code) {
- bool result = false;
- if (code->sinfo_size() > 0) {
- ReadBool(&Memory::Object_at(code->sinfo_start()) + 1, &result);
- }
-#ifdef DEBUG
- { ScopeInfo info(code);
- ASSERT(result == info.supports_eval_);
- }
-#endif
- return result;
-}
-
-
-template<class Allocator>
int ScopeInfo<Allocator>::NumberOfStackSlots(Code* code) {
if (code->sinfo_size() > 0) {
Object** p = StackSlotEntriesAddr(code);
PrintF("/* no function name */");
PrintF("{");
- if (supports_eval_)
- PrintF("\n // supports eval\n");
-
PrintList<Allocator>("parameters", 0, parameters_);
PrintList<Allocator>("stack slots", 0, stack_slots_);
PrintList<Allocator>("context slots", Context::MIN_CONTEXT_SLOTS,
Handle<String> function_name() const { return function_name_; }
- bool supports_eval() const { return supports_eval_; }
-
Handle<String> parameter_name(int i) const { return parameters_[i]; }
int number_of_parameters() const { return parameters_.length(); }
// encoding of it's information in a Code object, which is why these
// functions are in this class.
- static bool SupportsEval(Code* code);
-
// Return the number of stack slots for code.
static int NumberOfStackSlots(Code* code);
private:
Handle<String> function_name_;
- bool supports_eval_;
List<Handle<String>, Allocator > parameters_;
List<Handle<String>, Allocator > stack_slots_;
List<Handle<String>, Allocator > context_slots_;