OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/ic/ic.h" | 5 #include "src/ic/ic.h" |
6 | 6 |
7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
8 #include "src/api.h" | 8 #include "src/api.h" |
9 #include "src/arguments.h" | 9 #include "src/arguments.h" |
10 #include "src/base/bits.h" | 10 #include "src/base/bits.h" |
(...skipping 2331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2342 // | 2342 // |
2343 | 2343 |
2344 // Used from ic-<arch>.cc. | 2344 // Used from ic-<arch>.cc. |
2345 RUNTIME_FUNCTION(Runtime_CallIC_Miss) { | 2345 RUNTIME_FUNCTION(Runtime_CallIC_Miss) { |
2346 TimerEventScope<TimerEventIcMiss> timer(isolate); | 2346 TimerEventScope<TimerEventIcMiss> timer(isolate); |
2347 HandleScope scope(isolate); | 2347 HandleScope scope(isolate); |
2348 DCHECK(args.length() == 3); | 2348 DCHECK(args.length() == 3); |
2349 Handle<Object> function = args.at<Object>(0); | 2349 Handle<Object> function = args.at<Object>(0); |
2350 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(1); | 2350 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(1); |
2351 Handle<Smi> slot = args.at<Smi>(2); | 2351 Handle<Smi> slot = args.at<Smi>(2); |
2352 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value()); | 2352 FeedbackVectorSlot vector_slot = vector->ToSlot(slot->value()); |
2353 CallICNexus nexus(vector, vector_slot); | 2353 CallICNexus nexus(vector, vector_slot); |
2354 CallIC ic(isolate, &nexus); | 2354 CallIC ic(isolate, &nexus); |
2355 ic.HandleMiss(function); | 2355 ic.HandleMiss(function); |
2356 return *function; | 2356 return *function; |
2357 } | 2357 } |
2358 | 2358 |
2359 | 2359 |
2360 // Used from ic-<arch>.cc. | 2360 // Used from ic-<arch>.cc. |
2361 RUNTIME_FUNCTION(Runtime_LoadIC_Miss) { | 2361 RUNTIME_FUNCTION(Runtime_LoadIC_Miss) { |
2362 TimerEventScope<TimerEventIcMiss> timer(isolate); | 2362 TimerEventScope<TimerEventIcMiss> timer(isolate); |
2363 HandleScope scope(isolate); | 2363 HandleScope scope(isolate); |
2364 Handle<Object> receiver = args.at<Object>(0); | 2364 Handle<Object> receiver = args.at<Object>(0); |
2365 Handle<Name> key = args.at<Name>(1); | 2365 Handle<Name> key = args.at<Name>(1); |
2366 Handle<Object> result; | 2366 Handle<Object> result; |
2367 | 2367 |
2368 DCHECK(args.length() == 4); | 2368 DCHECK(args.length() == 4); |
2369 Handle<Smi> slot = args.at<Smi>(2); | 2369 Handle<Smi> slot = args.at<Smi>(2); |
2370 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(3); | 2370 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(3); |
2371 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value()); | 2371 FeedbackVectorSlot vector_slot = vector->ToSlot(slot->value()); |
2372 // A monomorphic or polymorphic KeyedLoadIC with a string key can call the | 2372 // A monomorphic or polymorphic KeyedLoadIC with a string key can call the |
2373 // LoadIC miss handler if the handler misses. Since the vector Nexus is | 2373 // LoadIC miss handler if the handler misses. Since the vector Nexus is |
2374 // set up outside the IC, handle that here. | 2374 // set up outside the IC, handle that here. |
2375 if (vector->GetKind(vector_slot) == FeedbackVectorSlotKind::LOAD_IC) { | 2375 if (vector->GetKind(vector_slot) == FeedbackVectorSlotKind::LOAD_IC) { |
2376 LoadICNexus nexus(vector, vector_slot); | 2376 LoadICNexus nexus(vector, vector_slot); |
2377 LoadIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); | 2377 LoadIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); |
2378 ic.UpdateState(receiver, key); | 2378 ic.UpdateState(receiver, key); |
2379 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, ic.Load(receiver, key)); | 2379 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, ic.Load(receiver, key)); |
2380 } else { | 2380 } else { |
2381 DCHECK_EQ(FeedbackVectorSlotKind::KEYED_LOAD_IC, | 2381 DCHECK_EQ(FeedbackVectorSlotKind::KEYED_LOAD_IC, |
(...skipping 11 matching lines...) Expand all Loading... |
2393 RUNTIME_FUNCTION(Runtime_KeyedLoadIC_Miss) { | 2393 RUNTIME_FUNCTION(Runtime_KeyedLoadIC_Miss) { |
2394 TimerEventScope<TimerEventIcMiss> timer(isolate); | 2394 TimerEventScope<TimerEventIcMiss> timer(isolate); |
2395 HandleScope scope(isolate); | 2395 HandleScope scope(isolate); |
2396 Handle<Object> receiver = args.at<Object>(0); | 2396 Handle<Object> receiver = args.at<Object>(0); |
2397 Handle<Object> key = args.at<Object>(1); | 2397 Handle<Object> key = args.at<Object>(1); |
2398 Handle<Object> result; | 2398 Handle<Object> result; |
2399 | 2399 |
2400 DCHECK(args.length() == 4); | 2400 DCHECK(args.length() == 4); |
2401 Handle<Smi> slot = args.at<Smi>(2); | 2401 Handle<Smi> slot = args.at<Smi>(2); |
2402 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(3); | 2402 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(3); |
2403 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value()); | 2403 FeedbackVectorSlot vector_slot = vector->ToSlot(slot->value()); |
2404 KeyedLoadICNexus nexus(vector, vector_slot); | 2404 KeyedLoadICNexus nexus(vector, vector_slot); |
2405 KeyedLoadIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); | 2405 KeyedLoadIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); |
2406 ic.UpdateState(receiver, key); | 2406 ic.UpdateState(receiver, key); |
2407 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, ic.Load(receiver, key)); | 2407 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, ic.Load(receiver, key)); |
2408 return *result; | 2408 return *result; |
2409 } | 2409 } |
2410 | 2410 |
2411 | 2411 |
2412 RUNTIME_FUNCTION(Runtime_KeyedLoadIC_MissFromStubFailure) { | 2412 RUNTIME_FUNCTION(Runtime_KeyedLoadIC_MissFromStubFailure) { |
2413 TimerEventScope<TimerEventIcMiss> timer(isolate); | 2413 TimerEventScope<TimerEventIcMiss> timer(isolate); |
2414 HandleScope scope(isolate); | 2414 HandleScope scope(isolate); |
2415 Handle<Object> receiver = args.at<Object>(0); | 2415 Handle<Object> receiver = args.at<Object>(0); |
2416 Handle<Object> key = args.at<Object>(1); | 2416 Handle<Object> key = args.at<Object>(1); |
2417 Handle<Object> result; | 2417 Handle<Object> result; |
2418 | 2418 |
2419 DCHECK(args.length() == 4); | 2419 DCHECK(args.length() == 4); |
2420 Handle<Smi> slot = args.at<Smi>(2); | 2420 Handle<Smi> slot = args.at<Smi>(2); |
2421 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(3); | 2421 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(3); |
2422 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value()); | 2422 FeedbackVectorSlot vector_slot = vector->ToSlot(slot->value()); |
2423 KeyedLoadICNexus nexus(vector, vector_slot); | 2423 KeyedLoadICNexus nexus(vector, vector_slot); |
2424 KeyedLoadIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); | 2424 KeyedLoadIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); |
2425 ic.UpdateState(receiver, key); | 2425 ic.UpdateState(receiver, key); |
2426 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, ic.Load(receiver, key)); | 2426 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, ic.Load(receiver, key)); |
2427 | 2427 |
2428 return *result; | 2428 return *result; |
2429 } | 2429 } |
2430 | 2430 |
2431 | 2431 |
2432 // Used from ic-<arch>.cc. | 2432 // Used from ic-<arch>.cc. |
2433 RUNTIME_FUNCTION(Runtime_StoreIC_Miss) { | 2433 RUNTIME_FUNCTION(Runtime_StoreIC_Miss) { |
2434 TimerEventScope<TimerEventIcMiss> timer(isolate); | 2434 TimerEventScope<TimerEventIcMiss> timer(isolate); |
2435 HandleScope scope(isolate); | 2435 HandleScope scope(isolate); |
2436 Handle<Object> receiver = args.at<Object>(0); | 2436 Handle<Object> receiver = args.at<Object>(0); |
2437 Handle<Name> key = args.at<Name>(1); | 2437 Handle<Name> key = args.at<Name>(1); |
2438 Handle<Object> value = args.at<Object>(2); | 2438 Handle<Object> value = args.at<Object>(2); |
2439 Handle<Object> result; | 2439 Handle<Object> result; |
2440 | 2440 |
2441 if (FLAG_vector_stores) { | 2441 if (FLAG_vector_stores) { |
2442 DCHECK(args.length() == 5 || args.length() == 6); | 2442 DCHECK(args.length() == 5 || args.length() == 6); |
2443 Handle<Smi> slot = args.at<Smi>(3); | 2443 Handle<Smi> slot = args.at<Smi>(3); |
2444 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(4); | 2444 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(4); |
2445 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value()); | 2445 FeedbackVectorSlot vector_slot = vector->ToSlot(slot->value()); |
2446 if (vector->GetKind(vector_slot) == FeedbackVectorSlotKind::STORE_IC) { | 2446 if (vector->GetKind(vector_slot) == FeedbackVectorSlotKind::STORE_IC) { |
2447 StoreICNexus nexus(vector, vector_slot); | 2447 StoreICNexus nexus(vector, vector_slot); |
2448 StoreIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); | 2448 StoreIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); |
2449 ic.UpdateState(receiver, key); | 2449 ic.UpdateState(receiver, key); |
2450 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, | 2450 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, |
2451 ic.Store(receiver, key, value)); | 2451 ic.Store(receiver, key, value)); |
2452 } else { | 2452 } else { |
2453 DCHECK_EQ(FeedbackVectorSlotKind::KEYED_STORE_IC, | 2453 DCHECK_EQ(FeedbackVectorSlotKind::KEYED_STORE_IC, |
2454 vector->GetKind(vector_slot)); | 2454 vector->GetKind(vector_slot)); |
2455 KeyedStoreICNexus nexus(vector, vector_slot); | 2455 KeyedStoreICNexus nexus(vector, vector_slot); |
(...skipping 18 matching lines...) Expand all Loading... |
2474 HandleScope scope(isolate); | 2474 HandleScope scope(isolate); |
2475 Handle<Object> receiver = args.at<Object>(0); | 2475 Handle<Object> receiver = args.at<Object>(0); |
2476 Handle<Name> key = args.at<Name>(1); | 2476 Handle<Name> key = args.at<Name>(1); |
2477 Handle<Object> value = args.at<Object>(2); | 2477 Handle<Object> value = args.at<Object>(2); |
2478 Handle<Object> result; | 2478 Handle<Object> result; |
2479 | 2479 |
2480 if (FLAG_vector_stores) { | 2480 if (FLAG_vector_stores) { |
2481 DCHECK(args.length() == 5 || args.length() == 6); | 2481 DCHECK(args.length() == 5 || args.length() == 6); |
2482 Handle<Smi> slot = args.at<Smi>(3); | 2482 Handle<Smi> slot = args.at<Smi>(3); |
2483 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(4); | 2483 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(4); |
2484 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value()); | 2484 FeedbackVectorSlot vector_slot = vector->ToSlot(slot->value()); |
2485 if (vector->GetKind(vector_slot) == FeedbackVectorSlotKind::STORE_IC) { | 2485 if (vector->GetKind(vector_slot) == FeedbackVectorSlotKind::STORE_IC) { |
2486 StoreICNexus nexus(vector, vector_slot); | 2486 StoreICNexus nexus(vector, vector_slot); |
2487 StoreIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); | 2487 StoreIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); |
2488 ic.UpdateState(receiver, key); | 2488 ic.UpdateState(receiver, key); |
2489 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, | 2489 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, |
2490 ic.Store(receiver, key, value)); | 2490 ic.Store(receiver, key, value)); |
2491 } else { | 2491 } else { |
2492 DCHECK_EQ(FeedbackVectorSlotKind::KEYED_STORE_IC, | 2492 DCHECK_EQ(FeedbackVectorSlotKind::KEYED_STORE_IC, |
2493 vector->GetKind(vector_slot)); | 2493 vector->GetKind(vector_slot)); |
2494 KeyedStoreICNexus nexus(vector, vector_slot); | 2494 KeyedStoreICNexus nexus(vector, vector_slot); |
(...skipping 19 matching lines...) Expand all Loading... |
2514 HandleScope scope(isolate); | 2514 HandleScope scope(isolate); |
2515 Handle<Object> receiver = args.at<Object>(0); | 2515 Handle<Object> receiver = args.at<Object>(0); |
2516 Handle<Object> key = args.at<Object>(1); | 2516 Handle<Object> key = args.at<Object>(1); |
2517 Handle<Object> value = args.at<Object>(2); | 2517 Handle<Object> value = args.at<Object>(2); |
2518 Handle<Object> result; | 2518 Handle<Object> result; |
2519 | 2519 |
2520 if (FLAG_vector_stores) { | 2520 if (FLAG_vector_stores) { |
2521 DCHECK(args.length() == 5); | 2521 DCHECK(args.length() == 5); |
2522 Handle<Smi> slot = args.at<Smi>(3); | 2522 Handle<Smi> slot = args.at<Smi>(3); |
2523 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(4); | 2523 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(4); |
2524 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value()); | 2524 FeedbackVectorSlot vector_slot = vector->ToSlot(slot->value()); |
2525 KeyedStoreICNexus nexus(vector, vector_slot); | 2525 KeyedStoreICNexus nexus(vector, vector_slot); |
2526 KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); | 2526 KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); |
2527 ic.UpdateState(receiver, key); | 2527 ic.UpdateState(receiver, key); |
2528 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, | 2528 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, |
2529 ic.Store(receiver, key, value)); | 2529 ic.Store(receiver, key, value)); |
2530 } else { | 2530 } else { |
2531 DCHECK(args.length() == 3); | 2531 DCHECK(args.length() == 3); |
2532 KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate); | 2532 KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate); |
2533 ic.UpdateState(receiver, key); | 2533 ic.UpdateState(receiver, key); |
2534 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, | 2534 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, |
2535 ic.Store(receiver, key, value)); | 2535 ic.Store(receiver, key, value)); |
2536 } | 2536 } |
2537 return *result; | 2537 return *result; |
2538 } | 2538 } |
2539 | 2539 |
2540 | 2540 |
2541 RUNTIME_FUNCTION(Runtime_KeyedStoreIC_MissFromStubFailure) { | 2541 RUNTIME_FUNCTION(Runtime_KeyedStoreIC_MissFromStubFailure) { |
2542 TimerEventScope<TimerEventIcMiss> timer(isolate); | 2542 TimerEventScope<TimerEventIcMiss> timer(isolate); |
2543 HandleScope scope(isolate); | 2543 HandleScope scope(isolate); |
2544 Handle<Object> receiver = args.at<Object>(0); | 2544 Handle<Object> receiver = args.at<Object>(0); |
2545 Handle<Object> key = args.at<Object>(1); | 2545 Handle<Object> key = args.at<Object>(1); |
2546 Handle<Object> value = args.at<Object>(2); | 2546 Handle<Object> value = args.at<Object>(2); |
2547 Handle<Object> result; | 2547 Handle<Object> result; |
2548 | 2548 |
2549 if (FLAG_vector_stores) { | 2549 if (FLAG_vector_stores) { |
2550 DCHECK(args.length() == 5); | 2550 DCHECK(args.length() == 5); |
2551 Handle<Smi> slot = args.at<Smi>(3); | 2551 Handle<Smi> slot = args.at<Smi>(3); |
2552 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(4); | 2552 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(4); |
2553 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value()); | 2553 FeedbackVectorSlot vector_slot = vector->ToSlot(slot->value()); |
2554 KeyedStoreICNexus nexus(vector, vector_slot); | 2554 KeyedStoreICNexus nexus(vector, vector_slot); |
2555 KeyedStoreIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); | 2555 KeyedStoreIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); |
2556 ic.UpdateState(receiver, key); | 2556 ic.UpdateState(receiver, key); |
2557 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, | 2557 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, |
2558 ic.Store(receiver, key, value)); | 2558 ic.Store(receiver, key, value)); |
2559 } else { | 2559 } else { |
2560 DCHECK(args.length() == 3); | 2560 DCHECK(args.length() == 3); |
2561 KeyedStoreIC ic(IC::EXTRA_CALL_FRAME, isolate); | 2561 KeyedStoreIC ic(IC::EXTRA_CALL_FRAME, isolate); |
2562 ic.UpdateState(receiver, key); | 2562 ic.UpdateState(receiver, key); |
2563 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 2563 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
(...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3102 RUNTIME_FUNCTION(Runtime_LoadIC_MissFromStubFailure) { | 3102 RUNTIME_FUNCTION(Runtime_LoadIC_MissFromStubFailure) { |
3103 TimerEventScope<TimerEventIcMiss> timer(isolate); | 3103 TimerEventScope<TimerEventIcMiss> timer(isolate); |
3104 HandleScope scope(isolate); | 3104 HandleScope scope(isolate); |
3105 Handle<Object> receiver = args.at<Object>(0); | 3105 Handle<Object> receiver = args.at<Object>(0); |
3106 Handle<Name> key = args.at<Name>(1); | 3106 Handle<Name> key = args.at<Name>(1); |
3107 Handle<Object> result; | 3107 Handle<Object> result; |
3108 | 3108 |
3109 DCHECK(args.length() == 4); | 3109 DCHECK(args.length() == 4); |
3110 Handle<Smi> slot = args.at<Smi>(2); | 3110 Handle<Smi> slot = args.at<Smi>(2); |
3111 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(3); | 3111 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(3); |
3112 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value()); | 3112 FeedbackVectorSlot vector_slot = vector->ToSlot(slot->value()); |
3113 // A monomorphic or polymorphic KeyedLoadIC with a string key can call the | 3113 // A monomorphic or polymorphic KeyedLoadIC with a string key can call the |
3114 // LoadIC miss handler if the handler misses. Since the vector Nexus is | 3114 // LoadIC miss handler if the handler misses. Since the vector Nexus is |
3115 // set up outside the IC, handle that here. | 3115 // set up outside the IC, handle that here. |
3116 if (vector->GetKind(vector_slot) == FeedbackVectorSlotKind::LOAD_IC) { | 3116 if (vector->GetKind(vector_slot) == FeedbackVectorSlotKind::LOAD_IC) { |
3117 LoadICNexus nexus(vector, vector_slot); | 3117 LoadICNexus nexus(vector, vector_slot); |
3118 LoadIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); | 3118 LoadIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); |
3119 ic.UpdateState(receiver, key); | 3119 ic.UpdateState(receiver, key); |
3120 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, ic.Load(receiver, key)); | 3120 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, ic.Load(receiver, key)); |
3121 } else { | 3121 } else { |
3122 DCHECK_EQ(FeedbackVectorSlotKind::KEYED_LOAD_IC, | 3122 DCHECK_EQ(FeedbackVectorSlotKind::KEYED_LOAD_IC, |
3123 vector->GetKind(vector_slot)); | 3123 vector->GetKind(vector_slot)); |
3124 KeyedLoadICNexus nexus(vector, vector_slot); | 3124 KeyedLoadICNexus nexus(vector, vector_slot); |
3125 KeyedLoadIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); | 3125 KeyedLoadIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); |
3126 ic.UpdateState(receiver, key); | 3126 ic.UpdateState(receiver, key); |
3127 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, ic.Load(receiver, key)); | 3127 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, ic.Load(receiver, key)); |
3128 } | 3128 } |
3129 | 3129 |
3130 return *result; | 3130 return *result; |
3131 } | 3131 } |
3132 } // namespace internal | 3132 } // namespace internal |
3133 } // namespace v8 | 3133 } // namespace v8 |
OLD | NEW |