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

Side by Side Diff: src/stub-cache.h

Issue 12330012: ES6 symbols: Allow symbols as property names (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Platform ports Created 7 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/runtime.js ('k') | src/stub-cache.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 60
61 Address address_; 61 Address address_;
62 62
63 friend class StubCache; 63 friend class StubCache;
64 }; 64 };
65 65
66 66
67 class StubCache { 67 class StubCache {
68 public: 68 public:
69 struct Entry { 69 struct Entry {
70 String* key; 70 Name* key;
71 Code* value; 71 Code* value;
72 Map* map; 72 Map* map;
73 }; 73 };
74 74
75 void Initialize(); 75 void Initialize();
76 76
77 77
78 // Computes the right stub matching. Inserts the result in the 78 // Computes the right stub matching. Inserts the result in the
79 // cache before returning. This might compile a stub if needed. 79 // cache before returning. This might compile a stub if needed.
80 Handle<Code> ComputeLoadNonexistent(Handle<String> name, 80 Handle<Code> ComputeLoadNonexistent(Handle<Name> name,
81 Handle<JSObject> object); 81 Handle<JSObject> object);
82 82
83 Handle<Code> ComputeLoadField(Handle<String> name, 83 Handle<Code> ComputeLoadField(Handle<Name> name,
84 Handle<JSObject> object, 84 Handle<JSObject> object,
85 Handle<JSObject> holder, 85 Handle<JSObject> holder,
86 PropertyIndex field_index); 86 PropertyIndex field_index);
87 87
88 Handle<Code> ComputeLoadCallback(Handle<String> name, 88 Handle<Code> ComputeLoadCallback(Handle<Name> name,
89 Handle<JSObject> object, 89 Handle<JSObject> object,
90 Handle<JSObject> holder, 90 Handle<JSObject> holder,
91 Handle<AccessorInfo> callback); 91 Handle<AccessorInfo> callback);
92 92
93 Handle<Code> ComputeLoadViaGetter(Handle<String> name, 93 Handle<Code> ComputeLoadViaGetter(Handle<Name> name,
94 Handle<JSObject> object, 94 Handle<JSObject> object,
95 Handle<JSObject> holder, 95 Handle<JSObject> holder,
96 Handle<JSFunction> getter); 96 Handle<JSFunction> getter);
97 97
98 Handle<Code> ComputeLoadConstant(Handle<String> name, 98 Handle<Code> ComputeLoadConstant(Handle<Name> name,
99 Handle<JSObject> object, 99 Handle<JSObject> object,
100 Handle<JSObject> holder, 100 Handle<JSObject> holder,
101 Handle<JSFunction> value); 101 Handle<JSFunction> value);
102 102
103 Handle<Code> ComputeLoadInterceptor(Handle<String> name, 103 Handle<Code> ComputeLoadInterceptor(Handle<Name> name,
104 Handle<JSObject> object, 104 Handle<JSObject> object,
105 Handle<JSObject> holder); 105 Handle<JSObject> holder);
106 106
107 Handle<Code> ComputeLoadNormal(); 107 Handle<Code> ComputeLoadNormal();
108 108
109 Handle<Code> ComputeLoadGlobal(Handle<String> name, 109 Handle<Code> ComputeLoadGlobal(Handle<Name> name,
110 Handle<JSObject> object, 110 Handle<JSObject> object,
111 Handle<GlobalObject> holder, 111 Handle<GlobalObject> holder,
112 Handle<JSGlobalPropertyCell> cell, 112 Handle<JSGlobalPropertyCell> cell,
113 bool is_dont_delete); 113 bool is_dont_delete);
114 114
115 // --- 115 // ---
116 116
117 Handle<Code> ComputeKeyedLoadField(Handle<String> name, 117 Handle<Code> ComputeKeyedLoadField(Handle<Name> name,
118 Handle<JSObject> object, 118 Handle<JSObject> object,
119 Handle<JSObject> holder, 119 Handle<JSObject> holder,
120 PropertyIndex field_index); 120 PropertyIndex field_index);
121 121
122 Handle<Code> ComputeKeyedLoadCallback(Handle<String> name, 122 Handle<Code> ComputeKeyedLoadCallback(Handle<Name> name,
123 Handle<JSObject> object, 123 Handle<JSObject> object,
124 Handle<JSObject> holder, 124 Handle<JSObject> holder,
125 Handle<AccessorInfo> callback); 125 Handle<AccessorInfo> callback);
126 126
127 Handle<Code> ComputeKeyedLoadConstant(Handle<String> name, 127 Handle<Code> ComputeKeyedLoadConstant(Handle<Name> name,
128 Handle<JSObject> object, 128 Handle<JSObject> object,
129 Handle<JSObject> holder, 129 Handle<JSObject> holder,
130 Handle<JSFunction> value); 130 Handle<JSFunction> value);
131 131
132 Handle<Code> ComputeKeyedLoadInterceptor(Handle<String> name, 132 Handle<Code> ComputeKeyedLoadInterceptor(Handle<Name> name,
133 Handle<JSObject> object, 133 Handle<JSObject> object,
134 Handle<JSObject> holder); 134 Handle<JSObject> holder);
135 135
136 // --- 136 // ---
137 137
138 Handle<Code> ComputeStoreField(Handle<String> name, 138 Handle<Code> ComputeStoreField(Handle<Name> name,
139 Handle<JSObject> object, 139 Handle<JSObject> object,
140 int field_index, 140 int field_index,
141 Handle<Map> transition, 141 Handle<Map> transition,
142 StrictModeFlag strict_mode); 142 StrictModeFlag strict_mode);
143 143
144 Handle<Code> ComputeStoreNormal(StrictModeFlag strict_mode); 144 Handle<Code> ComputeStoreNormal(StrictModeFlag strict_mode);
145 145
146 Handle<Code> ComputeStoreGlobal(Handle<String> name, 146 Handle<Code> ComputeStoreGlobal(Handle<Name> name,
147 Handle<GlobalObject> object, 147 Handle<GlobalObject> object,
148 Handle<JSGlobalPropertyCell> cell, 148 Handle<JSGlobalPropertyCell> cell,
149 StrictModeFlag strict_mode); 149 StrictModeFlag strict_mode);
150 150
151 Handle<Code> ComputeStoreCallback(Handle<String> name, 151 Handle<Code> ComputeStoreCallback(Handle<Name> name,
152 Handle<JSObject> object, 152 Handle<JSObject> object,
153 Handle<JSObject> holder, 153 Handle<JSObject> holder,
154 Handle<AccessorInfo> callback, 154 Handle<AccessorInfo> callback,
155 StrictModeFlag strict_mode); 155 StrictModeFlag strict_mode);
156 156
157 Handle<Code> ComputeStoreViaSetter(Handle<String> name, 157 Handle<Code> ComputeStoreViaSetter(Handle<Name> name,
158 Handle<JSObject> object, 158 Handle<JSObject> object,
159 Handle<JSObject> holder, 159 Handle<JSObject> holder,
160 Handle<JSFunction> setter, 160 Handle<JSFunction> setter,
161 StrictModeFlag strict_mode); 161 StrictModeFlag strict_mode);
162 162
163 Handle<Code> ComputeStoreInterceptor(Handle<String> name, 163 Handle<Code> ComputeStoreInterceptor(Handle<Name> name,
164 Handle<JSObject> object, 164 Handle<JSObject> object,
165 StrictModeFlag strict_mode); 165 StrictModeFlag strict_mode);
166 166
167 // --- 167 // ---
168 168
169 Handle<Code> ComputeKeyedStoreField(Handle<String> name, 169 Handle<Code> ComputeKeyedStoreField(Handle<Name> name,
170 Handle<JSObject> object, 170 Handle<JSObject> object,
171 int field_index, 171 int field_index,
172 Handle<Map> transition, 172 Handle<Map> transition,
173 StrictModeFlag strict_mode); 173 StrictModeFlag strict_mode);
174 174
175 Handle<Code> ComputeKeyedLoadElement(Handle<Map> receiver_map); 175 Handle<Code> ComputeKeyedLoadElement(Handle<Map> receiver_map);
176 176
177 Handle<Code> ComputeKeyedStoreElement(Handle<Map> receiver_map, 177 Handle<Code> ComputeKeyedStoreElement(Handle<Map> receiver_map,
178 KeyedStoreIC::StubKind stub_kind, 178 KeyedStoreIC::StubKind stub_kind,
179 StrictModeFlag strict_mode, 179 StrictModeFlag strict_mode,
180 KeyedAccessGrowMode grow_mode); 180 KeyedAccessGrowMode grow_mode);
181 181
182 // --- 182 // ---
183 183
184 Handle<Code> ComputeCallField(int argc, 184 Handle<Code> ComputeCallField(int argc,
185 Code::Kind, 185 Code::Kind,
186 Code::ExtraICState extra_state, 186 Code::ExtraICState extra_state,
187 Handle<String> name, 187 Handle<Name> name,
188 Handle<Object> object, 188 Handle<Object> object,
189 Handle<JSObject> holder, 189 Handle<JSObject> holder,
190 PropertyIndex index); 190 PropertyIndex index);
191 191
192 Handle<Code> ComputeCallConstant(int argc, 192 Handle<Code> ComputeCallConstant(int argc,
193 Code::Kind, 193 Code::Kind,
194 Code::ExtraICState extra_state, 194 Code::ExtraICState extra_state,
195 Handle<String> name, 195 Handle<Name> name,
196 Handle<Object> object, 196 Handle<Object> object,
197 Handle<JSObject> holder, 197 Handle<JSObject> holder,
198 Handle<JSFunction> function); 198 Handle<JSFunction> function);
199 199
200 Handle<Code> ComputeCallInterceptor(int argc, 200 Handle<Code> ComputeCallInterceptor(int argc,
201 Code::Kind, 201 Code::Kind,
202 Code::ExtraICState extra_state, 202 Code::ExtraICState extra_state,
203 Handle<String> name, 203 Handle<Name> name,
204 Handle<Object> object, 204 Handle<Object> object,
205 Handle<JSObject> holder); 205 Handle<JSObject> holder);
206 206
207 Handle<Code> ComputeCallGlobal(int argc, 207 Handle<Code> ComputeCallGlobal(int argc,
208 Code::Kind, 208 Code::Kind,
209 Code::ExtraICState extra_state, 209 Code::ExtraICState extra_state,
210 Handle<String> name, 210 Handle<Name> name,
211 Handle<JSObject> object, 211 Handle<JSObject> object,
212 Handle<GlobalObject> holder, 212 Handle<GlobalObject> holder,
213 Handle<JSGlobalPropertyCell> cell, 213 Handle<JSGlobalPropertyCell> cell,
214 Handle<JSFunction> function); 214 Handle<JSFunction> function);
215 215
216 // --- 216 // ---
217 217
218 Handle<Code> ComputeCallInitialize(int argc, RelocInfo::Mode mode); 218 Handle<Code> ComputeCallInitialize(int argc, RelocInfo::Mode mode);
219 219
220 Handle<Code> ComputeKeyedCallInitialize(int argc); 220 Handle<Code> ComputeKeyedCallInitialize(int argc);
(...skipping 26 matching lines...) Expand all
247 // Finds the Code object stored in the Heap::non_monomorphic_cache(). 247 // Finds the Code object stored in the Heap::non_monomorphic_cache().
248 Code* FindCallInitialize(int argc, RelocInfo::Mode mode, Code::Kind kind); 248 Code* FindCallInitialize(int argc, RelocInfo::Mode mode, Code::Kind kind);
249 249
250 #ifdef ENABLE_DEBUGGER_SUPPORT 250 #ifdef ENABLE_DEBUGGER_SUPPORT
251 Handle<Code> ComputeCallDebugBreak(int argc, Code::Kind kind); 251 Handle<Code> ComputeCallDebugBreak(int argc, Code::Kind kind);
252 252
253 Handle<Code> ComputeCallDebugPrepareStepIn(int argc, Code::Kind kind); 253 Handle<Code> ComputeCallDebugPrepareStepIn(int argc, Code::Kind kind);
254 #endif 254 #endif
255 255
256 // Update cache for entry hash(name, map). 256 // Update cache for entry hash(name, map).
257 Code* Set(String* name, Map* map, Code* code); 257 Code* Set(Name* name, Map* map, Code* code);
258 258
259 // Clear the lookup table (@ mark compact collection). 259 // Clear the lookup table (@ mark compact collection).
260 void Clear(); 260 void Clear();
261 261
262 // Collect all maps that match the name and flags. 262 // Collect all maps that match the name and flags.
263 void CollectMatchingMaps(SmallMapList* types, 263 void CollectMatchingMaps(SmallMapList* types,
264 String* name, 264 Name* name,
265 Code::Flags flags, 265 Code::Flags flags,
266 Handle<Context> native_context, 266 Handle<Context> native_context,
267 Zone* zone); 267 Zone* zone);
268 268
269 // Generate code for probing the stub cache table. 269 // Generate code for probing the stub cache table.
270 // Arguments extra, extra2 and extra3 may be used to pass additional scratch 270 // Arguments extra, extra2 and extra3 may be used to pass additional scratch
271 // registers. Set to no_reg if not needed. 271 // registers. Set to no_reg if not needed.
272 void GenerateProbe(MacroAssembler* masm, 272 void GenerateProbe(MacroAssembler* masm,
273 Code::Flags flags, 273 Code::Flags flags,
274 Register receiver, 274 Register receiver,
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 // The stub cache has a primary and secondary level. The two levels have 325 // The stub cache has a primary and secondary level. The two levels have
326 // different hashing algorithms in order to avoid simultaneous collisions 326 // different hashing algorithms in order to avoid simultaneous collisions
327 // in both caches. Unlike a probing strategy (quadratic or otherwise) the 327 // in both caches. Unlike a probing strategy (quadratic or otherwise) the
328 // update strategy on updates is fairly clear and simple: Any existing entry 328 // update strategy on updates is fairly clear and simple: Any existing entry
329 // in the primary cache is moved to the secondary cache, and secondary cache 329 // in the primary cache is moved to the secondary cache, and secondary cache
330 // entries are overwritten. 330 // entries are overwritten.
331 331
332 // Hash algorithm for the primary table. This algorithm is replicated in 332 // Hash algorithm for the primary table. This algorithm is replicated in
333 // assembler for every architecture. Returns an index into the table that 333 // assembler for every architecture. Returns an index into the table that
334 // is scaled by 1 << kHeapObjectTagSize. 334 // is scaled by 1 << kHeapObjectTagSize.
335 static int PrimaryOffset(String* name, Code::Flags flags, Map* map) { 335 static int PrimaryOffset(Name* name, Code::Flags flags, Map* map) {
336 // This works well because the heap object tag size and the hash 336 // This works well because the heap object tag size and the hash
337 // shift are equal. Shifting down the length field to get the 337 // shift are equal. Shifting down the length field to get the
338 // hash code would effectively throw away two bits of the hash 338 // hash code would effectively throw away two bits of the hash
339 // code. 339 // code.
340 STATIC_ASSERT(kHeapObjectTagSize == String::kHashShift); 340 STATIC_ASSERT(kHeapObjectTagSize == Name::kHashShift);
341 // Compute the hash of the name (use entire hash field). 341 // Compute the hash of the name (use entire hash field).
342 ASSERT(name->HasHashCode()); 342 ASSERT(name->HasHashCode());
343 uint32_t field = name->hash_field(); 343 uint32_t field = name->hash_field();
344 // Using only the low bits in 64-bit mode is unlikely to increase the 344 // Using only the low bits in 64-bit mode is unlikely to increase the
345 // risk of collision even if the heap is spread over an area larger than 345 // risk of collision even if the heap is spread over an area larger than
346 // 4Gb (and not at all if it isn't). 346 // 4Gb (and not at all if it isn't).
347 uint32_t map_low32bits = 347 uint32_t map_low32bits =
348 static_cast<uint32_t>(reinterpret_cast<uintptr_t>(map)); 348 static_cast<uint32_t>(reinterpret_cast<uintptr_t>(map));
349 // We always set the in_loop bit to zero when generating the lookup code 349 // We always set the in_loop bit to zero when generating the lookup code
350 // so do it here too so the hash codes match. 350 // so do it here too so the hash codes match.
351 uint32_t iflags = 351 uint32_t iflags =
352 (static_cast<uint32_t>(flags) & ~Code::kFlagsNotUsedInLookup); 352 (static_cast<uint32_t>(flags) & ~Code::kFlagsNotUsedInLookup);
353 // Base the offset on a simple combination of name, flags, and map. 353 // Base the offset on a simple combination of name, flags, and map.
354 uint32_t key = (map_low32bits + field) ^ iflags; 354 uint32_t key = (map_low32bits + field) ^ iflags;
355 return key & ((kPrimaryTableSize - 1) << kHeapObjectTagSize); 355 return key & ((kPrimaryTableSize - 1) << kHeapObjectTagSize);
356 } 356 }
357 357
358 // Hash algorithm for the secondary table. This algorithm is replicated in 358 // Hash algorithm for the secondary table. This algorithm is replicated in
359 // assembler for every architecture. Returns an index into the table that 359 // assembler for every architecture. Returns an index into the table that
360 // is scaled by 1 << kHeapObjectTagSize. 360 // is scaled by 1 << kHeapObjectTagSize.
361 static int SecondaryOffset(String* name, Code::Flags flags, int seed) { 361 static int SecondaryOffset(Name* name, Code::Flags flags, int seed) {
362 // Use the seed from the primary cache in the secondary cache. 362 // Use the seed from the primary cache in the secondary cache.
363 uint32_t string_low32bits = 363 uint32_t name_low32bits =
364 static_cast<uint32_t>(reinterpret_cast<uintptr_t>(name)); 364 static_cast<uint32_t>(reinterpret_cast<uintptr_t>(name));
365 // We always set the in_loop bit to zero when generating the lookup code 365 // We always set the in_loop bit to zero when generating the lookup code
366 // so do it here too so the hash codes match. 366 // so do it here too so the hash codes match.
367 uint32_t iflags = 367 uint32_t iflags =
368 (static_cast<uint32_t>(flags) & ~Code::kFlagsNotUsedInLookup); 368 (static_cast<uint32_t>(flags) & ~Code::kFlagsNotUsedInLookup);
369 uint32_t key = (seed - string_low32bits) + iflags; 369 uint32_t key = (seed - name_low32bits) + iflags;
370 return key & ((kSecondaryTableSize - 1) << kHeapObjectTagSize); 370 return key & ((kSecondaryTableSize - 1) << kHeapObjectTagSize);
371 } 371 }
372 372
373 // Compute the entry for a given offset in exactly the same way as 373 // Compute the entry for a given offset in exactly the same way as
374 // we do in generated code. We generate an hash code that already 374 // we do in generated code. We generate an hash code that already
375 // ends in String::kHashShift 0s. Then we multiply it so it is a multiple 375 // ends in Name::kHashShift 0s. Then we multiply it so it is a multiple
376 // of sizeof(Entry). This makes it easier to avoid making mistakes 376 // of sizeof(Entry). This makes it easier to avoid making mistakes
377 // in the hashed offset computations. 377 // in the hashed offset computations.
378 static Entry* entry(Entry* table, int offset) { 378 static Entry* entry(Entry* table, int offset) {
379 const int multiplier = sizeof(*table) >> String::kHashShift; 379 const int multiplier = sizeof(*table) >> Name::kHashShift;
380 return reinterpret_cast<Entry*>( 380 return reinterpret_cast<Entry*>(
381 reinterpret_cast<Address>(table) + offset * multiplier); 381 reinterpret_cast<Address>(table) + offset * multiplier);
382 } 382 }
383 383
384 static const int kPrimaryTableBits = 11; 384 static const int kPrimaryTableBits = 11;
385 static const int kPrimaryTableSize = (1 << kPrimaryTableBits); 385 static const int kPrimaryTableSize = (1 << kPrimaryTableBits);
386 static const int kSecondaryTableBits = 9; 386 static const int kSecondaryTableBits = 9;
387 static const int kSecondaryTableSize = (1 << kSecondaryTableBits); 387 static const int kSecondaryTableSize = (1 << kSecondaryTableBits);
388 388
389 Entry primary_[kPrimaryTableSize]; 389 Entry primary_[kPrimaryTableSize];
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 static void GenerateLoadFunctionPrototype(MacroAssembler* masm, 471 static void GenerateLoadFunctionPrototype(MacroAssembler* masm,
472 Register receiver, 472 Register receiver,
473 Register scratch1, 473 Register scratch1,
474 Register scratch2, 474 Register scratch2,
475 Label* miss_label); 475 Label* miss_label);
476 476
477 void GenerateStoreField(MacroAssembler* masm, 477 void GenerateStoreField(MacroAssembler* masm,
478 Handle<JSObject> object, 478 Handle<JSObject> object,
479 int index, 479 int index,
480 Handle<Map> transition, 480 Handle<Map> transition,
481 Handle<String> name, 481 Handle<Name> name,
482 Register receiver_reg, 482 Register receiver_reg,
483 Register name_reg, 483 Register name_reg,
484 Register scratch1, 484 Register scratch1,
485 Register scratch2, 485 Register scratch2,
486 Label* miss_label); 486 Label* miss_label);
487 487
488 static void GenerateLoadMiss(MacroAssembler* masm, Code::Kind kind); 488 static void GenerateLoadMiss(MacroAssembler* masm, Code::Kind kind);
489 static void GenerateStoreMiss(MacroAssembler* masm, Code::Kind kind); 489 static void GenerateStoreMiss(MacroAssembler* masm, Code::Kind kind);
490 490
491 static void GenerateKeyedLoadMissForceGeneric(MacroAssembler* masm); 491 static void GenerateKeyedLoadMissForceGeneric(MacroAssembler* masm);
(...skipping 12 matching lines...) Expand all
504 // holder_reg. 504 // holder_reg.
505 // The function can optionally (when save_at_depth != 505 // The function can optionally (when save_at_depth !=
506 // kInvalidProtoDepth) save the object at the given depth by moving 506 // kInvalidProtoDepth) save the object at the given depth by moving
507 // it to [esp + kPointerSize]. 507 // it to [esp + kPointerSize].
508 Register CheckPrototypes(Handle<JSObject> object, 508 Register CheckPrototypes(Handle<JSObject> object,
509 Register object_reg, 509 Register object_reg,
510 Handle<JSObject> holder, 510 Handle<JSObject> holder,
511 Register holder_reg, 511 Register holder_reg,
512 Register scratch1, 512 Register scratch1,
513 Register scratch2, 513 Register scratch2,
514 Handle<String> name, 514 Handle<Name> name,
515 Label* miss) { 515 Label* miss) {
516 return CheckPrototypes(object, object_reg, holder, holder_reg, scratch1, 516 return CheckPrototypes(object, object_reg, holder, holder_reg, scratch1,
517 scratch2, name, kInvalidProtoDepth, miss); 517 scratch2, name, kInvalidProtoDepth, miss);
518 } 518 }
519 519
520 Register CheckPrototypes(Handle<JSObject> object, 520 Register CheckPrototypes(Handle<JSObject> object,
521 Register object_reg, 521 Register object_reg,
522 Handle<JSObject> holder, 522 Handle<JSObject> holder,
523 Register holder_reg, 523 Register holder_reg,
524 Register scratch1, 524 Register scratch1,
525 Register scratch2, 525 Register scratch2,
526 Handle<String> name, 526 Handle<Name> name,
527 int save_at_depth, 527 int save_at_depth,
528 Label* miss); 528 Label* miss);
529 529
530 530
531 protected: 531 protected:
532 Handle<Code> GetCodeWithFlags(Code::Flags flags, const char* name); 532 Handle<Code> GetCodeWithFlags(Code::Flags flags, const char* name);
533 Handle<Code> GetCodeWithFlags(Code::Flags flags, Handle<String> name); 533 Handle<Code> GetCodeWithFlags(Code::Flags flags, Handle<Name> name);
534 534
535 MacroAssembler* masm() { return &masm_; } 535 MacroAssembler* masm() { return &masm_; }
536 void set_failure(Failure* failure) { failure_ = failure; } 536 void set_failure(Failure* failure) { failure_ = failure; }
537 537
538 void GenerateLoadField(Handle<JSObject> object, 538 void GenerateLoadField(Handle<JSObject> object,
539 Handle<JSObject> holder, 539 Handle<JSObject> holder,
540 Register receiver, 540 Register receiver,
541 Register scratch1, 541 Register scratch1,
542 Register scratch2, 542 Register scratch2,
543 Register scratch3, 543 Register scratch3,
544 PropertyIndex index, 544 PropertyIndex index,
545 Handle<String> name, 545 Handle<Name> name,
546 Label* miss); 546 Label* miss);
547 547
548 void GenerateLoadCallback(Handle<JSObject> object, 548 void GenerateLoadCallback(Handle<JSObject> object,
549 Handle<JSObject> holder, 549 Handle<JSObject> holder,
550 Register receiver, 550 Register receiver,
551 Register name_reg, 551 Register name_reg,
552 Register scratch1, 552 Register scratch1,
553 Register scratch2, 553 Register scratch2,
554 Register scratch3, 554 Register scratch3,
555 Register scratch4, 555 Register scratch4,
556 Handle<AccessorInfo> callback, 556 Handle<AccessorInfo> callback,
557 Handle<String> name, 557 Handle<Name> name,
558 Label* miss); 558 Label* miss);
559 559
560 void GenerateDictionaryLoadCallback(Register receiver, 560 void GenerateDictionaryLoadCallback(Register receiver,
561 Register name_reg, 561 Register name_reg,
562 Register scratch1, 562 Register scratch1,
563 Register scratch2, 563 Register scratch2,
564 Register scratch3, 564 Register scratch3,
565 Handle<AccessorInfo> callback, 565 Handle<AccessorInfo> callback,
566 Handle<String> name, 566 Handle<Name> name,
567 Label* miss); 567 Label* miss);
568 568
569 void GenerateLoadConstant(Handle<JSObject> object, 569 void GenerateLoadConstant(Handle<JSObject> object,
570 Handle<JSObject> holder, 570 Handle<JSObject> holder,
571 Register receiver, 571 Register receiver,
572 Register scratch1, 572 Register scratch1,
573 Register scratch2, 573 Register scratch2,
574 Register scratch3, 574 Register scratch3,
575 Handle<JSFunction> value, 575 Handle<JSFunction> value,
576 Handle<String> name, 576 Handle<Name> name,
577 Label* miss); 577 Label* miss);
578 578
579 void GenerateLoadInterceptor(Handle<JSObject> object, 579 void GenerateLoadInterceptor(Handle<JSObject> object,
580 Handle<JSObject> holder, 580 Handle<JSObject> holder,
581 LookupResult* lookup, 581 LookupResult* lookup,
582 Register receiver, 582 Register receiver,
583 Register name_reg, 583 Register name_reg,
584 Register scratch1, 584 Register scratch1,
585 Register scratch2, 585 Register scratch2,
586 Register scratch3, 586 Register scratch3,
587 Handle<String> name, 587 Handle<Name> name,
588 Label* miss); 588 Label* miss);
589 589
590 static void LookupPostInterceptor(Handle<JSObject> holder, 590 static void LookupPostInterceptor(Handle<JSObject> holder,
591 Handle<String> name, 591 Handle<Name> name,
592 LookupResult* lookup); 592 LookupResult* lookup);
593 593
594 Isolate* isolate() { return isolate_; } 594 Isolate* isolate() { return isolate_; }
595 Heap* heap() { return isolate()->heap(); } 595 Heap* heap() { return isolate()->heap(); }
596 Factory* factory() { return isolate()->factory(); } 596 Factory* factory() { return isolate()->factory(); }
597 597
598 private: 598 private:
599 Isolate* isolate_; 599 Isolate* isolate_;
600 MacroAssembler masm_; 600 MacroAssembler masm_;
601 Failure* failure_; 601 Failure* failure_;
602 }; 602 };
603 603
604 604
605 class BaseLoadStubCompiler: public StubCompiler { 605 class BaseLoadStubCompiler: public StubCompiler {
606 public: 606 public:
607 BaseLoadStubCompiler(Isolate* isolate, Register* registers) 607 BaseLoadStubCompiler(Isolate* isolate, Register* registers)
608 : StubCompiler(isolate), registers_(registers) { } 608 : StubCompiler(isolate), registers_(registers) { }
609 virtual ~BaseLoadStubCompiler() { } 609 virtual ~BaseLoadStubCompiler() { }
610 610
611 Handle<Code> CompileLoadField(Handle<JSObject> object, 611 Handle<Code> CompileLoadField(Handle<JSObject> object,
612 Handle<JSObject> holder, 612 Handle<JSObject> holder,
613 Handle<String> name, 613 Handle<Name> name,
614 PropertyIndex index); 614 PropertyIndex index);
615 615
616 Handle<Code> CompileLoadCallback(Handle<JSObject> object, 616 Handle<Code> CompileLoadCallback(Handle<JSObject> object,
617 Handle<JSObject> holder, 617 Handle<JSObject> holder,
618 Handle<String> name, 618 Handle<Name> name,
619 Handle<AccessorInfo> callback); 619 Handle<AccessorInfo> callback);
620 620
621 Handle<Code> CompileLoadConstant(Handle<JSObject> object, 621 Handle<Code> CompileLoadConstant(Handle<JSObject> object,
622 Handle<JSObject> holder, 622 Handle<JSObject> holder,
623 Handle<String> name, 623 Handle<Name> name,
624 Handle<JSFunction> value); 624 Handle<JSFunction> value);
625 625
626 Handle<Code> CompileLoadInterceptor(Handle<JSObject> object, 626 Handle<Code> CompileLoadInterceptor(Handle<JSObject> object,
627 Handle<JSObject> holder, 627 Handle<JSObject> holder,
628 Handle<String> name); 628 Handle<Name> name);
629 629
630 protected: 630 protected:
631 Register receiver() { return registers_[0]; } 631 Register receiver() { return registers_[0]; }
632 Register name() { return registers_[1]; } 632 Register name() { return registers_[1]; }
633 Register scratch1() { return registers_[2]; } 633 Register scratch1() { return registers_[2]; }
634 Register scratch2() { return registers_[3]; } 634 Register scratch2() { return registers_[3]; }
635 Register scratch3() { return registers_[4]; } 635 Register scratch3() { return registers_[4]; }
636 Register scratch4() { return registers_[5]; } 636 Register scratch4() { return registers_[5]; }
637 637
638 private: 638 private:
639 virtual Code::Kind kind() = 0; 639 virtual Code::Kind kind() = 0;
640 virtual void GenerateNameCheck(Handle<String> name, 640 virtual void GenerateNameCheck(Handle<Name> name,
641 Register name_reg, 641 Register name_reg,
642 Label* miss) { } 642 Label* miss) { }
643 virtual Handle<Code> GetCode(Code::StubType type, 643 virtual Handle<Code> GetCode(Code::StubType type,
644 Handle<String> name, 644 Handle<Name> name,
645 InlineCacheState state = MONOMORPHIC) = 0; 645 InlineCacheState state = MONOMORPHIC) = 0;
646 Register* registers_; 646 Register* registers_;
647 }; 647 };
648 648
649 649
650 class LoadStubCompiler: public BaseLoadStubCompiler { 650 class LoadStubCompiler: public BaseLoadStubCompiler {
651 public: 651 public:
652 explicit LoadStubCompiler(Isolate* isolate) 652 explicit LoadStubCompiler(Isolate* isolate)
653 : BaseLoadStubCompiler(isolate, registers()) { } 653 : BaseLoadStubCompiler(isolate, registers()) { }
654 654
655 Handle<Code> CompileLoadNonexistent(Handle<JSObject> object, 655 Handle<Code> CompileLoadNonexistent(Handle<JSObject> object,
656 Handle<JSObject> last, 656 Handle<JSObject> last,
657 Handle<String> name, 657 Handle<Name> name,
658 Handle<GlobalObject> global); 658 Handle<GlobalObject> global);
659 659
660 static void GenerateLoadViaGetter(MacroAssembler* masm, 660 static void GenerateLoadViaGetter(MacroAssembler* masm,
661 Handle<JSFunction> getter); 661 Handle<JSFunction> getter);
662 662
663 Handle<Code> CompileLoadViaGetter(Handle<JSObject> object, 663 Handle<Code> CompileLoadViaGetter(Handle<JSObject> object,
664 Handle<JSObject> holder, 664 Handle<JSObject> holder,
665 Handle<String> name, 665 Handle<Name> name,
666 Handle<JSFunction> getter); 666 Handle<JSFunction> getter);
667 667
668 Handle<Code> CompileLoadGlobal(Handle<JSObject> object, 668 Handle<Code> CompileLoadGlobal(Handle<JSObject> object,
669 Handle<GlobalObject> holder, 669 Handle<GlobalObject> holder,
670 Handle<JSGlobalPropertyCell> cell, 670 Handle<JSGlobalPropertyCell> cell,
671 Handle<String> name, 671 Handle<Name> name,
672 bool is_dont_delete); 672 bool is_dont_delete);
673 673
674 private: 674 private:
675 Register* registers(); 675 Register* registers();
676 virtual Code::Kind kind() { return Code::LOAD_IC; } 676 virtual Code::Kind kind() { return Code::LOAD_IC; }
677 virtual Handle<Code> GetCode(Code::StubType type, 677 virtual Handle<Code> GetCode(Code::StubType type,
678 Handle<String> name, 678 Handle<Name> name,
679 InlineCacheState state = MONOMORPHIC); 679 InlineCacheState state = MONOMORPHIC);
680 }; 680 };
681 681
682 682
683 class KeyedLoadStubCompiler: public BaseLoadStubCompiler { 683 class KeyedLoadStubCompiler: public BaseLoadStubCompiler {
684 public: 684 public:
685 explicit KeyedLoadStubCompiler(Isolate* isolate) 685 explicit KeyedLoadStubCompiler(Isolate* isolate)
686 : BaseLoadStubCompiler(isolate, registers()) { } 686 : BaseLoadStubCompiler(isolate, registers()) { }
687 687
688 Handle<Code> CompileLoadElement(Handle<Map> receiver_map); 688 Handle<Code> CompileLoadElement(Handle<Map> receiver_map);
689 689
690 Handle<Code> CompileLoadPolymorphic(MapHandleList* receiver_maps, 690 Handle<Code> CompileLoadPolymorphic(MapHandleList* receiver_maps,
691 CodeHandleList* handler_ics); 691 CodeHandleList* handler_ics);
692 692
693 Handle<Code> CompileLoadElementPolymorphic(MapHandleList* receiver_maps); 693 Handle<Code> CompileLoadElementPolymorphic(MapHandleList* receiver_maps);
694 694
695 static void GenerateLoadDictionaryElement(MacroAssembler* masm); 695 static void GenerateLoadDictionaryElement(MacroAssembler* masm);
696 696
697 private: 697 private:
698 Register* registers(); 698 Register* registers();
699 virtual Code::Kind kind() { return Code::KEYED_LOAD_IC; } 699 virtual Code::Kind kind() { return Code::KEYED_LOAD_IC; }
700 virtual Handle<Code> GetCode(Code::StubType type, 700 virtual Handle<Code> GetCode(Code::StubType type,
701 Handle<String> name, 701 Handle<Name> name,
702 InlineCacheState state = MONOMORPHIC); 702 InlineCacheState state = MONOMORPHIC);
703 virtual void GenerateNameCheck(Handle<String> name, 703 virtual void GenerateNameCheck(Handle<Name> name,
704 Register name_reg, 704 Register name_reg,
705 Label* miss); 705 Label* miss);
706 }; 706 };
707 707
708 708
709 class StoreStubCompiler: public StubCompiler { 709 class StoreStubCompiler: public StubCompiler {
710 public: 710 public:
711 StoreStubCompiler(Isolate* isolate, StrictModeFlag strict_mode) 711 StoreStubCompiler(Isolate* isolate, StrictModeFlag strict_mode)
712 : StubCompiler(isolate), strict_mode_(strict_mode) { } 712 : StubCompiler(isolate), strict_mode_(strict_mode) { }
713 713
714 714
715 Handle<Code> CompileStoreField(Handle<JSObject> object, 715 Handle<Code> CompileStoreField(Handle<JSObject> object,
716 int index, 716 int index,
717 Handle<Map> transition, 717 Handle<Map> transition,
718 Handle<String> name); 718 Handle<Name> name);
719 719
720 Handle<Code> CompileStoreCallback(Handle<String> name, 720 Handle<Code> CompileStoreCallback(Handle<Name> name,
721 Handle<JSObject> object, 721 Handle<JSObject> object,
722 Handle<JSObject> holder, 722 Handle<JSObject> holder,
723 Handle<AccessorInfo> callback); 723 Handle<AccessorInfo> callback);
724 724
725 static void GenerateStoreViaSetter(MacroAssembler* masm, 725 static void GenerateStoreViaSetter(MacroAssembler* masm,
726 Handle<JSFunction> setter); 726 Handle<JSFunction> setter);
727 727
728 Handle<Code> CompileStoreViaSetter(Handle<String> name, 728 Handle<Code> CompileStoreViaSetter(Handle<Name> name,
729 Handle<JSObject> object, 729 Handle<JSObject> object,
730 Handle<JSObject> holder, 730 Handle<JSObject> holder,
731 Handle<JSFunction> setter); 731 Handle<JSFunction> setter);
732 732
733 Handle<Code> CompileStoreInterceptor(Handle<JSObject> object, 733 Handle<Code> CompileStoreInterceptor(Handle<JSObject> object,
734 Handle<String> name); 734 Handle<Name> name);
735 735
736 Handle<Code> CompileStoreGlobal(Handle<GlobalObject> object, 736 Handle<Code> CompileStoreGlobal(Handle<GlobalObject> object,
737 Handle<JSGlobalPropertyCell> holder, 737 Handle<JSGlobalPropertyCell> holder,
738 Handle<String> name); 738 Handle<Name> name);
739 739
740 private: 740 private:
741 Handle<Code> GetCode(Code::StubType type, Handle<String> name); 741 Handle<Code> GetCode(Code::StubType type, Handle<Name> name);
742 742
743 StrictModeFlag strict_mode_; 743 StrictModeFlag strict_mode_;
744 }; 744 };
745 745
746 746
747 class KeyedStoreStubCompiler: public StubCompiler { 747 class KeyedStoreStubCompiler: public StubCompiler {
748 public: 748 public:
749 KeyedStoreStubCompiler(Isolate* isolate, 749 KeyedStoreStubCompiler(Isolate* isolate,
750 StrictModeFlag strict_mode, 750 StrictModeFlag strict_mode,
751 KeyedAccessGrowMode grow_mode) 751 KeyedAccessGrowMode grow_mode)
752 : StubCompiler(isolate), 752 : StubCompiler(isolate),
753 strict_mode_(strict_mode), 753 strict_mode_(strict_mode),
754 grow_mode_(grow_mode) { } 754 grow_mode_(grow_mode) { }
755 755
756 Handle<Code> CompileStoreField(Handle<JSObject> object, 756 Handle<Code> CompileStoreField(Handle<JSObject> object,
757 int index, 757 int index,
758 Handle<Map> transition, 758 Handle<Map> transition,
759 Handle<String> name); 759 Handle<Name> name);
760 760
761 Handle<Code> CompileStoreElement(Handle<Map> receiver_map); 761 Handle<Code> CompileStoreElement(Handle<Map> receiver_map);
762 762
763 Handle<Code> CompileStorePolymorphic(MapHandleList* receiver_maps, 763 Handle<Code> CompileStorePolymorphic(MapHandleList* receiver_maps,
764 CodeHandleList* handler_stubs, 764 CodeHandleList* handler_stubs,
765 MapHandleList* transitioned_maps); 765 MapHandleList* transitioned_maps);
766 766
767 Handle<Code> CompileStoreElementPolymorphic(MapHandleList* receiver_maps); 767 Handle<Code> CompileStoreElementPolymorphic(MapHandleList* receiver_maps);
768 768
769 static void GenerateStoreFastElement(MacroAssembler* masm, 769 static void GenerateStoreFastElement(MacroAssembler* masm,
770 bool is_js_array, 770 bool is_js_array,
771 ElementsKind element_kind, 771 ElementsKind element_kind,
772 KeyedAccessGrowMode grow_mode); 772 KeyedAccessGrowMode grow_mode);
773 773
774 static void GenerateStoreFastDoubleElement(MacroAssembler* masm, 774 static void GenerateStoreFastDoubleElement(MacroAssembler* masm,
775 bool is_js_array, 775 bool is_js_array,
776 KeyedAccessGrowMode grow_mode); 776 KeyedAccessGrowMode grow_mode);
777 777
778 static void GenerateStoreExternalArray(MacroAssembler* masm, 778 static void GenerateStoreExternalArray(MacroAssembler* masm,
779 ElementsKind elements_kind); 779 ElementsKind elements_kind);
780 780
781 static void GenerateStoreDictionaryElement(MacroAssembler* masm); 781 static void GenerateStoreDictionaryElement(MacroAssembler* masm);
782 782
783 private: 783 private:
784 Handle<Code> GetCode(Code::StubType type, 784 Handle<Code> GetCode(Code::StubType type,
785 Handle<String> name, 785 Handle<Name> name,
786 InlineCacheState state = MONOMORPHIC); 786 InlineCacheState state = MONOMORPHIC);
787 787
788 StrictModeFlag strict_mode_; 788 StrictModeFlag strict_mode_;
789 KeyedAccessGrowMode grow_mode_; 789 KeyedAccessGrowMode grow_mode_;
790 }; 790 };
791 791
792 792
793 // Subset of FUNCTIONS_WITH_ID_LIST with custom constant/global call 793 // Subset of FUNCTIONS_WITH_ID_LIST with custom constant/global call
794 // IC stubs. 794 // IC stubs.
795 #define CUSTOM_CALL_IC_GENERATORS(V) \ 795 #define CUSTOM_CALL_IC_GENERATORS(V) \
(...skipping 12 matching lines...) Expand all
808 public: 808 public:
809 CallStubCompiler(Isolate* isolate, 809 CallStubCompiler(Isolate* isolate,
810 int argc, 810 int argc,
811 Code::Kind kind, 811 Code::Kind kind,
812 Code::ExtraICState extra_state, 812 Code::ExtraICState extra_state,
813 InlineCacheHolderFlag cache_holder); 813 InlineCacheHolderFlag cache_holder);
814 814
815 Handle<Code> CompileCallField(Handle<JSObject> object, 815 Handle<Code> CompileCallField(Handle<JSObject> object,
816 Handle<JSObject> holder, 816 Handle<JSObject> holder,
817 PropertyIndex index, 817 PropertyIndex index,
818 Handle<String> name); 818 Handle<Name> name);
819 819
820 Handle<Code> CompileCallConstant(Handle<Object> object, 820 Handle<Code> CompileCallConstant(Handle<Object> object,
821 Handle<JSObject> holder, 821 Handle<JSObject> holder,
822 Handle<JSFunction> function, 822 Handle<JSFunction> function,
823 Handle<String> name, 823 Handle<Name> name,
824 CheckType check); 824 CheckType check);
825 825
826 Handle<Code> CompileCallInterceptor(Handle<JSObject> object, 826 Handle<Code> CompileCallInterceptor(Handle<JSObject> object,
827 Handle<JSObject> holder, 827 Handle<JSObject> holder,
828 Handle<String> name); 828 Handle<Name> name);
829 829
830 Handle<Code> CompileCallGlobal(Handle<JSObject> object, 830 Handle<Code> CompileCallGlobal(Handle<JSObject> object,
831 Handle<GlobalObject> holder, 831 Handle<GlobalObject> holder,
832 Handle<JSGlobalPropertyCell> cell, 832 Handle<JSGlobalPropertyCell> cell,
833 Handle<JSFunction> function, 833 Handle<JSFunction> function,
834 Handle<String> name); 834 Handle<Name> name);
835 835
836 static bool HasCustomCallGenerator(Handle<JSFunction> function); 836 static bool HasCustomCallGenerator(Handle<JSFunction> function);
837 837
838 private: 838 private:
839 // Compiles a custom call constant/global IC. For constant calls cell is 839 // Compiles a custom call constant/global IC. For constant calls cell is
840 // NULL. Returns an empty handle if there is no custom call code for the 840 // NULL. Returns an empty handle if there is no custom call code for the
841 // given function. 841 // given function.
842 Handle<Code> CompileCustomCall(Handle<Object> object, 842 Handle<Code> CompileCustomCall(Handle<Object> object,
843 Handle<JSObject> holder, 843 Handle<JSObject> holder,
844 Handle<JSGlobalPropertyCell> cell, 844 Handle<JSGlobalPropertyCell> cell,
845 Handle<JSFunction> function, 845 Handle<JSFunction> function,
846 Handle<String> name); 846 Handle<String> name);
847 847
848 #define DECLARE_CALL_GENERATOR(name) \ 848 #define DECLARE_CALL_GENERATOR(name) \
849 Handle<Code> Compile##name##Call(Handle<Object> object, \ 849 Handle<Code> Compile##name##Call(Handle<Object> object, \
850 Handle<JSObject> holder, \ 850 Handle<JSObject> holder, \
851 Handle<JSGlobalPropertyCell> cell, \ 851 Handle<JSGlobalPropertyCell> cell, \
852 Handle<JSFunction> function, \ 852 Handle<JSFunction> function, \
853 Handle<String> fname); 853 Handle<String> fname);
854 CUSTOM_CALL_IC_GENERATORS(DECLARE_CALL_GENERATOR) 854 CUSTOM_CALL_IC_GENERATORS(DECLARE_CALL_GENERATOR)
855 #undef DECLARE_CALL_GENERATOR 855 #undef DECLARE_CALL_GENERATOR
856 856
857 Handle<Code> CompileFastApiCall(const CallOptimization& optimization, 857 Handle<Code> CompileFastApiCall(const CallOptimization& optimization,
858 Handle<Object> object, 858 Handle<Object> object,
859 Handle<JSObject> holder, 859 Handle<JSObject> holder,
860 Handle<JSGlobalPropertyCell> cell, 860 Handle<JSGlobalPropertyCell> cell,
861 Handle<JSFunction> function, 861 Handle<JSFunction> function,
862 Handle<String> name); 862 Handle<String> name);
863 863
864 Handle<Code> GetCode(Code::StubType type, Handle<String> name); 864 Handle<Code> GetCode(Code::StubType type, Handle<Name> name);
865 Handle<Code> GetCode(Handle<JSFunction> function); 865 Handle<Code> GetCode(Handle<JSFunction> function);
866 866
867 const ParameterCount& arguments() { return arguments_; } 867 const ParameterCount& arguments() { return arguments_; }
868 868
869 void GenerateNameCheck(Handle<String> name, Label* miss); 869 void GenerateNameCheck(Handle<Name> name, Label* miss);
870 870
871 void GenerateGlobalReceiverCheck(Handle<JSObject> object, 871 void GenerateGlobalReceiverCheck(Handle<JSObject> object,
872 Handle<JSObject> holder, 872 Handle<JSObject> holder,
873 Handle<String> name, 873 Handle<Name> name,
874 Label* miss); 874 Label* miss);
875 875
876 // Generates code to load the function from the cell checking that 876 // Generates code to load the function from the cell checking that
877 // it still contains the same function. 877 // it still contains the same function.
878 void GenerateLoadFunctionFromCell(Handle<JSGlobalPropertyCell> cell, 878 void GenerateLoadFunctionFromCell(Handle<JSGlobalPropertyCell> cell,
879 Handle<JSFunction> function, 879 Handle<JSFunction> function,
880 Label* miss); 880 Label* miss);
881 881
882 // Generates a jump to CallIC miss stub. 882 // Generates a jump to CallIC miss stub.
883 void GenerateMissBranch(); 883 void GenerateMissBranch();
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
945 Handle<JSFunction> constant_function_; 945 Handle<JSFunction> constant_function_;
946 bool is_simple_api_call_; 946 bool is_simple_api_call_;
947 Handle<FunctionTemplateInfo> expected_receiver_type_; 947 Handle<FunctionTemplateInfo> expected_receiver_type_;
948 Handle<CallHandlerInfo> api_call_info_; 948 Handle<CallHandlerInfo> api_call_info_;
949 }; 949 };
950 950
951 951
952 } } // namespace v8::internal 952 } } // namespace v8::internal
953 953
954 #endif // V8_STUB_CACHE_H_ 954 #endif // V8_STUB_CACHE_H_
OLDNEW
« no previous file with comments | « src/runtime.js ('k') | src/stub-cache.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698