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

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

Issue 8337008: Handlify upper layers of LoadIC. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 9 years, 2 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
« src/stub-cache.h ('K') | « src/stub-cache.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 *secondary = *primary; 102 *secondary = *primary;
103 } 103 }
104 104
105 // Update primary cache. 105 // Update primary cache.
106 primary->key = name; 106 primary->key = name;
107 primary->value = code; 107 primary->value = code;
108 return code; 108 return code;
109 } 109 }
110 110
111 111
112 MaybeObject* StubCache::ComputeLoadNonexistent(String* name, 112 Handle<Code> LoadStubCompiler::CompileLoadNonexistent(Handle<String> name,
113 JSObject* receiver) { 113 Handle<JSObject> object,
114 Handle<JSObject> last) {
115 CALL_HEAP_FUNCTION(isolate(),
116 CompileLoadNonexistent(*name, *object, *last),
117 Code);
118 }
119
120
121 Handle<Code> StubCache::ComputeLoadNonexistent(Handle<String> name,
122 Handle<JSObject> receiver) {
114 ASSERT(receiver->IsGlobalObject() || receiver->HasFastProperties()); 123 ASSERT(receiver->IsGlobalObject() || receiver->HasFastProperties());
115 // If no global objects are present in the prototype chain, the load 124 // If no global objects are present in the prototype chain, the load
116 // nonexistent IC stub can be shared for all names for a given map 125 // nonexistent IC stub can be shared for all names for a given map
117 // and we use the empty string for the map cache in that case. If 126 // and we use the empty string for the map cache in that case. If
118 // there are global objects involved, we need to check global 127 // there are global objects involved, we need to check global
119 // property cells in the stub and therefore the stub will be 128 // property cells in the stub and therefore the stub will be
120 // specific to the name. 129 // specific to the name.
121 String* cache_name = heap()->empty_string(); 130 Handle<String> cache_name = factory()->empty_string();
122 if (receiver->IsGlobalObject()) cache_name = name; 131 if (receiver->IsGlobalObject()) cache_name = name;
123 JSObject* last = receiver; 132 Handle<JSObject> last = receiver;
124 while (last->GetPrototype() != heap()->null_value()) { 133 while (last->GetPrototype() != heap()->null_value()) {
125 last = JSObject::cast(last->GetPrototype()); 134 last = Handle<JSObject>(JSObject::cast(last->GetPrototype()));
126 if (last->IsGlobalObject()) cache_name = name; 135 if (last->IsGlobalObject()) cache_name = name;
127 } 136 }
128 // Compile the stub that is either shared for all names or 137 // Compile the stub that is either shared for all names or
129 // name specific if there are global objects involved. 138 // name specific if there are global objects involved.
130 Code::Flags flags = 139 Code::Flags flags =
131 Code::ComputeMonomorphicFlags(Code::LOAD_IC, NONEXISTENT); 140 Code::ComputeMonomorphicFlags(Code::LOAD_IC, NONEXISTENT);
132 Object* code = receiver->map()->FindInCodeCache(cache_name, flags); 141 Handle<Object> probe(receiver->map()->FindInCodeCache(*cache_name, flags));
133 if (code->IsUndefined()) { 142 if (probe->IsCode()) return Handle<Code>::cast(probe);
Kevin Millikin (Chromium) 2011/10/18 08:46:47 I like a blank line right after this one, to highl
ulan 2011/10/18 09:31:00 Done.
134 LoadStubCompiler compiler; 143 LoadStubCompiler compiler(isolate_);
135 { MaybeObject* maybe_code = 144 Handle<Code> code =
136 compiler.CompileLoadNonexistent(cache_name, receiver, last); 145 compiler.CompileLoadNonexistent(cache_name, receiver, last);
137 if (!maybe_code->ToObject(&code)) return maybe_code; 146 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *cache_name));
138 } 147 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, *cache_name, *code));
Kevin Millikin (Chromium) 2011/10/18 08:46:47 I think that this code is ignored unless we set up
139 PROFILE(isolate_, 148 JSObject::UpdateMapCodeCache(isolate_, receiver, cache_name, code);
140 CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), cache_name));
141 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, cache_name, Code::cast(code)));
142 Object* result;
143 { MaybeObject* maybe_result =
144 receiver->UpdateMapCodeCache(cache_name, Code::cast(code));
145 if (!maybe_result->ToObject(&result)) return maybe_result;
146 }
147 }
148 return code; 149 return code;
149 } 150 }
150 151
151 152
152 MaybeObject* StubCache::ComputeLoadField(String* name, 153 Handle<Code> LoadStubCompiler::CompileLoadField(Handle<JSObject> object,
153 JSObject* receiver, 154 Handle<JSObject> holder,
154 JSObject* holder, 155 int index,
156 Handle<String> name) {
157 CALL_HEAP_FUNCTION(isolate(),
158 CompileLoadField(*object, *holder, index, *name),
159 Code);
160 }
161
162
163 Handle<Code> StubCache::ComputeLoadField(Handle<String> name,
164 Handle<JSObject> receiver,
165 Handle<JSObject> holder,
155 int field_index) { 166 int field_index) {
156 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 167 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP);
157 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, FIELD); 168 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, FIELD);
158 Object* code = receiver->map()->FindInCodeCache(name, flags); 169 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
159 if (code->IsUndefined()) { 170 if (probe->IsCode()) return Handle<Code>::cast(probe);
160 LoadStubCompiler compiler; 171 LoadStubCompiler compiler(isolate_);
161 { MaybeObject* maybe_code = 172 Handle<Code> code =
162 compiler.CompileLoadField(receiver, holder, field_index, name); 173 compiler.CompileLoadField(receiver, holder, field_index, name);
163 if (!maybe_code->ToObject(&code)) return maybe_code; 174 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name));
164 } 175 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, *name, *code));
165 PROFILE(isolate_, 176 JSObject::UpdateMapCodeCache(isolate_, receiver, name, code);
166 CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
167 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code)));
168 Object* result;
169 { MaybeObject* maybe_result =
170 receiver->UpdateMapCodeCache(name, Code::cast(code));
171 if (!maybe_result->ToObject(&result)) return maybe_result;
172 }
173 }
174 return code; 177 return code;
175 } 178 }
176 179
177 180
178 MaybeObject* StubCache::ComputeLoadCallback(String* name, 181 Handle<Code> LoadStubCompiler::CompileLoadCallback(
179 JSObject* receiver, 182 Handle<String> name,
180 JSObject* holder, 183 Handle<JSObject> object,
181 AccessorInfo* callback) { 184 Handle<JSObject> holder,
185 Handle<AccessorInfo> callback) {
186 CALL_HEAP_FUNCTION(isolate(),
187 CompileLoadCallback(*name, *object, *holder, *callback),
188 Code);
189 }
190
191
192 Handle<Code> StubCache::ComputeLoadCallback(Handle<String> name,
193 Handle<JSObject> receiver,
194 Handle<JSObject> holder,
195 Handle<AccessorInfo> callback) {
182 ASSERT(v8::ToCData<Address>(callback->getter()) != 0); 196 ASSERT(v8::ToCData<Address>(callback->getter()) != 0);
183 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 197 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP);
184 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, CALLBACKS); 198 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, CALLBACKS);
185 Object* code = receiver->map()->FindInCodeCache(name, flags); 199 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
186 if (code->IsUndefined()) { 200 if (probe->IsCode()) return Handle<Code>::cast(probe);
187 LoadStubCompiler compiler; 201 LoadStubCompiler compiler(isolate_);
188 { MaybeObject* maybe_code = 202 Handle<Code> code =
189 compiler.CompileLoadCallback(name, receiver, holder, callback); 203 compiler.CompileLoadCallback(name, receiver, holder, callback);
190 if (!maybe_code->ToObject(&code)) return maybe_code; 204 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name));
191 } 205 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, *name, *code));
192 PROFILE(isolate_, 206 JSObject::UpdateMapCodeCache(isolate_, receiver, name, code);
193 CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
194 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code)));
195 Object* result;
196 { MaybeObject* maybe_result =
197 receiver->UpdateMapCodeCache(name, Code::cast(code));
198 if (!maybe_result->ToObject(&result)) return maybe_result;
199 }
200 }
201 return code; 207 return code;
202 } 208 }
203 209
204 210
205 MaybeObject* StubCache::ComputeLoadConstant(String* name, 211 Handle<Code> LoadStubCompiler::CompileLoadConstant(Handle<JSObject> object,
206 JSObject* receiver, 212 Handle<JSObject> holder,
207 JSObject* holder, 213 Handle<Object> value,
208 Object* value) { 214 Handle<String> name) {
209 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 215 CALL_HEAP_FUNCTION(isolate(),
216 CompileLoadConstant(*object, *holder, *value, *name),
217 Code);
218 }
219
220
221 Handle<Code> StubCache::ComputeLoadConstant(Handle<String> name,
222 Handle<JSObject> receiver,
223 Handle<JSObject> holder,
224 Handle<Object> value) {
225 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP);
210 Code::Flags flags = 226 Code::Flags flags =
211 Code::ComputeMonomorphicFlags(Code::LOAD_IC, CONSTANT_FUNCTION); 227 Code::ComputeMonomorphicFlags(Code::LOAD_IC, CONSTANT_FUNCTION);
212 Object* code = receiver->map()->FindInCodeCache(name, flags); 228 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
213 if (code->IsUndefined()) { 229 if (probe->IsCode()) return Handle<Code>::cast(probe);
214 LoadStubCompiler compiler; 230 LoadStubCompiler compiler(isolate_);
215 { MaybeObject* maybe_code = 231 Handle<Code> code =
216 compiler.CompileLoadConstant(receiver, holder, value, name); 232 compiler.CompileLoadConstant(receiver, holder, value, name);
217 if (!maybe_code->ToObject(&code)) return maybe_code; 233 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name));
218 } 234 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, *name, *code));
219 PROFILE(isolate_, 235 JSObject::UpdateMapCodeCache(isolate_, receiver, name, code);
220 CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
221 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code)));
222 Object* result;
223 { MaybeObject* maybe_result =
224 receiver->UpdateMapCodeCache(name, Code::cast(code));
225 if (!maybe_result->ToObject(&result)) return maybe_result;
226 }
227 }
228 return code; 236 return code;
229 } 237 }
230 238
231 239
232 MaybeObject* StubCache::ComputeLoadInterceptor(String* name, 240 Handle<Code> LoadStubCompiler::CompileLoadInterceptor(Handle<JSObject> object,
233 JSObject* receiver, 241 Handle<JSObject> holder,
234 JSObject* holder) { 242 Handle<String> name) {
235 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 243 CALL_HEAP_FUNCTION(isolate(),
244 CompileLoadInterceptor(*object, *holder, *name),
245 Code);
246 }
247
248
249 Handle<Code> StubCache::ComputeLoadInterceptor(Handle<String> name,
250 Handle<JSObject> receiver,
251 Handle<JSObject> holder) {
252 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP);
236 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, INTERCEPTOR); 253 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, INTERCEPTOR);
237 Object* code = receiver->map()->FindInCodeCache(name, flags); 254 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
238 if (code->IsUndefined()) { 255 if (probe->IsCode()) return Handle<Code>::cast(probe);
239 LoadStubCompiler compiler; 256 LoadStubCompiler compiler(isolate_);
240 { MaybeObject* maybe_code = 257 Handle<Code> code =
241 compiler.CompileLoadInterceptor(receiver, holder, name); 258 compiler.CompileLoadInterceptor(receiver, holder, name);
242 if (!maybe_code->ToObject(&code)) return maybe_code; 259 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name));
243 } 260 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, *name, *code));
244 PROFILE(isolate_, 261 JSObject::UpdateMapCodeCache(isolate_, receiver, name, code);
245 CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
246 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code)));
247 Object* result;
248 { MaybeObject* maybe_result =
249 receiver->UpdateMapCodeCache(name, Code::cast(code));
250 if (!maybe_result->ToObject(&result)) return maybe_result;
251 }
252 }
253 return code; 262 return code;
254 } 263 }
255 264
256 265
257 MaybeObject* StubCache::ComputeLoadNormal() { 266 Handle<Code> StubCache::ComputeLoadNormal() {
258 return isolate_->builtins()->builtin(Builtins::kLoadIC_Normal); 267 return isolate_->builtins()->LoadIC_Normal();
259 } 268 }
260 269
261 270 Handle<Code> LoadStubCompiler::CompileLoadGlobal(
262 MaybeObject* StubCache::ComputeLoadGlobal(String* name, 271 Handle<JSObject> object,
263 JSObject* receiver, 272 Handle<GlobalObject> holder,
264 GlobalObject* holder, 273 Handle<JSGlobalPropertyCell> cell,
265 JSGlobalPropertyCell* cell, 274 Handle<String> name,
275 bool is_dont_delete) {
276 CALL_HEAP_FUNCTION(isolate(),
277 CompileLoadGlobal(*object,
278 *holder,
279 *cell,
280 *name,
281 is_dont_delete),
282 Code);
283 }
284 Handle<Code> StubCache::ComputeLoadGlobal(Handle<String> name,
285 Handle<JSObject> receiver,
286 Handle<GlobalObject> holder,
287 Handle<JSGlobalPropertyCell> cell,
266 bool is_dont_delete) { 288 bool is_dont_delete) {
267 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 289 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP);
268 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, NORMAL); 290 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, NORMAL);
269 Object* code = receiver->map()->FindInCodeCache(name, flags); 291 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
270 if (code->IsUndefined()) { 292 if (probe->IsCode()) return Handle<Code>::cast(probe);
271 LoadStubCompiler compiler; 293 LoadStubCompiler compiler(isolate_);
272 { MaybeObject* maybe_code = compiler.CompileLoadGlobal(receiver, 294 Handle<Code> code =
273 holder, 295 compiler.CompileLoadGlobal(receiver, holder, cell, name, is_dont_delete);
274 cell, 296 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name));
275 name, 297 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, *name, *code));
276 is_dont_delete); 298 JSObject::UpdateMapCodeCache(isolate_, receiver, name, code);
277 if (!maybe_code->ToObject(&code)) return maybe_code;
278 }
279 PROFILE(isolate_,
280 CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
281 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code)));
282 Object* result;
283 { MaybeObject* maybe_result =
284 receiver->UpdateMapCodeCache(name, Code::cast(code));
285 if (!maybe_result->ToObject(&result)) return maybe_result;
286 }
287 }
288 return code; 299 return code;
289 } 300 }
290 301
291 302
292 MaybeObject* StubCache::ComputeKeyedLoadField(String* name, 303 MaybeObject* StubCache::ComputeKeyedLoadField(String* name,
293 JSObject* receiver, 304 JSObject* receiver,
294 JSObject* holder, 305 JSObject* holder,
295 int field_index) { 306 int field_index) {
296 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 307 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP);
297 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, FIELD); 308 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, FIELD);
298 Object* code = receiver->map()->FindInCodeCache(name, flags); 309 Object* code = receiver->map()->FindInCodeCache(name, flags);
299 if (code->IsUndefined()) { 310 if (code->IsUndefined()) {
300 KeyedLoadStubCompiler compiler; 311 HandleScope scope(isolate_);
312 KeyedLoadStubCompiler compiler(isolate_);
301 { MaybeObject* maybe_code = 313 { MaybeObject* maybe_code =
302 compiler.CompileLoadField(name, receiver, holder, field_index); 314 compiler.CompileLoadField(name, receiver, holder, field_index);
303 if (!maybe_code->ToObject(&code)) return maybe_code; 315 if (!maybe_code->ToObject(&code)) return maybe_code;
304 } 316 }
305 PROFILE(isolate_, 317 PROFILE(isolate_,
306 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 318 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
307 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 319 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
308 Object* result; 320 Object* result;
309 { MaybeObject* maybe_result = 321 { MaybeObject* maybe_result =
310 receiver->UpdateMapCodeCache(name, Code::cast(code)); 322 receiver->UpdateMapCodeCache(name, Code::cast(code));
311 if (!maybe_result->ToObject(&result)) return maybe_result; 323 if (!maybe_result->ToObject(&result)) return maybe_result;
312 } 324 }
313 } 325 }
314 return code; 326 return code;
315 } 327 }
316 328
317 329
318 MaybeObject* StubCache::ComputeKeyedLoadConstant(String* name, 330 MaybeObject* StubCache::ComputeKeyedLoadConstant(String* name,
319 JSObject* receiver, 331 JSObject* receiver,
320 JSObject* holder, 332 JSObject* holder,
321 Object* value) { 333 Object* value) {
322 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 334 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP);
323 Code::Flags flags = 335 Code::Flags flags =
324 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CONSTANT_FUNCTION); 336 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CONSTANT_FUNCTION);
325 Object* code = receiver->map()->FindInCodeCache(name, flags); 337 Object* code = receiver->map()->FindInCodeCache(name, flags);
326 if (code->IsUndefined()) { 338 if (code->IsUndefined()) {
327 KeyedLoadStubCompiler compiler; 339 HandleScope scope(isolate_);
340 KeyedLoadStubCompiler compiler(isolate_);
328 { MaybeObject* maybe_code = 341 { MaybeObject* maybe_code =
329 compiler.CompileLoadConstant(name, receiver, holder, value); 342 compiler.CompileLoadConstant(name, receiver, holder, value);
330 if (!maybe_code->ToObject(&code)) return maybe_code; 343 if (!maybe_code->ToObject(&code)) return maybe_code;
331 } 344 }
332 PROFILE(isolate_, 345 PROFILE(isolate_,
333 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 346 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
334 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 347 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
335 Object* result; 348 Object* result;
336 { MaybeObject* maybe_result = 349 { MaybeObject* maybe_result =
337 receiver->UpdateMapCodeCache(name, Code::cast(code)); 350 receiver->UpdateMapCodeCache(name, Code::cast(code));
338 if (!maybe_result->ToObject(&result)) return maybe_result; 351 if (!maybe_result->ToObject(&result)) return maybe_result;
339 } 352 }
340 } 353 }
341 return code; 354 return code;
342 } 355 }
343 356
344 357
345 MaybeObject* StubCache::ComputeKeyedLoadInterceptor(String* name, 358 MaybeObject* StubCache::ComputeKeyedLoadInterceptor(String* name,
346 JSObject* receiver, 359 JSObject* receiver,
347 JSObject* holder) { 360 JSObject* holder) {
348 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 361 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP);
349 Code::Flags flags = 362 Code::Flags flags =
350 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, INTERCEPTOR); 363 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, INTERCEPTOR);
351 Object* code = receiver->map()->FindInCodeCache(name, flags); 364 Object* code = receiver->map()->FindInCodeCache(name, flags);
352 if (code->IsUndefined()) { 365 if (code->IsUndefined()) {
353 KeyedLoadStubCompiler compiler; 366 HandleScope scope(isolate_);
367 KeyedLoadStubCompiler compiler(isolate_);
354 { MaybeObject* maybe_code = 368 { MaybeObject* maybe_code =
355 compiler.CompileLoadInterceptor(receiver, holder, name); 369 compiler.CompileLoadInterceptor(receiver, holder, name);
356 if (!maybe_code->ToObject(&code)) return maybe_code; 370 if (!maybe_code->ToObject(&code)) return maybe_code;
357 } 371 }
358 PROFILE(isolate_, 372 PROFILE(isolate_,
359 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 373 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
360 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 374 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
361 Object* result; 375 Object* result;
362 { MaybeObject* maybe_result = 376 { MaybeObject* maybe_result =
363 receiver->UpdateMapCodeCache(name, Code::cast(code)); 377 receiver->UpdateMapCodeCache(name, Code::cast(code));
364 if (!maybe_result->ToObject(&result)) return maybe_result; 378 if (!maybe_result->ToObject(&result)) return maybe_result;
365 } 379 }
366 } 380 }
367 return code; 381 return code;
368 } 382 }
369 383
370 384
371 MaybeObject* StubCache::ComputeKeyedLoadCallback(String* name, 385 MaybeObject* StubCache::ComputeKeyedLoadCallback(String* name,
372 JSObject* receiver, 386 JSObject* receiver,
373 JSObject* holder, 387 JSObject* holder,
374 AccessorInfo* callback) { 388 AccessorInfo* callback) {
375 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 389 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP);
376 Code::Flags flags = 390 Code::Flags flags =
377 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS); 391 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS);
378 Object* code = receiver->map()->FindInCodeCache(name, flags); 392 Object* code = receiver->map()->FindInCodeCache(name, flags);
379 if (code->IsUndefined()) { 393 if (code->IsUndefined()) {
380 KeyedLoadStubCompiler compiler; 394 HandleScope scope(isolate_);
395 KeyedLoadStubCompiler compiler(isolate_);
381 { MaybeObject* maybe_code = 396 { MaybeObject* maybe_code =
382 compiler.CompileLoadCallback(name, receiver, holder, callback); 397 compiler.CompileLoadCallback(name, receiver, holder, callback);
383 if (!maybe_code->ToObject(&code)) return maybe_code; 398 if (!maybe_code->ToObject(&code)) return maybe_code;
384 } 399 }
385 PROFILE(isolate_, 400 PROFILE(isolate_,
386 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 401 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
387 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 402 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
388 Object* result; 403 Object* result;
389 { MaybeObject* maybe_result = 404 { MaybeObject* maybe_result =
390 receiver->UpdateMapCodeCache(name, Code::cast(code)); 405 receiver->UpdateMapCodeCache(name, Code::cast(code));
391 if (!maybe_result->ToObject(&result)) return maybe_result; 406 if (!maybe_result->ToObject(&result)) return maybe_result;
392 } 407 }
393 } 408 }
394 return code; 409 return code;
395 } 410 }
396 411
397 412
398 413
399 MaybeObject* StubCache::ComputeKeyedLoadArrayLength(String* name, 414 MaybeObject* StubCache::ComputeKeyedLoadArrayLength(String* name,
400 JSArray* receiver) { 415 JSArray* receiver) {
401 Code::Flags flags = 416 Code::Flags flags =
402 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS); 417 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS);
403 ASSERT(receiver->IsJSObject()); 418 ASSERT(receiver->IsJSObject());
404 Object* code = receiver->map()->FindInCodeCache(name, flags); 419 Object* code = receiver->map()->FindInCodeCache(name, flags);
405 if (code->IsUndefined()) { 420 if (code->IsUndefined()) {
406 KeyedLoadStubCompiler compiler; 421 HandleScope scope(isolate_);
422 KeyedLoadStubCompiler compiler(isolate_);
407 { MaybeObject* maybe_code = compiler.CompileLoadArrayLength(name); 423 { MaybeObject* maybe_code = compiler.CompileLoadArrayLength(name);
408 if (!maybe_code->ToObject(&code)) return maybe_code; 424 if (!maybe_code->ToObject(&code)) return maybe_code;
409 } 425 }
410 PROFILE(isolate_, 426 PROFILE(isolate_,
411 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 427 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
412 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 428 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
413 Object* result; 429 Object* result;
414 { MaybeObject* maybe_result = 430 { MaybeObject* maybe_result =
415 receiver->UpdateMapCodeCache(name, Code::cast(code)); 431 receiver->UpdateMapCodeCache(name, Code::cast(code));
416 if (!maybe_result->ToObject(&result)) return maybe_result; 432 if (!maybe_result->ToObject(&result)) return maybe_result;
417 } 433 }
418 } 434 }
419 return code; 435 return code;
420 } 436 }
421 437
422 438
423 MaybeObject* StubCache::ComputeKeyedLoadStringLength(String* name, 439 MaybeObject* StubCache::ComputeKeyedLoadStringLength(String* name,
424 String* receiver) { 440 String* receiver) {
425 Code::Flags flags = 441 Code::Flags flags =
426 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS); 442 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS);
427 Map* map = receiver->map(); 443 Map* map = receiver->map();
428 Object* code = map->FindInCodeCache(name, flags); 444 Object* code = map->FindInCodeCache(name, flags);
429 if (code->IsUndefined()) { 445 if (code->IsUndefined()) {
430 KeyedLoadStubCompiler compiler; 446 HandleScope scope(isolate_);
447 KeyedLoadStubCompiler compiler(isolate_);
431 { MaybeObject* maybe_code = compiler.CompileLoadStringLength(name); 448 { MaybeObject* maybe_code = compiler.CompileLoadStringLength(name);
432 if (!maybe_code->ToObject(&code)) return maybe_code; 449 if (!maybe_code->ToObject(&code)) return maybe_code;
433 } 450 }
434 PROFILE(isolate_, 451 PROFILE(isolate_,
435 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 452 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
436 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 453 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
437 Object* result; 454 Object* result;
438 { MaybeObject* maybe_result = map->UpdateCodeCache(name, Code::cast(code)); 455 { MaybeObject* maybe_result = map->UpdateCodeCache(name, Code::cast(code));
439 if (!maybe_result->ToObject(&result)) return maybe_result; 456 if (!maybe_result->ToObject(&result)) return maybe_result;
440 } 457 }
441 } 458 }
442 return code; 459 return code;
443 } 460 }
444 461
445 462
446 MaybeObject* StubCache::ComputeKeyedLoadFunctionPrototype( 463 MaybeObject* StubCache::ComputeKeyedLoadFunctionPrototype(
447 String* name, 464 String* name,
448 JSFunction* receiver) { 465 JSFunction* receiver) {
449 Code::Flags flags = 466 Code::Flags flags =
450 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS); 467 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS);
451 Object* code = receiver->map()->FindInCodeCache(name, flags); 468 Object* code = receiver->map()->FindInCodeCache(name, flags);
452 if (code->IsUndefined()) { 469 if (code->IsUndefined()) {
453 KeyedLoadStubCompiler compiler; 470 HandleScope scope(isolate_);
471 KeyedLoadStubCompiler compiler(isolate_);
454 { MaybeObject* maybe_code = compiler.CompileLoadFunctionPrototype(name); 472 { MaybeObject* maybe_code = compiler.CompileLoadFunctionPrototype(name);
455 if (!maybe_code->ToObject(&code)) return maybe_code; 473 if (!maybe_code->ToObject(&code)) return maybe_code;
456 } 474 }
457 PROFILE(isolate_, 475 PROFILE(isolate_,
458 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 476 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
459 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 477 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
460 Object* result; 478 Object* result;
461 { MaybeObject* maybe_result = 479 { MaybeObject* maybe_result =
462 receiver->UpdateMapCodeCache(name, Code::cast(code)); 480 receiver->UpdateMapCodeCache(name, Code::cast(code));
463 if (!maybe_result->ToObject(&result)) return maybe_result; 481 if (!maybe_result->ToObject(&result)) return maybe_result;
464 } 482 }
465 } 483 }
466 return code; 484 return code;
467 } 485 }
468 486
469 487
470 MaybeObject* StubCache::ComputeStoreField(String* name, 488 MaybeObject* StubCache::ComputeStoreField(String* name,
471 JSObject* receiver, 489 JSObject* receiver,
472 int field_index, 490 int field_index,
473 Map* transition, 491 Map* transition,
474 StrictModeFlag strict_mode) { 492 StrictModeFlag strict_mode) {
475 PropertyType type = (transition == NULL) ? FIELD : MAP_TRANSITION; 493 PropertyType type = (transition == NULL) ? FIELD : MAP_TRANSITION;
476 Code::Flags flags = Code::ComputeMonomorphicFlags( 494 Code::Flags flags = Code::ComputeMonomorphicFlags(
477 Code::STORE_IC, type, strict_mode); 495 Code::STORE_IC, type, strict_mode);
478 Object* code = receiver->map()->FindInCodeCache(name, flags); 496 Object* code = receiver->map()->FindInCodeCache(name, flags);
479 if (code->IsUndefined()) { 497 if (code->IsUndefined()) {
480 StoreStubCompiler compiler(strict_mode); 498 HandleScope scope(isolate_);
499 StoreStubCompiler compiler(isolate_, strict_mode);
481 { MaybeObject* maybe_code = 500 { MaybeObject* maybe_code =
482 compiler.CompileStoreField(receiver, field_index, transition, name); 501 compiler.CompileStoreField(receiver, field_index, transition, name);
483 if (!maybe_code->ToObject(&code)) return maybe_code; 502 if (!maybe_code->ToObject(&code)) return maybe_code;
484 } 503 }
485 PROFILE(isolate_, 504 PROFILE(isolate_,
486 CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name)); 505 CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name));
487 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code))); 506 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code)));
488 Object* result; 507 Object* result;
489 { MaybeObject* maybe_result = 508 { MaybeObject* maybe_result =
490 receiver->UpdateMapCodeCache(name, Code::cast(code)); 509 receiver->UpdateMapCodeCache(name, Code::cast(code));
(...skipping 26 matching lines...) Expand all
517 UNREACHABLE(); 536 UNREACHABLE();
518 break; 537 break;
519 } 538 }
520 Object* maybe_code = receiver->map()->FindInCodeCache(name, flags); 539 Object* maybe_code = receiver->map()->FindInCodeCache(name, flags);
521 if (!maybe_code->IsUndefined()) return Code::cast(maybe_code); 540 if (!maybe_code->IsUndefined()) return Code::cast(maybe_code);
522 541
523 Map* receiver_map = receiver->map(); 542 Map* receiver_map = receiver->map();
524 MaybeObject* maybe_new_code = NULL; 543 MaybeObject* maybe_new_code = NULL;
525 switch (stub_kind) { 544 switch (stub_kind) {
526 case KeyedIC::LOAD: { 545 case KeyedIC::LOAD: {
527 KeyedLoadStubCompiler compiler; 546 HandleScope scope(isolate_);
547 KeyedLoadStubCompiler compiler(isolate_);
528 maybe_new_code = compiler.CompileLoadElement(receiver_map); 548 maybe_new_code = compiler.CompileLoadElement(receiver_map);
529 break; 549 break;
530 } 550 }
531 case KeyedIC::STORE_NO_TRANSITION: { 551 case KeyedIC::STORE_NO_TRANSITION: {
532 KeyedStoreStubCompiler compiler(strict_mode); 552 HandleScope scope(isolate_);
553 KeyedStoreStubCompiler compiler(isolate_, strict_mode);
533 maybe_new_code = compiler.CompileStoreElement(receiver_map); 554 maybe_new_code = compiler.CompileStoreElement(receiver_map);
534 break; 555 break;
535 } 556 }
536 default: 557 default:
537 UNREACHABLE(); 558 UNREACHABLE();
538 break; 559 break;
539 } 560 }
540 Code* code = NULL; 561 Code* code = NULL;
541 if (!maybe_new_code->To(&code)) return maybe_new_code; 562 if (!maybe_new_code->To(&code)) return maybe_new_code;
542 563
(...skipping 24 matching lines...) Expand all
567 588
568 589
569 MaybeObject* StubCache::ComputeStoreGlobal(String* name, 590 MaybeObject* StubCache::ComputeStoreGlobal(String* name,
570 GlobalObject* receiver, 591 GlobalObject* receiver,
571 JSGlobalPropertyCell* cell, 592 JSGlobalPropertyCell* cell,
572 StrictModeFlag strict_mode) { 593 StrictModeFlag strict_mode) {
573 Code::Flags flags = Code::ComputeMonomorphicFlags( 594 Code::Flags flags = Code::ComputeMonomorphicFlags(
574 Code::STORE_IC, NORMAL, strict_mode); 595 Code::STORE_IC, NORMAL, strict_mode);
575 Object* code = receiver->map()->FindInCodeCache(name, flags); 596 Object* code = receiver->map()->FindInCodeCache(name, flags);
576 if (code->IsUndefined()) { 597 if (code->IsUndefined()) {
577 StoreStubCompiler compiler(strict_mode); 598 HandleScope scope(isolate_);
599 StoreStubCompiler compiler(isolate_, strict_mode);
578 { MaybeObject* maybe_code = 600 { MaybeObject* maybe_code =
579 compiler.CompileStoreGlobal(receiver, cell, name); 601 compiler.CompileStoreGlobal(receiver, cell, name);
580 if (!maybe_code->ToObject(&code)) return maybe_code; 602 if (!maybe_code->ToObject(&code)) return maybe_code;
581 } 603 }
582 PROFILE(isolate_, 604 PROFILE(isolate_,
583 CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name)); 605 CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name));
584 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code))); 606 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code)));
585 Object* result; 607 Object* result;
586 { MaybeObject* maybe_result = 608 { MaybeObject* maybe_result =
587 receiver->UpdateMapCodeCache(name, Code::cast(code)); 609 receiver->UpdateMapCodeCache(name, Code::cast(code));
588 if (!maybe_result->ToObject(&result)) return maybe_result; 610 if (!maybe_result->ToObject(&result)) return maybe_result;
589 } 611 }
590 } 612 }
591 return code; 613 return code;
592 } 614 }
593 615
594 616
595 MaybeObject* StubCache::ComputeStoreCallback( 617 MaybeObject* StubCache::ComputeStoreCallback(
596 String* name, 618 String* name,
597 JSObject* receiver, 619 JSObject* receiver,
598 AccessorInfo* callback, 620 AccessorInfo* callback,
599 StrictModeFlag strict_mode) { 621 StrictModeFlag strict_mode) {
600 ASSERT(v8::ToCData<Address>(callback->setter()) != 0); 622 ASSERT(v8::ToCData<Address>(callback->setter()) != 0);
601 Code::Flags flags = Code::ComputeMonomorphicFlags( 623 Code::Flags flags = Code::ComputeMonomorphicFlags(
602 Code::STORE_IC, CALLBACKS, strict_mode); 624 Code::STORE_IC, CALLBACKS, strict_mode);
603 Object* code = receiver->map()->FindInCodeCache(name, flags); 625 Object* code = receiver->map()->FindInCodeCache(name, flags);
604 if (code->IsUndefined()) { 626 if (code->IsUndefined()) {
605 StoreStubCompiler compiler(strict_mode); 627 HandleScope scope(isolate_);
628 StoreStubCompiler compiler(isolate_, strict_mode);
606 { MaybeObject* maybe_code = 629 { MaybeObject* maybe_code =
607 compiler.CompileStoreCallback(receiver, callback, name); 630 compiler.CompileStoreCallback(receiver, callback, name);
608 if (!maybe_code->ToObject(&code)) return maybe_code; 631 if (!maybe_code->ToObject(&code)) return maybe_code;
609 } 632 }
610 PROFILE(isolate_, 633 PROFILE(isolate_,
611 CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name)); 634 CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name));
612 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code))); 635 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code)));
613 Object* result; 636 Object* result;
614 { MaybeObject* maybe_result = 637 { MaybeObject* maybe_result =
615 receiver->UpdateMapCodeCache(name, Code::cast(code)); 638 receiver->UpdateMapCodeCache(name, Code::cast(code));
616 if (!maybe_result->ToObject(&result)) return maybe_result; 639 if (!maybe_result->ToObject(&result)) return maybe_result;
617 } 640 }
618 } 641 }
619 return code; 642 return code;
620 } 643 }
621 644
622 645
623 MaybeObject* StubCache::ComputeStoreInterceptor( 646 MaybeObject* StubCache::ComputeStoreInterceptor(
624 String* name, 647 String* name,
625 JSObject* receiver, 648 JSObject* receiver,
626 StrictModeFlag strict_mode) { 649 StrictModeFlag strict_mode) {
627 Code::Flags flags = Code::ComputeMonomorphicFlags( 650 Code::Flags flags = Code::ComputeMonomorphicFlags(
628 Code::STORE_IC, INTERCEPTOR, strict_mode); 651 Code::STORE_IC, INTERCEPTOR, strict_mode);
629 Object* code = receiver->map()->FindInCodeCache(name, flags); 652 Object* code = receiver->map()->FindInCodeCache(name, flags);
630 if (code->IsUndefined()) { 653 if (code->IsUndefined()) {
631 StoreStubCompiler compiler(strict_mode); 654 HandleScope scope(isolate_);
655 StoreStubCompiler compiler(isolate_, strict_mode);
632 { MaybeObject* maybe_code = 656 { MaybeObject* maybe_code =
633 compiler.CompileStoreInterceptor(receiver, name); 657 compiler.CompileStoreInterceptor(receiver, name);
634 if (!maybe_code->ToObject(&code)) return maybe_code; 658 if (!maybe_code->ToObject(&code)) return maybe_code;
635 } 659 }
636 PROFILE(isolate_, 660 PROFILE(isolate_,
637 CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name)); 661 CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name));
638 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code))); 662 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code)));
639 Object* result; 663 Object* result;
640 { MaybeObject* maybe_result = 664 { MaybeObject* maybe_result =
641 receiver->UpdateMapCodeCache(name, Code::cast(code)); 665 receiver->UpdateMapCodeCache(name, Code::cast(code));
642 if (!maybe_result->ToObject(&result)) return maybe_result; 666 if (!maybe_result->ToObject(&result)) return maybe_result;
643 } 667 }
644 } 668 }
645 return code; 669 return code;
646 } 670 }
647 671
648 672
649 MaybeObject* StubCache::ComputeKeyedStoreField(String* name, 673 MaybeObject* StubCache::ComputeKeyedStoreField(String* name,
650 JSObject* receiver, 674 JSObject* receiver,
651 int field_index, 675 int field_index,
652 Map* transition, 676 Map* transition,
653 StrictModeFlag strict_mode) { 677 StrictModeFlag strict_mode) {
654 PropertyType type = (transition == NULL) ? FIELD : MAP_TRANSITION; 678 PropertyType type = (transition == NULL) ? FIELD : MAP_TRANSITION;
655 Code::Flags flags = Code::ComputeMonomorphicFlags( 679 Code::Flags flags = Code::ComputeMonomorphicFlags(
656 Code::KEYED_STORE_IC, type, strict_mode); 680 Code::KEYED_STORE_IC, type, strict_mode);
657 Object* code = receiver->map()->FindInCodeCache(name, flags); 681 Object* code = receiver->map()->FindInCodeCache(name, flags);
658 if (code->IsUndefined()) { 682 if (code->IsUndefined()) {
659 KeyedStoreStubCompiler compiler(strict_mode); 683 HandleScope scope(isolate());
684 KeyedStoreStubCompiler compiler(isolate(), strict_mode);
660 { MaybeObject* maybe_code = 685 { MaybeObject* maybe_code =
661 compiler.CompileStoreField(receiver, field_index, transition, name); 686 compiler.CompileStoreField(receiver, field_index, transition, name);
662 if (!maybe_code->ToObject(&code)) return maybe_code; 687 if (!maybe_code->ToObject(&code)) return maybe_code;
663 } 688 }
664 PROFILE(isolate(), 689 PROFILE(isolate(),
665 CodeCreateEvent(Logger::KEYED_STORE_IC_TAG, 690 CodeCreateEvent(Logger::KEYED_STORE_IC_TAG,
666 Code::cast(code), name)); 691 Code::cast(code), name));
667 GDBJIT(AddCode(GDBJITInterface::KEYED_STORE_IC, name, Code::cast(code))); 692 GDBJIT(AddCode(GDBJITInterface::KEYED_STORE_IC, name, Code::cast(code)));
668 Object* result; 693 Object* result;
669 { MaybeObject* maybe_result = 694 { MaybeObject* maybe_result =
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
705 cache_holder, 730 cache_holder,
706 argc); 731 argc);
707 Object* code = map_holder->map()->FindInCodeCache(name, flags); 732 Object* code = map_holder->map()->FindInCodeCache(name, flags);
708 if (code->IsUndefined()) { 733 if (code->IsUndefined()) {
709 // If the function hasn't been compiled yet, we cannot do it now 734 // If the function hasn't been compiled yet, we cannot do it now
710 // because it may cause GC. To avoid this issue, we return an 735 // because it may cause GC. To avoid this issue, we return an
711 // internal error which will make sure we do not update any 736 // internal error which will make sure we do not update any
712 // caches. 737 // caches.
713 if (!function->is_compiled()) return Failure::InternalError(); 738 if (!function->is_compiled()) return Failure::InternalError();
714 // Compile the stub - only create stubs for fully compiled functions. 739 // Compile the stub - only create stubs for fully compiled functions.
715 CallStubCompiler compiler(argc, kind, extra_ic_state, cache_holder); 740 HandleScope scope(isolate_);
741 CallStubCompiler compiler(isolate_,
742 argc,
743 kind,
744 extra_ic_state,
745 cache_holder);
716 { MaybeObject* maybe_code = 746 { MaybeObject* maybe_code =
717 compiler.CompileCallConstant(object, holder, function, name, check); 747 compiler.CompileCallConstant(object, holder, function, name, check);
718 if (!maybe_code->ToObject(&code)) return maybe_code; 748 if (!maybe_code->ToObject(&code)) return maybe_code;
719 } 749 }
720 Code::cast(code)->set_check_type(check); 750 Code::cast(code)->set_check_type(check);
721 ASSERT_EQ(flags, Code::cast(code)->flags()); 751 ASSERT_EQ(flags, Code::cast(code)->flags());
722 PROFILE(isolate_, 752 PROFILE(isolate_,
723 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), 753 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG),
724 Code::cast(code), name)); 754 Code::cast(code), name));
725 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code))); 755 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code)));
(...skipping 26 matching lines...) Expand all
752 object = holder; 782 object = holder;
753 } 783 }
754 784
755 Code::Flags flags = Code::ComputeMonomorphicFlags(kind, 785 Code::Flags flags = Code::ComputeMonomorphicFlags(kind,
756 FIELD, 786 FIELD,
757 extra_ic_state, 787 extra_ic_state,
758 cache_holder, 788 cache_holder,
759 argc); 789 argc);
760 Object* code = map_holder->map()->FindInCodeCache(name, flags); 790 Object* code = map_holder->map()->FindInCodeCache(name, flags);
761 if (code->IsUndefined()) { 791 if (code->IsUndefined()) {
762 CallStubCompiler compiler(argc, kind, extra_ic_state, cache_holder); 792 HandleScope scope(isolate_);
793 CallStubCompiler compiler(isolate_,
794 argc,
795 kind,
796 extra_ic_state,
797 cache_holder);
763 { MaybeObject* maybe_code = 798 { MaybeObject* maybe_code =
764 compiler.CompileCallField(JSObject::cast(object), 799 compiler.CompileCallField(JSObject::cast(object),
765 holder, 800 holder,
766 index, 801 index,
767 name); 802 name);
768 if (!maybe_code->ToObject(&code)) return maybe_code; 803 if (!maybe_code->ToObject(&code)) return maybe_code;
769 } 804 }
770 ASSERT_EQ(flags, Code::cast(code)->flags()); 805 ASSERT_EQ(flags, Code::cast(code)->flags());
771 PROFILE(isolate_, 806 PROFILE(isolate_,
772 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), 807 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG),
(...skipping 28 matching lines...) Expand all
801 object = holder; 836 object = holder;
802 } 837 }
803 838
804 Code::Flags flags = Code::ComputeMonomorphicFlags(kind, 839 Code::Flags flags = Code::ComputeMonomorphicFlags(kind,
805 INTERCEPTOR, 840 INTERCEPTOR,
806 extra_ic_state, 841 extra_ic_state,
807 cache_holder, 842 cache_holder,
808 argc); 843 argc);
809 Object* code = map_holder->map()->FindInCodeCache(name, flags); 844 Object* code = map_holder->map()->FindInCodeCache(name, flags);
810 if (code->IsUndefined()) { 845 if (code->IsUndefined()) {
811 CallStubCompiler compiler(argc, kind, extra_ic_state, cache_holder); 846 HandleScope scope(isolate());
847 CallStubCompiler compiler(isolate(),
848 argc,
849 kind,
850 extra_ic_state,
851 cache_holder);
812 { MaybeObject* maybe_code = 852 { MaybeObject* maybe_code =
813 compiler.CompileCallInterceptor(JSObject::cast(object), holder, name); 853 compiler.CompileCallInterceptor(JSObject::cast(object), holder, name);
814 if (!maybe_code->ToObject(&code)) return maybe_code; 854 if (!maybe_code->ToObject(&code)) return maybe_code;
815 } 855 }
816 ASSERT_EQ(flags, Code::cast(code)->flags()); 856 ASSERT_EQ(flags, Code::cast(code)->flags());
817 PROFILE(isolate(), 857 PROFILE(isolate(),
818 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), 858 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG),
819 Code::cast(code), name)); 859 Code::cast(code), name));
820 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code))); 860 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code)));
821 Object* result; 861 Object* result;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
857 extra_ic_state, 897 extra_ic_state,
858 cache_holder, 898 cache_holder,
859 argc); 899 argc);
860 Object* code = map_holder->map()->FindInCodeCache(name, flags); 900 Object* code = map_holder->map()->FindInCodeCache(name, flags);
861 if (code->IsUndefined()) { 901 if (code->IsUndefined()) {
862 // If the function hasn't been compiled yet, we cannot do it now 902 // If the function hasn't been compiled yet, we cannot do it now
863 // because it may cause GC. To avoid this issue, we return an 903 // because it may cause GC. To avoid this issue, we return an
864 // internal error which will make sure we do not update any 904 // internal error which will make sure we do not update any
865 // caches. 905 // caches.
866 if (!function->is_compiled()) return Failure::InternalError(); 906 if (!function->is_compiled()) return Failure::InternalError();
867 CallStubCompiler compiler(argc, kind, extra_ic_state, cache_holder); 907 HandleScope scope(isolate());
908 CallStubCompiler compiler(isolate(),
909 argc,
910 kind,
911 extra_ic_state,
912 cache_holder);
868 { MaybeObject* maybe_code = 913 { MaybeObject* maybe_code =
869 compiler.CompileCallGlobal(receiver, holder, cell, function, name); 914 compiler.CompileCallGlobal(receiver, holder, cell, function, name);
870 if (!maybe_code->ToObject(&code)) return maybe_code; 915 if (!maybe_code->ToObject(&code)) return maybe_code;
871 } 916 }
872 ASSERT_EQ(flags, Code::cast(code)->flags()); 917 ASSERT_EQ(flags, Code::cast(code)->flags());
873 PROFILE(isolate(), 918 PROFILE(isolate(),
874 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), 919 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG),
875 Code::cast(code), name)); 920 Code::cast(code), name));
876 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code))); 921 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code)));
877 Object* result; 922 Object* result;
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
960 Code::Flags flags = Code::ComputeFlags(kind, 1005 Code::Flags flags = Code::ComputeFlags(kind,
961 UNINITIALIZED, 1006 UNINITIALIZED,
962 extra_state, 1007 extra_state,
963 NORMAL, 1008 NORMAL,
964 argc); 1009 argc);
965 Object* probe; 1010 Object* probe;
966 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags); 1011 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags);
967 if (!maybe_probe->ToObject(&probe)) return maybe_probe; 1012 if (!maybe_probe->ToObject(&probe)) return maybe_probe;
968 } 1013 }
969 if (!probe->IsUndefined()) return probe; 1014 if (!probe->IsUndefined()) return probe;
970 StubCompiler compiler; 1015 HandleScope scope(isolate_);
1016 StubCompiler compiler(isolate_);
971 return FillCache(isolate_, compiler.CompileCallInitialize(flags)); 1017 return FillCache(isolate_, compiler.CompileCallInitialize(flags));
972 } 1018 }
973 1019
974 1020
975 Handle<Code> StubCache::ComputeCallInitialize(int argc, 1021 Handle<Code> StubCache::ComputeCallInitialize(int argc,
976 RelocInfo::Mode mode) { 1022 RelocInfo::Mode mode) {
977 CALL_HEAP_FUNCTION(isolate_, 1023 CALL_HEAP_FUNCTION(isolate_,
978 ComputeCallInitialize(argc, mode, Code::CALL_IC), 1024 ComputeCallInitialize(argc, mode, Code::CALL_IC),
979 Code); 1025 Code);
980 } 1026 }
(...skipping 14 matching lines...) Expand all
995 Code::Flags flags = Code::ComputeFlags(kind, 1041 Code::Flags flags = Code::ComputeFlags(kind,
996 PREMONOMORPHIC, 1042 PREMONOMORPHIC,
997 extra_ic_state, 1043 extra_ic_state,
998 NORMAL, 1044 NORMAL,
999 argc); 1045 argc);
1000 Object* probe; 1046 Object* probe;
1001 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags); 1047 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags);
1002 if (!maybe_probe->ToObject(&probe)) return maybe_probe; 1048 if (!maybe_probe->ToObject(&probe)) return maybe_probe;
1003 } 1049 }
1004 if (!probe->IsUndefined()) return probe; 1050 if (!probe->IsUndefined()) return probe;
1005 StubCompiler compiler; 1051 HandleScope scope(isolate_);
1052 StubCompiler compiler(isolate_);
1006 return FillCache(isolate_, compiler.CompileCallPreMonomorphic(flags)); 1053 return FillCache(isolate_, compiler.CompileCallPreMonomorphic(flags));
1007 } 1054 }
1008 1055
1009 1056
1010 MaybeObject* StubCache::ComputeCallNormal(int argc, 1057 MaybeObject* StubCache::ComputeCallNormal(int argc,
1011 Code::Kind kind, 1058 Code::Kind kind,
1012 Code::ExtraICState extra_ic_state) { 1059 Code::ExtraICState extra_ic_state) {
1013 Code::Flags flags = Code::ComputeFlags(kind, 1060 Code::Flags flags = Code::ComputeFlags(kind,
1014 MONOMORPHIC, 1061 MONOMORPHIC,
1015 extra_ic_state, 1062 extra_ic_state,
1016 NORMAL, 1063 NORMAL,
1017 argc); 1064 argc);
1018 Object* probe; 1065 Object* probe;
1019 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags); 1066 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags);
1020 if (!maybe_probe->ToObject(&probe)) return maybe_probe; 1067 if (!maybe_probe->ToObject(&probe)) return maybe_probe;
1021 } 1068 }
1022 if (!probe->IsUndefined()) return probe; 1069 if (!probe->IsUndefined()) return probe;
1023 StubCompiler compiler; 1070 HandleScope scope(isolate_);
1071 StubCompiler compiler(isolate_);
1024 return FillCache(isolate_, compiler.CompileCallNormal(flags)); 1072 return FillCache(isolate_, compiler.CompileCallNormal(flags));
1025 } 1073 }
1026 1074
1027 1075
1028 MaybeObject* StubCache::ComputeCallArguments(int argc, Code::Kind kind) { 1076 MaybeObject* StubCache::ComputeCallArguments(int argc, Code::Kind kind) {
1029 ASSERT(kind == Code::KEYED_CALL_IC); 1077 ASSERT(kind == Code::KEYED_CALL_IC);
1030 Code::Flags flags = Code::ComputeFlags(kind, 1078 Code::Flags flags = Code::ComputeFlags(kind,
1031 MEGAMORPHIC, 1079 MEGAMORPHIC,
1032 Code::kNoExtraICState, 1080 Code::kNoExtraICState,
1033 NORMAL, 1081 NORMAL,
1034 argc); 1082 argc);
1035 Object* probe; 1083 Object* probe;
1036 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags); 1084 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags);
1037 if (!maybe_probe->ToObject(&probe)) return maybe_probe; 1085 if (!maybe_probe->ToObject(&probe)) return maybe_probe;
1038 } 1086 }
1039 if (!probe->IsUndefined()) return probe; 1087 if (!probe->IsUndefined()) return probe;
1040 StubCompiler compiler; 1088 HandleScope scope(isolate_);
1089 StubCompiler compiler(isolate_);
1041 return FillCache(isolate_, compiler.CompileCallArguments(flags)); 1090 return FillCache(isolate_, compiler.CompileCallArguments(flags));
1042 } 1091 }
1043 1092
1044 1093
1045 MaybeObject* StubCache::ComputeCallMegamorphic( 1094 MaybeObject* StubCache::ComputeCallMegamorphic(
1046 int argc, 1095 int argc,
1047 Code::Kind kind, 1096 Code::Kind kind,
1048 Code::ExtraICState extra_ic_state) { 1097 Code::ExtraICState extra_ic_state) {
1049 Code::Flags flags = Code::ComputeFlags(kind, 1098 Code::Flags flags = Code::ComputeFlags(kind,
1050 MEGAMORPHIC, 1099 MEGAMORPHIC,
1051 extra_ic_state, 1100 extra_ic_state,
1052 NORMAL, 1101 NORMAL,
1053 argc); 1102 argc);
1054 Object* probe; 1103 Object* probe;
1055 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags); 1104 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags);
1056 if (!maybe_probe->ToObject(&probe)) return maybe_probe; 1105 if (!maybe_probe->ToObject(&probe)) return maybe_probe;
1057 } 1106 }
1058 if (!probe->IsUndefined()) return probe; 1107 if (!probe->IsUndefined()) return probe;
1059 StubCompiler compiler; 1108 HandleScope scope(isolate_);
1109 StubCompiler compiler(isolate_);
1060 return FillCache(isolate_, compiler.CompileCallMegamorphic(flags)); 1110 return FillCache(isolate_, compiler.CompileCallMegamorphic(flags));
1061 } 1111 }
1062 1112
1063 1113
1064 MaybeObject* StubCache::ComputeCallMiss(int argc, 1114 MaybeObject* StubCache::ComputeCallMiss(int argc,
1065 Code::Kind kind, 1115 Code::Kind kind,
1066 Code::ExtraICState extra_ic_state) { 1116 Code::ExtraICState extra_ic_state) {
1067 // MONOMORPHIC_PROTOTYPE_FAILURE state is used to make sure that miss stubs 1117 // MONOMORPHIC_PROTOTYPE_FAILURE state is used to make sure that miss stubs
1068 // and monomorphic stubs are not mixed up together in the stub cache. 1118 // and monomorphic stubs are not mixed up together in the stub cache.
1069 Code::Flags flags = Code::ComputeFlags(kind, 1119 Code::Flags flags = Code::ComputeFlags(kind,
1070 MONOMORPHIC_PROTOTYPE_FAILURE, 1120 MONOMORPHIC_PROTOTYPE_FAILURE,
1071 extra_ic_state, 1121 extra_ic_state,
1072 NORMAL, 1122 NORMAL,
1073 argc, 1123 argc,
1074 OWN_MAP); 1124 OWN_MAP);
1075 Object* probe; 1125 Object* probe;
1076 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags); 1126 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags);
1077 if (!maybe_probe->ToObject(&probe)) return maybe_probe; 1127 if (!maybe_probe->ToObject(&probe)) return maybe_probe;
1078 } 1128 }
1079 if (!probe->IsUndefined()) return probe; 1129 if (!probe->IsUndefined()) return probe;
1080 StubCompiler compiler; 1130 HandleScope scope(isolate_);
1131 StubCompiler compiler(isolate_);
1081 return FillCache(isolate_, compiler.CompileCallMiss(flags)); 1132 return FillCache(isolate_, compiler.CompileCallMiss(flags));
1082 } 1133 }
1083 1134
1084 1135
1085 #ifdef ENABLE_DEBUGGER_SUPPORT 1136 #ifdef ENABLE_DEBUGGER_SUPPORT
1086 MaybeObject* StubCache::ComputeCallDebugBreak( 1137 MaybeObject* StubCache::ComputeCallDebugBreak(
1087 int argc, 1138 int argc,
1088 Code::Kind kind) { 1139 Code::Kind kind) {
1089 // Extra IC state is irrelevant for debug break ICs. They jump to 1140 // Extra IC state is irrelevant for debug break ICs. They jump to
1090 // the actual call ic to carry out the work. 1141 // the actual call ic to carry out the work.
1091 Code::Flags flags = Code::ComputeFlags(kind, 1142 Code::Flags flags = Code::ComputeFlags(kind,
1092 DEBUG_BREAK, 1143 DEBUG_BREAK,
1093 Code::kNoExtraICState, 1144 Code::kNoExtraICState,
1094 NORMAL, 1145 NORMAL,
1095 argc); 1146 argc);
1096 Object* probe; 1147 Object* probe;
1097 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags); 1148 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags);
1098 if (!maybe_probe->ToObject(&probe)) return maybe_probe; 1149 if (!maybe_probe->ToObject(&probe)) return maybe_probe;
1099 } 1150 }
1100 if (!probe->IsUndefined()) return probe; 1151 if (!probe->IsUndefined()) return probe;
1101 StubCompiler compiler; 1152 HandleScope scope(isolate_);
1153 StubCompiler compiler(isolate_);
1102 return FillCache(isolate_, compiler.CompileCallDebugBreak(flags)); 1154 return FillCache(isolate_, compiler.CompileCallDebugBreak(flags));
1103 } 1155 }
1104 1156
1105 1157
1106 MaybeObject* StubCache::ComputeCallDebugPrepareStepIn( 1158 MaybeObject* StubCache::ComputeCallDebugPrepareStepIn(
1107 int argc, 1159 int argc,
1108 Code::Kind kind) { 1160 Code::Kind kind) {
1109 // Extra IC state is irrelevant for debug break ICs. They jump to 1161 // Extra IC state is irrelevant for debug break ICs. They jump to
1110 // the actual call ic to carry out the work. 1162 // the actual call ic to carry out the work.
1111 Code::Flags flags = Code::ComputeFlags(kind, 1163 Code::Flags flags = Code::ComputeFlags(kind,
1112 DEBUG_PREPARE_STEP_IN, 1164 DEBUG_PREPARE_STEP_IN,
1113 Code::kNoExtraICState, 1165 Code::kNoExtraICState,
1114 NORMAL, 1166 NORMAL,
1115 argc); 1167 argc);
1116 Object* probe; 1168 Object* probe;
1117 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags); 1169 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags);
1118 if (!maybe_probe->ToObject(&probe)) return maybe_probe; 1170 if (!maybe_probe->ToObject(&probe)) return maybe_probe;
1119 } 1171 }
1120 if (!probe->IsUndefined()) return probe; 1172 if (!probe->IsUndefined()) return probe;
1121 StubCompiler compiler; 1173 HandleScope scope(isolate_);
1174 StubCompiler compiler(isolate_);
1122 return FillCache(isolate_, compiler.CompileCallDebugPrepareStepIn(flags)); 1175 return FillCache(isolate_, compiler.CompileCallDebugPrepareStepIn(flags));
1123 } 1176 }
1124 #endif 1177 #endif
1125 1178
1126 1179
1127 void StubCache::Clear() { 1180 void StubCache::Clear() {
1128 Code* empty = isolate_->builtins()->builtin(Builtins::kIllegal); 1181 Code* empty = isolate_->builtins()->builtin(Builtins::kIllegal);
1129 for (int i = 0; i < kPrimaryTableSize; i++) { 1182 for (int i = 0; i < kPrimaryTableSize; i++) {
1130 primary_[i].key = heap()->empty_string(); 1183 primary_[i].key = heap()->empty_string();
1131 primary_[i].value = empty; 1184 primary_[i].value = empty;
(...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after
1697 return result; 1750 return result;
1698 } 1751 }
1699 1752
1700 1753
1701 void KeyedStoreStubCompiler::GenerateStoreDictionaryElement( 1754 void KeyedStoreStubCompiler::GenerateStoreDictionaryElement(
1702 MacroAssembler* masm) { 1755 MacroAssembler* masm) {
1703 KeyedStoreIC::GenerateSlow(masm); 1756 KeyedStoreIC::GenerateSlow(masm);
1704 } 1757 }
1705 1758
1706 1759
1707 CallStubCompiler::CallStubCompiler(int argc, 1760 CallStubCompiler::CallStubCompiler(Isolate* isolate,
1761 int argc,
1708 Code::Kind kind, 1762 Code::Kind kind,
1709 Code::ExtraICState extra_ic_state, 1763 Code::ExtraICState extra_ic_state,
1710 InlineCacheHolderFlag cache_holder) 1764 InlineCacheHolderFlag cache_holder)
1711 : arguments_(argc), 1765 : StubCompiler(isolate),
1766 arguments_(argc),
1712 kind_(kind), 1767 kind_(kind),
1713 extra_ic_state_(extra_ic_state), 1768 extra_ic_state_(extra_ic_state),
1714 cache_holder_(cache_holder) { 1769 cache_holder_(cache_holder) {
1715 } 1770 }
1716 1771
1717 1772
1718 bool CallStubCompiler::HasCustomCallGenerator(JSFunction* function) { 1773 bool CallStubCompiler::HasCustomCallGenerator(JSFunction* function) {
1719 SharedFunctionInfo* info = function->shared(); 1774 SharedFunctionInfo* info = function->shared();
1720 if (info->HasBuiltinFunctionId()) { 1775 if (info->HasBuiltinFunctionId()) {
1721 BuiltinFunctionId id = info->builtin_function_id(); 1776 BuiltinFunctionId id = info->builtin_function_id();
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
1858 expected_receiver_type_ = 1913 expected_receiver_type_ =
1859 FunctionTemplateInfo::cast(signature->receiver()); 1914 FunctionTemplateInfo::cast(signature->receiver());
1860 } 1915 }
1861 } 1916 }
1862 1917
1863 is_simple_api_call_ = true; 1918 is_simple_api_call_ = true;
1864 } 1919 }
1865 1920
1866 1921
1867 } } // namespace v8::internal 1922 } } // namespace v8::internal
OLDNEW
« src/stub-cache.h ('K') | « src/stub-cache.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698