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

Side by Side Diff: src/property.h

Issue 228333003: Handlefy Descriptor and other code in objects.cc (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Formatting stuff. Created 6 years, 8 months 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 | Annotate | Revision Log
« no previous file with comments | « src/objects-inl.h ('k') | src/runtime.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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_PROPERTY_H_ 5 #ifndef V8_PROPERTY_H_
6 #define V8_PROPERTY_H_ 6 #define V8_PROPERTY_H_
7 7
8 #include "isolate.h" 8 #include "isolate.h"
9 #include "factory.h"
9 10
10 namespace v8 { 11 namespace v8 {
11 namespace internal { 12 namespace internal {
12 13
13 // Abstraction for elements in instance-descriptor arrays. 14 // Abstraction for elements in instance-descriptor arrays.
14 // 15 //
15 // Each descriptor has a key, property attributes, property type, 16 // Each descriptor has a key, property attributes, property type,
16 // property index (in the actual instance-descriptor array) and 17 // property index (in the actual instance-descriptor array) and
17 // optionally a piece of data. 18 // optionally a piece of data.
18 class Descriptor BASE_EMBEDDED { 19 class Descriptor BASE_EMBEDDED {
19 public: 20 public:
20 MUST_USE_RESULT MaybeObject* KeyToUniqueName() { 21 void KeyToUniqueName() {
21 if (!key_->IsUniqueName()) { 22 if (!key_->IsUniqueName()) {
22 MaybeObject* maybe_result = 23 key_ = key_->GetIsolate()->factory()->InternalizeString(
23 key_->GetIsolate()->heap()->InternalizeString(String::cast(key_)); 24 Handle<String>::cast(key_));
24 if (!maybe_result->To(&key_)) return maybe_result;
25 } 25 }
26 return key_;
27 } 26 }
28 27
29 Name* GetKey() { return key_; } 28 Handle<Name> GetKey() { return key_; }
30 Object* GetValue() { return value_; } 29 Handle<Object> GetValue() { return value_; }
31 PropertyDetails GetDetails() { return details_; } 30 PropertyDetails GetDetails() { return details_; }
32 31
33 #ifdef OBJECT_PRINT 32 #ifdef OBJECT_PRINT
34 void Print(FILE* out); 33 void Print(FILE* out);
35 #endif 34 #endif
36 35
37 void SetSortedKeyIndex(int index) { details_ = details_.set_pointer(index); } 36 void SetSortedKeyIndex(int index) { details_ = details_.set_pointer(index); }
38 37
39 private: 38 private:
40 Name* key_; 39 Handle<Name> key_;
41 Object* value_; 40 Handle<Object> value_;
42 PropertyDetails details_; 41 PropertyDetails details_;
43 42
44 protected: 43 protected:
45 Descriptor() : details_(Smi::FromInt(0)) {} 44 Descriptor() : details_(Smi::FromInt(0)) {}
46 45
47 void Init(Name* key, Object* value, PropertyDetails details) { 46 void Init(Handle<Name> key, Handle<Object> value, PropertyDetails details) {
48 key_ = key; 47 key_ = key;
49 value_ = value; 48 value_ = value;
50 details_ = details; 49 details_ = details;
51 } 50 }
52 51
53 Descriptor(Name* key, Object* value, PropertyDetails details) 52 Descriptor(Handle<Name> key, Handle<Object> value, PropertyDetails details)
54 : key_(key), 53 : key_(key),
55 value_(value), 54 value_(value),
56 details_(details) { } 55 details_(details) { }
57 56
58 Descriptor(Name* key, 57 Descriptor(Handle<Name> key,
59 Object* value, 58 Handle<Object> value,
60 PropertyAttributes attributes, 59 PropertyAttributes attributes,
61 PropertyType type, 60 PropertyType type,
62 Representation representation, 61 Representation representation,
63 int field_index = 0) 62 int field_index = 0)
64 : key_(key), 63 : key_(key),
65 value_(value), 64 value_(value),
66 details_(attributes, type, representation, field_index) { } 65 details_(attributes, type, representation, field_index) { }
67 66
68 friend class DescriptorArray; 67 friend class DescriptorArray;
69 }; 68 };
70 69
71 70
72 class FieldDescriptor V8_FINAL : public Descriptor { 71 class FieldDescriptor V8_FINAL : public Descriptor {
73 public: 72 public:
74 FieldDescriptor(Name* key, 73 FieldDescriptor(Handle<Name> key,
75 int field_index, 74 int field_index,
76 PropertyAttributes attributes, 75 PropertyAttributes attributes,
77 Representation representation) 76 Representation representation)
78 : Descriptor(key, Smi::FromInt(0), attributes, 77 : Descriptor(key, handle(Smi::FromInt(0), key->GetIsolate()), attributes,
79 FIELD, representation, field_index) {} 78 FIELD, representation, field_index) {}
80 }; 79 };
81 80
82 81
83 class ConstantDescriptor V8_FINAL : public Descriptor { 82 class ConstantDescriptor V8_FINAL : public Descriptor {
84 public: 83 public:
85 ConstantDescriptor(Name* key, 84 ConstantDescriptor(Handle<Name> key,
86 Object* value, 85 Handle<Object> value,
87 PropertyAttributes attributes) 86 PropertyAttributes attributes)
88 : Descriptor(key, value, attributes, CONSTANT, 87 : Descriptor(key, value, attributes, CONSTANT,
89 value->OptimalRepresentation()) {} 88 value->OptimalRepresentation()) {}
90 }; 89 };
91 90
92 91
93 class CallbacksDescriptor V8_FINAL : public Descriptor { 92 class CallbacksDescriptor V8_FINAL : public Descriptor {
94 public: 93 public:
95 CallbacksDescriptor(Name* key, 94 CallbacksDescriptor(Handle<Name> key,
96 Object* foreign, 95 Handle<Object> foreign,
97 PropertyAttributes attributes) 96 PropertyAttributes attributes)
98 : Descriptor(key, foreign, attributes, CALLBACKS, 97 : Descriptor(key, foreign, attributes, CALLBACKS,
99 Representation::Tagged()) {} 98 Representation::Tagged()) {}
100 }; 99 };
101 100
102 101
103 // Holds a property index value distinguishing if it is a field index or an 102 // Holds a property index value distinguishing if it is a field index or an
104 // index inside the object header. 103 // index inside the object header.
105 class PropertyIndex V8_FINAL { 104 class PropertyIndex V8_FINAL {
106 public: 105 public:
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 JSReceiver* holder_; 477 JSReceiver* holder_;
479 Map* transition_; 478 Map* transition_;
480 int number_; 479 int number_;
481 bool cacheable_; 480 bool cacheable_;
482 PropertyDetails details_; 481 PropertyDetails details_;
483 }; 482 };
484 483
485 } } // namespace v8::internal 484 } } // namespace v8::internal
486 485
487 #endif // V8_PROPERTY_H_ 486 #endif // V8_PROPERTY_H_
OLDNEW
« no previous file with comments | « src/objects-inl.h ('k') | src/runtime.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698