| Index: src/hydrogen-instructions.h
|
| diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h
|
| index 26501d07fbcde78e5afdbd83bff24dec6fa975b8..4a2bf1007bd6f06c2fa73811799610432e8070fb 100644
|
| --- a/src/hydrogen-instructions.h
|
| +++ b/src/hydrogen-instructions.h
|
| @@ -6144,6 +6144,8 @@ class HLoadNamedField V8_FINAL : public HTemplateInstruction<2> {
|
| public:
|
| DECLARE_INSTRUCTION_FACTORY_P3(HLoadNamedField, HValue*, HValue*,
|
| HObjectAccess);
|
| + DECLARE_INSTRUCTION_FACTORY_P4(HLoadNamedField, HValue*, HValue*,
|
| + HObjectAccess, Handle<Map>);
|
|
|
| HValue* object() { return OperandAt(0); }
|
| HValue* dependency() {
|
| @@ -6156,6 +6158,8 @@ class HLoadNamedField V8_FINAL : public HTemplateInstruction<2> {
|
| return access_.representation();
|
| }
|
|
|
| + Unique<Map> map() const { return map_; }
|
| +
|
| virtual bool HasEscapingOperandAt(int index) V8_OVERRIDE { return false; }
|
| virtual bool HasOutOfBoundsAccess(int size) V8_OVERRIDE {
|
| return !access().IsInobject() || access().offset() >= size;
|
| @@ -6175,13 +6179,15 @@ class HLoadNamedField V8_FINAL : public HTemplateInstruction<2> {
|
| protected:
|
| virtual bool DataEquals(HValue* other) V8_OVERRIDE {
|
| HLoadNamedField* b = HLoadNamedField::cast(other);
|
| - return access_.Equals(b->access_);
|
| + return access_.Equals(b->access_) && map_ == b->map_;
|
| }
|
|
|
| private:
|
| HLoadNamedField(HValue* object,
|
| HValue* dependency,
|
| - HObjectAccess access) : access_(access) {
|
| + HObjectAccess access,
|
| + Handle<Map> map = Handle<Map>::null())
|
| + : access_(access), map_(map) {
|
| ASSERT(object != NULL);
|
| SetOperandAt(0, object);
|
| SetOperandAt(1, dependency != NULL ? dependency : object);
|
| @@ -6215,6 +6221,7 @@ class HLoadNamedField V8_FINAL : public HTemplateInstruction<2> {
|
| virtual bool IsDeletable() const V8_OVERRIDE { return true; }
|
|
|
| HObjectAccess access_;
|
| + Unique<Map> map_;
|
| };
|
|
|
|
|
|
|