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

Side by Side Diff: src/frame-element.h

Issue 6685088: Merge isolates to bleeding_edge. (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 9 years, 9 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/flag-definitions.h ('k') | src/frame-element.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 2009 the V8 project authors. All rights reserved. 1 // Copyright 2009 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 99
100 // Factory function to construct a frame element whose value is known at 100 // Factory function to construct a frame element whose value is known at
101 // compile time. 101 // compile time.
102 static FrameElement ConstantElement(Handle<Object> value, 102 static FrameElement ConstantElement(Handle<Object> value,
103 SyncFlag is_synced) { 103 SyncFlag is_synced) {
104 TypeInfo info = TypeInfo::TypeFromValue(value); 104 TypeInfo info = TypeInfo::TypeFromValue(value);
105 FrameElement result(value, is_synced, info); 105 FrameElement result(value, is_synced, info);
106 return result; 106 return result;
107 } 107 }
108 108
109 // Static indirection table for handles to constants. If a frame
110 // element represents a constant, the data contains an index into
111 // this table of handles to the actual constants.
112 typedef ZoneList<Handle<Object> > ZoneObjectList;
113
114 static ZoneObjectList* ConstantList();
115
116 static bool ConstantPoolOverflowed() { 109 static bool ConstantPoolOverflowed() {
117 return !DataField::is_valid(ConstantList()->length()); 110 return !DataField::is_valid(
118 } 111 Isolate::Current()->frame_element_constant_list()->length());
119
120 // Clear the constants indirection table.
121 static void ClearConstantList() {
122 ConstantList()->Clear();
123 } 112 }
124 113
125 bool is_synced() const { return SyncedField::decode(value_); } 114 bool is_synced() const { return SyncedField::decode(value_); }
126 115
127 void set_sync() { 116 void set_sync() {
128 ASSERT(type() != MEMORY); 117 ASSERT(type() != MEMORY);
129 value_ = value_ | SyncedField::encode(true); 118 value_ = value_ | SyncedField::encode(true);
130 } 119 }
131 120
132 void clear_sync() { 121 void clear_sync() {
(...skipping 24 matching lines...) Expand all
157 Register reg() const { 146 Register reg() const {
158 ASSERT(is_register()); 147 ASSERT(is_register());
159 uint32_t reg = DataField::decode(value_); 148 uint32_t reg = DataField::decode(value_);
160 Register result; 149 Register result;
161 result.code_ = reg; 150 result.code_ = reg;
162 return result; 151 return result;
163 } 152 }
164 153
165 Handle<Object> handle() const { 154 Handle<Object> handle() const {
166 ASSERT(is_constant()); 155 ASSERT(is_constant());
167 return ConstantList()->at(DataField::decode(value_)); 156 return Isolate::Current()->frame_element_constant_list()->
157 at(DataField::decode(value_));
168 } 158 }
169 159
170 int index() const { 160 int index() const {
171 ASSERT(is_copy()); 161 ASSERT(is_copy());
172 return DataField::decode(value_); 162 return DataField::decode(value_);
173 } 163 }
174 164
175 bool Equals(FrameElement other) { 165 bool Equals(FrameElement other) {
176 uint32_t masked_difference = (value_ ^ other.value_) & ~CopiedField::mask(); 166 uint32_t masked_difference = (value_ ^ other.value_) & ~CopiedField::mask();
177 if (!masked_difference) { 167 if (!masked_difference) {
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 TypeInfo info) { 215 TypeInfo info) {
226 value_ = TypeField::encode(type) 216 value_ = TypeField::encode(type)
227 | CopiedField::encode(false) 217 | CopiedField::encode(false)
228 | SyncedField::encode(is_synced != NOT_SYNCED) 218 | SyncedField::encode(is_synced != NOT_SYNCED)
229 | TypeInfoField::encode(info.ToInt()) 219 | TypeInfoField::encode(info.ToInt())
230 | DataField::encode(reg.code_ > 0 ? reg.code_ : 0); 220 | DataField::encode(reg.code_ > 0 ? reg.code_ : 0);
231 } 221 }
232 222
233 // Used to construct constant elements. 223 // Used to construct constant elements.
234 FrameElement(Handle<Object> value, SyncFlag is_synced, TypeInfo info) { 224 FrameElement(Handle<Object> value, SyncFlag is_synced, TypeInfo info) {
225 ZoneObjectList* constant_list =
226 Isolate::Current()->frame_element_constant_list();
235 value_ = TypeField::encode(CONSTANT) 227 value_ = TypeField::encode(CONSTANT)
236 | CopiedField::encode(false) 228 | CopiedField::encode(false)
237 | SyncedField::encode(is_synced != NOT_SYNCED) 229 | SyncedField::encode(is_synced != NOT_SYNCED)
238 | TypeInfoField::encode(info.ToInt()) 230 | TypeInfoField::encode(info.ToInt())
239 | DataField::encode(ConstantList()->length()); 231 | DataField::encode(constant_list->length());
240 ConstantList()->Add(value); 232 constant_list->Add(value);
241 } 233 }
242 234
243 Type type() const { return TypeField::decode(value_); } 235 Type type() const { return TypeField::decode(value_); }
244 void set_type(Type type) { 236 void set_type(Type type) {
245 value_ = value_ & ~TypeField::mask(); 237 value_ = value_ & ~TypeField::mask();
246 value_ = value_ | TypeField::encode(type); 238 value_ = value_ | TypeField::encode(type);
247 } 239 }
248 240
249 void set_index(int new_index) { 241 void set_index(int new_index) {
250 ASSERT(is_copy()); 242 ASSERT(is_copy());
(...skipping 17 matching lines...) Expand all
268 class UntaggedInt32Field: public BitField<bool, 5, 1> {}; 260 class UntaggedInt32Field: public BitField<bool, 5, 1> {};
269 class TypeInfoField: public BitField<int, 6, 7> {}; 261 class TypeInfoField: public BitField<int, 6, 7> {};
270 class DataField: public BitField<uint32_t, 13, 32 - 13> {}; 262 class DataField: public BitField<uint32_t, 13, 32 - 13> {};
271 263
272 friend class VirtualFrame; 264 friend class VirtualFrame;
273 }; 265 };
274 266
275 } } // namespace v8::internal 267 } } // namespace v8::internal
276 268
277 #endif // V8_FRAME_ELEMENT_H_ 269 #endif // V8_FRAME_ELEMENT_H_
OLDNEW
« no previous file with comments | « src/flag-definitions.h ('k') | src/frame-element.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698