| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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/deoptimizer.h" | 5 #include "src/deoptimizer.h" |
| 6 | 6 |
| 7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
| 8 #include "src/ast/prettyprinter.h" | 8 #include "src/ast/prettyprinter.h" |
| 9 #include "src/codegen.h" | 9 #include "src/codegen.h" |
| 10 #include "src/disasm.h" | 10 #include "src/disasm.h" |
| (...skipping 2433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2444 buffer_->Add(UINT32_REGISTER, zone()); | 2444 buffer_->Add(UINT32_REGISTER, zone()); |
| 2445 buffer_->Add(reg.code(), zone()); | 2445 buffer_->Add(reg.code(), zone()); |
| 2446 } | 2446 } |
| 2447 | 2447 |
| 2448 | 2448 |
| 2449 void Translation::StoreBoolRegister(Register reg) { | 2449 void Translation::StoreBoolRegister(Register reg) { |
| 2450 buffer_->Add(BOOL_REGISTER, zone()); | 2450 buffer_->Add(BOOL_REGISTER, zone()); |
| 2451 buffer_->Add(reg.code(), zone()); | 2451 buffer_->Add(reg.code(), zone()); |
| 2452 } | 2452 } |
| 2453 | 2453 |
| 2454 void Translation::StoreFloatRegister(FloatRegister reg) { |
| 2455 buffer_->Add(FLOAT_REGISTER, zone()); |
| 2456 buffer_->Add(reg.code(), zone()); |
| 2457 } |
| 2454 | 2458 |
| 2455 void Translation::StoreDoubleRegister(DoubleRegister reg) { | 2459 void Translation::StoreDoubleRegister(DoubleRegister reg) { |
| 2456 buffer_->Add(DOUBLE_REGISTER, zone()); | 2460 buffer_->Add(DOUBLE_REGISTER, zone()); |
| 2457 buffer_->Add(reg.code(), zone()); | 2461 buffer_->Add(reg.code(), zone()); |
| 2458 } | 2462 } |
| 2459 | 2463 |
| 2460 | 2464 |
| 2461 void Translation::StoreStackSlot(int index) { | 2465 void Translation::StoreStackSlot(int index) { |
| 2462 buffer_->Add(STACK_SLOT, zone()); | 2466 buffer_->Add(STACK_SLOT, zone()); |
| 2463 buffer_->Add(index, zone()); | 2467 buffer_->Add(index, zone()); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2474 buffer_->Add(UINT32_STACK_SLOT, zone()); | 2478 buffer_->Add(UINT32_STACK_SLOT, zone()); |
| 2475 buffer_->Add(index, zone()); | 2479 buffer_->Add(index, zone()); |
| 2476 } | 2480 } |
| 2477 | 2481 |
| 2478 | 2482 |
| 2479 void Translation::StoreBoolStackSlot(int index) { | 2483 void Translation::StoreBoolStackSlot(int index) { |
| 2480 buffer_->Add(BOOL_STACK_SLOT, zone()); | 2484 buffer_->Add(BOOL_STACK_SLOT, zone()); |
| 2481 buffer_->Add(index, zone()); | 2485 buffer_->Add(index, zone()); |
| 2482 } | 2486 } |
| 2483 | 2487 |
| 2488 void Translation::StoreFloatStackSlot(int index) { |
| 2489 buffer_->Add(FLOAT_STACK_SLOT, zone()); |
| 2490 buffer_->Add(index, zone()); |
| 2491 } |
| 2484 | 2492 |
| 2485 void Translation::StoreDoubleStackSlot(int index) { | 2493 void Translation::StoreDoubleStackSlot(int index) { |
| 2486 buffer_->Add(DOUBLE_STACK_SLOT, zone()); | 2494 buffer_->Add(DOUBLE_STACK_SLOT, zone()); |
| 2487 buffer_->Add(index, zone()); | 2495 buffer_->Add(index, zone()); |
| 2488 } | 2496 } |
| 2489 | 2497 |
| 2490 | 2498 |
| 2491 void Translation::StoreLiteral(int literal_id) { | 2499 void Translation::StoreLiteral(int literal_id) { |
| 2492 buffer_->Add(LITERAL, zone()); | 2500 buffer_->Add(LITERAL, zone()); |
| 2493 buffer_->Add(literal_id, zone()); | 2501 buffer_->Add(literal_id, zone()); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 2514 switch (opcode) { | 2522 switch (opcode) { |
| 2515 case GETTER_STUB_FRAME: | 2523 case GETTER_STUB_FRAME: |
| 2516 case SETTER_STUB_FRAME: | 2524 case SETTER_STUB_FRAME: |
| 2517 case DUPLICATED_OBJECT: | 2525 case DUPLICATED_OBJECT: |
| 2518 case ARGUMENTS_OBJECT: | 2526 case ARGUMENTS_OBJECT: |
| 2519 case CAPTURED_OBJECT: | 2527 case CAPTURED_OBJECT: |
| 2520 case REGISTER: | 2528 case REGISTER: |
| 2521 case INT32_REGISTER: | 2529 case INT32_REGISTER: |
| 2522 case UINT32_REGISTER: | 2530 case UINT32_REGISTER: |
| 2523 case BOOL_REGISTER: | 2531 case BOOL_REGISTER: |
| 2532 case FLOAT_REGISTER: |
| 2524 case DOUBLE_REGISTER: | 2533 case DOUBLE_REGISTER: |
| 2525 case STACK_SLOT: | 2534 case STACK_SLOT: |
| 2526 case INT32_STACK_SLOT: | 2535 case INT32_STACK_SLOT: |
| 2527 case UINT32_STACK_SLOT: | 2536 case UINT32_STACK_SLOT: |
| 2528 case BOOL_STACK_SLOT: | 2537 case BOOL_STACK_SLOT: |
| 2538 case FLOAT_STACK_SLOT: |
| 2529 case DOUBLE_STACK_SLOT: | 2539 case DOUBLE_STACK_SLOT: |
| 2530 case LITERAL: | 2540 case LITERAL: |
| 2531 case COMPILED_STUB_FRAME: | 2541 case COMPILED_STUB_FRAME: |
| 2532 case TAIL_CALLER_FRAME: | 2542 case TAIL_CALLER_FRAME: |
| 2533 return 1; | 2543 return 1; |
| 2534 case BEGIN: | 2544 case BEGIN: |
| 2535 case ARGUMENTS_ADAPTOR_FRAME: | 2545 case ARGUMENTS_ADAPTOR_FRAME: |
| 2536 case CONSTRUCT_STUB_FRAME: | 2546 case CONSTRUCT_STUB_FRAME: |
| 2537 return 2; | 2547 return 2; |
| 2538 case JS_FRAME: | 2548 case JS_FRAME: |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2809 // static | 2819 // static |
| 2810 TranslatedValue TranslatedValue::NewDuplicateObject(TranslatedState* container, | 2820 TranslatedValue TranslatedValue::NewDuplicateObject(TranslatedState* container, |
| 2811 int id) { | 2821 int id) { |
| 2812 TranslatedValue slot(container, kDuplicatedObject); | 2822 TranslatedValue slot(container, kDuplicatedObject); |
| 2813 slot.materialization_info_ = {id, -1}; | 2823 slot.materialization_info_ = {id, -1}; |
| 2814 return slot; | 2824 return slot; |
| 2815 } | 2825 } |
| 2816 | 2826 |
| 2817 | 2827 |
| 2818 // static | 2828 // static |
| 2829 TranslatedValue TranslatedValue::NewFloat(TranslatedState* container, |
| 2830 float value) { |
| 2831 TranslatedValue slot(container, kFloat); |
| 2832 slot.float_value_ = value; |
| 2833 return slot; |
| 2834 } |
| 2835 |
| 2836 // static |
| 2819 TranslatedValue TranslatedValue::NewDouble(TranslatedState* container, | 2837 TranslatedValue TranslatedValue::NewDouble(TranslatedState* container, |
| 2820 double value) { | 2838 double value) { |
| 2821 TranslatedValue slot(container, kDouble); | 2839 TranslatedValue slot(container, kDouble); |
| 2822 slot.double_value_ = value; | 2840 slot.double_value_ = value; |
| 2823 return slot; | 2841 return slot; |
| 2824 } | 2842 } |
| 2825 | 2843 |
| 2826 | 2844 |
| 2827 // static | 2845 // static |
| 2828 TranslatedValue TranslatedValue::NewInt32(TranslatedState* container, | 2846 TranslatedValue TranslatedValue::NewInt32(TranslatedState* container, |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2879 DCHECK_EQ(kInt32, kind()); | 2897 DCHECK_EQ(kInt32, kind()); |
| 2880 return int32_value_; | 2898 return int32_value_; |
| 2881 } | 2899 } |
| 2882 | 2900 |
| 2883 | 2901 |
| 2884 uint32_t TranslatedValue::uint32_value() const { | 2902 uint32_t TranslatedValue::uint32_value() const { |
| 2885 DCHECK(kind() == kUInt32 || kind() == kBoolBit); | 2903 DCHECK(kind() == kUInt32 || kind() == kBoolBit); |
| 2886 return uint32_value_; | 2904 return uint32_value_; |
| 2887 } | 2905 } |
| 2888 | 2906 |
| 2907 float TranslatedValue::float_value() const { |
| 2908 DCHECK_EQ(kFloat, kind()); |
| 2909 return float_value_; |
| 2910 } |
| 2889 | 2911 |
| 2890 double TranslatedValue::double_value() const { | 2912 double TranslatedValue::double_value() const { |
| 2891 DCHECK_EQ(kDouble, kind()); | 2913 DCHECK_EQ(kDouble, kind()); |
| 2892 return double_value_; | 2914 return double_value_; |
| 2893 } | 2915 } |
| 2894 | 2916 |
| 2895 | 2917 |
| 2896 int TranslatedValue::object_length() const { | 2918 int TranslatedValue::object_length() const { |
| 2897 DCHECK(kind() == kArgumentsObject || kind() == kCapturedObject); | 2919 DCHECK(kind() == kArgumentsObject || kind() == kCapturedObject); |
| 2898 return materialization_info_.length_; | 2920 return materialization_info_.length_; |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2957 Handle<Object> result; | 2979 Handle<Object> result; |
| 2958 // If we already have a value, then get it. | 2980 // If we already have a value, then get it. |
| 2959 if (value_.ToHandle(&result)) return result; | 2981 if (value_.ToHandle(&result)) return result; |
| 2960 | 2982 |
| 2961 // Otherwise we have to materialize. | 2983 // Otherwise we have to materialize. |
| 2962 switch (kind()) { | 2984 switch (kind()) { |
| 2963 case TranslatedValue::kTagged: | 2985 case TranslatedValue::kTagged: |
| 2964 case TranslatedValue::kInt32: | 2986 case TranslatedValue::kInt32: |
| 2965 case TranslatedValue::kUInt32: | 2987 case TranslatedValue::kUInt32: |
| 2966 case TranslatedValue::kBoolBit: | 2988 case TranslatedValue::kBoolBit: |
| 2989 case TranslatedValue::kFloat: |
| 2967 case TranslatedValue::kDouble: { | 2990 case TranslatedValue::kDouble: { |
| 2968 MaterializeSimple(); | 2991 MaterializeSimple(); |
| 2969 return value_.ToHandleChecked(); | 2992 return value_.ToHandleChecked(); |
| 2970 } | 2993 } |
| 2971 | 2994 |
| 2972 case TranslatedValue::kArgumentsObject: | 2995 case TranslatedValue::kArgumentsObject: |
| 2973 case TranslatedValue::kCapturedObject: | 2996 case TranslatedValue::kCapturedObject: |
| 2974 case TranslatedValue::kDuplicatedObject: | 2997 case TranslatedValue::kDuplicatedObject: |
| 2975 return container_->MaterializeObjectAt(object_index()); | 2998 return container_->MaterializeObjectAt(object_index()); |
| 2976 | 2999 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 2998 switch (kind()) { | 3021 switch (kind()) { |
| 2999 case kInt32: { | 3022 case kInt32: { |
| 3000 value_ = Handle<Object>(isolate()->factory()->NewNumber(int32_value())); | 3023 value_ = Handle<Object>(isolate()->factory()->NewNumber(int32_value())); |
| 3001 return; | 3024 return; |
| 3002 } | 3025 } |
| 3003 | 3026 |
| 3004 case kUInt32: | 3027 case kUInt32: |
| 3005 value_ = Handle<Object>(isolate()->factory()->NewNumber(uint32_value())); | 3028 value_ = Handle<Object>(isolate()->factory()->NewNumber(uint32_value())); |
| 3006 return; | 3029 return; |
| 3007 | 3030 |
| 3031 case kFloat: |
| 3032 value_ = Handle<Object>(isolate()->factory()->NewNumber(float_value())); |
| 3033 return; |
| 3034 |
| 3008 case kDouble: | 3035 case kDouble: |
| 3009 value_ = Handle<Object>(isolate()->factory()->NewNumber(double_value())); | 3036 value_ = Handle<Object>(isolate()->factory()->NewNumber(double_value())); |
| 3010 return; | 3037 return; |
| 3011 | 3038 |
| 3012 case kCapturedObject: | 3039 case kCapturedObject: |
| 3013 case kDuplicatedObject: | 3040 case kDuplicatedObject: |
| 3014 case kArgumentsObject: | 3041 case kArgumentsObject: |
| 3015 case kInvalid: | 3042 case kInvalid: |
| 3016 case kTagged: | 3043 case kTagged: |
| 3017 case kBoolBit: | 3044 case kBoolBit: |
| (...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3274 } | 3301 } |
| 3275 | 3302 |
| 3276 case Translation::BEGIN: | 3303 case Translation::BEGIN: |
| 3277 case Translation::DUPLICATED_OBJECT: | 3304 case Translation::DUPLICATED_OBJECT: |
| 3278 case Translation::ARGUMENTS_OBJECT: | 3305 case Translation::ARGUMENTS_OBJECT: |
| 3279 case Translation::CAPTURED_OBJECT: | 3306 case Translation::CAPTURED_OBJECT: |
| 3280 case Translation::REGISTER: | 3307 case Translation::REGISTER: |
| 3281 case Translation::INT32_REGISTER: | 3308 case Translation::INT32_REGISTER: |
| 3282 case Translation::UINT32_REGISTER: | 3309 case Translation::UINT32_REGISTER: |
| 3283 case Translation::BOOL_REGISTER: | 3310 case Translation::BOOL_REGISTER: |
| 3311 case Translation::FLOAT_REGISTER: |
| 3284 case Translation::DOUBLE_REGISTER: | 3312 case Translation::DOUBLE_REGISTER: |
| 3285 case Translation::STACK_SLOT: | 3313 case Translation::STACK_SLOT: |
| 3286 case Translation::INT32_STACK_SLOT: | 3314 case Translation::INT32_STACK_SLOT: |
| 3287 case Translation::UINT32_STACK_SLOT: | 3315 case Translation::UINT32_STACK_SLOT: |
| 3288 case Translation::BOOL_STACK_SLOT: | 3316 case Translation::BOOL_STACK_SLOT: |
| 3317 case Translation::FLOAT_STACK_SLOT: |
| 3289 case Translation::DOUBLE_STACK_SLOT: | 3318 case Translation::DOUBLE_STACK_SLOT: |
| 3290 case Translation::LITERAL: | 3319 case Translation::LITERAL: |
| 3291 break; | 3320 break; |
| 3292 } | 3321 } |
| 3293 FATAL("We should never get here - unexpected deopt info."); | 3322 FATAL("We should never get here - unexpected deopt info."); |
| 3294 return TranslatedFrame::InvalidFrame(); | 3323 return TranslatedFrame::InvalidFrame(); |
| 3295 } | 3324 } |
| 3296 | 3325 |
| 3297 | 3326 |
| 3298 // static | 3327 // static |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3405 int input_reg = iterator->Next(); | 3434 int input_reg = iterator->Next(); |
| 3406 if (registers == nullptr) return TranslatedValue::NewInvalid(this); | 3435 if (registers == nullptr) return TranslatedValue::NewInvalid(this); |
| 3407 intptr_t value = registers->GetRegister(input_reg); | 3436 intptr_t value = registers->GetRegister(input_reg); |
| 3408 if (trace_file != nullptr) { | 3437 if (trace_file != nullptr) { |
| 3409 PrintF(trace_file, "%" V8PRIdPTR " ; %s (bool)", value, | 3438 PrintF(trace_file, "%" V8PRIdPTR " ; %s (bool)", value, |
| 3410 converter.NameOfCPURegister(input_reg)); | 3439 converter.NameOfCPURegister(input_reg)); |
| 3411 } | 3440 } |
| 3412 return TranslatedValue::NewBool(this, static_cast<uint32_t>(value)); | 3441 return TranslatedValue::NewBool(this, static_cast<uint32_t>(value)); |
| 3413 } | 3442 } |
| 3414 | 3443 |
| 3444 case Translation::FLOAT_REGISTER: { |
| 3445 int input_reg = iterator->Next(); |
| 3446 if (registers == nullptr) return TranslatedValue::NewInvalid(this); |
| 3447 float value = registers->GetFloatRegister(input_reg); |
| 3448 if (trace_file != nullptr) { |
| 3449 PrintF(trace_file, "%e ; %s (float)", value, |
| 3450 FloatRegister::from_code(input_reg).ToString()); |
| 3451 } |
| 3452 return TranslatedValue::NewFloat(this, value); |
| 3453 } |
| 3454 |
| 3415 case Translation::DOUBLE_REGISTER: { | 3455 case Translation::DOUBLE_REGISTER: { |
| 3416 int input_reg = iterator->Next(); | 3456 int input_reg = iterator->Next(); |
| 3417 if (registers == nullptr) return TranslatedValue::NewInvalid(this); | 3457 if (registers == nullptr) return TranslatedValue::NewInvalid(this); |
| 3418 double value = registers->GetDoubleRegister(input_reg); | 3458 double value = registers->GetDoubleRegister(input_reg); |
| 3419 if (trace_file != nullptr) { | 3459 if (trace_file != nullptr) { |
| 3420 PrintF(trace_file, "%e ; %s (bool)", value, | 3460 PrintF(trace_file, "%e ; %s (double)", value, |
| 3421 DoubleRegister::from_code(input_reg).ToString()); | 3461 DoubleRegister::from_code(input_reg).ToString()); |
| 3422 } | 3462 } |
| 3423 return TranslatedValue::NewDouble(this, value); | 3463 return TranslatedValue::NewDouble(this, value); |
| 3424 } | 3464 } |
| 3425 | 3465 |
| 3426 case Translation::STACK_SLOT: { | 3466 case Translation::STACK_SLOT: { |
| 3427 int slot_offset = | 3467 int slot_offset = |
| 3428 OptimizedFrame::StackSlotOffsetRelativeToFp(iterator->Next()); | 3468 OptimizedFrame::StackSlotOffsetRelativeToFp(iterator->Next()); |
| 3429 intptr_t value = *(reinterpret_cast<intptr_t*>(fp + slot_offset)); | 3469 intptr_t value = *(reinterpret_cast<intptr_t*>(fp + slot_offset)); |
| 3430 if (trace_file != nullptr) { | 3470 if (trace_file != nullptr) { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3462 int slot_offset = | 3502 int slot_offset = |
| 3463 OptimizedFrame::StackSlotOffsetRelativeToFp(iterator->Next()); | 3503 OptimizedFrame::StackSlotOffsetRelativeToFp(iterator->Next()); |
| 3464 uint32_t value = GetUInt32Slot(fp, slot_offset); | 3504 uint32_t value = GetUInt32Slot(fp, slot_offset); |
| 3465 if (trace_file != nullptr) { | 3505 if (trace_file != nullptr) { |
| 3466 PrintF(trace_file, "%u ; (bool) [fp %c %d] ", value, | 3506 PrintF(trace_file, "%u ; (bool) [fp %c %d] ", value, |
| 3467 slot_offset < 0 ? '-' : '+', std::abs(slot_offset)); | 3507 slot_offset < 0 ? '-' : '+', std::abs(slot_offset)); |
| 3468 } | 3508 } |
| 3469 return TranslatedValue::NewBool(this, value); | 3509 return TranslatedValue::NewBool(this, value); |
| 3470 } | 3510 } |
| 3471 | 3511 |
| 3512 case Translation::FLOAT_STACK_SLOT: { |
| 3513 int slot_offset = |
| 3514 OptimizedFrame::StackSlotOffsetRelativeToFp(iterator->Next()); |
| 3515 float value = ReadFloatValue(fp + slot_offset); |
| 3516 if (trace_file != nullptr) { |
| 3517 PrintF(trace_file, "%e ; (float) [fp %c %d] ", value, |
| 3518 slot_offset < 0 ? '-' : '+', std::abs(slot_offset)); |
| 3519 } |
| 3520 return TranslatedValue::NewFloat(this, value); |
| 3521 } |
| 3522 |
| 3472 case Translation::DOUBLE_STACK_SLOT: { | 3523 case Translation::DOUBLE_STACK_SLOT: { |
| 3473 int slot_offset = | 3524 int slot_offset = |
| 3474 OptimizedFrame::StackSlotOffsetRelativeToFp(iterator->Next()); | 3525 OptimizedFrame::StackSlotOffsetRelativeToFp(iterator->Next()); |
| 3475 double value = ReadDoubleValue(fp + slot_offset); | 3526 double value = ReadDoubleValue(fp + slot_offset); |
| 3476 if (trace_file != nullptr) { | 3527 if (trace_file != nullptr) { |
| 3477 PrintF(trace_file, "%e ; (double) [fp %c %d] ", value, | 3528 PrintF(trace_file, "%e ; (double) [fp %c %d] ", value, |
| 3478 slot_offset < 0 ? '-' : '+', std::abs(slot_offset)); | 3529 slot_offset < 0 ? '-' : '+', std::abs(slot_offset)); |
| 3479 } | 3530 } |
| 3480 return TranslatedValue::NewDouble(this, value); | 3531 return TranslatedValue::NewDouble(this, value); |
| 3481 } | 3532 } |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3609 CHECK(static_cast<size_t>(*value_index) < frame->values_.size()); | 3660 CHECK(static_cast<size_t>(*value_index) < frame->values_.size()); |
| 3610 | 3661 |
| 3611 TranslatedValue* slot = &(frame->values_[*value_index]); | 3662 TranslatedValue* slot = &(frame->values_[*value_index]); |
| 3612 (*value_index)++; | 3663 (*value_index)++; |
| 3613 | 3664 |
| 3614 switch (slot->kind()) { | 3665 switch (slot->kind()) { |
| 3615 case TranslatedValue::kTagged: | 3666 case TranslatedValue::kTagged: |
| 3616 case TranslatedValue::kInt32: | 3667 case TranslatedValue::kInt32: |
| 3617 case TranslatedValue::kUInt32: | 3668 case TranslatedValue::kUInt32: |
| 3618 case TranslatedValue::kBoolBit: | 3669 case TranslatedValue::kBoolBit: |
| 3670 case TranslatedValue::kFloat: |
| 3619 case TranslatedValue::kDouble: { | 3671 case TranslatedValue::kDouble: { |
| 3620 slot->MaterializeSimple(); | 3672 slot->MaterializeSimple(); |
| 3621 Handle<Object> value = slot->GetValue(); | 3673 Handle<Object> value = slot->GetValue(); |
| 3622 if (value->IsMutableHeapNumber()) { | 3674 if (value->IsMutableHeapNumber()) { |
| 3623 HeapNumber::cast(*value)->set_map(isolate()->heap()->heap_number_map()); | 3675 HeapNumber::cast(*value)->set_map(isolate()->heap()->heap_number_map()); |
| 3624 } | 3676 } |
| 3625 return value; | 3677 return value; |
| 3626 } | 3678 } |
| 3627 | 3679 |
| 3628 case TranslatedValue::kArgumentsObject: { | 3680 case TranslatedValue::kArgumentsObject: { |
| (...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3962 CHECK(value_info->IsMaterializedObject()); | 4014 CHECK(value_info->IsMaterializedObject()); |
| 3963 | 4015 |
| 3964 value_info->value_ = | 4016 value_info->value_ = |
| 3965 Handle<Object>(previously_materialized_objects->get(i), isolate_); | 4017 Handle<Object>(previously_materialized_objects->get(i), isolate_); |
| 3966 } | 4018 } |
| 3967 } | 4019 } |
| 3968 } | 4020 } |
| 3969 | 4021 |
| 3970 } // namespace internal | 4022 } // namespace internal |
| 3971 } // namespace v8 | 4023 } // namespace v8 |
| OLD | NEW |