OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 1593 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1604 // Copy the data to align it. | 1604 // Copy the data to align it. |
1605 unsigned* deserialized_data = i::NewArray<unsigned>(deserialized_data_length); | 1605 unsigned* deserialized_data = i::NewArray<unsigned>(deserialized_data_length); |
1606 i::CopyBytes(reinterpret_cast<char*>(deserialized_data), | 1606 i::CopyBytes(reinterpret_cast<char*>(deserialized_data), |
1607 data, static_cast<size_t>(length)); | 1607 data, static_cast<size_t>(length)); |
1608 | 1608 |
1609 return new i::ScriptDataImpl( | 1609 return new i::ScriptDataImpl( |
1610 i::Vector<unsigned>(deserialized_data, deserialized_data_length)); | 1610 i::Vector<unsigned>(deserialized_data, deserialized_data_length)); |
1611 } | 1611 } |
1612 | 1612 |
1613 | 1613 |
1614 // --- S c r i p t --- | 1614 // --- S c r i p t s --- |
1615 | 1615 |
1616 | 1616 |
1617 Local<Script> Script::New(v8::Handle<String> source, | 1617 // Internally, UnboundScript is a SharedFunctionInfo, and Script is a |
1618 v8::ScriptOrigin* origin, | 1618 // JSFunction. |
1619 v8::ScriptData* pre_data) { | 1619 |
1620 i::Handle<i::String> str = Utils::OpenHandle(*source); | 1620 ScriptCompiler::Source::Source(Local<String> string, const ScriptOrigin& origin, |
1621 i::Isolate* isolate = str->GetIsolate(); | 1621 const CachedData& data) |
1622 ON_BAILOUT(isolate, "v8::Script::New()", return Local<Script>()); | 1622 : source_string(string), |
1623 LOG_API(isolate, "Script::New"); | 1623 resource_name(origin.ResourceName()), |
1624 ENTER_V8(isolate); | 1624 resource_line_offset(origin.ResourceLineOffset()), |
1625 i::SharedFunctionInfo* raw_result = NULL; | 1625 resource_column_offset(origin.ResourceColumnOffset()), |
1626 { i::HandleScope scope(isolate); | 1626 resource_is_shared_cross_origin(origin.ResourceIsSharedCrossOrigin()), |
1627 i::Handle<i::Object> name_obj; | 1627 cached_data(data) {} |
1628 int line_offset = 0; | 1628 |
1629 int column_offset = 0; | 1629 |
1630 bool is_shared_cross_origin = false; | 1630 ScriptCompiler::Source::Source(Local<String> string, |
1631 if (origin != NULL) { | 1631 const CachedData& data) |
1632 if (!origin->ResourceName().IsEmpty()) { | 1632 : source_string(string), cached_data(data) {} |
1633 name_obj = Utils::OpenHandle(*origin->ResourceName()); | 1633 |
1634 } | 1634 |
1635 if (!origin->ResourceLineOffset().IsEmpty()) { | 1635 Local<Script> UnboundScript::BindToCurrentContext() { |
1636 line_offset = static_cast<int>(origin->ResourceLineOffset()->Value()); | 1636 i::Handle<i::HeapObject> obj = |
1637 } | 1637 i::Handle<i::HeapObject>::cast(Utils::OpenHandle(this)); |
1638 if (!origin->ResourceColumnOffset().IsEmpty()) { | 1638 i::Handle<i::SharedFunctionInfo> |
1639 column_offset = | 1639 function_info(i::SharedFunctionInfo::cast(*obj), obj->GetIsolate()); |
1640 static_cast<int>(origin->ResourceColumnOffset()->Value()); | 1640 i::Handle<i::JSFunction> function = |
1641 } | 1641 obj->GetIsolate()->factory()->NewFunctionFromSharedFunctionInfo( |
1642 if (!origin->ResourceIsSharedCrossOrigin().IsEmpty()) { | 1642 function_info, obj->GetIsolate()->global_context()); |
1643 v8::Isolate* v8_isolate = reinterpret_cast<v8::Isolate*>(isolate); | 1643 return ToApiHandle<Script>(function); |
1644 is_shared_cross_origin = | |
1645 origin->ResourceIsSharedCrossOrigin() == v8::True(v8_isolate); | |
1646 } | |
1647 } | |
1648 EXCEPTION_PREAMBLE(isolate); | |
1649 i::ScriptDataImpl* pre_data_impl = | |
1650 static_cast<i::ScriptDataImpl*>(pre_data); | |
1651 // We assert that the pre-data is sane, even though we can actually | |
1652 // handle it if it turns out not to be in release mode. | |
1653 ASSERT(pre_data_impl == NULL || pre_data_impl->SanityCheck()); | |
1654 // If the pre-data isn't sane we simply ignore it | |
1655 if (pre_data_impl != NULL && !pre_data_impl->SanityCheck()) { | |
1656 pre_data_impl = NULL; | |
1657 } | |
1658 i::Handle<i::SharedFunctionInfo> result = | |
1659 i::Compiler::CompileScript(str, | |
1660 name_obj, | |
1661 line_offset, | |
1662 column_offset, | |
1663 is_shared_cross_origin, | |
1664 isolate->global_context(), | |
1665 NULL, | |
1666 pre_data_impl, | |
1667 i::NOT_NATIVES_CODE); | |
1668 has_pending_exception = result.is_null(); | |
1669 EXCEPTION_BAILOUT_CHECK(isolate, Local<Script>()); | |
1670 raw_result = *result; | |
1671 } | |
1672 i::Handle<i::SharedFunctionInfo> result(raw_result, isolate); | |
1673 return ToApiHandle<Script>(result); | |
1674 } | 1644 } |
1675 | 1645 |
1676 | 1646 |
1677 Local<Script> Script::New(v8::Handle<String> source, | 1647 int UnboundScript::GetId() { |
1678 v8::Handle<Value> file_name) { | 1648 i::Handle<i::HeapObject> obj = |
1679 ScriptOrigin origin(file_name); | 1649 i::Handle<i::HeapObject>::cast(Utils::OpenHandle(this)); |
1680 return New(source, &origin); | 1650 i::Isolate* isolate = obj->GetIsolate(); |
| 1651 ON_BAILOUT(isolate, "v8::UnboundScript::GetId()", return -1); |
| 1652 LOG_API(isolate, "v8::UnboundScript::GetId"); |
| 1653 { |
| 1654 i::HandleScope scope(isolate); |
| 1655 i::Handle<i::SharedFunctionInfo> function_info( |
| 1656 i::SharedFunctionInfo::cast(*obj)); |
| 1657 i::Handle<i::Script> script(i::Script::cast(function_info->script())); |
| 1658 return script->id()->value(); |
| 1659 } |
1681 } | 1660 } |
1682 | 1661 |
1683 | 1662 |
1684 Local<Script> Script::Compile(v8::Handle<String> source, | 1663 int UnboundScript::GetLineNumber(int code_pos) { |
1685 v8::ScriptOrigin* origin, | 1664 i::Handle<i::HeapObject> obj = |
1686 v8::ScriptData* pre_data) { | 1665 i::Handle<i::HeapObject>::cast(Utils::OpenHandle(this)); |
1687 i::Handle<i::String> str = Utils::OpenHandle(*source); | 1666 i::Isolate* isolate = obj->GetIsolate(); |
1688 i::Isolate* isolate = str->GetIsolate(); | 1667 ON_BAILOUT(isolate, "v8::UnboundScript::GetLineNumber()", return -1); |
1689 ON_BAILOUT(isolate, "v8::Script::Compile()", return Local<Script>()); | 1668 LOG_API(isolate, "UnboundScript::GetLineNumber"); |
1690 LOG_API(isolate, "Script::Compile"); | 1669 if (obj->IsScript()) { |
1691 ENTER_V8(isolate); | 1670 i::Handle<i::Script> script(i::Script::cast(*obj)); |
1692 Local<Script> generic = New(source, origin, pre_data); | 1671 return i::GetScriptLineNumber(script, code_pos); |
1693 if (generic.IsEmpty()) | 1672 } else { |
1694 return generic; | 1673 return -1; |
1695 i::Handle<i::Object> obj = Utils::OpenHandle(*generic); | 1674 } |
1696 i::Handle<i::SharedFunctionInfo> function = | |
1697 i::Handle<i::SharedFunctionInfo>(i::SharedFunctionInfo::cast(*obj)); | |
1698 i::Handle<i::JSFunction> result = | |
1699 isolate->factory()->NewFunctionFromSharedFunctionInfo( | |
1700 function, | |
1701 isolate->global_context()); | |
1702 return ToApiHandle<Script>(result); | |
1703 } | 1675 } |
1704 | 1676 |
1705 | 1677 |
1706 Local<Script> Script::Compile(v8::Handle<String> source, | 1678 Handle<Value> UnboundScript::GetScriptName() { |
1707 v8::Handle<Value> file_name) { | 1679 i::Handle<i::HeapObject> obj = |
1708 ScriptOrigin origin(file_name); | 1680 i::Handle<i::HeapObject>::cast(Utils::OpenHandle(this)); |
1709 return Compile(source, &origin); | 1681 i::Isolate* isolate = obj->GetIsolate(); |
| 1682 ON_BAILOUT(isolate, "v8::UnboundScript::GetName()", |
| 1683 return Handle<String>()); |
| 1684 LOG_API(isolate, "UnboundScript::GetName"); |
| 1685 if (obj->IsScript()) { |
| 1686 i::Object* name = i::Script::cast(*obj)->name(); |
| 1687 return Utils::ToLocal(i::Handle<i::Object>(name, isolate)); |
| 1688 } else { |
| 1689 return Handle<String>(); |
| 1690 } |
1710 } | 1691 } |
1711 | 1692 |
1712 | 1693 |
1713 Local<Value> Script::Run() { | 1694 Local<Value> Script::Run() { |
1714 // If execution is terminating, Compile(script)->Run() requires this check. | 1695 // If execution is terminating, Compile(..)->Run() requires this |
| 1696 // check. |
1715 if (this == NULL) return Local<Value>(); | 1697 if (this == NULL) return Local<Value>(); |
1716 i::Handle<i::HeapObject> obj = | 1698 i::Handle<i::HeapObject> obj = |
1717 i::Handle<i::HeapObject>::cast(Utils::OpenHandle(this)); | 1699 i::Handle<i::HeapObject>::cast(Utils::OpenHandle(this)); |
1718 i::Isolate* isolate = obj->GetIsolate(); | 1700 i::Isolate* isolate = obj->GetIsolate(); |
1719 ON_BAILOUT(isolate, "v8::Script::Run()", return Local<Value>()); | 1701 ON_BAILOUT(isolate, "v8::Script::Run()", return Local<Value>()); |
1720 LOG_API(isolate, "Script::Run"); | 1702 LOG_API(isolate, "Script::Run"); |
1721 ENTER_V8(isolate); | 1703 ENTER_V8(isolate); |
1722 i::Logger::TimerEventScope timer_scope( | 1704 i::Logger::TimerEventScope timer_scope( |
1723 isolate, i::Logger::TimerEventScope::v8_execute); | 1705 isolate, i::Logger::TimerEventScope::v8_execute); |
1724 i::Object* raw_result = NULL; | 1706 i::Object* raw_result = NULL; |
1725 { | 1707 { |
1726 i::HandleScope scope(isolate); | 1708 i::HandleScope scope(isolate); |
1727 i::Handle<i::JSFunction> fun; | 1709 i::Handle<i::JSFunction> fun = |
1728 if (obj->IsSharedFunctionInfo()) { | 1710 i::Handle<i::JSFunction>(i::JSFunction::cast(*obj), isolate); |
1729 i::Handle<i::SharedFunctionInfo> | |
1730 function_info(i::SharedFunctionInfo::cast(*obj), isolate); | |
1731 fun = isolate->factory()->NewFunctionFromSharedFunctionInfo( | |
1732 function_info, isolate->global_context()); | |
1733 } else { | |
1734 fun = i::Handle<i::JSFunction>(i::JSFunction::cast(*obj), isolate); | |
1735 } | |
1736 EXCEPTION_PREAMBLE(isolate); | 1711 EXCEPTION_PREAMBLE(isolate); |
1737 i::Handle<i::Object> receiver( | 1712 i::Handle<i::Object> receiver( |
1738 isolate->context()->global_proxy(), isolate); | 1713 isolate->context()->global_proxy(), isolate); |
1739 i::Handle<i::Object> result = i::Execution::Call( | 1714 i::Handle<i::Object> result = i::Execution::Call( |
1740 isolate, fun, receiver, 0, NULL, &has_pending_exception); | 1715 isolate, fun, receiver, 0, NULL, &has_pending_exception); |
1741 EXCEPTION_BAILOUT_CHECK_DO_CALLBACK(isolate, Local<Value>()); | 1716 EXCEPTION_BAILOUT_CHECK_DO_CALLBACK(isolate, Local<Value>()); |
1742 raw_result = *result; | 1717 raw_result = *result; |
1743 } | 1718 } |
1744 i::Handle<i::Object> result(raw_result, isolate); | 1719 i::Handle<i::Object> result(raw_result, isolate); |
1745 return Utils::ToLocal(result); | 1720 return Utils::ToLocal(result); |
1746 } | 1721 } |
1747 | 1722 |
1748 | 1723 |
1749 static i::Handle<i::SharedFunctionInfo> OpenScript(Script* script) { | 1724 Local<UnboundScript> Script::GetUnboundScript() { |
1750 i::Handle<i::Object> obj = Utils::OpenHandle(script); | 1725 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
1751 i::Handle<i::SharedFunctionInfo> result; | 1726 return ToApiHandle<UnboundScript>( |
1752 if (obj->IsSharedFunctionInfo()) { | 1727 i::Handle<i::SharedFunctionInfo>(i::JSFunction::cast(*obj)->shared())); |
1753 result = | |
1754 i::Handle<i::SharedFunctionInfo>(i::SharedFunctionInfo::cast(*obj)); | |
1755 } else { | |
1756 result = | |
1757 i::Handle<i::SharedFunctionInfo>(i::JSFunction::cast(*obj)->shared()); | |
1758 } | |
1759 return result; | |
1760 } | 1728 } |
1761 | 1729 |
1762 | 1730 |
1763 int Script::GetId() { | 1731 Local<UnboundScript> ScriptCompiler::CompileUnbound( |
1764 i::Handle<i::HeapObject> obj = | 1732 Isolate* v8_isolate, |
1765 i::Handle<i::HeapObject>::cast(Utils::OpenHandle(this)); | 1733 const Source& source, |
1766 i::Isolate* isolate = obj->GetIsolate(); | 1734 CompileOptions options) { |
1767 ON_BAILOUT(isolate, "v8::Script::Id()", return -1); | 1735 // FIXME(marja): This function cannot yet create cached data (if options | |
1768 LOG_API(isolate, "Script::Id"); | 1736 // produce_data_to_cache is true), but the PreCompile function is still there |
1769 { | 1737 // for doing it. |
1770 i::HandleScope scope(isolate); | 1738 i::Handle<i::String> str = Utils::OpenHandle(*(source.source_string)); |
1771 i::Handle<i::SharedFunctionInfo> function_info = OpenScript(this); | 1739 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(v8_isolate); |
1772 i::Handle<i::Script> script(i::Script::cast(function_info->script())); | 1740 ON_BAILOUT(isolate, "v8::ScriptCompiler::CompileUnbound()", |
1773 return script->id()->value(); | 1741 return Local<UnboundScript>()); |
| 1742 LOG_API(isolate, "ScriptCompiler::CompileUnbound"); |
| 1743 ENTER_V8(isolate); |
| 1744 i::SharedFunctionInfo* raw_result = NULL; |
| 1745 { i::HandleScope scope(isolate); |
| 1746 i::Handle<i::Object> name_obj; |
| 1747 int line_offset = 0; |
| 1748 int column_offset = 0; |
| 1749 bool is_shared_cross_origin = false; |
| 1750 if (!source.resource_name.IsEmpty()) { |
| 1751 name_obj = Utils::OpenHandle(*source.resource_name); |
| 1752 } |
| 1753 if (!source.resource_line_offset.IsEmpty()) { |
| 1754 line_offset = static_cast<int>(source.resource_line_offset->Value()); |
| 1755 } |
| 1756 if (!source.resource_column_offset.IsEmpty()) { |
| 1757 column_offset = |
| 1758 static_cast<int>(source.resource_column_offset->Value()); |
| 1759 } |
| 1760 if (!source.resource_is_shared_cross_origin.IsEmpty()) { |
| 1761 v8::Isolate* v8_isolate = reinterpret_cast<v8::Isolate*>(isolate); |
| 1762 is_shared_cross_origin = |
| 1763 source.resource_is_shared_cross_origin == v8::True(v8_isolate); |
| 1764 } |
| 1765 EXCEPTION_PREAMBLE(isolate); |
| 1766 i::ScriptDataImpl* pre_data_impl = NULL; |
| 1767 if (source.cached_data.data) { |
| 1768 // FIXME(marja): Make compiler use CachedData directly. |
| 1769 pre_data_impl = static_cast<i::ScriptDataImpl*>(ScriptData::New( |
| 1770 reinterpret_cast<const char*>(source.cached_data.data), |
| 1771 source.cached_data.length)); |
| 1772 } |
| 1773 // We assert that the pre-data is sane, even though we can actually |
| 1774 // handle it if it turns out not to be in release mode. |
| 1775 ASSERT(pre_data_impl == NULL || pre_data_impl->SanityCheck()); |
| 1776 // If the pre-data isn't sane we simply ignore it |
| 1777 if (pre_data_impl != NULL && !pre_data_impl->SanityCheck()) { |
| 1778 delete pre_data_impl; |
| 1779 pre_data_impl = NULL; |
| 1780 } |
| 1781 i::Handle<i::SharedFunctionInfo> result = |
| 1782 i::Compiler::CompileScript(str, |
| 1783 name_obj, |
| 1784 line_offset, |
| 1785 column_offset, |
| 1786 is_shared_cross_origin, |
| 1787 isolate->global_context(), |
| 1788 NULL, |
| 1789 pre_data_impl, |
| 1790 i::NOT_NATIVES_CODE); |
| 1791 has_pending_exception = result.is_null(); |
| 1792 EXCEPTION_BAILOUT_CHECK(isolate, Local<UnboundScript>()); |
| 1793 raw_result = *result; |
| 1794 delete pre_data_impl; |
1774 } | 1795 } |
| 1796 i::Handle<i::SharedFunctionInfo> result(raw_result, isolate); |
| 1797 return ToApiHandle<UnboundScript>(result); |
1775 } | 1798 } |
1776 | 1799 |
1777 | 1800 |
1778 int Script::GetLineNumber(int code_pos) { | 1801 Local<Script> ScriptCompiler::Compile( |
1779 i::Handle<i::HeapObject> obj = | 1802 Isolate* v8_isolate, |
1780 i::Handle<i::HeapObject>::cast(Utils::OpenHandle(this)); | 1803 const Source& source, |
1781 i::Isolate* isolate = obj->GetIsolate(); | 1804 CompileOptions options) { |
1782 ON_BAILOUT(isolate, "v8::Script::GetLineNumber()", return -1); | 1805 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(v8_isolate); |
1783 LOG_API(isolate, "Script::GetLineNumber"); | 1806 ON_BAILOUT(isolate, "v8::ScriptCompiler::Compile()", |
1784 if (obj->IsScript()) { | 1807 return Local<Script>()); |
1785 i::Handle<i::Script> script = i::Handle<i::Script>(i::Script::cast(*obj)); | 1808 LOG_API(isolate, "ScriptCompiler::CompiletBound()"); |
1786 return i::GetScriptLineNumber(script, code_pos); | 1809 ENTER_V8(isolate); |
1787 } else { | 1810 Local<UnboundScript> generic = |
1788 return -1; | 1811 CompileUnbound(v8_isolate, source, options); |
1789 } | 1812 if (generic.IsEmpty()) return Local<Script>(); |
| 1813 return generic->BindToCurrentContext(); |
1790 } | 1814 } |
1791 | 1815 |
1792 | 1816 |
1793 Handle<Value> Script::GetScriptName() { | 1817 Local<Script> Script::Compile(v8::Handle<String> source, |
1794 i::Handle<i::HeapObject> obj = | 1818 v8::ScriptOrigin* origin, |
1795 i::Handle<i::HeapObject>::cast(Utils::OpenHandle(this)); | 1819 ScriptData* script_data) { |
1796 i::Isolate* isolate = obj->GetIsolate(); | 1820 i::Handle<i::String> str = Utils::OpenHandle(*source); |
1797 ON_BAILOUT(isolate, "v8::Script::GetName()", return Handle<String>()); | 1821 ScriptCompiler::CachedData cached_data; |
1798 LOG_API(isolate, "Script::GetName"); | 1822 if (script_data) { |
1799 if (obj->IsScript()) { | 1823 cached_data = ScriptCompiler::CachedData( |
1800 i::Object* name = i::Script::cast(*obj)->name(); | 1824 reinterpret_cast<const uint8_t*>(script_data->Data()), |
1801 return Utils::ToLocal(i::Handle<i::Object>(name, isolate)); | 1825 script_data->Length()); |
1802 } else { | |
1803 return Handle<String>(); | |
1804 } | 1826 } |
| 1827 if (origin) { |
| 1828 return ScriptCompiler::Compile( |
| 1829 reinterpret_cast<v8::Isolate*>(str->GetIsolate()), |
| 1830 ScriptCompiler::Source(source, *origin, cached_data)); |
| 1831 } |
| 1832 return ScriptCompiler::Compile( |
| 1833 reinterpret_cast<v8::Isolate*>(str->GetIsolate()), |
| 1834 ScriptCompiler::Source(source, cached_data)); |
1805 } | 1835 } |
1806 | 1836 |
1807 | 1837 |
| 1838 Local<Script> Script::Compile(v8::Handle<String> source, |
| 1839 v8::Handle<String> file_name) { |
| 1840 ScriptOrigin origin(file_name); |
| 1841 return Compile(source, &origin); |
| 1842 } |
| 1843 |
| 1844 |
1808 // --- E x c e p t i o n s --- | 1845 // --- E x c e p t i o n s --- |
1809 | 1846 |
1810 | 1847 |
1811 v8::TryCatch::TryCatch() | 1848 v8::TryCatch::TryCatch() |
1812 : isolate_(i::Isolate::Current()), | 1849 : isolate_(i::Isolate::Current()), |
1813 next_(isolate_->try_catch_handler_address()), | 1850 next_(isolate_->try_catch_handler_address()), |
1814 is_verbose_(false), | 1851 is_verbose_(false), |
1815 can_continue_(true), | 1852 can_continue_(true), |
1816 capture_message_(true), | 1853 capture_message_(true), |
1817 rethrow_(false), | 1854 rethrow_(false), |
(...skipping 2203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4021 | 4058 |
4022 | 4059 |
4023 bool Function::IsBuiltin() const { | 4060 bool Function::IsBuiltin() const { |
4024 i::Handle<i::JSFunction> func = Utils::OpenHandle(this); | 4061 i::Handle<i::JSFunction> func = Utils::OpenHandle(this); |
4025 return func->IsBuiltin(); | 4062 return func->IsBuiltin(); |
4026 } | 4063 } |
4027 | 4064 |
4028 | 4065 |
4029 int Function::ScriptId() const { | 4066 int Function::ScriptId() const { |
4030 i::Handle<i::JSFunction> func = Utils::OpenHandle(this); | 4067 i::Handle<i::JSFunction> func = Utils::OpenHandle(this); |
4031 if (!func->shared()->script()->IsScript()) return v8::Script::kNoScriptId; | 4068 if (!func->shared()->script()->IsScript()) { |
| 4069 return v8::UnboundScript::kNoScriptId; |
| 4070 } |
4032 i::Handle<i::Script> script(i::Script::cast(func->shared()->script())); | 4071 i::Handle<i::Script> script(i::Script::cast(func->shared()->script())); |
4033 return script->id()->value(); | 4072 return script->id()->value(); |
4034 } | 4073 } |
4035 | 4074 |
4036 | 4075 |
4037 Local<v8::Value> Function::GetBoundFunction() const { | 4076 Local<v8::Value> Function::GetBoundFunction() const { |
4038 i::Handle<i::JSFunction> func = Utils::OpenHandle(this); | 4077 i::Handle<i::JSFunction> func = Utils::OpenHandle(this); |
4039 if (!func->shared()->bound()) { | 4078 if (!func->shared()->bound()) { |
4040 return v8::Undefined(reinterpret_cast<v8::Isolate*>(func->GetIsolate())); | 4079 return v8::Undefined(reinterpret_cast<v8::Isolate*>(func->GetIsolate())); |
4041 } | 4080 } |
(...skipping 3413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7455 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); | 7494 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); |
7456 Address callback_address = | 7495 Address callback_address = |
7457 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 7496 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
7458 VMState<EXTERNAL> state(isolate); | 7497 VMState<EXTERNAL> state(isolate); |
7459 ExternalCallbackScope call_scope(isolate, callback_address); | 7498 ExternalCallbackScope call_scope(isolate, callback_address); |
7460 callback(info); | 7499 callback(info); |
7461 } | 7500 } |
7462 | 7501 |
7463 | 7502 |
7464 } } // namespace v8::internal | 7503 } } // namespace v8::internal |
OLD | NEW |