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 1689 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1700 // check. | 1700 // check. |
1701 if (this == NULL) return Local<Value>(); | 1701 if (this == NULL) return Local<Value>(); |
1702 i::Handle<i::HeapObject> obj = | 1702 i::Handle<i::HeapObject> obj = |
1703 i::Handle<i::HeapObject>::cast(Utils::OpenHandle(this)); | 1703 i::Handle<i::HeapObject>::cast(Utils::OpenHandle(this)); |
1704 i::Isolate* isolate = obj->GetIsolate(); | 1704 i::Isolate* isolate = obj->GetIsolate(); |
1705 ON_BAILOUT(isolate, "v8::Script::Run()", return Local<Value>()); | 1705 ON_BAILOUT(isolate, "v8::Script::Run()", return Local<Value>()); |
1706 LOG_API(isolate, "Script::Run"); | 1706 LOG_API(isolate, "Script::Run"); |
1707 ENTER_V8(isolate); | 1707 ENTER_V8(isolate); |
1708 i::Logger::TimerEventScope timer_scope( | 1708 i::Logger::TimerEventScope timer_scope( |
1709 isolate, i::Logger::TimerEventScope::v8_execute); | 1709 isolate, i::Logger::TimerEventScope::v8_execute); |
1710 i::Object* raw_result = NULL; | 1710 i::HandleScope scope(isolate); |
1711 { | 1711 i::Handle<i::JSFunction> fun = i::Handle<i::JSFunction>::cast(obj); |
1712 i::HandleScope scope(isolate); | 1712 EXCEPTION_PREAMBLE(isolate); |
1713 i::Handle<i::JSFunction> fun = | 1713 i::Handle<i::Object> receiver( |
1714 i::Handle<i::JSFunction>(i::JSFunction::cast(*obj), isolate); | 1714 isolate->context()->global_proxy(), isolate); |
1715 EXCEPTION_PREAMBLE(isolate); | 1715 i::Handle<i::Object> result; |
1716 i::Handle<i::Object> receiver( | 1716 has_pending_exception = !i::Execution::Call( |
1717 isolate->context()->global_proxy(), isolate); | 1717 isolate, fun, receiver, 0, NULL).ToHandle(&result); |
1718 i::Handle<i::Object> result = i::Execution::Call( | 1718 EXCEPTION_BAILOUT_CHECK_DO_CALLBACK(isolate, Local<Value>()); |
1719 isolate, fun, receiver, 0, NULL, &has_pending_exception); | 1719 return Utils::ToLocal(scope.CloseAndEscape(result)); |
1720 EXCEPTION_BAILOUT_CHECK_DO_CALLBACK(isolate, Local<Value>()); | |
1721 raw_result = *result; | |
1722 } | |
1723 i::Handle<i::Object> result(raw_result, isolate); | |
1724 return Utils::ToLocal(result); | |
1725 } | 1720 } |
1726 | 1721 |
1727 | 1722 |
1728 Local<UnboundScript> Script::GetUnboundScript() { | 1723 Local<UnboundScript> Script::GetUnboundScript() { |
1729 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 1724 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
1730 return ToApiHandle<UnboundScript>( | 1725 return ToApiHandle<UnboundScript>( |
1731 i::Handle<i::SharedFunctionInfo>(i::JSFunction::cast(*obj)->shared())); | 1726 i::Handle<i::SharedFunctionInfo>(i::JSFunction::cast(*obj)->shared())); |
1732 } | 1727 } |
1733 | 1728 |
1734 | 1729 |
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2033 i::Handle<i::JSMessageObject> message = | 2028 i::Handle<i::JSMessageObject> message = |
2034 i::Handle<i::JSMessageObject>::cast(Utils::OpenHandle(this)); | 2029 i::Handle<i::JSMessageObject>::cast(Utils::OpenHandle(this)); |
2035 i::Handle<i::Object> stackFramesObj(message->stack_frames(), isolate); | 2030 i::Handle<i::Object> stackFramesObj(message->stack_frames(), isolate); |
2036 if (!stackFramesObj->IsJSArray()) return v8::Handle<v8::StackTrace>(); | 2031 if (!stackFramesObj->IsJSArray()) return v8::Handle<v8::StackTrace>(); |
2037 i::Handle<i::JSArray> stackTrace = | 2032 i::Handle<i::JSArray> stackTrace = |
2038 i::Handle<i::JSArray>::cast(stackFramesObj); | 2033 i::Handle<i::JSArray>::cast(stackFramesObj); |
2039 return scope.Escape(Utils::StackTraceToLocal(stackTrace)); | 2034 return scope.Escape(Utils::StackTraceToLocal(stackTrace)); |
2040 } | 2035 } |
2041 | 2036 |
2042 | 2037 |
2043 static i::Handle<i::Object> CallV8HeapFunction(const char* name, | 2038 MUST_USE_RESULT static i::MaybeHandle<i::Object> CallV8HeapFunction( |
2044 i::Handle<i::Object> recv, | 2039 const char* name, |
2045 int argc, | 2040 i::Handle<i::Object> recv, |
2046 i::Handle<i::Object> argv[], | 2041 int argc, |
2047 bool* has_pending_exception) { | 2042 i::Handle<i::Object> argv[]) { |
2048 i::Isolate* isolate = i::Isolate::Current(); | 2043 i::Isolate* isolate = i::Isolate::Current(); |
2049 i::Handle<i::String> fmt_str = | 2044 i::Handle<i::String> fmt_str = |
2050 isolate->factory()->InternalizeUtf8String(name); | 2045 isolate->factory()->InternalizeUtf8String(name); |
2051 i::Handle<i::Object> object_fun = | 2046 i::Handle<i::Object> object_fun = |
2052 i::GlobalObject::GetPropertyNoExceptionThrown( | 2047 i::GlobalObject::GetPropertyNoExceptionThrown( |
2053 isolate->js_builtins_object(), fmt_str); | 2048 isolate->js_builtins_object(), fmt_str); |
2054 i::Handle<i::JSFunction> fun = i::Handle<i::JSFunction>::cast(object_fun); | 2049 i::Handle<i::JSFunction> fun = i::Handle<i::JSFunction>::cast(object_fun); |
2055 i::Handle<i::Object> value = i::Execution::Call( | 2050 return i::Execution::Call(isolate, fun, recv, argc, argv); |
2056 isolate, fun, recv, argc, argv, has_pending_exception); | |
2057 return value; | |
2058 } | 2051 } |
2059 | 2052 |
2060 | 2053 |
2061 static i::Handle<i::Object> CallV8HeapFunction(const char* name, | 2054 MUST_USE_RESULT static i::MaybeHandle<i::Object> CallV8HeapFunction( |
2062 i::Handle<i::Object> data, | 2055 const char* name, |
2063 bool* has_pending_exception) { | 2056 i::Handle<i::Object> data) { |
2064 i::Handle<i::Object> argv[] = { data }; | 2057 i::Handle<i::Object> argv[] = { data }; |
2065 return CallV8HeapFunction(name, | 2058 return CallV8HeapFunction(name, |
2066 i::Isolate::Current()->js_builtins_object(), | 2059 i::Isolate::Current()->js_builtins_object(), |
2067 ARRAY_SIZE(argv), | 2060 ARRAY_SIZE(argv), |
2068 argv, | 2061 argv); |
2069 has_pending_exception); | |
2070 } | 2062 } |
2071 | 2063 |
2072 | 2064 |
2073 int Message::GetLineNumber() const { | 2065 int Message::GetLineNumber() const { |
2074 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 2066 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
2075 ON_BAILOUT(isolate, "v8::Message::GetLineNumber()", return kNoLineNumberInfo); | 2067 ON_BAILOUT(isolate, "v8::Message::GetLineNumber()", return kNoLineNumberInfo); |
2076 ENTER_V8(isolate); | 2068 ENTER_V8(isolate); |
2077 i::HandleScope scope(isolate); | 2069 i::HandleScope scope(isolate); |
2078 | 2070 |
2079 EXCEPTION_PREAMBLE(isolate); | 2071 EXCEPTION_PREAMBLE(isolate); |
2080 i::Handle<i::Object> result = CallV8HeapFunction("GetLineNumber", | 2072 i::Handle<i::Object> result; |
2081 Utils::OpenHandle(this), | 2073 has_pending_exception = !CallV8HeapFunction( |
2082 &has_pending_exception); | 2074 "GetLineNumber", Utils::OpenHandle(this)).ToHandle(&result); |
2083 EXCEPTION_BAILOUT_CHECK(isolate, 0); | 2075 EXCEPTION_BAILOUT_CHECK(isolate, 0); |
2084 return static_cast<int>(result->Number()); | 2076 return static_cast<int>(result->Number()); |
2085 } | 2077 } |
2086 | 2078 |
2087 | 2079 |
2088 int Message::GetStartPosition() const { | 2080 int Message::GetStartPosition() const { |
2089 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 2081 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
2090 ENTER_V8(isolate); | 2082 ENTER_V8(isolate); |
2091 i::HandleScope scope(isolate); | 2083 i::HandleScope scope(isolate); |
2092 i::Handle<i::JSMessageObject> message = | 2084 i::Handle<i::JSMessageObject> message = |
(...skipping 11 matching lines...) Expand all Loading... |
2104 return message->end_position(); | 2096 return message->end_position(); |
2105 } | 2097 } |
2106 | 2098 |
2107 | 2099 |
2108 int Message::GetStartColumn() const { | 2100 int Message::GetStartColumn() const { |
2109 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 2101 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
2110 ENTER_V8(isolate); | 2102 ENTER_V8(isolate); |
2111 i::HandleScope scope(isolate); | 2103 i::HandleScope scope(isolate); |
2112 i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); | 2104 i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); |
2113 EXCEPTION_PREAMBLE(isolate); | 2105 EXCEPTION_PREAMBLE(isolate); |
2114 i::Handle<i::Object> start_col_obj = CallV8HeapFunction( | 2106 i::Handle<i::Object> start_col_obj; |
2115 "GetPositionInLine", | 2107 has_pending_exception = !CallV8HeapFunction( |
2116 data_obj, | 2108 "GetPositionInLine", data_obj).ToHandle(&start_col_obj); |
2117 &has_pending_exception); | |
2118 EXCEPTION_BAILOUT_CHECK(isolate, 0); | 2109 EXCEPTION_BAILOUT_CHECK(isolate, 0); |
2119 return static_cast<int>(start_col_obj->Number()); | 2110 return static_cast<int>(start_col_obj->Number()); |
2120 } | 2111 } |
2121 | 2112 |
2122 | 2113 |
2123 int Message::GetEndColumn() const { | 2114 int Message::GetEndColumn() const { |
2124 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 2115 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
2125 ENTER_V8(isolate); | 2116 ENTER_V8(isolate); |
2126 i::HandleScope scope(isolate); | 2117 i::HandleScope scope(isolate); |
2127 i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); | 2118 i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); |
2128 EXCEPTION_PREAMBLE(isolate); | 2119 EXCEPTION_PREAMBLE(isolate); |
2129 i::Handle<i::Object> start_col_obj = CallV8HeapFunction( | 2120 i::Handle<i::Object> start_col_obj; |
2130 "GetPositionInLine", | 2121 has_pending_exception = !CallV8HeapFunction( |
2131 data_obj, | 2122 "GetPositionInLine", data_obj).ToHandle(&start_col_obj); |
2132 &has_pending_exception); | |
2133 EXCEPTION_BAILOUT_CHECK(isolate, 0); | 2123 EXCEPTION_BAILOUT_CHECK(isolate, 0); |
2134 i::Handle<i::JSMessageObject> message = | 2124 i::Handle<i::JSMessageObject> message = |
2135 i::Handle<i::JSMessageObject>::cast(data_obj); | 2125 i::Handle<i::JSMessageObject>::cast(data_obj); |
2136 int start = message->start_position(); | 2126 int start = message->start_position(); |
2137 int end = message->end_position(); | 2127 int end = message->end_position(); |
2138 return static_cast<int>(start_col_obj->Number()) + (end - start); | 2128 return static_cast<int>(start_col_obj->Number()) + (end - start); |
2139 } | 2129 } |
2140 | 2130 |
2141 | 2131 |
2142 bool Message::IsSharedCrossOrigin() const { | 2132 bool Message::IsSharedCrossOrigin() const { |
2143 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 2133 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
2144 ENTER_V8(isolate); | 2134 ENTER_V8(isolate); |
2145 i::HandleScope scope(isolate); | 2135 i::HandleScope scope(isolate); |
2146 i::Handle<i::JSMessageObject> message = | 2136 i::Handle<i::JSMessageObject> message = |
2147 i::Handle<i::JSMessageObject>::cast(Utils::OpenHandle(this)); | 2137 i::Handle<i::JSMessageObject>::cast(Utils::OpenHandle(this)); |
2148 i::Handle<i::JSValue> script = | 2138 i::Handle<i::JSValue> script = |
2149 i::Handle<i::JSValue>::cast(i::Handle<i::Object>(message->script(), | 2139 i::Handle<i::JSValue>::cast(i::Handle<i::Object>(message->script(), |
2150 isolate)); | 2140 isolate)); |
2151 return i::Script::cast(script->value())->is_shared_cross_origin(); | 2141 return i::Script::cast(script->value())->is_shared_cross_origin(); |
2152 } | 2142 } |
2153 | 2143 |
2154 | 2144 |
2155 Local<String> Message::GetSourceLine() const { | 2145 Local<String> Message::GetSourceLine() const { |
2156 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 2146 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
2157 ON_BAILOUT(isolate, "v8::Message::GetSourceLine()", return Local<String>()); | 2147 ON_BAILOUT(isolate, "v8::Message::GetSourceLine()", return Local<String>()); |
2158 ENTER_V8(isolate); | 2148 ENTER_V8(isolate); |
2159 EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); | 2149 EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
2160 EXCEPTION_PREAMBLE(isolate); | 2150 EXCEPTION_PREAMBLE(isolate); |
2161 i::Handle<i::Object> result = CallV8HeapFunction("GetSourceLine", | 2151 i::Handle<i::Object> result; |
2162 Utils::OpenHandle(this), | 2152 has_pending_exception = !CallV8HeapFunction( |
2163 &has_pending_exception); | 2153 "GetSourceLine", Utils::OpenHandle(this)).ToHandle(&result); |
2164 EXCEPTION_BAILOUT_CHECK(isolate, Local<v8::String>()); | 2154 EXCEPTION_BAILOUT_CHECK(isolate, Local<v8::String>()); |
2165 if (result->IsString()) { | 2155 if (result->IsString()) { |
2166 return scope.Escape(Utils::ToLocal(i::Handle<i::String>::cast(result))); | 2156 return scope.Escape(Utils::ToLocal(i::Handle<i::String>::cast(result))); |
2167 } else { | 2157 } else { |
2168 return Local<String>(); | 2158 return Local<String>(); |
2169 } | 2159 } |
2170 } | 2160 } |
2171 | 2161 |
2172 | 2162 |
2173 void Message::PrintCurrentStackTrace(Isolate* isolate, FILE* out) { | 2163 void Message::PrintCurrentStackTrace(Isolate* isolate, FILE* out) { |
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2550 Local<String> Value::ToString() const { | 2540 Local<String> Value::ToString() const { |
2551 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 2541 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
2552 i::Handle<i::Object> str; | 2542 i::Handle<i::Object> str; |
2553 if (obj->IsString()) { | 2543 if (obj->IsString()) { |
2554 str = obj; | 2544 str = obj; |
2555 } else { | 2545 } else { |
2556 i::Isolate* isolate = i::Isolate::Current(); | 2546 i::Isolate* isolate = i::Isolate::Current(); |
2557 LOG_API(isolate, "ToString"); | 2547 LOG_API(isolate, "ToString"); |
2558 ENTER_V8(isolate); | 2548 ENTER_V8(isolate); |
2559 EXCEPTION_PREAMBLE(isolate); | 2549 EXCEPTION_PREAMBLE(isolate); |
2560 str = i::Execution::ToString(isolate, obj, &has_pending_exception); | 2550 has_pending_exception = !i::Execution::ToString( |
| 2551 isolate, obj).ToHandle(&str); |
2561 EXCEPTION_BAILOUT_CHECK(isolate, Local<String>()); | 2552 EXCEPTION_BAILOUT_CHECK(isolate, Local<String>()); |
2562 } | 2553 } |
2563 return ToApiHandle<String>(str); | 2554 return ToApiHandle<String>(str); |
2564 } | 2555 } |
2565 | 2556 |
2566 | 2557 |
2567 Local<String> Value::ToDetailString() const { | 2558 Local<String> Value::ToDetailString() const { |
2568 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 2559 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
2569 i::Handle<i::Object> str; | 2560 i::Handle<i::Object> str; |
2570 if (obj->IsString()) { | 2561 if (obj->IsString()) { |
2571 str = obj; | 2562 str = obj; |
2572 } else { | 2563 } else { |
2573 i::Isolate* isolate = i::Isolate::Current(); | 2564 i::Isolate* isolate = i::Isolate::Current(); |
2574 LOG_API(isolate, "ToDetailString"); | 2565 LOG_API(isolate, "ToDetailString"); |
2575 ENTER_V8(isolate); | 2566 ENTER_V8(isolate); |
2576 EXCEPTION_PREAMBLE(isolate); | 2567 EXCEPTION_PREAMBLE(isolate); |
2577 str = i::Execution::ToDetailString(isolate, obj, &has_pending_exception); | 2568 has_pending_exception = !i::Execution::ToDetailString( |
| 2569 isolate, obj).ToHandle(&str); |
2578 EXCEPTION_BAILOUT_CHECK(isolate, Local<String>()); | 2570 EXCEPTION_BAILOUT_CHECK(isolate, Local<String>()); |
2579 } | 2571 } |
2580 return ToApiHandle<String>(str); | 2572 return ToApiHandle<String>(str); |
2581 } | 2573 } |
2582 | 2574 |
2583 | 2575 |
2584 Local<v8::Object> Value::ToObject() const { | 2576 Local<v8::Object> Value::ToObject() const { |
2585 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 2577 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
2586 i::Handle<i::Object> val; | 2578 i::Handle<i::Object> val; |
2587 if (obj->IsJSObject()) { | 2579 if (obj->IsJSObject()) { |
2588 val = obj; | 2580 val = obj; |
2589 } else { | 2581 } else { |
2590 i::Isolate* isolate = i::Isolate::Current(); | 2582 i::Isolate* isolate = i::Isolate::Current(); |
2591 LOG_API(isolate, "ToObject"); | 2583 LOG_API(isolate, "ToObject"); |
2592 ENTER_V8(isolate); | 2584 ENTER_V8(isolate); |
2593 EXCEPTION_PREAMBLE(isolate); | 2585 EXCEPTION_PREAMBLE(isolate); |
2594 val = i::Execution::ToObject(isolate, obj, &has_pending_exception); | 2586 has_pending_exception = !i::Execution::ToObject( |
| 2587 isolate, obj).ToHandle(&val); |
2595 EXCEPTION_BAILOUT_CHECK(isolate, Local<v8::Object>()); | 2588 EXCEPTION_BAILOUT_CHECK(isolate, Local<v8::Object>()); |
2596 } | 2589 } |
2597 return ToApiHandle<Object>(val); | 2590 return ToApiHandle<Object>(val); |
2598 } | 2591 } |
2599 | 2592 |
2600 | 2593 |
2601 Local<Boolean> Value::ToBoolean() const { | 2594 Local<Boolean> Value::ToBoolean() const { |
2602 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 2595 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
2603 if (obj->IsBoolean()) { | 2596 if (obj->IsBoolean()) { |
2604 return ToApiHandle<Boolean>(obj); | 2597 return ToApiHandle<Boolean>(obj); |
(...skipping 11 matching lines...) Expand all Loading... |
2616 Local<Number> Value::ToNumber() const { | 2609 Local<Number> Value::ToNumber() const { |
2617 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 2610 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
2618 i::Handle<i::Object> num; | 2611 i::Handle<i::Object> num; |
2619 if (obj->IsNumber()) { | 2612 if (obj->IsNumber()) { |
2620 num = obj; | 2613 num = obj; |
2621 } else { | 2614 } else { |
2622 i::Isolate* isolate = i::Isolate::Current(); | 2615 i::Isolate* isolate = i::Isolate::Current(); |
2623 LOG_API(isolate, "ToNumber"); | 2616 LOG_API(isolate, "ToNumber"); |
2624 ENTER_V8(isolate); | 2617 ENTER_V8(isolate); |
2625 EXCEPTION_PREAMBLE(isolate); | 2618 EXCEPTION_PREAMBLE(isolate); |
2626 num = i::Execution::ToNumber(isolate, obj, &has_pending_exception); | 2619 has_pending_exception = !i::Execution::ToNumber( |
| 2620 isolate, obj).ToHandle(&num); |
2627 EXCEPTION_BAILOUT_CHECK(isolate, Local<Number>()); | 2621 EXCEPTION_BAILOUT_CHECK(isolate, Local<Number>()); |
2628 } | 2622 } |
2629 return ToApiHandle<Number>(num); | 2623 return ToApiHandle<Number>(num); |
2630 } | 2624 } |
2631 | 2625 |
2632 | 2626 |
2633 Local<Integer> Value::ToInteger() const { | 2627 Local<Integer> Value::ToInteger() const { |
2634 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 2628 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
2635 i::Handle<i::Object> num; | 2629 i::Handle<i::Object> num; |
2636 if (obj->IsSmi()) { | 2630 if (obj->IsSmi()) { |
2637 num = obj; | 2631 num = obj; |
2638 } else { | 2632 } else { |
2639 i::Isolate* isolate = i::Isolate::Current(); | 2633 i::Isolate* isolate = i::Isolate::Current(); |
2640 LOG_API(isolate, "ToInteger"); | 2634 LOG_API(isolate, "ToInteger"); |
2641 ENTER_V8(isolate); | 2635 ENTER_V8(isolate); |
2642 EXCEPTION_PREAMBLE(isolate); | 2636 EXCEPTION_PREAMBLE(isolate); |
2643 num = i::Execution::ToInteger(isolate, obj, &has_pending_exception); | 2637 has_pending_exception = !i::Execution::ToInteger( |
| 2638 isolate, obj).ToHandle(&num); |
2644 EXCEPTION_BAILOUT_CHECK(isolate, Local<Integer>()); | 2639 EXCEPTION_BAILOUT_CHECK(isolate, Local<Integer>()); |
2645 } | 2640 } |
2646 return ToApiHandle<Integer>(num); | 2641 return ToApiHandle<Integer>(num); |
2647 } | 2642 } |
2648 | 2643 |
2649 | 2644 |
2650 void i::Internals::CheckInitializedImpl(v8::Isolate* external_isolate) { | 2645 void i::Internals::CheckInitializedImpl(v8::Isolate* external_isolate) { |
2651 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(external_isolate); | 2646 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(external_isolate); |
2652 Utils::ApiCheck(isolate != NULL && | 2647 Utils::ApiCheck(isolate != NULL && |
2653 isolate->IsInitialized() && | 2648 isolate->IsInitialized() && |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2843 double Value::NumberValue() const { | 2838 double Value::NumberValue() const { |
2844 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 2839 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
2845 i::Handle<i::Object> num; | 2840 i::Handle<i::Object> num; |
2846 if (obj->IsNumber()) { | 2841 if (obj->IsNumber()) { |
2847 num = obj; | 2842 num = obj; |
2848 } else { | 2843 } else { |
2849 i::Isolate* isolate = i::Isolate::Current(); | 2844 i::Isolate* isolate = i::Isolate::Current(); |
2850 LOG_API(isolate, "NumberValue"); | 2845 LOG_API(isolate, "NumberValue"); |
2851 ENTER_V8(isolate); | 2846 ENTER_V8(isolate); |
2852 EXCEPTION_PREAMBLE(isolate); | 2847 EXCEPTION_PREAMBLE(isolate); |
2853 num = i::Execution::ToNumber(isolate, obj, &has_pending_exception); | 2848 has_pending_exception = !i::Execution::ToNumber( |
| 2849 isolate, obj).ToHandle(&num); |
2854 EXCEPTION_BAILOUT_CHECK(isolate, i::OS::nan_value()); | 2850 EXCEPTION_BAILOUT_CHECK(isolate, i::OS::nan_value()); |
2855 } | 2851 } |
2856 return num->Number(); | 2852 return num->Number(); |
2857 } | 2853 } |
2858 | 2854 |
2859 | 2855 |
2860 int64_t Value::IntegerValue() const { | 2856 int64_t Value::IntegerValue() const { |
2861 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 2857 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
2862 i::Handle<i::Object> num; | 2858 i::Handle<i::Object> num; |
2863 if (obj->IsNumber()) { | 2859 if (obj->IsNumber()) { |
2864 num = obj; | 2860 num = obj; |
2865 } else { | 2861 } else { |
2866 i::Isolate* isolate = i::Isolate::Current(); | 2862 i::Isolate* isolate = i::Isolate::Current(); |
2867 LOG_API(isolate, "IntegerValue"); | 2863 LOG_API(isolate, "IntegerValue"); |
2868 ENTER_V8(isolate); | 2864 ENTER_V8(isolate); |
2869 EXCEPTION_PREAMBLE(isolate); | 2865 EXCEPTION_PREAMBLE(isolate); |
2870 num = i::Execution::ToInteger(isolate, obj, &has_pending_exception); | 2866 has_pending_exception = !i::Execution::ToInteger( |
| 2867 isolate, obj).ToHandle(&num); |
2871 EXCEPTION_BAILOUT_CHECK(isolate, 0); | 2868 EXCEPTION_BAILOUT_CHECK(isolate, 0); |
2872 } | 2869 } |
2873 if (num->IsSmi()) { | 2870 if (num->IsSmi()) { |
2874 return i::Smi::cast(*num)->value(); | 2871 return i::Smi::cast(*num)->value(); |
2875 } else { | 2872 } else { |
2876 return static_cast<int64_t>(num->Number()); | 2873 return static_cast<int64_t>(num->Number()); |
2877 } | 2874 } |
2878 } | 2875 } |
2879 | 2876 |
2880 | 2877 |
2881 Local<Int32> Value::ToInt32() const { | 2878 Local<Int32> Value::ToInt32() const { |
2882 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 2879 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
2883 i::Handle<i::Object> num; | 2880 i::Handle<i::Object> num; |
2884 if (obj->IsSmi()) { | 2881 if (obj->IsSmi()) { |
2885 num = obj; | 2882 num = obj; |
2886 } else { | 2883 } else { |
2887 i::Isolate* isolate = i::Isolate::Current(); | 2884 i::Isolate* isolate = i::Isolate::Current(); |
2888 LOG_API(isolate, "ToInt32"); | 2885 LOG_API(isolate, "ToInt32"); |
2889 ENTER_V8(isolate); | 2886 ENTER_V8(isolate); |
2890 EXCEPTION_PREAMBLE(isolate); | 2887 EXCEPTION_PREAMBLE(isolate); |
2891 num = i::Execution::ToInt32(isolate, obj, &has_pending_exception); | 2888 has_pending_exception = !i::Execution::ToInt32(isolate, obj).ToHandle(&num); |
2892 EXCEPTION_BAILOUT_CHECK(isolate, Local<Int32>()); | 2889 EXCEPTION_BAILOUT_CHECK(isolate, Local<Int32>()); |
2893 } | 2890 } |
2894 return ToApiHandle<Int32>(num); | 2891 return ToApiHandle<Int32>(num); |
2895 } | 2892 } |
2896 | 2893 |
2897 | 2894 |
2898 Local<Uint32> Value::ToUint32() const { | 2895 Local<Uint32> Value::ToUint32() const { |
2899 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 2896 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
2900 i::Handle<i::Object> num; | 2897 i::Handle<i::Object> num; |
2901 if (obj->IsSmi()) { | 2898 if (obj->IsSmi()) { |
2902 num = obj; | 2899 num = obj; |
2903 } else { | 2900 } else { |
2904 i::Isolate* isolate = i::Isolate::Current(); | 2901 i::Isolate* isolate = i::Isolate::Current(); |
2905 LOG_API(isolate, "ToUInt32"); | 2902 LOG_API(isolate, "ToUInt32"); |
2906 ENTER_V8(isolate); | 2903 ENTER_V8(isolate); |
2907 EXCEPTION_PREAMBLE(isolate); | 2904 EXCEPTION_PREAMBLE(isolate); |
2908 num = i::Execution::ToUint32(isolate, obj, &has_pending_exception); | 2905 has_pending_exception = !i::Execution::ToUint32( |
| 2906 isolate, obj).ToHandle(&num); |
2909 EXCEPTION_BAILOUT_CHECK(isolate, Local<Uint32>()); | 2907 EXCEPTION_BAILOUT_CHECK(isolate, Local<Uint32>()); |
2910 } | 2908 } |
2911 return ToApiHandle<Uint32>(num); | 2909 return ToApiHandle<Uint32>(num); |
2912 } | 2910 } |
2913 | 2911 |
2914 | 2912 |
2915 Local<Uint32> Value::ToArrayIndex() const { | 2913 Local<Uint32> Value::ToArrayIndex() const { |
2916 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 2914 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
2917 if (obj->IsSmi()) { | 2915 if (obj->IsSmi()) { |
2918 if (i::Smi::cast(*obj)->value() >= 0) return Utils::Uint32ToLocal(obj); | 2916 if (i::Smi::cast(*obj)->value() >= 0) return Utils::Uint32ToLocal(obj); |
2919 return Local<Uint32>(); | 2917 return Local<Uint32>(); |
2920 } | 2918 } |
2921 i::Isolate* isolate = i::Isolate::Current(); | 2919 i::Isolate* isolate = i::Isolate::Current(); |
2922 LOG_API(isolate, "ToArrayIndex"); | 2920 LOG_API(isolate, "ToArrayIndex"); |
2923 ENTER_V8(isolate); | 2921 ENTER_V8(isolate); |
2924 EXCEPTION_PREAMBLE(isolate); | 2922 EXCEPTION_PREAMBLE(isolate); |
2925 i::Handle<i::Object> string_obj = | 2923 i::Handle<i::Object> string_obj; |
2926 i::Execution::ToString(isolate, obj, &has_pending_exception); | 2924 has_pending_exception = !i::Execution::ToString( |
| 2925 isolate, obj).ToHandle(&string_obj); |
2927 EXCEPTION_BAILOUT_CHECK(isolate, Local<Uint32>()); | 2926 EXCEPTION_BAILOUT_CHECK(isolate, Local<Uint32>()); |
2928 i::Handle<i::String> str = i::Handle<i::String>::cast(string_obj); | 2927 i::Handle<i::String> str = i::Handle<i::String>::cast(string_obj); |
2929 uint32_t index; | 2928 uint32_t index; |
2930 if (str->AsArrayIndex(&index)) { | 2929 if (str->AsArrayIndex(&index)) { |
2931 i::Handle<i::Object> value; | 2930 i::Handle<i::Object> value; |
2932 if (index <= static_cast<uint32_t>(i::Smi::kMaxValue)) { | 2931 if (index <= static_cast<uint32_t>(i::Smi::kMaxValue)) { |
2933 value = i::Handle<i::Object>(i::Smi::FromInt(index), isolate); | 2932 value = i::Handle<i::Object>(i::Smi::FromInt(index), isolate); |
2934 } else { | 2933 } else { |
2935 value = isolate->factory()->NewNumber(index); | 2934 value = isolate->factory()->NewNumber(index); |
2936 } | 2935 } |
2937 return Utils::Uint32ToLocal(value); | 2936 return Utils::Uint32ToLocal(value); |
2938 } | 2937 } |
2939 return Local<Uint32>(); | 2938 return Local<Uint32>(); |
2940 } | 2939 } |
2941 | 2940 |
2942 | 2941 |
2943 int32_t Value::Int32Value() const { | 2942 int32_t Value::Int32Value() const { |
2944 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 2943 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
2945 if (obj->IsSmi()) { | 2944 if (obj->IsSmi()) { |
2946 return i::Smi::cast(*obj)->value(); | 2945 return i::Smi::cast(*obj)->value(); |
2947 } else { | 2946 } else { |
2948 i::Isolate* isolate = i::Isolate::Current(); | 2947 i::Isolate* isolate = i::Isolate::Current(); |
2949 LOG_API(isolate, "Int32Value (slow)"); | 2948 LOG_API(isolate, "Int32Value (slow)"); |
2950 ENTER_V8(isolate); | 2949 ENTER_V8(isolate); |
2951 EXCEPTION_PREAMBLE(isolate); | 2950 EXCEPTION_PREAMBLE(isolate); |
2952 i::Handle<i::Object> num = | 2951 i::Handle<i::Object> num; |
2953 i::Execution::ToInt32(isolate, obj, &has_pending_exception); | 2952 has_pending_exception = !i::Execution::ToInt32(isolate, obj).ToHandle(&num); |
2954 EXCEPTION_BAILOUT_CHECK(isolate, 0); | 2953 EXCEPTION_BAILOUT_CHECK(isolate, 0); |
2955 if (num->IsSmi()) { | 2954 if (num->IsSmi()) { |
2956 return i::Smi::cast(*num)->value(); | 2955 return i::Smi::cast(*num)->value(); |
2957 } else { | 2956 } else { |
2958 return static_cast<int32_t>(num->Number()); | 2957 return static_cast<int32_t>(num->Number()); |
2959 } | 2958 } |
2960 } | 2959 } |
2961 } | 2960 } |
2962 | 2961 |
2963 | 2962 |
2964 bool Value::Equals(Handle<Value> that) const { | 2963 bool Value::Equals(Handle<Value> that) const { |
2965 i::Isolate* isolate = i::Isolate::Current(); | 2964 i::Isolate* isolate = i::Isolate::Current(); |
2966 if (!Utils::ApiCheck(this != NULL && !that.IsEmpty(), | 2965 if (!Utils::ApiCheck(this != NULL && !that.IsEmpty(), |
2967 "v8::Value::Equals()", | 2966 "v8::Value::Equals()", |
2968 "Reading from empty handle")) { | 2967 "Reading from empty handle")) { |
2969 return false; | 2968 return false; |
2970 } | 2969 } |
2971 LOG_API(isolate, "Equals"); | 2970 LOG_API(isolate, "Equals"); |
2972 ENTER_V8(isolate); | 2971 ENTER_V8(isolate); |
2973 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 2972 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
2974 i::Handle<i::Object> other = Utils::OpenHandle(*that); | 2973 i::Handle<i::Object> other = Utils::OpenHandle(*that); |
2975 // If both obj and other are JSObjects, we'd better compare by identity | 2974 // If both obj and other are JSObjects, we'd better compare by identity |
2976 // immediately when going into JS builtin. The reason is Invoke | 2975 // immediately when going into JS builtin. The reason is Invoke |
2977 // would overwrite global object receiver with global proxy. | 2976 // would overwrite global object receiver with global proxy. |
2978 if (obj->IsJSObject() && other->IsJSObject()) { | 2977 if (obj->IsJSObject() && other->IsJSObject()) { |
2979 return *obj == *other; | 2978 return *obj == *other; |
2980 } | 2979 } |
2981 i::Handle<i::Object> args[] = { other }; | 2980 i::Handle<i::Object> args[] = { other }; |
2982 EXCEPTION_PREAMBLE(isolate); | 2981 EXCEPTION_PREAMBLE(isolate); |
2983 i::Handle<i::Object> result = | 2982 i::Handle<i::Object> result; |
2984 CallV8HeapFunction("EQUALS", obj, ARRAY_SIZE(args), args, | 2983 has_pending_exception = !CallV8HeapFunction( |
2985 &has_pending_exception); | 2984 "EQUALS", obj, ARRAY_SIZE(args), args).ToHandle(&result); |
2986 EXCEPTION_BAILOUT_CHECK(isolate, false); | 2985 EXCEPTION_BAILOUT_CHECK(isolate, false); |
2987 return *result == i::Smi::FromInt(i::EQUAL); | 2986 return *result == i::Smi::FromInt(i::EQUAL); |
2988 } | 2987 } |
2989 | 2988 |
2990 | 2989 |
2991 bool Value::StrictEquals(Handle<Value> that) const { | 2990 bool Value::StrictEquals(Handle<Value> that) const { |
2992 i::Isolate* isolate = i::Isolate::Current(); | 2991 i::Isolate* isolate = i::Isolate::Current(); |
2993 if (!Utils::ApiCheck(this != NULL && !that.IsEmpty(), | 2992 if (!Utils::ApiCheck(this != NULL && !that.IsEmpty(), |
2994 "v8::Value::StrictEquals()", | 2993 "v8::Value::StrictEquals()", |
2995 "Reading from empty handle")) { | 2994 "Reading from empty handle")) { |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3036 | 3035 |
3037 uint32_t Value::Uint32Value() const { | 3036 uint32_t Value::Uint32Value() const { |
3038 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 3037 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
3039 if (obj->IsSmi()) { | 3038 if (obj->IsSmi()) { |
3040 return i::Smi::cast(*obj)->value(); | 3039 return i::Smi::cast(*obj)->value(); |
3041 } else { | 3040 } else { |
3042 i::Isolate* isolate = i::Isolate::Current(); | 3041 i::Isolate* isolate = i::Isolate::Current(); |
3043 LOG_API(isolate, "Uint32Value"); | 3042 LOG_API(isolate, "Uint32Value"); |
3044 ENTER_V8(isolate); | 3043 ENTER_V8(isolate); |
3045 EXCEPTION_PREAMBLE(isolate); | 3044 EXCEPTION_PREAMBLE(isolate); |
3046 i::Handle<i::Object> num = | 3045 i::Handle<i::Object> num; |
3047 i::Execution::ToUint32(isolate, obj, &has_pending_exception); | 3046 has_pending_exception = !i::Execution::ToUint32( |
| 3047 isolate, obj).ToHandle(&num); |
3048 EXCEPTION_BAILOUT_CHECK(isolate, 0); | 3048 EXCEPTION_BAILOUT_CHECK(isolate, 0); |
3049 if (num->IsSmi()) { | 3049 if (num->IsSmi()) { |
3050 return i::Smi::cast(*num)->value(); | 3050 return i::Smi::cast(*num)->value(); |
3051 } else { | 3051 } else { |
3052 return static_cast<uint32_t>(num->Number()); | 3052 return static_cast<uint32_t>(num->Number()); |
3053 } | 3053 } |
3054 } | 3054 } |
3055 } | 3055 } |
3056 | 3056 |
3057 | 3057 |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3181 PropertyAttribute v8::Object::GetPropertyAttributes(v8::Handle<Value> key) { | 3181 PropertyAttribute v8::Object::GetPropertyAttributes(v8::Handle<Value> key) { |
3182 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 3182 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
3183 ON_BAILOUT(isolate, "v8::Object::GetPropertyAttribute()", | 3183 ON_BAILOUT(isolate, "v8::Object::GetPropertyAttribute()", |
3184 return static_cast<PropertyAttribute>(NONE)); | 3184 return static_cast<PropertyAttribute>(NONE)); |
3185 ENTER_V8(isolate); | 3185 ENTER_V8(isolate); |
3186 i::HandleScope scope(isolate); | 3186 i::HandleScope scope(isolate); |
3187 i::Handle<i::JSObject> self = Utils::OpenHandle(this); | 3187 i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
3188 i::Handle<i::Object> key_obj = Utils::OpenHandle(*key); | 3188 i::Handle<i::Object> key_obj = Utils::OpenHandle(*key); |
3189 if (!key_obj->IsName()) { | 3189 if (!key_obj->IsName()) { |
3190 EXCEPTION_PREAMBLE(isolate); | 3190 EXCEPTION_PREAMBLE(isolate); |
3191 key_obj = i::Execution::ToString(isolate, key_obj, &has_pending_exception); | 3191 has_pending_exception = !i::Execution::ToString( |
| 3192 isolate, key_obj).ToHandle(&key_obj); |
3192 EXCEPTION_BAILOUT_CHECK(isolate, static_cast<PropertyAttribute>(NONE)); | 3193 EXCEPTION_BAILOUT_CHECK(isolate, static_cast<PropertyAttribute>(NONE)); |
3193 } | 3194 } |
3194 i::Handle<i::Name> key_name = i::Handle<i::Name>::cast(key_obj); | 3195 i::Handle<i::Name> key_name = i::Handle<i::Name>::cast(key_obj); |
3195 PropertyAttributes result = | 3196 PropertyAttributes result = |
3196 i::JSReceiver::GetPropertyAttribute(self, key_name); | 3197 i::JSReceiver::GetPropertyAttribute(self, key_name); |
3197 if (result == ABSENT) return static_cast<PropertyAttribute>(NONE); | 3198 if (result == ABSENT) return static_cast<PropertyAttribute>(NONE); |
3198 return static_cast<PropertyAttribute>(result); | 3199 return static_cast<PropertyAttribute>(result); |
3199 } | 3200 } |
3200 | 3201 |
3201 | 3202 |
(...skipping 709 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3911 i::HandleScope scope(isolate); | 3912 i::HandleScope scope(isolate); |
3912 i::Handle<i::JSObject> obj = Utils::OpenHandle(this); | 3913 i::Handle<i::JSObject> obj = Utils::OpenHandle(this); |
3913 i::Handle<i::Object> recv_obj = Utils::OpenHandle(*recv); | 3914 i::Handle<i::Object> recv_obj = Utils::OpenHandle(*recv); |
3914 STATIC_ASSERT(sizeof(v8::Handle<v8::Value>) == sizeof(i::Object**)); | 3915 STATIC_ASSERT(sizeof(v8::Handle<v8::Value>) == sizeof(i::Object**)); |
3915 i::Handle<i::Object>* args = reinterpret_cast<i::Handle<i::Object>*>(argv); | 3916 i::Handle<i::Object>* args = reinterpret_cast<i::Handle<i::Object>*>(argv); |
3916 i::Handle<i::JSFunction> fun = i::Handle<i::JSFunction>(); | 3917 i::Handle<i::JSFunction> fun = i::Handle<i::JSFunction>(); |
3917 if (obj->IsJSFunction()) { | 3918 if (obj->IsJSFunction()) { |
3918 fun = i::Handle<i::JSFunction>::cast(obj); | 3919 fun = i::Handle<i::JSFunction>::cast(obj); |
3919 } else { | 3920 } else { |
3920 EXCEPTION_PREAMBLE(isolate); | 3921 EXCEPTION_PREAMBLE(isolate); |
3921 i::Handle<i::Object> delegate = i::Execution::TryGetFunctionDelegate( | 3922 i::Handle<i::Object> delegate; |
3922 isolate, obj, &has_pending_exception); | 3923 has_pending_exception = !i::Execution::TryGetFunctionDelegate( |
| 3924 isolate, obj).ToHandle(&delegate); |
3923 EXCEPTION_BAILOUT_CHECK(isolate, Local<Value>()); | 3925 EXCEPTION_BAILOUT_CHECK(isolate, Local<Value>()); |
3924 fun = i::Handle<i::JSFunction>::cast(delegate); | 3926 fun = i::Handle<i::JSFunction>::cast(delegate); |
3925 recv_obj = obj; | 3927 recv_obj = obj; |
3926 } | 3928 } |
3927 EXCEPTION_PREAMBLE(isolate); | 3929 EXCEPTION_PREAMBLE(isolate); |
3928 i::Handle<i::Object> returned = i::Execution::Call( | 3930 i::Handle<i::Object> returned; |
3929 isolate, fun, recv_obj, argc, args, &has_pending_exception, true); | 3931 has_pending_exception = !i::Execution::Call( |
| 3932 isolate, fun, recv_obj, argc, args, true).ToHandle(&returned); |
3930 EXCEPTION_BAILOUT_CHECK_DO_CALLBACK(isolate, Local<Value>()); | 3933 EXCEPTION_BAILOUT_CHECK_DO_CALLBACK(isolate, Local<Value>()); |
3931 return Utils::ToLocal(scope.CloseAndEscape(returned)); | 3934 return Utils::ToLocal(scope.CloseAndEscape(returned)); |
3932 } | 3935 } |
3933 | 3936 |
3934 | 3937 |
3935 Local<v8::Value> Object::CallAsConstructor(int argc, | 3938 Local<v8::Value> Object::CallAsConstructor(int argc, |
3936 v8::Handle<v8::Value> argv[]) { | 3939 v8::Handle<v8::Value> argv[]) { |
3937 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 3940 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
3938 ON_BAILOUT(isolate, "v8::Object::CallAsConstructor()", | 3941 ON_BAILOUT(isolate, "v8::Object::CallAsConstructor()", |
3939 return Local<v8::Object>()); | 3942 return Local<v8::Object>()); |
3940 LOG_API(isolate, "Object::CallAsConstructor"); | 3943 LOG_API(isolate, "Object::CallAsConstructor"); |
3941 ENTER_V8(isolate); | 3944 ENTER_V8(isolate); |
3942 i::Logger::TimerEventScope timer_scope( | 3945 i::Logger::TimerEventScope timer_scope( |
3943 isolate, i::Logger::TimerEventScope::v8_execute); | 3946 isolate, i::Logger::TimerEventScope::v8_execute); |
3944 i::HandleScope scope(isolate); | 3947 i::HandleScope scope(isolate); |
3945 i::Handle<i::JSObject> obj = Utils::OpenHandle(this); | 3948 i::Handle<i::JSObject> obj = Utils::OpenHandle(this); |
3946 STATIC_ASSERT(sizeof(v8::Handle<v8::Value>) == sizeof(i::Object**)); | 3949 STATIC_ASSERT(sizeof(v8::Handle<v8::Value>) == sizeof(i::Object**)); |
3947 i::Handle<i::Object>* args = reinterpret_cast<i::Handle<i::Object>*>(argv); | 3950 i::Handle<i::Object>* args = reinterpret_cast<i::Handle<i::Object>*>(argv); |
3948 if (obj->IsJSFunction()) { | 3951 if (obj->IsJSFunction()) { |
3949 i::Handle<i::JSFunction> fun = i::Handle<i::JSFunction>::cast(obj); | 3952 i::Handle<i::JSFunction> fun = i::Handle<i::JSFunction>::cast(obj); |
3950 EXCEPTION_PREAMBLE(isolate); | 3953 EXCEPTION_PREAMBLE(isolate); |
3951 i::Handle<i::Object> returned = | 3954 i::Handle<i::Object> returned; |
3952 i::Execution::New(fun, argc, args, &has_pending_exception); | 3955 has_pending_exception = !i::Execution::New( |
| 3956 fun, argc, args).ToHandle(&returned); |
3953 EXCEPTION_BAILOUT_CHECK_DO_CALLBACK(isolate, Local<v8::Object>()); | 3957 EXCEPTION_BAILOUT_CHECK_DO_CALLBACK(isolate, Local<v8::Object>()); |
3954 return Utils::ToLocal(scope.CloseAndEscape( | 3958 return Utils::ToLocal(scope.CloseAndEscape( |
3955 i::Handle<i::JSObject>::cast(returned))); | 3959 i::Handle<i::JSObject>::cast(returned))); |
3956 } | 3960 } |
3957 EXCEPTION_PREAMBLE(isolate); | 3961 EXCEPTION_PREAMBLE(isolate); |
3958 i::Handle<i::Object> delegate = i::Execution::TryGetConstructorDelegate( | 3962 i::Handle<i::Object> delegate; |
3959 isolate, obj, &has_pending_exception); | 3963 has_pending_exception = !i::Execution::TryGetConstructorDelegate( |
| 3964 isolate, obj).ToHandle(&delegate); |
3960 EXCEPTION_BAILOUT_CHECK(isolate, Local<v8::Object>()); | 3965 EXCEPTION_BAILOUT_CHECK(isolate, Local<v8::Object>()); |
3961 if (!delegate->IsUndefined()) { | 3966 if (!delegate->IsUndefined()) { |
3962 i::Handle<i::JSFunction> fun = i::Handle<i::JSFunction>::cast(delegate); | 3967 i::Handle<i::JSFunction> fun = i::Handle<i::JSFunction>::cast(delegate); |
3963 EXCEPTION_PREAMBLE(isolate); | 3968 EXCEPTION_PREAMBLE(isolate); |
3964 i::Handle<i::Object> returned = i::Execution::Call( | 3969 i::Handle<i::Object> returned; |
3965 isolate, fun, obj, argc, args, &has_pending_exception); | 3970 has_pending_exception = !i::Execution::Call( |
| 3971 isolate, fun, obj, argc, args).ToHandle(&returned); |
3966 EXCEPTION_BAILOUT_CHECK_DO_CALLBACK(isolate, Local<v8::Object>()); | 3972 EXCEPTION_BAILOUT_CHECK_DO_CALLBACK(isolate, Local<v8::Object>()); |
3967 ASSERT(!delegate->IsUndefined()); | 3973 ASSERT(!delegate->IsUndefined()); |
3968 return Utils::ToLocal(scope.CloseAndEscape(returned)); | 3974 return Utils::ToLocal(scope.CloseAndEscape(returned)); |
3969 } | 3975 } |
3970 return Local<v8::Object>(); | 3976 return Local<v8::Object>(); |
3971 } | 3977 } |
3972 | 3978 |
3973 | 3979 |
3974 Local<Function> Function::New(Isolate* v8_isolate, | 3980 Local<Function> Function::New(Isolate* v8_isolate, |
3975 FunctionCallback callback, | 3981 FunctionCallback callback, |
(...skipping 20 matching lines...) Expand all Loading... |
3996 return Local<v8::Object>()); | 4002 return Local<v8::Object>()); |
3997 LOG_API(isolate, "Function::NewInstance"); | 4003 LOG_API(isolate, "Function::NewInstance"); |
3998 ENTER_V8(isolate); | 4004 ENTER_V8(isolate); |
3999 i::Logger::TimerEventScope timer_scope( | 4005 i::Logger::TimerEventScope timer_scope( |
4000 isolate, i::Logger::TimerEventScope::v8_execute); | 4006 isolate, i::Logger::TimerEventScope::v8_execute); |
4001 EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); | 4007 EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
4002 i::Handle<i::JSFunction> function = Utils::OpenHandle(this); | 4008 i::Handle<i::JSFunction> function = Utils::OpenHandle(this); |
4003 STATIC_ASSERT(sizeof(v8::Handle<v8::Value>) == sizeof(i::Object**)); | 4009 STATIC_ASSERT(sizeof(v8::Handle<v8::Value>) == sizeof(i::Object**)); |
4004 i::Handle<i::Object>* args = reinterpret_cast<i::Handle<i::Object>*>(argv); | 4010 i::Handle<i::Object>* args = reinterpret_cast<i::Handle<i::Object>*>(argv); |
4005 EXCEPTION_PREAMBLE(isolate); | 4011 EXCEPTION_PREAMBLE(isolate); |
4006 i::Handle<i::Object> returned = | 4012 i::Handle<i::Object> returned; |
4007 i::Execution::New(function, argc, args, &has_pending_exception); | 4013 has_pending_exception = !i::Execution::New( |
| 4014 function, argc, args).ToHandle(&returned); |
4008 EXCEPTION_BAILOUT_CHECK_DO_CALLBACK(isolate, Local<v8::Object>()); | 4015 EXCEPTION_BAILOUT_CHECK_DO_CALLBACK(isolate, Local<v8::Object>()); |
4009 return scope.Escape(Utils::ToLocal(i::Handle<i::JSObject>::cast(returned))); | 4016 return scope.Escape(Utils::ToLocal(i::Handle<i::JSObject>::cast(returned))); |
4010 } | 4017 } |
4011 | 4018 |
4012 | 4019 |
4013 Local<v8::Value> Function::Call(v8::Handle<v8::Value> recv, int argc, | 4020 Local<v8::Value> Function::Call(v8::Handle<v8::Value> recv, int argc, |
4014 v8::Handle<v8::Value> argv[]) { | 4021 v8::Handle<v8::Value> argv[]) { |
4015 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 4022 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
4016 ON_BAILOUT(isolate, "v8::Function::Call()", return Local<v8::Value>()); | 4023 ON_BAILOUT(isolate, "v8::Function::Call()", return Local<v8::Value>()); |
4017 LOG_API(isolate, "Function::Call"); | 4024 LOG_API(isolate, "Function::Call"); |
4018 ENTER_V8(isolate); | 4025 ENTER_V8(isolate); |
4019 i::Logger::TimerEventScope timer_scope( | 4026 i::Logger::TimerEventScope timer_scope( |
4020 isolate, i::Logger::TimerEventScope::v8_execute); | 4027 isolate, i::Logger::TimerEventScope::v8_execute); |
4021 i::Object* raw_result = NULL; | 4028 i::HandleScope scope(isolate); |
4022 { | 4029 i::Handle<i::JSFunction> fun = Utils::OpenHandle(this); |
4023 i::HandleScope scope(isolate); | 4030 i::Handle<i::Object> recv_obj = Utils::OpenHandle(*recv); |
4024 i::Handle<i::JSFunction> fun = Utils::OpenHandle(this); | 4031 STATIC_ASSERT(sizeof(v8::Handle<v8::Value>) == sizeof(i::Object**)); |
4025 i::Handle<i::Object> recv_obj = Utils::OpenHandle(*recv); | 4032 i::Handle<i::Object>* args = reinterpret_cast<i::Handle<i::Object>*>(argv); |
4026 STATIC_ASSERT(sizeof(v8::Handle<v8::Value>) == sizeof(i::Object**)); | 4033 EXCEPTION_PREAMBLE(isolate); |
4027 i::Handle<i::Object>* args = reinterpret_cast<i::Handle<i::Object>*>(argv); | 4034 i::Handle<i::Object> returned; |
4028 EXCEPTION_PREAMBLE(isolate); | 4035 has_pending_exception = !i::Execution::Call( |
4029 i::Handle<i::Object> returned = i::Execution::Call( | 4036 isolate, fun, recv_obj, argc, args, true).ToHandle(&returned); |
4030 isolate, fun, recv_obj, argc, args, &has_pending_exception, true); | 4037 EXCEPTION_BAILOUT_CHECK_DO_CALLBACK(isolate, Local<Object>()); |
4031 EXCEPTION_BAILOUT_CHECK_DO_CALLBACK(isolate, Local<Object>()); | 4038 return Utils::ToLocal(scope.CloseAndEscape(returned)); |
4032 raw_result = *returned; | |
4033 } | |
4034 i::Handle<i::Object> result(raw_result, isolate); | |
4035 return Utils::ToLocal(result); | |
4036 } | 4039 } |
4037 | 4040 |
4038 | 4041 |
4039 void Function::SetName(v8::Handle<v8::String> name) { | 4042 void Function::SetName(v8::Handle<v8::String> name) { |
4040 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 4043 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
4041 ENTER_V8(isolate); | 4044 ENTER_V8(isolate); |
4042 USE(isolate); | 4045 USE(isolate); |
4043 i::Handle<i::JSFunction> func = Utils::OpenHandle(this); | 4046 i::Handle<i::JSFunction> func = Utils::OpenHandle(this); |
4044 func->shared()->set_name(*Utils::OpenHandle(*name)); | 4047 func->shared()->set_name(*Utils::OpenHandle(*name)); |
4045 } | 4048 } |
(...skipping 1252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5298 } | 5301 } |
5299 | 5302 |
5300 | 5303 |
5301 Local<v8::Object> ObjectTemplate::NewInstance() { | 5304 Local<v8::Object> ObjectTemplate::NewInstance() { |
5302 i::Isolate* isolate = i::Isolate::Current(); | 5305 i::Isolate* isolate = i::Isolate::Current(); |
5303 ON_BAILOUT(isolate, "v8::ObjectTemplate::NewInstance()", | 5306 ON_BAILOUT(isolate, "v8::ObjectTemplate::NewInstance()", |
5304 return Local<v8::Object>()); | 5307 return Local<v8::Object>()); |
5305 LOG_API(isolate, "ObjectTemplate::NewInstance"); | 5308 LOG_API(isolate, "ObjectTemplate::NewInstance"); |
5306 ENTER_V8(isolate); | 5309 ENTER_V8(isolate); |
5307 EXCEPTION_PREAMBLE(isolate); | 5310 EXCEPTION_PREAMBLE(isolate); |
5308 i::Handle<i::Object> obj = | 5311 i::Handle<i::Object> obj; |
5309 i::Execution::InstantiateObject(Utils::OpenHandle(this), | 5312 has_pending_exception = !i::Execution::InstantiateObject( |
5310 &has_pending_exception); | 5313 Utils::OpenHandle(this)).ToHandle(&obj); |
5311 EXCEPTION_BAILOUT_CHECK(isolate, Local<v8::Object>()); | 5314 EXCEPTION_BAILOUT_CHECK(isolate, Local<v8::Object>()); |
5312 return Utils::ToLocal(i::Handle<i::JSObject>::cast(obj)); | 5315 return Utils::ToLocal(i::Handle<i::JSObject>::cast(obj)); |
5313 } | 5316 } |
5314 | 5317 |
5315 | 5318 |
5316 Local<v8::Function> FunctionTemplate::GetFunction() { | 5319 Local<v8::Function> FunctionTemplate::GetFunction() { |
5317 i::Isolate* isolate = i::Isolate::Current(); | 5320 i::Isolate* isolate = i::Isolate::Current(); |
5318 ON_BAILOUT(isolate, "v8::FunctionTemplate::GetFunction()", | 5321 ON_BAILOUT(isolate, "v8::FunctionTemplate::GetFunction()", |
5319 return Local<v8::Function>()); | 5322 return Local<v8::Function>()); |
5320 LOG_API(isolate, "FunctionTemplate::GetFunction"); | 5323 LOG_API(isolate, "FunctionTemplate::GetFunction"); |
5321 ENTER_V8(isolate); | 5324 ENTER_V8(isolate); |
5322 EXCEPTION_PREAMBLE(isolate); | 5325 EXCEPTION_PREAMBLE(isolate); |
5323 i::Handle<i::Object> obj = | 5326 i::Handle<i::Object> obj; |
5324 i::Execution::InstantiateFunction(Utils::OpenHandle(this), | 5327 has_pending_exception = !i::Execution::InstantiateFunction( |
5325 &has_pending_exception); | 5328 Utils::OpenHandle(this)).ToHandle(&obj); |
5326 EXCEPTION_BAILOUT_CHECK(isolate, Local<v8::Function>()); | 5329 EXCEPTION_BAILOUT_CHECK(isolate, Local<v8::Function>()); |
5327 return Utils::ToLocal(i::Handle<i::JSFunction>::cast(obj)); | 5330 return Utils::ToLocal(i::Handle<i::JSFunction>::cast(obj)); |
5328 } | 5331 } |
5329 | 5332 |
5330 | 5333 |
5331 bool FunctionTemplate::HasInstance(v8::Handle<v8::Value> value) { | 5334 bool FunctionTemplate::HasInstance(v8::Handle<v8::Value> value) { |
5332 ON_BAILOUT(i::Isolate::Current(), "v8::FunctionTemplate::HasInstanceOf()", | 5335 ON_BAILOUT(i::Isolate::Current(), "v8::FunctionTemplate::HasInstanceOf()", |
5333 return false); | 5336 return false); |
5334 i::Object* obj = *Utils::OpenHandle(*value); | 5337 i::Object* obj = *Utils::OpenHandle(*value); |
5335 return Utils::OpenHandle(this)->IsTemplateFor(obj); | 5338 return Utils::OpenHandle(this)->IsTemplateFor(obj); |
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5697 Local<v8::Value> v8::Date::New(Isolate* isolate, double time) { | 5700 Local<v8::Value> v8::Date::New(Isolate* isolate, double time) { |
5698 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 5701 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
5699 EnsureInitializedForIsolate(i_isolate, "v8::Date::New()"); | 5702 EnsureInitializedForIsolate(i_isolate, "v8::Date::New()"); |
5700 LOG_API(i_isolate, "Date::New"); | 5703 LOG_API(i_isolate, "Date::New"); |
5701 if (std::isnan(time)) { | 5704 if (std::isnan(time)) { |
5702 // Introduce only canonical NaN value into the VM, to avoid signaling NaNs. | 5705 // Introduce only canonical NaN value into the VM, to avoid signaling NaNs. |
5703 time = i::OS::nan_value(); | 5706 time = i::OS::nan_value(); |
5704 } | 5707 } |
5705 ENTER_V8(i_isolate); | 5708 ENTER_V8(i_isolate); |
5706 EXCEPTION_PREAMBLE(i_isolate); | 5709 EXCEPTION_PREAMBLE(i_isolate); |
5707 i::Handle<i::Object> obj = | 5710 i::Handle<i::Object> obj; |
5708 i::Execution::NewDate(i_isolate, time, &has_pending_exception); | 5711 has_pending_exception = !i::Execution::NewDate( |
| 5712 i_isolate, time).ToHandle(&obj); |
5709 EXCEPTION_BAILOUT_CHECK(i_isolate, Local<v8::Value>()); | 5713 EXCEPTION_BAILOUT_CHECK(i_isolate, Local<v8::Value>()); |
5710 return Utils::ToLocal(obj); | 5714 return Utils::ToLocal(obj); |
5711 } | 5715 } |
5712 | 5716 |
5713 | 5717 |
5714 double v8::Date::ValueOf() const { | 5718 double v8::Date::ValueOf() const { |
5715 i::Isolate* isolate = i::Isolate::Current(); | 5719 i::Isolate* isolate = i::Isolate::Current(); |
5716 LOG_API(isolate, "Date::NumberValue"); | 5720 LOG_API(isolate, "Date::NumberValue"); |
5717 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 5721 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
5718 i::Handle<i::JSDate> jsdate = i::Handle<i::JSDate>::cast(obj); | 5722 i::Handle<i::JSDate> jsdate = i::Handle<i::JSDate>::cast(obj); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5758 } | 5762 } |
5759 | 5763 |
5760 | 5764 |
5761 Local<v8::RegExp> v8::RegExp::New(Handle<String> pattern, | 5765 Local<v8::RegExp> v8::RegExp::New(Handle<String> pattern, |
5762 Flags flags) { | 5766 Flags flags) { |
5763 i::Isolate* isolate = Utils::OpenHandle(*pattern)->GetIsolate(); | 5767 i::Isolate* isolate = Utils::OpenHandle(*pattern)->GetIsolate(); |
5764 EnsureInitializedForIsolate(isolate, "v8::RegExp::New()"); | 5768 EnsureInitializedForIsolate(isolate, "v8::RegExp::New()"); |
5765 LOG_API(isolate, "RegExp::New"); | 5769 LOG_API(isolate, "RegExp::New"); |
5766 ENTER_V8(isolate); | 5770 ENTER_V8(isolate); |
5767 EXCEPTION_PREAMBLE(isolate); | 5771 EXCEPTION_PREAMBLE(isolate); |
5768 i::Handle<i::JSRegExp> obj = i::Execution::NewJSRegExp( | 5772 i::Handle<i::JSRegExp> obj; |
| 5773 has_pending_exception = !i::Execution::NewJSRegExp( |
5769 Utils::OpenHandle(*pattern), | 5774 Utils::OpenHandle(*pattern), |
5770 RegExpFlagsToString(flags), | 5775 RegExpFlagsToString(flags)).ToHandle(&obj); |
5771 &has_pending_exception); | |
5772 EXCEPTION_BAILOUT_CHECK(isolate, Local<v8::RegExp>()); | 5776 EXCEPTION_BAILOUT_CHECK(isolate, Local<v8::RegExp>()); |
5773 return Utils::ToLocal(i::Handle<i::JSRegExp>::cast(obj)); | 5777 return Utils::ToLocal(i::Handle<i::JSRegExp>::cast(obj)); |
5774 } | 5778 } |
5775 | 5779 |
5776 | 5780 |
5777 Local<v8::String> v8::RegExp::GetSource() const { | 5781 Local<v8::String> v8::RegExp::GetSource() const { |
5778 i::Handle<i::JSRegExp> obj = Utils::OpenHandle(this); | 5782 i::Handle<i::JSRegExp> obj = Utils::OpenHandle(this); |
5779 return Utils::ToLocal(i::Handle<i::String>(obj->Pattern())); | 5783 return Utils::ToLocal(i::Handle<i::String>(obj->Pattern())); |
5780 } | 5784 } |
5781 | 5785 |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5845 | 5849 |
5846 bool Value::IsPromise() const { | 5850 bool Value::IsPromise() const { |
5847 i::Handle<i::Object> val = Utils::OpenHandle(this); | 5851 i::Handle<i::Object> val = Utils::OpenHandle(this); |
5848 if (!i::FLAG_harmony_promises || !val->IsJSObject()) return false; | 5852 if (!i::FLAG_harmony_promises || !val->IsJSObject()) return false; |
5849 i::Handle<i::JSObject> obj = i::Handle<i::JSObject>::cast(val); | 5853 i::Handle<i::JSObject> obj = i::Handle<i::JSObject>::cast(val); |
5850 i::Isolate* isolate = obj->GetIsolate(); | 5854 i::Isolate* isolate = obj->GetIsolate(); |
5851 LOG_API(isolate, "IsPromise"); | 5855 LOG_API(isolate, "IsPromise"); |
5852 ENTER_V8(isolate); | 5856 ENTER_V8(isolate); |
5853 EXCEPTION_PREAMBLE(isolate); | 5857 EXCEPTION_PREAMBLE(isolate); |
5854 i::Handle<i::Object> argv[] = { obj }; | 5858 i::Handle<i::Object> argv[] = { obj }; |
5855 i::Handle<i::Object> b = i::Execution::Call( | 5859 i::Handle<i::Object> b; |
| 5860 has_pending_exception = !i::Execution::Call( |
5856 isolate, | 5861 isolate, |
5857 handle( | 5862 handle( |
5858 isolate->context()->global_object()->native_context()->is_promise()), | 5863 isolate->context()->global_object()->native_context()->is_promise()), |
5859 isolate->factory()->undefined_value(), | 5864 isolate->factory()->undefined_value(), |
5860 ARRAY_SIZE(argv), argv, | 5865 ARRAY_SIZE(argv), argv, |
5861 &has_pending_exception, | 5866 false).ToHandle(&b); |
5862 false); | |
5863 EXCEPTION_BAILOUT_CHECK(isolate, false); | 5867 EXCEPTION_BAILOUT_CHECK(isolate, false); |
5864 return b->BooleanValue(); | 5868 return b->BooleanValue(); |
5865 } | 5869 } |
5866 | 5870 |
5867 | 5871 |
5868 Local<Promise::Resolver> Promise::Resolver::New(Isolate* v8_isolate) { | 5872 Local<Promise::Resolver> Promise::Resolver::New(Isolate* v8_isolate) { |
5869 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(v8_isolate); | 5873 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(v8_isolate); |
5870 LOG_API(isolate, "Promise::Resolver::New"); | 5874 LOG_API(isolate, "Promise::Resolver::New"); |
5871 ENTER_V8(isolate); | 5875 ENTER_V8(isolate); |
5872 EXCEPTION_PREAMBLE(isolate); | 5876 EXCEPTION_PREAMBLE(isolate); |
5873 i::Handle<i::Object> result = i::Execution::Call( | 5877 i::Handle<i::Object> result; |
| 5878 has_pending_exception = !i::Execution::Call( |
5874 isolate, | 5879 isolate, |
5875 handle(isolate->context()->global_object()->native_context()-> | 5880 handle(isolate->context()->global_object()->native_context()-> |
5876 promise_create()), | 5881 promise_create()), |
5877 isolate->factory()->undefined_value(), | 5882 isolate->factory()->undefined_value(), |
5878 0, NULL, | 5883 0, NULL, |
5879 &has_pending_exception, | 5884 false).ToHandle(&result); |
5880 false); | |
5881 EXCEPTION_BAILOUT_CHECK(isolate, Local<Promise::Resolver>()); | 5885 EXCEPTION_BAILOUT_CHECK(isolate, Local<Promise::Resolver>()); |
5882 return Local<Promise::Resolver>::Cast(Utils::ToLocal(result)); | 5886 return Local<Promise::Resolver>::Cast(Utils::ToLocal(result)); |
5883 } | 5887 } |
5884 | 5888 |
5885 | 5889 |
5886 Local<Promise> Promise::Resolver::GetPromise() { | 5890 Local<Promise> Promise::Resolver::GetPromise() { |
5887 i::Handle<i::JSObject> promise = Utils::OpenHandle(this); | 5891 i::Handle<i::JSObject> promise = Utils::OpenHandle(this); |
5888 return Local<Promise>::Cast(Utils::ToLocal(promise)); | 5892 return Local<Promise>::Cast(Utils::ToLocal(promise)); |
5889 } | 5893 } |
5890 | 5894 |
5891 | 5895 |
5892 void Promise::Resolver::Resolve(Handle<Value> value) { | 5896 void Promise::Resolver::Resolve(Handle<Value> value) { |
5893 i::Handle<i::JSObject> promise = Utils::OpenHandle(this); | 5897 i::Handle<i::JSObject> promise = Utils::OpenHandle(this); |
5894 i::Isolate* isolate = promise->GetIsolate(); | 5898 i::Isolate* isolate = promise->GetIsolate(); |
5895 LOG_API(isolate, "Promise::Resolver::Resolve"); | 5899 LOG_API(isolate, "Promise::Resolver::Resolve"); |
5896 ENTER_V8(isolate); | 5900 ENTER_V8(isolate); |
5897 EXCEPTION_PREAMBLE(isolate); | 5901 EXCEPTION_PREAMBLE(isolate); |
5898 i::Handle<i::Object> argv[] = { promise, Utils::OpenHandle(*value) }; | 5902 i::Handle<i::Object> argv[] = { promise, Utils::OpenHandle(*value) }; |
5899 i::Execution::Call( | 5903 has_pending_exception = i::Execution::Call( |
5900 isolate, | 5904 isolate, |
5901 handle(isolate->context()->global_object()->native_context()-> | 5905 handle(isolate->context()->global_object()->native_context()-> |
5902 promise_resolve()), | 5906 promise_resolve()), |
5903 isolate->factory()->undefined_value(), | 5907 isolate->factory()->undefined_value(), |
5904 ARRAY_SIZE(argv), argv, | 5908 ARRAY_SIZE(argv), argv, |
5905 &has_pending_exception, | 5909 false).is_null(); |
5906 false); | |
5907 EXCEPTION_BAILOUT_CHECK(isolate, /* void */ ;); | 5910 EXCEPTION_BAILOUT_CHECK(isolate, /* void */ ;); |
5908 } | 5911 } |
5909 | 5912 |
5910 | 5913 |
5911 void Promise::Resolver::Reject(Handle<Value> value) { | 5914 void Promise::Resolver::Reject(Handle<Value> value) { |
5912 i::Handle<i::JSObject> promise = Utils::OpenHandle(this); | 5915 i::Handle<i::JSObject> promise = Utils::OpenHandle(this); |
5913 i::Isolate* isolate = promise->GetIsolate(); | 5916 i::Isolate* isolate = promise->GetIsolate(); |
5914 LOG_API(isolate, "Promise::Resolver::Reject"); | 5917 LOG_API(isolate, "Promise::Resolver::Reject"); |
5915 ENTER_V8(isolate); | 5918 ENTER_V8(isolate); |
5916 EXCEPTION_PREAMBLE(isolate); | 5919 EXCEPTION_PREAMBLE(isolate); |
5917 i::Handle<i::Object> argv[] = { promise, Utils::OpenHandle(*value) }; | 5920 i::Handle<i::Object> argv[] = { promise, Utils::OpenHandle(*value) }; |
5918 i::Execution::Call( | 5921 has_pending_exception = i::Execution::Call( |
5919 isolate, | 5922 isolate, |
5920 handle(isolate->context()->global_object()->native_context()-> | 5923 handle(isolate->context()->global_object()->native_context()-> |
5921 promise_reject()), | 5924 promise_reject()), |
5922 isolate->factory()->undefined_value(), | 5925 isolate->factory()->undefined_value(), |
5923 ARRAY_SIZE(argv), argv, | 5926 ARRAY_SIZE(argv), argv, |
5924 &has_pending_exception, | 5927 false).is_null(); |
5925 false); | |
5926 EXCEPTION_BAILOUT_CHECK(isolate, /* void */ ;); | 5928 EXCEPTION_BAILOUT_CHECK(isolate, /* void */ ;); |
5927 } | 5929 } |
5928 | 5930 |
5929 | 5931 |
5930 Local<Promise> Promise::Chain(Handle<Function> handler) { | 5932 Local<Promise> Promise::Chain(Handle<Function> handler) { |
5931 i::Handle<i::JSObject> promise = Utils::OpenHandle(this); | 5933 i::Handle<i::JSObject> promise = Utils::OpenHandle(this); |
5932 i::Isolate* isolate = promise->GetIsolate(); | 5934 i::Isolate* isolate = promise->GetIsolate(); |
5933 LOG_API(isolate, "Promise::Chain"); | 5935 LOG_API(isolate, "Promise::Chain"); |
5934 ENTER_V8(isolate); | 5936 ENTER_V8(isolate); |
5935 EXCEPTION_PREAMBLE(isolate); | 5937 EXCEPTION_PREAMBLE(isolate); |
5936 i::Handle<i::Object> argv[] = { Utils::OpenHandle(*handler) }; | 5938 i::Handle<i::Object> argv[] = { Utils::OpenHandle(*handler) }; |
5937 i::Handle<i::Object> result = i::Execution::Call( | 5939 i::Handle<i::Object> result; |
| 5940 has_pending_exception = !i::Execution::Call( |
5938 isolate, | 5941 isolate, |
5939 handle(isolate->context()->global_object()->native_context()-> | 5942 handle(isolate->context()->global_object()->native_context()-> |
5940 promise_chain()), | 5943 promise_chain()), |
5941 promise, | 5944 promise, |
5942 ARRAY_SIZE(argv), argv, | 5945 ARRAY_SIZE(argv), argv, |
5943 &has_pending_exception, | 5946 false).ToHandle(&result); |
5944 false); | |
5945 EXCEPTION_BAILOUT_CHECK(isolate, Local<Promise>()); | 5947 EXCEPTION_BAILOUT_CHECK(isolate, Local<Promise>()); |
5946 return Local<Promise>::Cast(Utils::ToLocal(result)); | 5948 return Local<Promise>::Cast(Utils::ToLocal(result)); |
5947 } | 5949 } |
5948 | 5950 |
5949 | 5951 |
5950 Local<Promise> Promise::Catch(Handle<Function> handler) { | 5952 Local<Promise> Promise::Catch(Handle<Function> handler) { |
5951 i::Handle<i::JSObject> promise = Utils::OpenHandle(this); | 5953 i::Handle<i::JSObject> promise = Utils::OpenHandle(this); |
5952 i::Isolate* isolate = promise->GetIsolate(); | 5954 i::Isolate* isolate = promise->GetIsolate(); |
5953 LOG_API(isolate, "Promise::Catch"); | 5955 LOG_API(isolate, "Promise::Catch"); |
5954 ENTER_V8(isolate); | 5956 ENTER_V8(isolate); |
5955 EXCEPTION_PREAMBLE(isolate); | 5957 EXCEPTION_PREAMBLE(isolate); |
5956 i::Handle<i::Object> argv[] = { Utils::OpenHandle(*handler) }; | 5958 i::Handle<i::Object> argv[] = { Utils::OpenHandle(*handler) }; |
5957 i::Handle<i::Object> result = i::Execution::Call( | 5959 i::Handle<i::Object> result; |
| 5960 has_pending_exception = !i::Execution::Call( |
5958 isolate, | 5961 isolate, |
5959 handle(isolate->context()->global_object()->native_context()-> | 5962 handle(isolate->context()->global_object()->native_context()-> |
5960 promise_catch()), | 5963 promise_catch()), |
5961 promise, | 5964 promise, |
5962 ARRAY_SIZE(argv), argv, | 5965 ARRAY_SIZE(argv), argv, |
5963 &has_pending_exception, | 5966 false).ToHandle(&result); |
5964 false); | |
5965 EXCEPTION_BAILOUT_CHECK(isolate, Local<Promise>()); | 5967 EXCEPTION_BAILOUT_CHECK(isolate, Local<Promise>()); |
5966 return Local<Promise>::Cast(Utils::ToLocal(result)); | 5968 return Local<Promise>::Cast(Utils::ToLocal(result)); |
5967 } | 5969 } |
5968 | 5970 |
5969 | 5971 |
5970 bool v8::ArrayBuffer::IsExternal() const { | 5972 bool v8::ArrayBuffer::IsExternal() const { |
5971 return Utils::OpenHandle(this)->is_external(); | 5973 return Utils::OpenHandle(this)->is_external(); |
5972 } | 5974 } |
5973 | 5975 |
5974 | 5976 |
(...skipping 988 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6963 handler, provide_locker); | 6965 handler, provide_locker); |
6964 } | 6966 } |
6965 | 6967 |
6966 | 6968 |
6967 Local<Value> Debug::Call(v8::Handle<v8::Function> fun, | 6969 Local<Value> Debug::Call(v8::Handle<v8::Function> fun, |
6968 v8::Handle<v8::Value> data) { | 6970 v8::Handle<v8::Value> data) { |
6969 i::Isolate* isolate = i::Isolate::Current(); | 6971 i::Isolate* isolate = i::Isolate::Current(); |
6970 if (!isolate->IsInitialized()) return Local<Value>(); | 6972 if (!isolate->IsInitialized()) return Local<Value>(); |
6971 ON_BAILOUT(isolate, "v8::Debug::Call()", return Local<Value>()); | 6973 ON_BAILOUT(isolate, "v8::Debug::Call()", return Local<Value>()); |
6972 ENTER_V8(isolate); | 6974 ENTER_V8(isolate); |
6973 i::Handle<i::Object> result; | 6975 i::MaybeHandle<i::Object> maybe_result; |
6974 EXCEPTION_PREAMBLE(isolate); | 6976 EXCEPTION_PREAMBLE(isolate); |
6975 if (data.IsEmpty()) { | 6977 if (data.IsEmpty()) { |
6976 result = isolate->debugger()->Call(Utils::OpenHandle(*fun), | 6978 maybe_result = isolate->debugger()->Call( |
6977 isolate->factory()->undefined_value(), | 6979 Utils::OpenHandle(*fun), isolate->factory()->undefined_value()); |
6978 &has_pending_exception); | |
6979 } else { | 6980 } else { |
6980 result = isolate->debugger()->Call(Utils::OpenHandle(*fun), | 6981 maybe_result = isolate->debugger()->Call( |
6981 Utils::OpenHandle(*data), | 6982 Utils::OpenHandle(*fun), Utils::OpenHandle(*data)); |
6982 &has_pending_exception); | |
6983 } | 6983 } |
| 6984 i::Handle<i::Object> result; |
| 6985 has_pending_exception = !maybe_result.ToHandle(&result); |
6984 EXCEPTION_BAILOUT_CHECK(isolate, Local<Value>()); | 6986 EXCEPTION_BAILOUT_CHECK(isolate, Local<Value>()); |
6985 return Utils::ToLocal(result); | 6987 return Utils::ToLocal(result); |
6986 } | 6988 } |
6987 | 6989 |
6988 | 6990 |
6989 Local<Value> Debug::GetMirror(v8::Handle<v8::Value> obj) { | 6991 Local<Value> Debug::GetMirror(v8::Handle<v8::Value> obj) { |
6990 i::Isolate* isolate = i::Isolate::Current(); | 6992 i::Isolate* isolate = i::Isolate::Current(); |
6991 if (!isolate->IsInitialized()) return Local<Value>(); | 6993 if (!isolate->IsInitialized()) return Local<Value>(); |
6992 ON_BAILOUT(isolate, "v8::Debug::GetMirror()", return Local<Value>()); | 6994 ON_BAILOUT(isolate, "v8::Debug::GetMirror()", return Local<Value>()); |
6993 ENTER_V8(isolate); | 6995 ENTER_V8(isolate); |
(...skipping 697 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7691 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); | 7693 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); |
7692 Address callback_address = | 7694 Address callback_address = |
7693 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 7695 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
7694 VMState<EXTERNAL> state(isolate); | 7696 VMState<EXTERNAL> state(isolate); |
7695 ExternalCallbackScope call_scope(isolate, callback_address); | 7697 ExternalCallbackScope call_scope(isolate, callback_address); |
7696 callback(info); | 7698 callback(info); |
7697 } | 7699 } |
7698 | 7700 |
7699 | 7701 |
7700 } } // namespace v8::internal | 7702 } } // namespace v8::internal |
OLD | NEW |