| Index: src/scopeinfo.h
|
| diff --git a/src/scopeinfo.h b/src/scopeinfo.h
|
| index 7b8ed44d5bd6280f5773625ce4f15af2f137c326..4de325939588446f44bf91ed8d59e42e2029877f 100644
|
| --- a/src/scopeinfo.h
|
| +++ b/src/scopeinfo.h
|
| @@ -20,17 +20,14 @@ class ContextSlotCache {
|
| public:
|
| // Lookup context slot index for (data, name).
|
| // If absent, kNotFound is returned.
|
| - int Lookup(Object* data,
|
| - String* name,
|
| - VariableMode* mode,
|
| - InitializationFlag* init_flag);
|
| + int Lookup(Object* data, String* name, VariableMode* mode,
|
| + InitializationFlag* init_flag,
|
| + MaybeAssignedFlag* maybe_assigned_flag);
|
|
|
| // Update an element in the cache.
|
| - void Update(Handle<Object> data,
|
| - Handle<String> name,
|
| - VariableMode mode,
|
| + void Update(Handle<Object> data, Handle<String> name, VariableMode mode,
|
| InitializationFlag init_flag,
|
| - int slot_index);
|
| + MaybeAssignedFlag maybe_assigned_flag, int slot_index);
|
|
|
| // Clear the cache.
|
| void Clear();
|
| @@ -49,11 +46,9 @@ class ContextSlotCache {
|
| inline static int Hash(Object* data, String* name);
|
|
|
| #ifdef DEBUG
|
| - void ValidateEntry(Handle<Object> data,
|
| - Handle<String> name,
|
| - VariableMode mode,
|
| - InitializationFlag init_flag,
|
| - int slot_index);
|
| + void ValidateEntry(Handle<Object> data, Handle<String> name,
|
| + VariableMode mode, InitializationFlag init_flag,
|
| + MaybeAssignedFlag maybe_assigned_flag, int slot_index);
|
| #endif
|
|
|
| static const int kLength = 256;
|
| @@ -63,17 +58,18 @@ class ContextSlotCache {
|
| };
|
|
|
| struct Value {
|
| - Value(VariableMode mode,
|
| - InitializationFlag init_flag,
|
| - int index) {
|
| + Value(VariableMode mode, InitializationFlag init_flag,
|
| + MaybeAssignedFlag maybe_assigned_flag, int index) {
|
| ASSERT(ModeField::is_valid(mode));
|
| ASSERT(InitField::is_valid(init_flag));
|
| + ASSERT(MaybeAssignedField::is_valid(maybe_assigned_flag));
|
| ASSERT(IndexField::is_valid(index));
|
| - value_ = ModeField::encode(mode) |
|
| - IndexField::encode(index) |
|
| - InitField::encode(init_flag);
|
| + value_ = ModeField::encode(mode) | IndexField::encode(index) |
|
| + InitField::encode(init_flag) |
|
| + MaybeAssignedField::encode(maybe_assigned_flag);
|
| ASSERT(mode == this->mode());
|
| ASSERT(init_flag == this->initialization_flag());
|
| + ASSERT(maybe_assigned_flag == this->maybe_assigned_flag());
|
| ASSERT(index == this->index());
|
| }
|
|
|
| @@ -87,13 +83,18 @@ class ContextSlotCache {
|
| return InitField::decode(value_);
|
| }
|
|
|
| + MaybeAssignedFlag maybe_assigned_flag() {
|
| + return MaybeAssignedField::decode(value_);
|
| + }
|
| +
|
| int index() { return IndexField::decode(value_); }
|
|
|
| // Bit fields in value_ (type, shift, size). Must be public so the
|
| // constants can be embedded in generated code.
|
| - class ModeField: public BitField<VariableMode, 0, 4> {};
|
| - class InitField: public BitField<InitializationFlag, 4, 1> {};
|
| - class IndexField: public BitField<int, 5, 32-5> {};
|
| + class ModeField : public BitField<VariableMode, 0, 4> {};
|
| + class InitField : public BitField<InitializationFlag, 4, 1> {};
|
| + class MaybeAssignedField : public BitField<MaybeAssignedFlag, 5, 1> {};
|
| + class IndexField : public BitField<int, 6, 32 - 6> {};
|
|
|
| private:
|
| uint32_t value_;
|
|
|