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

Side by Side Diff: src/objects.cc

Issue 1250733005: SIMD.js Add the other SIMD Phase 1 types. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 4 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
OLDNEW
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 <iomanip> 5 #include <iomanip>
6 #include <sstream> 6 #include <sstream>
7 7
8 #include "src/v8.h" 8 #include "src/v8.h"
9 9
10 #include "src/accessors.h" 10 #include "src/accessors.h"
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 if (object->IsJSReceiver()) return Handle<JSReceiver>::cast(object); 75 if (object->IsJSReceiver()) return Handle<JSReceiver>::cast(object);
76 Handle<JSFunction> constructor; 76 Handle<JSFunction> constructor;
77 if (object->IsNumber()) { 77 if (object->IsNumber()) {
78 constructor = handle(native_context->number_function(), isolate); 78 constructor = handle(native_context->number_function(), isolate);
79 } else if (object->IsBoolean()) { 79 } else if (object->IsBoolean()) {
80 constructor = handle(native_context->boolean_function(), isolate); 80 constructor = handle(native_context->boolean_function(), isolate);
81 } else if (object->IsString()) { 81 } else if (object->IsString()) {
82 constructor = handle(native_context->string_function(), isolate); 82 constructor = handle(native_context->string_function(), isolate);
83 } else if (object->IsSymbol()) { 83 } else if (object->IsSymbol()) {
84 constructor = handle(native_context->symbol_function(), isolate); 84 constructor = handle(native_context->symbol_function(), isolate);
85 } else if (object->IsFloat32x4()) { 85 } else if (object->IsSimd128Value()) {
86 constructor = handle(native_context->float32x4_function(), isolate); 86 if (object->IsFloat32x4()) {
87 constructor = handle(native_context->float32x4_function(), isolate);
88 } else if (object->IsInt32x4()) {
89 constructor = handle(native_context->int32x4_function(), isolate);
90 } else if (object->IsBool32x4()) {
91 constructor = handle(native_context->bool32x4_function(), isolate);
92 } else if (object->IsInt16x8()) {
93 constructor = handle(native_context->int16x8_function(), isolate);
94 } else if (object->IsBool16x8()) {
95 constructor = handle(native_context->bool16x8_function(), isolate);
96 } else if (object->IsInt8x16()) {
97 constructor = handle(native_context->int8x16_function(), isolate);
98 } else if (object->IsBool8x16()) {
99 constructor = handle(native_context->bool8x16_function(), isolate);
100 } else {
101 UNREACHABLE();
102 return MaybeHandle<JSReceiver>();
rossberg 2015/07/29 14:37:55 Nit: the return here is redundant.
bbudge 2015/07/30 13:46:58 Done.
103 }
87 } else { 104 } else {
88 return MaybeHandle<JSReceiver>(); 105 return MaybeHandle<JSReceiver>();
89 } 106 }
90 Handle<JSObject> result = isolate->factory()->NewJSObject(constructor); 107 Handle<JSObject> result = isolate->factory()->NewJSObject(constructor);
91 Handle<JSValue>::cast(result)->set_value(*object); 108 Handle<JSValue>::cast(result)->set_value(*object);
92 return result; 109 return result;
93 } 110 }
94 111
95 112
96 bool Object::BooleanValue() { 113 bool Object::BooleanValue() {
97 if (IsBoolean()) return IsTrue(); 114 if (IsBoolean()) return IsTrue();
98 if (IsSmi()) return Smi::cast(this)->value() != 0; 115 if (IsSmi()) return Smi::cast(this)->value() != 0;
99 if (IsUndefined() || IsNull()) return false; 116 if (IsUndefined() || IsNull()) return false;
100 if (IsUndetectableObject()) return false; // Undetectable object is false. 117 if (IsUndetectableObject()) return false; // Undetectable object is false.
101 if (IsString()) return String::cast(this)->length() != 0; 118 if (IsString()) return String::cast(this)->length() != 0;
102 if (IsHeapNumber()) return HeapNumber::cast(this)->HeapNumberBooleanValue(); 119 if (IsHeapNumber()) return HeapNumber::cast(this)->HeapNumberBooleanValue();
103 if (IsFloat32x4()) return true; // Simd value types always evaluate to true. 120 if (IsSimd128Value()) return true; // Simd value types evaluate to true.
104 return true; 121 return true;
105 } 122 }
106 123
107 124
108 bool Object::IsCallable() const { 125 bool Object::IsCallable() const {
109 const Object* fun = this; 126 const Object* fun = this;
110 while (fun->IsJSFunctionProxy()) { 127 while (fun->IsJSFunctionProxy()) {
111 fun = JSFunctionProxy::cast(fun)->call_trap(); 128 fun = JSFunctionProxy::cast(fun)->call_trap();
112 } 129 }
113 return fun->IsJSFunction() || 130 return fun->IsJSFunction() ||
(...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 } 639 }
623 if (heap_object->IsString()) { 640 if (heap_object->IsString()) {
624 return context->string_function()->initial_map(); 641 return context->string_function()->initial_map();
625 } 642 }
626 if (heap_object->IsSymbol()) { 643 if (heap_object->IsSymbol()) {
627 return context->symbol_function()->initial_map(); 644 return context->symbol_function()->initial_map();
628 } 645 }
629 if (heap_object->IsBoolean()) { 646 if (heap_object->IsBoolean()) {
630 return context->boolean_function()->initial_map(); 647 return context->boolean_function()->initial_map();
631 } 648 }
632 if (heap_object->IsFloat32x4()) { 649 if (heap_object->IsSimd128Value()) {
633 return context->float32x4_function()->initial_map(); 650 if (heap_object->IsFloat32x4()) {
651 return context->float32x4_function()->initial_map();
652 } else if (heap_object->IsInt32x4()) {
653 return context->int32x4_function()->initial_map();
654 } else if (heap_object->IsBool32x4()) {
655 return context->bool32x4_function()->initial_map();
656 } else if (heap_object->IsInt16x8()) {
657 return context->int16x8_function()->initial_map();
658 } else if (heap_object->IsBool16x8()) {
659 return context->bool16x8_function()->initial_map();
660 } else if (heap_object->IsInt8x16()) {
661 return context->int8x16_function()->initial_map();
662 } else if (heap_object->IsBool8x16()) {
663 return context->bool8x16_function()->initial_map();
664 } else {
665 UNREACHABLE();
666 }
634 } 667 }
635 return isolate->heap()->null_value()->map(); 668 return isolate->heap()->null_value()->map();
636 } 669 }
637 670
638 671
639 Object* Object::GetHash() { 672 Object* Object::GetHash() {
640 Object* hash = GetSimpleHash(); 673 Object* hash = GetSimpleHash();
641 if (hash->IsSmi()) return hash; 674 if (hash->IsSmi()) return hash;
642 675
643 DCHECK(IsJSReceiver()); 676 DCHECK(IsJSReceiver());
(...skipping 19 matching lines...) Expand all
663 return Smi::FromInt(hash & Smi::kMaxValue); 696 return Smi::FromInt(hash & Smi::kMaxValue);
664 } 697 }
665 if (IsName()) { 698 if (IsName()) {
666 uint32_t hash = Name::cast(this)->Hash(); 699 uint32_t hash = Name::cast(this)->Hash();
667 return Smi::FromInt(hash); 700 return Smi::FromInt(hash);
668 } 701 }
669 if (IsOddball()) { 702 if (IsOddball()) {
670 uint32_t hash = Oddball::cast(this)->to_string()->Hash(); 703 uint32_t hash = Oddball::cast(this)->to_string()->Hash();
671 return Smi::FromInt(hash); 704 return Smi::FromInt(hash);
672 } 705 }
673 if (IsFloat32x4()) { 706 if (IsSimd128Value()) {
674 Float32x4* simd = Float32x4::cast(this); 707 uint32_t hash = Simd128Value::cast(this)->Hash();
675 uint32_t seed = v8::internal::kZeroHashSeed;
676 uint32_t hash;
677 hash = ComputeIntegerHash(bit_cast<uint32_t>(simd->get_lane(0)), seed);
678 hash = ComputeIntegerHash(bit_cast<uint32_t>(simd->get_lane(1)), hash * 31);
679 hash = ComputeIntegerHash(bit_cast<uint32_t>(simd->get_lane(2)), hash * 31);
680 hash = ComputeIntegerHash(bit_cast<uint32_t>(simd->get_lane(3)), hash * 31);
681 return Smi::FromInt(hash & Smi::kMaxValue); 708 return Smi::FromInt(hash & Smi::kMaxValue);
682 } 709 }
683 DCHECK(IsJSReceiver()); 710 DCHECK(IsJSReceiver());
684 JSReceiver* receiver = JSReceiver::cast(this); 711 JSReceiver* receiver = JSReceiver::cast(this);
685 return receiver->GetHeap()->undefined_value(); 712 return receiver->GetHeap()->undefined_value();
686 } 713 }
687 714
688 715
689 Handle<Smi> Object::GetOrCreateHash(Isolate* isolate, Handle<Object> object) { 716 Handle<Smi> Object::GetOrCreateHash(Isolate* isolate, Handle<Object> object) {
690 Handle<Object> hash(object->GetSimpleHash(), isolate); 717 Handle<Object> hash(object->GetSimpleHash(), isolate);
691 if (hash->IsSmi()) return Handle<Smi>::cast(hash); 718 if (hash->IsSmi()) return Handle<Smi>::cast(hash);
692 719
693 DCHECK(object->IsJSReceiver()); 720 DCHECK(object->IsJSReceiver());
694 return JSReceiver::GetOrCreateIdentityHash(Handle<JSReceiver>::cast(object)); 721 return JSReceiver::GetOrCreateIdentityHash(Handle<JSReceiver>::cast(object));
695 } 722 }
696 723
697 724
698 bool Object::SameValue(Object* other) { 725 bool Object::SameValue(Object* other) {
699 if (other == this) return true; 726 if (other == this) return true;
700 727
701 // The object is either a number, a name, an odd-ball, 728 // The object is either a number, a name, an odd-ball,
702 // a real JS object, or a Harmony proxy. 729 // a real JS object, or a Harmony proxy.
703 if (IsNumber() && other->IsNumber()) { 730 if (IsNumber() && other->IsNumber()) {
704 return v8::internal::SameValue(Number(), other->Number()); 731 double this_value = Number();
732 double other_value = other->Number();
733 // SameValue(NaN, NaN) is true.
734 if (this_value != other_value) {
735 return std::isnan(this_value) && std::isnan(other_value);
736 }
737 // SameValue(0.0, -0.0) is false.
738 return (std::signbit(this_value) == std::signbit(other_value));
705 } 739 }
706 if (IsString() && other->IsString()) { 740 if (IsString() && other->IsString()) {
707 return String::cast(this)->Equals(String::cast(other)); 741 return String::cast(this)->Equals(String::cast(other));
708 } 742 }
709 if (IsFloat32x4() && other->IsFloat32x4()) { 743 if (IsSimd128Value() && other->IsSimd128Value()) {
710 Float32x4* x = Float32x4::cast(this); 744 if (IsFloat32x4() && other->IsFloat32x4()) {
711 Float32x4* y = Float32x4::cast(other); 745 Float32x4* x = Float32x4::cast(this);
712 return v8::internal::SameValue(x->get_lane(0), y->get_lane(0)) && 746 Float32x4* y = Float32x4::cast(other);
713 v8::internal::SameValue(x->get_lane(1), y->get_lane(1)) && 747 return x->SameValue(y);
714 v8::internal::SameValue(x->get_lane(2), y->get_lane(2)) && 748 } else {
715 v8::internal::SameValue(x->get_lane(3), y->get_lane(3)); 749 Simd128Value* x = Simd128Value::cast(this);
750 Simd128Value* y = Simd128Value::cast(other);
751 return x->map()->instance_type() == y->map()->instance_type() &&
752 x->SameValueZero(y);
753 }
716 } 754 }
717 return false; 755 return false;
718 } 756 }
719 757
720 758
721 bool Object::SameValueZero(Object* other) { 759 bool Object::SameValueZero(Object* other) {
722 if (other == this) return true; 760 if (other == this) return true;
723 761
724 // The object is either a number, a name, an odd-ball, 762 // The object is either a number, a name, an odd-ball,
725 // a real JS object, or a Harmony proxy. 763 // a real JS object, or a Harmony proxy.
726 if (IsNumber() && other->IsNumber()) { 764 if (IsNumber() && other->IsNumber()) {
727 return v8::internal::SameValueZero(Number(), other->Number()); 765 double this_value = Number();
766 double other_value = other->Number();
767 // +0 == -0 is true
768 return this_value == other_value ||
769 (std::isnan(this_value) && std::isnan(other_value));
728 } 770 }
729 if (IsString() && other->IsString()) { 771 if (IsString() && other->IsString()) {
730 return String::cast(this)->Equals(String::cast(other)); 772 return String::cast(this)->Equals(String::cast(other));
731 } 773 }
732 if (IsFloat32x4() && other->IsFloat32x4()) { 774 if (IsSimd128Value() && other->IsSimd128Value()) {
733 Float32x4* x = Float32x4::cast(this); 775 if (IsFloat32x4() && other->IsFloat32x4()) {
734 Float32x4* y = Float32x4::cast(other); 776 Float32x4* x = Float32x4::cast(this);
735 return v8::internal::SameValueZero(x->get_lane(0), y->get_lane(0)) && 777 Float32x4* y = Float32x4::cast(other);
736 v8::internal::SameValueZero(x->get_lane(1), y->get_lane(1)) && 778 return x->SameValueZero(y);
737 v8::internal::SameValueZero(x->get_lane(2), y->get_lane(2)) && 779 } else {
738 v8::internal::SameValueZero(x->get_lane(3), y->get_lane(3)); 780 Simd128Value* x = Simd128Value::cast(this);
781 Simd128Value* y = Simd128Value::cast(other);
782 return x->map()->instance_type() == y->map()->instance_type() &&
783 x->SameValueZero(y);
784 }
739 } 785 }
740 return false; 786 return false;
741 } 787 }
742 788
743 789
744 void Object::ShortPrint(FILE* out) { 790 void Object::ShortPrint(FILE* out) {
745 OFStream os(out); 791 OFStream os(out);
746 os << Brief(this); 792 os << Brief(this);
747 } 793 }
748 794
(...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after
1340 HeapNumber::cast(this)->HeapNumberPrint(os); 1386 HeapNumber::cast(this)->HeapNumberPrint(os);
1341 os << ">"; 1387 os << ">";
1342 break; 1388 break;
1343 } 1389 }
1344 case MUTABLE_HEAP_NUMBER_TYPE: { 1390 case MUTABLE_HEAP_NUMBER_TYPE: {
1345 os << "<MutableNumber: "; 1391 os << "<MutableNumber: ";
1346 HeapNumber::cast(this)->HeapNumberPrint(os); 1392 HeapNumber::cast(this)->HeapNumberPrint(os);
1347 os << '>'; 1393 os << '>';
1348 break; 1394 break;
1349 } 1395 }
1350 case FLOAT32X4_TYPE: { 1396 case FLOAT32X4_TYPE:
1351 os << "<Float32x4: "; 1397 os << "<Float32x4>";
1352 Float32x4::cast(this)->Float32x4Print(os);
1353 os << ">";
1354 break; 1398 break;
1355 } 1399 case INT32X4_TYPE:
1400 os << "<Int32x4>";
1401 break;
1402 case BOOL32X4_TYPE:
1403 os << "<Bool32x4>";
1404 break;
1405 case INT16X8_TYPE:
1406 os << "<Int16x8>";
1407 break;
1408 case BOOL16X8_TYPE:
1409 os << "<Bool16x8>";
1410 break;
1411 case INT8X16_TYPE:
1412 os << "<Int8x16>";
1413 break;
1414 case BOOL8X16_TYPE:
1415 os << "<Bool8x16>";
1416 break;
1356 case JS_PROXY_TYPE: 1417 case JS_PROXY_TYPE:
1357 os << "<JSProxy>"; 1418 os << "<JSProxy>";
1358 break; 1419 break;
1359 case JS_FUNCTION_PROXY_TYPE: 1420 case JS_FUNCTION_PROXY_TYPE:
1360 os << "<JSFunctionProxy>"; 1421 os << "<JSFunctionProxy>";
1361 break; 1422 break;
1362 case FOREIGN_TYPE: 1423 case FOREIGN_TYPE:
1363 os << "<Foreign>"; 1424 os << "<Foreign>";
1364 break; 1425 break;
1365 case CELL_TYPE: { 1426 case CELL_TYPE: {
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
1490 case WEAK_CELL_TYPE: 1551 case WEAK_CELL_TYPE:
1491 WeakCell::BodyDescriptor::IterateBody(this, v); 1552 WeakCell::BodyDescriptor::IterateBody(this, v);
1492 break; 1553 break;
1493 case SYMBOL_TYPE: 1554 case SYMBOL_TYPE:
1494 Symbol::BodyDescriptor::IterateBody(this, v); 1555 Symbol::BodyDescriptor::IterateBody(this, v);
1495 break; 1556 break;
1496 1557
1497 case HEAP_NUMBER_TYPE: 1558 case HEAP_NUMBER_TYPE:
1498 case MUTABLE_HEAP_NUMBER_TYPE: 1559 case MUTABLE_HEAP_NUMBER_TYPE:
1499 case FLOAT32X4_TYPE: 1560 case FLOAT32X4_TYPE:
1561 case INT32X4_TYPE:
1562 case BOOL32X4_TYPE:
1563 case INT16X8_TYPE:
1564 case BOOL16X8_TYPE:
1565 case INT8X16_TYPE:
1566 case BOOL8X16_TYPE:
1500 case FILLER_TYPE: 1567 case FILLER_TYPE:
1501 case BYTE_ARRAY_TYPE: 1568 case BYTE_ARRAY_TYPE:
1502 case BYTECODE_ARRAY_TYPE: 1569 case BYTECODE_ARRAY_TYPE:
1503 case FREE_SPACE_TYPE: 1570 case FREE_SPACE_TYPE:
1504 break; 1571 break;
1505 1572
1506 #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \ 1573 #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \
1507 case FIXED_##TYPE##_ARRAY_TYPE: \ 1574 case FIXED_##TYPE##_ARRAY_TYPE: \
1508 reinterpret_cast<FixedTypedArrayBase*>(this) \ 1575 reinterpret_cast<FixedTypedArrayBase*>(this) \
1509 ->FixedTypedArrayBaseIterateBody(v); \ 1576 ->FixedTypedArrayBaseIterateBody(v); \
(...skipping 28 matching lines...) Expand all
1538 bool HeapNumber::HeapNumberBooleanValue() { 1605 bool HeapNumber::HeapNumberBooleanValue() {
1539 return DoubleToBoolean(value()); 1606 return DoubleToBoolean(value());
1540 } 1607 }
1541 1608
1542 1609
1543 void HeapNumber::HeapNumberPrint(std::ostream& os) { // NOLINT 1610 void HeapNumber::HeapNumberPrint(std::ostream& os) { // NOLINT
1544 os << value(); 1611 os << value();
1545 } 1612 }
1546 1613
1547 1614
1548 void Float32x4::Float32x4Print(std::ostream& os) { // NOLINT 1615 #define FIELD_ADDR_CONST(p, offset) \
1549 char arr[100]; 1616 (reinterpret_cast<const byte*>(p) + offset - kHeapObjectTag)
1550 Vector<char> buffer(arr, arraysize(arr)); 1617
1551 os << std::string(DoubleToCString(get_lane(0), buffer)) << ", " 1618 #define READ_INT32_FIELD(p, offset) \
1552 << std::string(DoubleToCString(get_lane(1), buffer)) << ", " 1619 (*reinterpret_cast<const int32_t*>(FIELD_ADDR_CONST(p, offset)))
1553 << std::string(DoubleToCString(get_lane(2), buffer)) << ", " 1620
1554 << std::string(DoubleToCString(get_lane(3), buffer)); 1621 #define READ_INT64_FIELD(p, offset) \
1622 (*reinterpret_cast<const int64_t*>(FIELD_ADDR_CONST(p, offset)))
1623
1624
1625 bool Simd128Value::BitwiseEquals(const Simd128Value* other) const {
1626 return READ_INT64_FIELD(this, kValueOffset) ==
1627 READ_INT64_FIELD(other, kValueOffset) &&
1628 READ_INT64_FIELD(this, kValueOffset + kInt64Size) ==
1629 READ_INT64_FIELD(other, kValueOffset + kInt64Size);
1555 } 1630 }
1556 1631
1557 1632
1633 uint32_t Simd128Value::Hash() const {
1634 uint32_t seed = v8::internal::kZeroHashSeed;
1635 uint32_t hash;
1636 hash = ComputeIntegerHash(READ_INT32_FIELD(this, kValueOffset), seed);
1637 hash = ComputeIntegerHash(
1638 READ_INT32_FIELD(this, kValueOffset + 1 * kInt32Size), hash * 31);
1639 hash = ComputeIntegerHash(
1640 READ_INT32_FIELD(this, kValueOffset + 2 * kInt32Size), hash * 31);
1641 hash = ComputeIntegerHash(
1642 READ_INT32_FIELD(this, kValueOffset + 3 * kInt32Size), hash * 31);
1643 return hash;
1644 }
1645
1646
1647 bool Float32x4::SameValue(const Float32x4* other) const {
1648 for (int i = 0; i < 4; i++) {
1649 float x = this->get_lane(i);
1650 float y = other->get_lane(i);
1651 // Implements the ES5 SameValue operation for floating point types.
1652 // http://www.ecma-international.org/ecma-262/6.0/#sec-samevalue
1653 if (x != y && !(std::isnan(x) && std::isnan(y))) return false;
1654 if (std::signbit(x) != std::signbit(y)) return false;
1655 }
1656 return true;
1657 }
1658
1659
1660 bool Float32x4::SameValueZero(const Float32x4* other) const {
1661 for (int i = 0; i < 4; i++) {
1662 float x = this->get_lane(i);
1663 float y = other->get_lane(i);
1664 // Implements the ES6 SameValueZero operation for floating point types.
1665 // http://www.ecma-international.org/ecma-262/6.0/#sec-samevaluezero
1666 if (x != y && !(std::isnan(x) && std::isnan(y))) return false;
1667 // SameValueZero doesn't distinguish between 0 and -0.
1668 }
1669 return true;
1670 }
1671
1672
1558 String* JSReceiver::class_name() { 1673 String* JSReceiver::class_name() {
1559 if (IsJSFunction() || IsJSFunctionProxy()) { 1674 if (IsJSFunction() || IsJSFunctionProxy()) {
1560 return GetHeap()->Function_string(); 1675 return GetHeap()->Function_string();
1561 } 1676 }
1562 Object* maybe_constructor = map()->GetConstructor(); 1677 Object* maybe_constructor = map()->GetConstructor();
1563 if (maybe_constructor->IsJSFunction()) { 1678 if (maybe_constructor->IsJSFunction()) {
1564 JSFunction* constructor = JSFunction::cast(maybe_constructor); 1679 JSFunction* constructor = JSFunction::cast(maybe_constructor);
1565 return String::cast(constructor->shared()->instance_class_name()); 1680 return String::cast(constructor->shared()->instance_class_name());
1566 } 1681 }
1567 // If the constructor is not present, return "Object". 1682 // If the constructor is not present, return "Object".
(...skipping 14192 matching lines...) Expand 10 before | Expand all | Expand 10 after
15760 if (cell->value() != *new_value) { 15875 if (cell->value() != *new_value) {
15761 cell->set_value(*new_value); 15876 cell->set_value(*new_value);
15762 Isolate* isolate = cell->GetIsolate(); 15877 Isolate* isolate = cell->GetIsolate();
15763 cell->dependent_code()->DeoptimizeDependentCodeGroup( 15878 cell->dependent_code()->DeoptimizeDependentCodeGroup(
15764 isolate, DependentCode::kPropertyCellChangedGroup); 15879 isolate, DependentCode::kPropertyCellChangedGroup);
15765 } 15880 }
15766 } 15881 }
15767 15882
15768 } // namespace internal 15883 } // namespace internal
15769 } // namespace v8 15884 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698