Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Side by Side Diff: src/ast.h

Issue 755513003: Hydrogen: fix keyed loads with string keys (Closed) Base URL: gh:v8/v8@master
Patch Set: rebase again Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/hydrogen.cc » ('j') | src/typing.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_AST_H_ 5 #ifndef V8_AST_H_
6 #define V8_AST_H_ 6 #define V8_AST_H_
7 7
8 #include "src/v8.h" 8 #include "src/v8.h"
9 9
10 #include "src/assembler.h" 10 #include "src/assembler.h"
(...skipping 1730 matching lines...) Expand 10 before | Expand all | Expand 10 after
1741 1741
1742 bool IsStringAccess() const { 1742 bool IsStringAccess() const {
1743 return IsStringAccessField::decode(bit_field_); 1743 return IsStringAccessField::decode(bit_field_);
1744 } 1744 }
1745 1745
1746 // Type feedback information. 1746 // Type feedback information.
1747 bool IsMonomorphic() OVERRIDE { return receiver_types_.length() == 1; } 1747 bool IsMonomorphic() OVERRIDE { return receiver_types_.length() == 1; }
1748 SmallMapList* GetReceiverTypes() OVERRIDE { return &receiver_types_; } 1748 SmallMapList* GetReceiverTypes() OVERRIDE { return &receiver_types_; }
1749 KeyedAccessStoreMode GetStoreMode() const OVERRIDE { return STANDARD_STORE; } 1749 KeyedAccessStoreMode GetStoreMode() const OVERRIDE { return STANDARD_STORE; }
1750 IcCheckType GetKeyType() const OVERRIDE { 1750 IcCheckType GetKeyType() const OVERRIDE {
1751 // PROPERTY key types currently aren't implemented for KeyedLoadICs. 1751 return KeyTypeField::decode(bit_field_);
1752 return ELEMENT;
1753 } 1752 }
1754 bool IsUninitialized() const { 1753 bool IsUninitialized() const {
1755 return !is_for_call() && HasNoTypeInformation(); 1754 return !is_for_call() && HasNoTypeInformation();
1756 } 1755 }
1757 bool HasNoTypeInformation() const { 1756 bool HasNoTypeInformation() const {
1758 return IsUninitializedField::decode(bit_field_); 1757 return IsUninitializedField::decode(bit_field_);
1759 } 1758 }
1760 void set_is_uninitialized(bool b) { 1759 void set_is_uninitialized(bool b) {
1761 bit_field_ = IsUninitializedField::update(bit_field_, b); 1760 bit_field_ = IsUninitializedField::update(bit_field_, b);
1762 } 1761 }
1763 void set_is_string_access(bool b) { 1762 void set_is_string_access(bool b) {
1764 bit_field_ = IsStringAccessField::update(bit_field_, b); 1763 bit_field_ = IsStringAccessField::update(bit_field_, b);
1765 } 1764 }
1765 void set_key_type(IcCheckType key_type) {
1766 bit_field_ = KeyTypeField::update(bit_field_, key_type);
1767 }
1766 void mark_for_call() { 1768 void mark_for_call() {
1767 bit_field_ = IsForCallField::update(bit_field_, true); 1769 bit_field_ = IsForCallField::update(bit_field_, true);
1768 } 1770 }
1769 bool is_for_call() const { return IsForCallField::decode(bit_field_); } 1771 bool is_for_call() const { return IsForCallField::decode(bit_field_); }
1770 1772
1771 bool IsSuperAccess() { 1773 bool IsSuperAccess() {
1772 return obj()->IsSuperReference(); 1774 return obj()->IsSuperReference();
1773 } 1775 }
1774 1776
1775 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( 1777 virtual FeedbackVectorRequirements ComputeFeedbackRequirements(
(...skipping 22 matching lines...) Expand all
1798 obj_(obj), 1800 obj_(obj),
1799 key_(key) {} 1801 key_(key) {}
1800 static int parent_num_ids() { return Expression::num_ids(); } 1802 static int parent_num_ids() { return Expression::num_ids(); }
1801 1803
1802 private: 1804 private:
1803 int local_id(int n) const { return base_id() + parent_num_ids() + n; } 1805 int local_id(int n) const { return base_id() + parent_num_ids() + n; }
1804 1806
1805 class IsForCallField : public BitField8<bool, 0, 1> {}; 1807 class IsForCallField : public BitField8<bool, 0, 1> {};
1806 class IsUninitializedField : public BitField8<bool, 1, 1> {}; 1808 class IsUninitializedField : public BitField8<bool, 1, 1> {};
1807 class IsStringAccessField : public BitField8<bool, 2, 1> {}; 1809 class IsStringAccessField : public BitField8<bool, 2, 1> {};
1810 class KeyTypeField : public BitField8<IcCheckType, 3, 1> {};
1808 uint8_t bit_field_; 1811 uint8_t bit_field_;
1809 FeedbackVectorICSlot property_feedback_slot_; 1812 FeedbackVectorICSlot property_feedback_slot_;
1810 Expression* obj_; 1813 Expression* obj_;
1811 Expression* key_; 1814 Expression* key_;
1812 SmallMapList receiver_types_; 1815 SmallMapList receiver_types_;
1813 }; 1816 };
1814 1817
1815 1818
1816 class Call FINAL : public Expression { 1819 class Call FINAL : public Expression {
1817 public: 1820 public:
(...skipping 1724 matching lines...) Expand 10 before | Expand all | Expand 10 after
3542 3545
3543 private: 3546 private:
3544 Zone* zone_; 3547 Zone* zone_;
3545 AstValueFactory* ast_value_factory_; 3548 AstValueFactory* ast_value_factory_;
3546 }; 3549 };
3547 3550
3548 3551
3549 } } // namespace v8::internal 3552 } } // namespace v8::internal
3550 3553
3551 #endif // V8_AST_H_ 3554 #endif // V8_AST_H_
OLDNEW
« no previous file with comments | « no previous file | src/hydrogen.cc » ('j') | src/typing.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698