Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "include/dart_api.h" | 5 #include "include/dart_api.h" |
| 6 | 6 |
| 7 #include "vm/bigint_operations.h" | 7 #include "vm/bigint_operations.h" |
| 8 #include "vm/class_finalizer.h" | 8 #include "vm/class_finalizer.h" |
| 9 #include "vm/compiler.h" | 9 #include "vm/compiler.h" |
| 10 #include "vm/dart.h" | 10 #include "vm/dart.h" |
| (...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 266 *peer = data->peer(); | 266 *peer = data->peer(); |
| 267 return true; | 267 return true; |
| 268 } | 268 } |
| 269 case kExternalTwoByteStringCid: { | 269 case kExternalTwoByteStringCid: { |
| 270 RawExternalTwoByteString* raw_string = | 270 RawExternalTwoByteString* raw_string = |
| 271 reinterpret_cast<RawExternalTwoByteString*>(raw_obj)->ptr(); | 271 reinterpret_cast<RawExternalTwoByteString*>(raw_obj)->ptr(); |
| 272 ExternalStringData<uint16_t>* data = raw_string->external_data_; | 272 ExternalStringData<uint16_t>* data = raw_string->external_data_; |
| 273 *peer = data->peer(); | 273 *peer = data->peer(); |
| 274 return true; | 274 return true; |
| 275 } | 275 } |
| 276 case kExternalFourByteStringCid: { | |
| 277 RawExternalFourByteString* raw_string = | |
| 278 reinterpret_cast<RawExternalFourByteString*>(raw_obj)->ptr(); | |
| 279 ExternalStringData<uint32_t>* data = raw_string->external_data_; | |
| 280 *peer = data->peer(); | |
| 281 return true; | |
| 282 } | |
| 283 } | 276 } |
| 284 return false; | 277 return false; |
| 285 } | 278 } |
| 286 | 279 |
| 287 | 280 |
| 288 // When we want to return a handle to a type to the user, we handle | 281 // When we want to return a handle to a type to the user, we handle |
| 289 // class-types differently than some other types. | 282 // class-types differently than some other types. |
| 290 static Dart_Handle TypeToHandle(Isolate* isolate, | 283 static Dart_Handle TypeToHandle(Isolate* isolate, |
| 291 const char* function_name, | 284 const char* function_name, |
| 292 const AbstractType& type) { | 285 const AbstractType& type) { |
| (...skipping 1222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1515 | 1508 |
| 1516 | 1509 |
| 1517 // --- Strings --- | 1510 // --- Strings --- |
| 1518 | 1511 |
| 1519 | 1512 |
| 1520 DART_EXPORT bool Dart_IsString(Dart_Handle object) { | 1513 DART_EXPORT bool Dart_IsString(Dart_Handle object) { |
| 1521 return RawObject::IsStringClassId(Api::ClassId(object)); | 1514 return RawObject::IsStringClassId(Api::ClassId(object)); |
| 1522 } | 1515 } |
| 1523 | 1516 |
| 1524 | 1517 |
| 1525 DART_EXPORT bool Dart_IsString8(Dart_Handle object) { | 1518 DART_EXPORT bool Dart_IsAsciiString(Dart_Handle object) { |
| 1526 return RawObject::IsOneByteStringClassId(Api::ClassId(object)); | 1519 return RawObject::IsOneByteStringClassId(Api::ClassId(object)); |
| 1527 } | 1520 } |
| 1528 | 1521 |
| 1529 | 1522 |
| 1530 DART_EXPORT bool Dart_IsString16(Dart_Handle object) { | |
| 1531 return RawObject::IsTwoByteStringClassId(Api::ClassId(object)); | |
| 1532 } | |
| 1533 | |
| 1534 | |
| 1535 DART_EXPORT Dart_Handle Dart_StringLength(Dart_Handle str, intptr_t* len) { | 1523 DART_EXPORT Dart_Handle Dart_StringLength(Dart_Handle str, intptr_t* len) { |
| 1536 Isolate* isolate = Isolate::Current(); | 1524 Isolate* isolate = Isolate::Current(); |
| 1537 DARTSCOPE(isolate); | 1525 DARTSCOPE(isolate); |
| 1538 const String& str_obj = Api::UnwrapStringHandle(isolate, str); | 1526 const String& str_obj = Api::UnwrapStringHandle(isolate, str); |
| 1539 if (str_obj.IsNull()) { | 1527 if (str_obj.IsNull()) { |
| 1540 RETURN_TYPE_ERROR(isolate, str, String); | 1528 RETURN_TYPE_ERROR(isolate, str, String); |
| 1541 } | 1529 } |
| 1542 *len = str_obj.Length(); | 1530 *len = str_obj.Length(); |
| 1543 return Api::Success(isolate); | 1531 return Api::Success(isolate); |
| 1544 } | 1532 } |
| 1545 | 1533 |
| 1546 | 1534 |
| 1547 DART_EXPORT Dart_Handle Dart_NewString(const char* str) { | 1535 DART_EXPORT Dart_Handle Dart_NewStringFromCString(const char* str) { |
| 1548 Isolate* isolate = Isolate::Current(); | 1536 Isolate* isolate = Isolate::Current(); |
| 1549 DARTSCOPE(isolate); | 1537 DARTSCOPE(isolate); |
| 1550 if (str == NULL) { | 1538 if (str == NULL) { |
| 1551 RETURN_NULL_ERROR(str); | 1539 RETURN_NULL_ERROR(str); |
| 1552 } | 1540 } |
| 1553 if (!Utf8::IsValid(str)) { | |
| 1554 return Api::NewError("%s expects argument 'str' to be valid UTF-8.", | |
| 1555 CURRENT_FUNC); | |
| 1556 } | |
| 1557 return Api::NewHandle(isolate, String::New(str)); | 1541 return Api::NewHandle(isolate, String::New(str)); |
| 1558 } | 1542 } |
| 1559 | 1543 |
| 1560 | 1544 |
| 1561 DART_EXPORT Dart_Handle Dart_NewString8(const uint8_t* codepoints, | 1545 DART_EXPORT Dart_Handle Dart_NewStringFromUTF8(const uint8_t* utf8_array, |
| 1562 intptr_t length) { | 1546 intptr_t length) { |
| 1563 Isolate* isolate = Isolate::Current(); | 1547 Isolate* isolate = Isolate::Current(); |
| 1564 DARTSCOPE(isolate); | 1548 DARTSCOPE(isolate); |
| 1565 if (codepoints == NULL && length != 0) { | 1549 if (utf8_array == NULL && length != 0) { |
| 1566 RETURN_NULL_ERROR(codepoints); | 1550 RETURN_NULL_ERROR(utf8_array); |
| 1567 } | 1551 } |
| 1568 CHECK_LENGTH(length, String::kMaxElements); | 1552 CHECK_LENGTH(length, String::kMaxElements); |
| 1569 return Api::NewHandle(isolate, String::New(codepoints, length)); | 1553 if (!Utf8::IsValid(utf8_array, length)) { |
| 1554 return Api::NewError("%s expects argument 'str' to be valid UTF-8.", | |
| 1555 CURRENT_FUNC); | |
| 1556 } | |
| 1557 return Api::NewHandle(isolate, String::New(utf8_array, length)); | |
| 1570 } | 1558 } |
| 1571 | 1559 |
| 1572 | 1560 |
| 1573 DART_EXPORT Dart_Handle Dart_NewString16(const uint16_t* codepoints, | 1561 DART_EXPORT Dart_Handle Dart_NewStringFromUTF16(const uint16_t* utf16_array, |
| 1574 intptr_t length) { | 1562 intptr_t length) { |
| 1575 Isolate* isolate = Isolate::Current(); | 1563 Isolate* isolate = Isolate::Current(); |
| 1576 DARTSCOPE(isolate); | 1564 DARTSCOPE(isolate); |
| 1577 if (codepoints == NULL && length != 0) { | 1565 if (utf16_array == NULL && length != 0) { |
| 1578 RETURN_NULL_ERROR(codepoints); | 1566 RETURN_NULL_ERROR(utf16_array); |
| 1579 } | 1567 } |
| 1580 CHECK_LENGTH(length, String::kMaxElements); | 1568 CHECK_LENGTH(length, String::kMaxElements); |
| 1581 return Api::NewHandle(isolate, String::New(codepoints, length)); | 1569 return Api::NewHandle(isolate, String::New(utf16_array, length)); |
| 1582 } | 1570 } |
| 1583 | 1571 |
| 1584 | 1572 |
| 1585 DART_EXPORT Dart_Handle Dart_NewString32(const uint32_t* codepoints, | 1573 DART_EXPORT Dart_Handle Dart_NewStringFromUTF32(const uint32_t* utf32_array, |
| 1586 intptr_t length) { | 1574 intptr_t length) { |
| 1587 Isolate* isolate = Isolate::Current(); | 1575 Isolate* isolate = Isolate::Current(); |
| 1588 DARTSCOPE(isolate); | 1576 DARTSCOPE(isolate); |
| 1589 if (codepoints == NULL && length != 0) { | 1577 if (utf32_array == NULL && length != 0) { |
| 1590 RETURN_NULL_ERROR(codepoints); | 1578 RETURN_NULL_ERROR(utf32_array); |
| 1591 } | 1579 } |
| 1592 CHECK_LENGTH(length, String::kMaxElements); | 1580 CHECK_LENGTH(length, String::kMaxElements); |
| 1593 return Api::NewHandle(isolate, String::New(codepoints, length)); | 1581 return Api::NewHandle(isolate, String::New(utf32_array, length)); |
| 1594 } | 1582 } |
| 1595 | 1583 |
| 1596 | 1584 |
| 1597 DART_EXPORT bool Dart_IsExternalString(Dart_Handle object) { | 1585 DART_EXPORT bool Dart_IsExternalString(Dart_Handle object) { |
| 1598 return RawObject::IsExternalStringClassId(Api::ClassId(object)); | 1586 return RawObject::IsExternalStringClassId(Api::ClassId(object)); |
| 1599 } | 1587 } |
| 1600 | 1588 |
| 1601 | 1589 |
| 1602 DART_EXPORT Dart_Handle Dart_ExternalStringGetPeer(Dart_Handle object, | 1590 DART_EXPORT Dart_Handle Dart_ExternalStringGetPeer(Dart_Handle object, |
| 1603 void** peer) { | 1591 void** peer) { |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 1616 RETURN_TYPE_ERROR(Isolate::Current(), object, String); | 1604 RETURN_TYPE_ERROR(Isolate::Current(), object, String); |
| 1617 } else { | 1605 } else { |
| 1618 return | 1606 return |
| 1619 Api::NewError( | 1607 Api::NewError( |
| 1620 "%s expects argument 'object' to be an external String.", | 1608 "%s expects argument 'object' to be an external String.", |
| 1621 CURRENT_FUNC); | 1609 CURRENT_FUNC); |
| 1622 } | 1610 } |
| 1623 } | 1611 } |
| 1624 | 1612 |
| 1625 | 1613 |
| 1626 DART_EXPORT Dart_Handle Dart_NewExternalString8(const uint8_t* codepoints, | 1614 DART_EXPORT Dart_Handle Dart_NewExternalUTF8String(const uint8_t* utf8_array, |
| 1627 intptr_t length, | 1615 intptr_t length, |
| 1628 void* peer, | 1616 void* peer, |
| 1629 Dart_PeerFinalizer callback) { | 1617 Dart_PeerFinalizer cback) { |
| 1630 Isolate* isolate = Isolate::Current(); | 1618 Isolate* isolate = Isolate::Current(); |
| 1631 DARTSCOPE(isolate); | 1619 DARTSCOPE(isolate); |
| 1632 if (codepoints == NULL && length != 0) { | 1620 if (utf8_array == NULL && length != 0) { |
| 1633 RETURN_NULL_ERROR(codepoints); | 1621 RETURN_NULL_ERROR(utf8_array); |
| 1634 } | 1622 } |
| 1635 CHECK_LENGTH(length, String::kMaxElements); | 1623 CHECK_LENGTH(length, String::kMaxElements); |
| 1636 return Api::NewHandle( | 1624 return Api::NewHandle(isolate, |
| 1637 isolate, String::NewExternal(codepoints, length, peer, callback)); | 1625 String::NewExternal(utf8_array, length, peer, cback)); |
| 1638 } | 1626 } |
| 1639 | 1627 |
| 1640 | 1628 |
| 1641 DART_EXPORT Dart_Handle Dart_NewExternalString16(const uint16_t* codepoints, | 1629 DART_EXPORT Dart_Handle Dart_NewExternalUTF16String(const uint16_t* utf16_array, |
| 1642 intptr_t length, | 1630 intptr_t length, |
| 1643 void* peer, | 1631 void* peer, |
| 1644 Dart_PeerFinalizer callback) { | 1632 Dart_PeerFinalizer cback) { |
| 1645 Isolate* isolate = Isolate::Current(); | 1633 Isolate* isolate = Isolate::Current(); |
| 1646 DARTSCOPE(isolate); | 1634 DARTSCOPE(isolate); |
| 1647 if (codepoints == NULL && length != 0) { | 1635 if (utf16_array == NULL && length != 0) { |
| 1648 RETURN_NULL_ERROR(codepoints); | 1636 RETURN_NULL_ERROR(utf16_array); |
| 1649 } | 1637 } |
| 1650 CHECK_LENGTH(length, String::kMaxElements); | 1638 CHECK_LENGTH(length, String::kMaxElements); |
| 1651 return Api::NewHandle( | 1639 return Api::NewHandle(isolate, |
| 1652 isolate, String::NewExternal(codepoints, length, peer, callback)); | 1640 String::NewExternal(utf16_array, length, peer, cback)); |
| 1653 } | 1641 } |
| 1654 | 1642 |
| 1655 | 1643 |
| 1656 DART_EXPORT Dart_Handle Dart_NewExternalString32(const uint32_t* codepoints, | 1644 DART_EXPORT Dart_Handle Dart_StringToCString(Dart_Handle object, |
| 1657 intptr_t length, | 1645 const char** cstr) { |
| 1658 void* peer, | |
| 1659 Dart_PeerFinalizer callback) { | |
| 1660 Isolate* isolate = Isolate::Current(); | 1646 Isolate* isolate = Isolate::Current(); |
| 1661 DARTSCOPE(isolate); | 1647 DARTSCOPE(isolate); |
| 1662 if (codepoints == NULL && length != 0) { | 1648 const String& str_obj = Api::UnwrapStringHandle(isolate, object); |
| 1663 RETURN_NULL_ERROR(codepoints); | 1649 if (str_obj.IsNull()) { |
| 1650 RETURN_TYPE_ERROR(isolate, object, String); | |
| 1664 } | 1651 } |
| 1665 CHECK_LENGTH(length, String::kMaxElements); | 1652 intptr_t string_length = Utf8::Length(str_obj); |
| 1666 return Api::NewHandle( | 1653 char* res = Api::TopScope(isolate)->zone()->Alloc<char>(string_length + 1); |
| 1667 isolate, String::NewExternal(codepoints, length, peer, callback)); | 1654 if (res == NULL) { |
| 1668 } | 1655 return Api::NewError("Unable to allocate memory"); |
| 1669 | |
| 1670 | |
| 1671 DART_EXPORT Dart_Handle Dart_StringGet8(Dart_Handle str, | |
| 1672 uint8_t* codepoints, | |
| 1673 intptr_t* length) { | |
| 1674 Isolate* isolate = Isolate::Current(); | |
| 1675 DARTSCOPE(isolate); | |
| 1676 const OneByteString& str_obj = Api::UnwrapOneByteStringHandle(isolate, str); | |
| 1677 if (str_obj.IsNull()) { | |
| 1678 RETURN_TYPE_ERROR(isolate, str, String8); | |
| 1679 } | 1656 } |
| 1680 intptr_t str_len = str_obj.Length(); | 1657 const char* string_value = str_obj.ToCString(); |
| 1681 intptr_t copy_len = (str_len > *length) ? *length : str_len; | 1658 memmove(res, string_value, string_length + 1); |
| 1682 for (intptr_t i = 0; i < copy_len; i++) { | 1659 ASSERT(res[string_length] == '\0'); |
| 1683 codepoints[i] = static_cast<uint8_t>(str_obj.CharAt(i)); | 1660 *cstr = res; |
| 1684 } | |
| 1685 *length= copy_len; | |
| 1686 return Api::Success(isolate); | 1661 return Api::Success(isolate); |
| 1687 } | 1662 } |
| 1688 | 1663 |
| 1689 | 1664 |
| 1690 DART_EXPORT Dart_Handle Dart_StringGet16(Dart_Handle str, | 1665 DART_EXPORT Dart_Handle Dart_StringToUTF8(Dart_Handle str, |
| 1691 uint16_t* codepoints, | 1666 uint8_t* utf8_array, |
| 1692 intptr_t* length) { | 1667 intptr_t* length) { |
| 1693 Isolate* isolate = Isolate::Current(); | 1668 Isolate* isolate = Isolate::Current(); |
| 1694 DARTSCOPE(isolate); | 1669 DARTSCOPE(isolate); |
| 1695 const String& str_obj = Api::UnwrapStringHandle(isolate, str); | 1670 const String& str_obj = Api::UnwrapStringHandle(isolate, str); |
| 1696 if (str_obj.IsNull()) { | 1671 if (str_obj.IsNull()) { |
| 1697 RETURN_TYPE_ERROR(isolate, str, String); | 1672 RETURN_TYPE_ERROR(isolate, str, String); |
| 1698 } | 1673 } |
| 1699 if (str_obj.CharSize() > String::kTwoByteChar) { | 1674 intptr_t str_len = str_obj.Length(); |
|
Bill Hesse
2012/11/01 11:35:02
This seems totally wrong, unless we restrict the f
siva
2012/11/01 20:04:11
Yes that should be
intptr_t str_len = Utf8::Length
| |
| 1700 return Api::NewError("Object is not a String16 or String8"); | 1675 if (str_len > *length) { |
| 1676 return Api::NewError("Input array is not large enough to hold the result"); | |
| 1701 } | 1677 } |
| 1702 intptr_t str_len = str_obj.Length(); | 1678 str_obj.ToUTF8(utf8_array, str_len); |
| 1703 intptr_t copy_len = (str_len > *length) ? *length : str_len; | 1679 *length= str_len; |
| 1704 for (intptr_t i = 0; i < copy_len; i++) { | |
| 1705 codepoints[i] = static_cast<uint16_t>(str_obj.CharAt(i)); | |
| 1706 } | |
| 1707 *length = copy_len; | |
| 1708 return Api::Success(isolate); | 1680 return Api::Success(isolate); |
| 1709 } | 1681 } |
| 1710 | 1682 |
| 1711 | 1683 |
| 1712 DART_EXPORT Dart_Handle Dart_StringGet32(Dart_Handle str, | 1684 DART_EXPORT Dart_Handle Dart_StringToUTF16(Dart_Handle str, |
| 1713 uint32_t* codepoints, | 1685 uint16_t* utf16_array, |
| 1714 intptr_t* length) { | 1686 intptr_t* length) { |
| 1715 Isolate* isolate = Isolate::Current(); | 1687 Isolate* isolate = Isolate::Current(); |
| 1716 DARTSCOPE(isolate); | 1688 DARTSCOPE(isolate); |
| 1717 const String& str_obj = Api::UnwrapStringHandle(isolate, str); | 1689 const String& str_obj = Api::UnwrapStringHandle(isolate, str); |
| 1718 if (str_obj.IsNull()) { | 1690 if (str_obj.IsNull()) { |
| 1719 RETURN_TYPE_ERROR(isolate, str, String); | 1691 RETURN_TYPE_ERROR(isolate, str, String); |
| 1720 } | 1692 } |
| 1721 intptr_t str_len = str_obj.Length(); | 1693 intptr_t str_len = str_obj.Length(); |
| 1722 intptr_t copy_len = (str_len > *length) ? *length : str_len; | 1694 intptr_t copy_len = (str_len > *length) ? *length : str_len; |
| 1723 for (intptr_t i = 0; i < copy_len; i++) { | 1695 for (intptr_t i = 0; i < copy_len; i++) { |
| 1724 codepoints[i] = static_cast<uint32_t>(str_obj.CharAt(i)); | 1696 utf16_array[i] = static_cast<uint16_t>(str_obj.CharAt(i)); |
| 1725 } | 1697 } |
| 1726 *length = copy_len; | 1698 *length = copy_len; |
| 1727 return Api::Success(isolate); | 1699 return Api::Success(isolate); |
| 1728 } | 1700 } |
| 1729 | 1701 |
| 1730 | 1702 |
| 1731 DART_EXPORT Dart_Handle Dart_StringToCString(Dart_Handle object, | |
| 1732 const char** result) { | |
| 1733 Isolate* isolate = Isolate::Current(); | |
| 1734 DARTSCOPE(isolate); | |
| 1735 const String& str_obj = Api::UnwrapStringHandle(isolate, object); | |
| 1736 if (str_obj.IsNull()) { | |
| 1737 RETURN_TYPE_ERROR(isolate, object, String); | |
| 1738 } | |
| 1739 intptr_t string_length = Utf8::Length(str_obj); | |
| 1740 char* res = Api::TopScope(isolate)->zone()->Alloc<char>(string_length + 1); | |
| 1741 if (res == NULL) { | |
| 1742 return Api::NewError("Unable to allocate memory"); | |
| 1743 } | |
| 1744 const char* string_value = str_obj.ToCString(); | |
| 1745 memmove(res, string_value, string_length + 1); | |
| 1746 ASSERT(res[string_length] == '\0'); | |
| 1747 *result = res; | |
| 1748 return Api::Success(isolate); | |
| 1749 } | |
| 1750 | |
| 1751 | |
| 1752 DART_EXPORT Dart_Handle Dart_StringToBytes(Dart_Handle object, | |
| 1753 const uint8_t** bytes, | |
| 1754 intptr_t *length) { | |
| 1755 Isolate* isolate = Isolate::Current(); | |
| 1756 DARTSCOPE(isolate); | |
| 1757 const String& str = Api::UnwrapStringHandle(isolate, object); | |
| 1758 if (str.IsNull()) { | |
| 1759 RETURN_TYPE_ERROR(isolate, object, String); | |
| 1760 } | |
| 1761 if (bytes == NULL) { | |
| 1762 RETURN_NULL_ERROR(bytes); | |
| 1763 } | |
| 1764 if (length == NULL) { | |
| 1765 RETURN_NULL_ERROR(length); | |
| 1766 } | |
| 1767 const char* cstring = str.ToCString(); | |
| 1768 *length = Utf8::Length(str); | |
| 1769 uint8_t* result = Api::TopScope(isolate)->zone()->Alloc<uint8_t>(*length); | |
| 1770 if (result == NULL) { | |
| 1771 return Api::NewError("Unable to allocate memory"); | |
| 1772 } | |
| 1773 memmove(result, cstring, *length); | |
| 1774 *bytes = result; | |
| 1775 return Api::Success(isolate); | |
| 1776 } | |
| 1777 | |
| 1778 | |
| 1779 // --- Lists --- | 1703 // --- Lists --- |
| 1780 | 1704 |
| 1781 | 1705 |
| 1782 static RawInstance* GetListInstance(Isolate* isolate, const Object& obj) { | 1706 static RawInstance* GetListInstance(Isolate* isolate, const Object& obj) { |
| 1783 if (obj.IsInstance()) { | 1707 if (obj.IsInstance()) { |
| 1784 const Instance& instance = Instance::Cast(obj); | 1708 const Instance& instance = Instance::Cast(obj); |
| 1785 const Type& type = | 1709 const Type& type = |
| 1786 Type::Handle(isolate, isolate->object_store()->list_interface()); | 1710 Type::Handle(isolate, isolate->object_store()->list_interface()); |
| 1787 Error& malformed_type_error = Error::Handle(isolate); | 1711 Error& malformed_type_error = Error::Handle(isolate); |
| 1788 if (instance.IsInstanceOf(type, | 1712 if (instance.IsInstanceOf(type, |
| (...skipping 2748 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4537 } | 4461 } |
| 4538 { | 4462 { |
| 4539 NoGCScope no_gc; | 4463 NoGCScope no_gc; |
| 4540 RawObject* raw_obj = obj.raw(); | 4464 RawObject* raw_obj = obj.raw(); |
| 4541 isolate->heap()->SetPeer(raw_obj, peer); | 4465 isolate->heap()->SetPeer(raw_obj, peer); |
| 4542 } | 4466 } |
| 4543 return Api::Success(isolate); | 4467 return Api::Success(isolate); |
| 4544 } | 4468 } |
| 4545 | 4469 |
| 4546 } // namespace dart | 4470 } // namespace dart |
| OLD | NEW |