OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/api.h" | 5 #include "src/api.h" |
6 | 6 |
7 #include <string.h> // For memcpy, strlen. | 7 #include <string.h> // For memcpy, strlen. |
8 #ifdef V8_USE_ADDRESS_SANITIZER | 8 #ifdef V8_USE_ADDRESS_SANITIZER |
9 #include <sanitizer/asan_interface.h> | 9 #include <sanitizer/asan_interface.h> |
10 #endif // V8_USE_ADDRESS_SANITIZER | 10 #endif // V8_USE_ADDRESS_SANITIZER |
(...skipping 1490 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1501 obj->GetIsolate()->factory()->NewFunctionFromSharedFunctionInfo( | 1501 obj->GetIsolate()->factory()->NewFunctionFromSharedFunctionInfo( |
1502 function_info, obj->GetIsolate()->native_context()); | 1502 function_info, obj->GetIsolate()->native_context()); |
1503 return ToApiHandle<Script>(function); | 1503 return ToApiHandle<Script>(function); |
1504 } | 1504 } |
1505 | 1505 |
1506 | 1506 |
1507 int UnboundScript::GetId() { | 1507 int UnboundScript::GetId() { |
1508 i::Handle<i::HeapObject> obj = | 1508 i::Handle<i::HeapObject> obj = |
1509 i::Handle<i::HeapObject>::cast(Utils::OpenHandle(this)); | 1509 i::Handle<i::HeapObject>::cast(Utils::OpenHandle(this)); |
1510 i::Isolate* isolate = obj->GetIsolate(); | 1510 i::Isolate* isolate = obj->GetIsolate(); |
1511 ON_BAILOUT(isolate, "v8::UnboundScript::GetId()", return -1); | |
1512 LOG_API(isolate, "v8::UnboundScript::GetId"); | 1511 LOG_API(isolate, "v8::UnboundScript::GetId"); |
1513 { | 1512 i::HandleScope scope(isolate); |
1514 i::HandleScope scope(isolate); | 1513 i::Handle<i::SharedFunctionInfo> function_info( |
1515 i::Handle<i::SharedFunctionInfo> function_info( | 1514 i::SharedFunctionInfo::cast(*obj)); |
1516 i::SharedFunctionInfo::cast(*obj)); | 1515 i::Handle<i::Script> script(i::Script::cast(function_info->script())); |
1517 i::Handle<i::Script> script(i::Script::cast(function_info->script())); | 1516 return script->id()->value(); |
1518 return script->id()->value(); | |
1519 } | |
1520 } | 1517 } |
1521 | 1518 |
1522 | 1519 |
1523 int UnboundScript::GetLineNumber(int code_pos) { | 1520 int UnboundScript::GetLineNumber(int code_pos) { |
1524 i::Handle<i::SharedFunctionInfo> obj = | 1521 i::Handle<i::SharedFunctionInfo> obj = |
1525 i::Handle<i::SharedFunctionInfo>::cast(Utils::OpenHandle(this)); | 1522 i::Handle<i::SharedFunctionInfo>::cast(Utils::OpenHandle(this)); |
1526 i::Isolate* isolate = obj->GetIsolate(); | 1523 i::Isolate* isolate = obj->GetIsolate(); |
1527 ON_BAILOUT(isolate, "v8::UnboundScript::GetLineNumber()", return -1); | |
1528 LOG_API(isolate, "UnboundScript::GetLineNumber"); | 1524 LOG_API(isolate, "UnboundScript::GetLineNumber"); |
1529 if (obj->script()->IsScript()) { | 1525 if (obj->script()->IsScript()) { |
1530 i::Handle<i::Script> script(i::Script::cast(obj->script())); | 1526 i::Handle<i::Script> script(i::Script::cast(obj->script())); |
1531 return i::Script::GetLineNumber(script, code_pos); | 1527 return i::Script::GetLineNumber(script, code_pos); |
1532 } else { | 1528 } else { |
1533 return -1; | 1529 return -1; |
1534 } | 1530 } |
1535 } | 1531 } |
1536 | 1532 |
1537 | 1533 |
1538 Handle<Value> UnboundScript::GetScriptName() { | 1534 Handle<Value> UnboundScript::GetScriptName() { |
1539 i::Handle<i::SharedFunctionInfo> obj = | 1535 i::Handle<i::SharedFunctionInfo> obj = |
1540 i::Handle<i::SharedFunctionInfo>::cast(Utils::OpenHandle(this)); | 1536 i::Handle<i::SharedFunctionInfo>::cast(Utils::OpenHandle(this)); |
1541 i::Isolate* isolate = obj->GetIsolate(); | 1537 i::Isolate* isolate = obj->GetIsolate(); |
1542 ON_BAILOUT(isolate, "v8::UnboundScript::GetName()", | |
1543 return Handle<String>()); | |
1544 LOG_API(isolate, "UnboundScript::GetName"); | 1538 LOG_API(isolate, "UnboundScript::GetName"); |
1545 if (obj->script()->IsScript()) { | 1539 if (obj->script()->IsScript()) { |
1546 i::Object* name = i::Script::cast(obj->script())->name(); | 1540 i::Object* name = i::Script::cast(obj->script())->name(); |
1547 return Utils::ToLocal(i::Handle<i::Object>(name, isolate)); | 1541 return Utils::ToLocal(i::Handle<i::Object>(name, isolate)); |
1548 } else { | 1542 } else { |
1549 return Handle<String>(); | 1543 return Handle<String>(); |
1550 } | 1544 } |
1551 } | 1545 } |
1552 | 1546 |
1553 | 1547 |
1554 Handle<Value> UnboundScript::GetSourceURL() { | 1548 Handle<Value> UnboundScript::GetSourceURL() { |
1555 i::Handle<i::SharedFunctionInfo> obj = | 1549 i::Handle<i::SharedFunctionInfo> obj = |
1556 i::Handle<i::SharedFunctionInfo>::cast(Utils::OpenHandle(this)); | 1550 i::Handle<i::SharedFunctionInfo>::cast(Utils::OpenHandle(this)); |
1557 i::Isolate* isolate = obj->GetIsolate(); | 1551 i::Isolate* isolate = obj->GetIsolate(); |
1558 ON_BAILOUT(isolate, "v8::UnboundScript::GetSourceURL()", | |
1559 return Handle<String>()); | |
1560 LOG_API(isolate, "UnboundScript::GetSourceURL"); | 1552 LOG_API(isolate, "UnboundScript::GetSourceURL"); |
1561 if (obj->script()->IsScript()) { | 1553 if (obj->script()->IsScript()) { |
1562 i::Object* url = i::Script::cast(obj->script())->source_url(); | 1554 i::Object* url = i::Script::cast(obj->script())->source_url(); |
1563 return Utils::ToLocal(i::Handle<i::Object>(url, isolate)); | 1555 return Utils::ToLocal(i::Handle<i::Object>(url, isolate)); |
1564 } else { | 1556 } else { |
1565 return Handle<String>(); | 1557 return Handle<String>(); |
1566 } | 1558 } |
1567 } | 1559 } |
1568 | 1560 |
1569 | 1561 |
1570 Handle<Value> UnboundScript::GetSourceMappingURL() { | 1562 Handle<Value> UnboundScript::GetSourceMappingURL() { |
1571 i::Handle<i::SharedFunctionInfo> obj = | 1563 i::Handle<i::SharedFunctionInfo> obj = |
1572 i::Handle<i::SharedFunctionInfo>::cast(Utils::OpenHandle(this)); | 1564 i::Handle<i::SharedFunctionInfo>::cast(Utils::OpenHandle(this)); |
1573 i::Isolate* isolate = obj->GetIsolate(); | 1565 i::Isolate* isolate = obj->GetIsolate(); |
1574 ON_BAILOUT(isolate, "v8::UnboundScript::GetSourceMappingURL()", | |
1575 return Handle<String>()); | |
1576 LOG_API(isolate, "UnboundScript::GetSourceMappingURL"); | 1566 LOG_API(isolate, "UnboundScript::GetSourceMappingURL"); |
1577 if (obj->script()->IsScript()) { | 1567 if (obj->script()->IsScript()) { |
1578 i::Object* url = i::Script::cast(obj->script())->source_mapping_url(); | 1568 i::Object* url = i::Script::cast(obj->script())->source_mapping_url(); |
1579 return Utils::ToLocal(i::Handle<i::Object>(url, isolate)); | 1569 return Utils::ToLocal(i::Handle<i::Object>(url, isolate)); |
1580 } else { | 1570 } else { |
1581 return Handle<String>(); | 1571 return Handle<String>(); |
1582 } | 1572 } |
1583 } | 1573 } |
1584 | 1574 |
1585 | 1575 |
| 1576 MaybeLocal<Value> Script::Run(Local<Context> context) { |
| 1577 PREPARE_FOR_EXECUTION_WITH_CALLBACK(context, "v8::Script::Run()", Value) |
| 1578 i::AggregatingHistogramTimerScope timer(isolate->counters()->compile_lazy()); |
| 1579 i::TimerEventScope<i::TimerEventExecute> timer_scope(isolate); |
| 1580 auto fun = i::Handle<i::JSFunction>::cast(Utils::OpenHandle(this)); |
| 1581 i::Handle<i::Object> receiver(isolate->global_proxy(), isolate); |
| 1582 Local<Value> result; |
| 1583 has_pending_exception = |
| 1584 !ToLocal<Value>(i::Execution::Call(isolate, fun, receiver, 0, NULL), |
| 1585 &result); |
| 1586 RETURN_ON_FAILED_EXECUTION(Value); |
| 1587 RETURN_ESCAPED(result); |
| 1588 } |
| 1589 |
| 1590 |
1586 Local<Value> Script::Run() { | 1591 Local<Value> Script::Run() { |
1587 i::Handle<i::Object> obj = Utils::OpenHandle(this, true); | 1592 auto self = Utils::OpenHandle(this, true); |
1588 // If execution is terminating, Compile(..)->Run() requires this | 1593 // If execution is terminating, Compile(..)->Run() requires this |
1589 // check. | 1594 // check. |
1590 if (obj.is_null()) return Local<Value>(); | 1595 if (self.is_null()) return Local<Value>(); |
1591 i::Isolate* isolate = i::Handle<i::HeapObject>::cast(obj)->GetIsolate(); | 1596 auto context = ContextFromHeapObject(self); |
1592 ON_BAILOUT(isolate, "v8::Script::Run()", return Local<Value>()); | 1597 RETURN_TO_LOCAL_UNCHECKED(Run(context), Value); |
1593 LOG_API(isolate, "Script::Run"); | |
1594 ENTER_V8(isolate); | |
1595 i::AggregatingHistogramTimerScope timer(isolate->counters()->compile_lazy()); | |
1596 i::TimerEventScope<i::TimerEventExecute> timer_scope(isolate); | |
1597 i::HandleScope scope(isolate); | |
1598 i::Handle<i::JSFunction> fun = i::Handle<i::JSFunction>::cast(obj); | |
1599 EXCEPTION_PREAMBLE(isolate); | |
1600 i::Handle<i::Object> receiver(isolate->global_proxy(), isolate); | |
1601 i::Handle<i::Object> result; | |
1602 has_pending_exception = !i::Execution::Call( | |
1603 isolate, fun, receiver, 0, NULL).ToHandle(&result); | |
1604 EXCEPTION_BAILOUT_CHECK_DO_CALLBACK(isolate, Local<Value>()); | |
1605 return Utils::ToLocal(scope.CloseAndEscape(result)); | |
1606 } | 1598 } |
1607 | 1599 |
1608 | 1600 |
1609 Local<UnboundScript> Script::GetUnboundScript() { | 1601 Local<UnboundScript> Script::GetUnboundScript() { |
1610 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 1602 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
1611 return ToApiHandle<UnboundScript>( | 1603 return ToApiHandle<UnboundScript>( |
1612 i::Handle<i::SharedFunctionInfo>(i::JSFunction::cast(*obj)->shared())); | 1604 i::Handle<i::SharedFunctionInfo>(i::JSFunction::cast(*obj)->shared())); |
1613 } | 1605 } |
1614 | 1606 |
1615 | 1607 |
(...skipping 553 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2169 void v8::TryCatch::SetCaptureMessage(bool value) { | 2161 void v8::TryCatch::SetCaptureMessage(bool value) { |
2170 capture_message_ = value; | 2162 capture_message_ = value; |
2171 } | 2163 } |
2172 | 2164 |
2173 | 2165 |
2174 // --- M e s s a g e --- | 2166 // --- M e s s a g e --- |
2175 | 2167 |
2176 | 2168 |
2177 Local<String> Message::Get() const { | 2169 Local<String> Message::Get() const { |
2178 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 2170 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
2179 ON_BAILOUT(isolate, "v8::Message::Get()", return Local<String>()); | |
2180 ENTER_V8(isolate); | 2171 ENTER_V8(isolate); |
2181 EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); | 2172 EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
2182 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 2173 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
2183 i::Handle<i::String> raw_result = i::MessageHandler::GetMessage(isolate, obj); | 2174 i::Handle<i::String> raw_result = i::MessageHandler::GetMessage(isolate, obj); |
2184 Local<String> result = Utils::ToLocal(raw_result); | 2175 Local<String> result = Utils::ToLocal(raw_result); |
2185 return scope.Escape(result); | 2176 return scope.Escape(result); |
2186 } | 2177 } |
2187 | 2178 |
2188 | 2179 |
2189 ScriptOrigin Message::GetScriptOrigin() const { | 2180 ScriptOrigin Message::GetScriptOrigin() const { |
2190 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 2181 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
2191 i::Handle<i::JSMessageObject> message = | 2182 auto message = i::Handle<i::JSMessageObject>::cast(Utils::OpenHandle(this)); |
2192 i::Handle<i::JSMessageObject>::cast(Utils::OpenHandle(this)); | 2183 auto script_wraper = i::Handle<i::Object>(message->script(), isolate); |
2193 i::Handle<i::Object> script_wraper = | 2184 auto script_value = i::Handle<i::JSValue>::cast(script_wraper); |
2194 i::Handle<i::Object>(message->script(), isolate); | |
2195 i::Handle<i::JSValue> script_value = | |
2196 i::Handle<i::JSValue>::cast(script_wraper); | |
2197 i::Handle<i::Script> script(i::Script::cast(script_value->value())); | 2185 i::Handle<i::Script> script(i::Script::cast(script_value->value())); |
2198 return GetScriptOriginForScript(isolate, script); | 2186 return GetScriptOriginForScript(isolate, script); |
2199 } | 2187 } |
2200 | 2188 |
2201 | 2189 |
2202 v8::Handle<Value> Message::GetScriptResourceName() const { | 2190 v8::Handle<Value> Message::GetScriptResourceName() const { |
2203 return GetScriptOrigin().ResourceName(); | 2191 return GetScriptOrigin().ResourceName(); |
2204 } | 2192 } |
2205 | 2193 |
2206 | 2194 |
2207 v8::Handle<v8::StackTrace> Message::GetStackTrace() const { | 2195 v8::Handle<v8::StackTrace> Message::GetStackTrace() const { |
2208 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 2196 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
2209 ENTER_V8(isolate); | 2197 ENTER_V8(isolate); |
2210 EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); | 2198 EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
2211 i::Handle<i::JSMessageObject> message = | 2199 auto message = i::Handle<i::JSMessageObject>::cast(Utils::OpenHandle(this)); |
2212 i::Handle<i::JSMessageObject>::cast(Utils::OpenHandle(this)); | |
2213 i::Handle<i::Object> stackFramesObj(message->stack_frames(), isolate); | 2200 i::Handle<i::Object> stackFramesObj(message->stack_frames(), isolate); |
2214 if (!stackFramesObj->IsJSArray()) return v8::Handle<v8::StackTrace>(); | 2201 if (!stackFramesObj->IsJSArray()) return v8::Handle<v8::StackTrace>(); |
2215 i::Handle<i::JSArray> stackTrace = | 2202 auto stackTrace = i::Handle<i::JSArray>::cast(stackFramesObj); |
2216 i::Handle<i::JSArray>::cast(stackFramesObj); | |
2217 return scope.Escape(Utils::StackTraceToLocal(stackTrace)); | 2203 return scope.Escape(Utils::StackTraceToLocal(stackTrace)); |
2218 } | 2204 } |
2219 | 2205 |
2220 | 2206 |
2221 MUST_USE_RESULT static i::MaybeHandle<i::Object> CallV8HeapFunction( | 2207 MUST_USE_RESULT static i::MaybeHandle<i::Object> CallV8HeapFunction( |
2222 i::Isolate* isolate, const char* name, i::Handle<i::Object> recv, int argc, | 2208 i::Isolate* isolate, const char* name, i::Handle<i::Object> recv, int argc, |
2223 i::Handle<i::Object> argv[]) { | 2209 i::Handle<i::Object> argv[]) { |
2224 i::Handle<i::Object> object_fun = | 2210 i::Handle<i::Object> object_fun = |
2225 i::Object::GetProperty( | 2211 i::Object::GetProperty( |
2226 isolate, isolate->js_builtins_object(), name).ToHandleChecked(); | 2212 isolate, isolate->js_builtins_object(), name).ToHandleChecked(); |
2227 i::Handle<i::JSFunction> fun = i::Handle<i::JSFunction>::cast(object_fun); | 2213 i::Handle<i::JSFunction> fun = i::Handle<i::JSFunction>::cast(object_fun); |
2228 return i::Execution::Call(isolate, fun, recv, argc, argv); | 2214 return i::Execution::Call(isolate, fun, recv, argc, argv); |
2229 } | 2215 } |
2230 | 2216 |
2231 | 2217 |
2232 MUST_USE_RESULT static i::MaybeHandle<i::Object> CallV8HeapFunction( | 2218 MUST_USE_RESULT static i::MaybeHandle<i::Object> CallV8HeapFunction( |
2233 i::Isolate* isolate, const char* name, i::Handle<i::Object> data) { | 2219 i::Isolate* isolate, const char* name, i::Handle<i::Object> data) { |
2234 i::Handle<i::Object> argv[] = { data }; | 2220 i::Handle<i::Object> argv[] = { data }; |
2235 return CallV8HeapFunction(isolate, name, isolate->js_builtins_object(), | 2221 return CallV8HeapFunction(isolate, name, isolate->js_builtins_object(), |
2236 arraysize(argv), argv); | 2222 arraysize(argv), argv); |
2237 } | 2223 } |
2238 | 2224 |
2239 | 2225 |
| 2226 Maybe<int> Message::GetLineNumber(Local<Context> context) const { |
| 2227 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Message::GetLineNumber()", int); |
| 2228 i::Handle<i::Object> result; |
| 2229 has_pending_exception = |
| 2230 !CallV8HeapFunction(isolate, "GetLineNumber", Utils::OpenHandle(this)) |
| 2231 .ToHandle(&result); |
| 2232 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(int); |
| 2233 return Just(static_cast<int>(result->Number())); |
| 2234 } |
| 2235 |
| 2236 |
2240 int Message::GetLineNumber() const { | 2237 int Message::GetLineNumber() const { |
2241 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 2238 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); |
2242 ON_BAILOUT(isolate, "v8::Message::GetLineNumber()", return kNoLineNumberInfo); | 2239 return GetLineNumber(context).FromMaybe(0); |
2243 ENTER_V8(isolate); | |
2244 i::HandleScope scope(isolate); | |
2245 | |
2246 EXCEPTION_PREAMBLE(isolate); | |
2247 i::Handle<i::Object> result; | |
2248 has_pending_exception = | |
2249 !CallV8HeapFunction(isolate, "GetLineNumber", Utils::OpenHandle(this)) | |
2250 .ToHandle(&result); | |
2251 EXCEPTION_BAILOUT_CHECK(isolate, 0); | |
2252 return static_cast<int>(result->Number()); | |
2253 } | 2240 } |
2254 | 2241 |
2255 | 2242 |
2256 int Message::GetStartPosition() const { | 2243 int Message::GetStartPosition() const { |
2257 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 2244 auto self = Utils::OpenHandle(this); |
2258 ENTER_V8(isolate); | 2245 return self->start_position(); |
2259 i::HandleScope scope(isolate); | |
2260 i::Handle<i::JSMessageObject> message = | |
2261 i::Handle<i::JSMessageObject>::cast(Utils::OpenHandle(this)); | |
2262 return message->start_position(); | |
2263 } | 2246 } |
2264 | 2247 |
2265 | 2248 |
2266 int Message::GetEndPosition() const { | 2249 int Message::GetEndPosition() const { |
2267 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 2250 auto self = Utils::OpenHandle(this); |
2268 ENTER_V8(isolate); | 2251 return self->end_position(); |
2269 i::HandleScope scope(isolate); | 2252 } |
2270 i::Handle<i::JSMessageObject> message = | 2253 |
2271 i::Handle<i::JSMessageObject>::cast(Utils::OpenHandle(this)); | 2254 |
2272 return message->end_position(); | 2255 Maybe<int> Message::GetStartColumn(Local<Context> context) const { |
| 2256 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Message::GetStartColumn()", |
| 2257 int); |
| 2258 auto self = Utils::OpenHandle(this); |
| 2259 i::Handle<i::Object> start_col_obj; |
| 2260 has_pending_exception = !CallV8HeapFunction(isolate, "GetPositionInLine", |
| 2261 self).ToHandle(&start_col_obj); |
| 2262 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(int); |
| 2263 return Just(static_cast<int>(start_col_obj->Number())); |
2273 } | 2264 } |
2274 | 2265 |
2275 | 2266 |
2276 int Message::GetStartColumn() const { | 2267 int Message::GetStartColumn() const { |
2277 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 2268 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); |
2278 ON_BAILOUT(isolate, "v8::Message::GetStartColumn()", return kNoColumnInfo); | 2269 const int default_value = kNoColumnInfo; |
2279 ENTER_V8(isolate); | 2270 return GetStartColumn(context).FromMaybe(default_value); |
2280 i::HandleScope scope(isolate); | 2271 } |
2281 i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); | 2272 |
2282 EXCEPTION_PREAMBLE(isolate); | 2273 |
| 2274 Maybe<int> Message::GetEndColumn(Local<Context> context) const { |
| 2275 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Message::GetEndColumn()", int); |
| 2276 auto self = Utils::OpenHandle(this); |
2283 i::Handle<i::Object> start_col_obj; | 2277 i::Handle<i::Object> start_col_obj; |
2284 has_pending_exception = | 2278 has_pending_exception = !CallV8HeapFunction(isolate, "GetPositionInLine", |
2285 !CallV8HeapFunction(isolate, "GetPositionInLine", data_obj) | 2279 self).ToHandle(&start_col_obj); |
2286 .ToHandle(&start_col_obj); | 2280 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(int); |
2287 EXCEPTION_BAILOUT_CHECK(isolate, 0); | 2281 int start = self->start_position(); |
2288 return static_cast<int>(start_col_obj->Number()); | 2282 int end = self->end_position(); |
| 2283 return Just(static_cast<int>(start_col_obj->Number()) + (end - start)); |
2289 } | 2284 } |
2290 | 2285 |
2291 | 2286 |
2292 int Message::GetEndColumn() const { | 2287 int Message::GetEndColumn() const { |
2293 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 2288 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); |
2294 ON_BAILOUT(isolate, "v8::Message::GetEndColumn()", return kNoColumnInfo); | 2289 const int default_value = kNoColumnInfo; |
2295 ENTER_V8(isolate); | 2290 return GetEndColumn(context).FromMaybe(default_value); |
2296 i::HandleScope scope(isolate); | |
2297 i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); | |
2298 EXCEPTION_PREAMBLE(isolate); | |
2299 i::Handle<i::Object> start_col_obj; | |
2300 has_pending_exception = | |
2301 !CallV8HeapFunction(isolate, "GetPositionInLine", data_obj) | |
2302 .ToHandle(&start_col_obj); | |
2303 EXCEPTION_BAILOUT_CHECK(isolate, 0); | |
2304 i::Handle<i::JSMessageObject> message = | |
2305 i::Handle<i::JSMessageObject>::cast(data_obj); | |
2306 int start = message->start_position(); | |
2307 int end = message->end_position(); | |
2308 return static_cast<int>(start_col_obj->Number()) + (end - start); | |
2309 } | 2291 } |
2310 | 2292 |
2311 | 2293 |
2312 bool Message::IsSharedCrossOrigin() const { | 2294 bool Message::IsSharedCrossOrigin() const { |
2313 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 2295 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
2314 ENTER_V8(isolate); | 2296 ENTER_V8(isolate); |
2315 i::HandleScope scope(isolate); | 2297 auto self = Utils::OpenHandle(this); |
2316 i::Handle<i::JSMessageObject> message = | 2298 auto script = i::Handle<i::JSValue>::cast( |
2317 i::Handle<i::JSMessageObject>::cast(Utils::OpenHandle(this)); | 2299 i::Handle<i::Object>(self->script(), isolate)); |
2318 i::Handle<i::JSValue> script = | |
2319 i::Handle<i::JSValue>::cast(i::Handle<i::Object>(message->script(), | |
2320 isolate)); | |
2321 return i::Script::cast(script->value())->is_shared_cross_origin(); | 2300 return i::Script::cast(script->value())->is_shared_cross_origin(); |
2322 } | 2301 } |
2323 | 2302 |
2324 | 2303 |
2325 Local<String> Message::GetSourceLine() const { | 2304 MaybeLocal<String> Message::GetSourceLine(Local<Context> context) const { |
2326 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 2305 PREPARE_FOR_EXECUTION(context, "v8::Message::GetSourceLine()", String); |
2327 ON_BAILOUT(isolate, "v8::Message::GetSourceLine()", return Local<String>()); | |
2328 ENTER_V8(isolate); | |
2329 EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); | |
2330 EXCEPTION_PREAMBLE(isolate); | |
2331 i::Handle<i::Object> result; | 2306 i::Handle<i::Object> result; |
2332 has_pending_exception = | 2307 has_pending_exception = |
2333 !CallV8HeapFunction(isolate, "GetSourceLine", Utils::OpenHandle(this)) | 2308 !CallV8HeapFunction(isolate, "GetSourceLine", Utils::OpenHandle(this)) |
2334 .ToHandle(&result); | 2309 .ToHandle(&result); |
2335 EXCEPTION_BAILOUT_CHECK(isolate, Local<v8::String>()); | 2310 RETURN_ON_FAILED_EXECUTION(String); |
| 2311 Local<String> str; |
2336 if (result->IsString()) { | 2312 if (result->IsString()) { |
2337 return scope.Escape(Utils::ToLocal(i::Handle<i::String>::cast(result))); | 2313 str = Utils::ToLocal(i::Handle<i::String>::cast(result)); |
2338 } else { | |
2339 return Local<String>(); | |
2340 } | 2314 } |
| 2315 RETURN_ESCAPED(str); |
2341 } | 2316 } |
2342 | 2317 |
2343 | 2318 |
| 2319 Local<String> Message::GetSourceLine() const { |
| 2320 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); |
| 2321 RETURN_TO_LOCAL_UNCHECKED(GetSourceLine(context), String) |
| 2322 } |
| 2323 |
| 2324 |
2344 void Message::PrintCurrentStackTrace(Isolate* isolate, FILE* out) { | 2325 void Message::PrintCurrentStackTrace(Isolate* isolate, FILE* out) { |
2345 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 2326 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
2346 ENTER_V8(i_isolate); | 2327 ENTER_V8(i_isolate); |
2347 i_isolate->PrintCurrentStackTrace(out); | 2328 i_isolate->PrintCurrentStackTrace(out); |
2348 } | 2329 } |
2349 | 2330 |
2350 | 2331 |
2351 // --- S t a c k T r a c e --- | 2332 // --- S t a c k T r a c e --- |
2352 | 2333 |
2353 Local<StackFrame> StackTrace::GetFrame(uint32_t index) const { | 2334 Local<StackFrame> StackTrace::GetFrame(uint32_t index) const { |
2354 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 2335 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
2355 ENTER_V8(isolate); | 2336 ENTER_V8(isolate); |
2356 EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); | 2337 EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
2357 i::Handle<i::JSArray> self = Utils::OpenHandle(this); | 2338 auto self = Utils::OpenHandle(this); |
2358 i::Handle<i::Object> obj = | 2339 auto obj = i::Object::GetElement(isolate, self, index).ToHandleChecked(); |
2359 i::Object::GetElement(isolate, self, index).ToHandleChecked(); | 2340 auto jsobj = i::Handle<i::JSObject>::cast(obj); |
2360 i::Handle<i::JSObject> jsobj = i::Handle<i::JSObject>::cast(obj); | |
2361 return scope.Escape(Utils::StackFrameToLocal(jsobj)); | 2341 return scope.Escape(Utils::StackFrameToLocal(jsobj)); |
2362 } | 2342 } |
2363 | 2343 |
2364 | 2344 |
2365 int StackTrace::GetFrameCount() const { | 2345 int StackTrace::GetFrameCount() const { |
2366 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | |
2367 ENTER_V8(isolate); | |
2368 return i::Smi::cast(Utils::OpenHandle(this)->length())->value(); | 2346 return i::Smi::cast(Utils::OpenHandle(this)->length())->value(); |
2369 } | 2347 } |
2370 | 2348 |
2371 | 2349 |
2372 Local<Array> StackTrace::AsArray() { | 2350 Local<Array> StackTrace::AsArray() { |
2373 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | |
2374 ENTER_V8(isolate); | |
2375 return Utils::ToLocal(Utils::OpenHandle(this)); | 2351 return Utils::ToLocal(Utils::OpenHandle(this)); |
2376 } | 2352 } |
2377 | 2353 |
2378 | 2354 |
2379 Local<StackTrace> StackTrace::CurrentStackTrace( | 2355 Local<StackTrace> StackTrace::CurrentStackTrace( |
2380 Isolate* isolate, | 2356 Isolate* isolate, |
2381 int frame_limit, | 2357 int frame_limit, |
2382 StackTraceOptions options) { | 2358 StackTraceOptions options) { |
2383 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 2359 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
2384 ENTER_V8(i_isolate); | 2360 ENTER_V8(i_isolate); |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2557 if (!table->IsKey(*key)) { | 2533 if (!table->IsKey(*key)) { |
2558 DCHECK(false); | 2534 DCHECK(false); |
2559 return false; | 2535 return false; |
2560 } | 2536 } |
2561 return i::Runtime::WeakCollectionDelete(weak_collection, key); | 2537 return i::Runtime::WeakCollectionDelete(weak_collection, key); |
2562 } | 2538 } |
2563 | 2539 |
2564 | 2540 |
2565 // --- J S O N --- | 2541 // --- J S O N --- |
2566 | 2542 |
2567 Local<Value> JSON::Parse(Local<String> json_string) { | 2543 MaybeLocal<Value> JSON::Parse(Isolate* v8_isolate, Local<String> json_string) { |
| 2544 auto isolate = reinterpret_cast<i::Isolate*>(v8_isolate); |
| 2545 PREPARE_FOR_EXECUTION_WITH_ISOLATE(isolate, "JSON::Parse", Value); |
2568 i::Handle<i::String> string = Utils::OpenHandle(*json_string); | 2546 i::Handle<i::String> string = Utils::OpenHandle(*json_string); |
2569 i::Isolate* isolate = string->GetIsolate(); | |
2570 ENTER_V8(isolate); | |
2571 i::HandleScope scope(isolate); | |
2572 i::Handle<i::String> source = i::String::Flatten(string); | 2547 i::Handle<i::String> source = i::String::Flatten(string); |
2573 EXCEPTION_PREAMBLE(isolate); | 2548 auto maybe = source->IsSeqOneByteString() |
2574 i::MaybeHandle<i::Object> maybe_result = | 2549 ? i::JsonParser<true>::Parse(source) |
2575 source->IsSeqOneByteString() ? i::JsonParser<true>::Parse(source) | 2550 : i::JsonParser<false>::Parse(source); |
2576 : i::JsonParser<false>::Parse(source); | 2551 Local<Value> result; |
2577 i::Handle<i::Object> result; | 2552 has_pending_exception = !ToLocal<Value>(maybe, &result); |
2578 has_pending_exception = !maybe_result.ToHandle(&result); | 2553 RETURN_ON_FAILED_EXECUTION(Value); |
2579 EXCEPTION_BAILOUT_CHECK(isolate, Local<Object>()); | 2554 RETURN_ESCAPED(result); |
2580 return Utils::ToLocal( | |
2581 i::Handle<i::Object>::cast(scope.CloseAndEscape(result))); | |
2582 } | 2555 } |
2583 | 2556 |
2584 | 2557 |
| 2558 Local<Value> JSON::Parse(Local<String> json_string) { |
| 2559 auto isolate = reinterpret_cast<v8::Isolate*>( |
| 2560 Utils::OpenHandle(*json_string)->GetIsolate()); |
| 2561 RETURN_TO_LOCAL_UNCHECKED(Parse(isolate, json_string), Value); |
| 2562 } |
| 2563 |
| 2564 |
2585 // --- D a t a --- | 2565 // --- D a t a --- |
2586 | 2566 |
2587 bool Value::FullIsUndefined() const { | 2567 bool Value::FullIsUndefined() const { |
2588 bool result = Utils::OpenHandle(this)->IsUndefined(); | 2568 bool result = Utils::OpenHandle(this)->IsUndefined(); |
2589 DCHECK_EQ(result, QuickIsUndefined()); | 2569 DCHECK_EQ(result, QuickIsUndefined()); |
2590 return result; | 2570 return result; |
2591 } | 2571 } |
2592 | 2572 |
2593 | 2573 |
2594 bool Value::FullIsNull() const { | 2574 bool Value::FullIsNull() const { |
(...skipping 626 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3221 } | 3201 } |
3222 | 3202 |
3223 | 3203 |
3224 uint32_t Value::Uint32Value() const { | 3204 uint32_t Value::Uint32Value() const { |
3225 auto obj = Utils::OpenHandle(this); | 3205 auto obj = Utils::OpenHandle(this); |
3226 if (obj->IsNumber()) return NumberToUint32(*obj); | 3206 if (obj->IsNumber()) return NumberToUint32(*obj); |
3227 return Uint32Value(ContextFromHeapObject(obj)).FromMaybe(0); | 3207 return Uint32Value(ContextFromHeapObject(obj)).FromMaybe(0); |
3228 } | 3208 } |
3229 | 3209 |
3230 | 3210 |
3231 Local<Uint32> Value::ToArrayIndex() const { | 3211 MaybeLocal<Uint32> Value::ToArrayIndex(Local<Context> context) const { |
3232 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 3212 auto self = Utils::OpenHandle(this); |
3233 if (obj->IsSmi()) { | 3213 if (self->IsSmi()) { |
3234 if (i::Smi::cast(*obj)->value() >= 0) return Utils::Uint32ToLocal(obj); | 3214 if (i::Smi::cast(*self)->value() >= 0) return Utils::Uint32ToLocal(self); |
3235 return Local<Uint32>(); | 3215 return Local<Uint32>(); |
3236 } | 3216 } |
3237 i::Isolate* isolate = i::HeapObject::cast(*obj)->GetIsolate(); | 3217 PREPARE_FOR_EXECUTION(context, "ToArrayIndex", Uint32); |
3238 LOG_API(isolate, "ToArrayIndex"); | |
3239 ENTER_V8(isolate); | |
3240 EXCEPTION_PREAMBLE(isolate); | |
3241 i::Handle<i::Object> string_obj; | 3218 i::Handle<i::Object> string_obj; |
3242 has_pending_exception = !i::Execution::ToString( | 3219 has_pending_exception = |
3243 isolate, obj).ToHandle(&string_obj); | 3220 !i::Execution::ToString(isolate, self).ToHandle(&string_obj); |
3244 EXCEPTION_BAILOUT_CHECK(isolate, Local<Uint32>()); | 3221 RETURN_ON_FAILED_EXECUTION(Uint32); |
3245 i::Handle<i::String> str = i::Handle<i::String>::cast(string_obj); | 3222 i::Handle<i::String> str = i::Handle<i::String>::cast(string_obj); |
3246 uint32_t index; | 3223 uint32_t index; |
3247 if (str->AsArrayIndex(&index)) { | 3224 if (str->AsArrayIndex(&index)) { |
3248 i::Handle<i::Object> value; | 3225 i::Handle<i::Object> value; |
3249 if (index <= static_cast<uint32_t>(i::Smi::kMaxValue)) { | 3226 if (index <= static_cast<uint32_t>(i::Smi::kMaxValue)) { |
3250 value = i::Handle<i::Object>(i::Smi::FromInt(index), isolate); | 3227 value = i::Handle<i::Object>(i::Smi::FromInt(index), isolate); |
3251 } else { | 3228 } else { |
3252 value = isolate->factory()->NewNumber(index); | 3229 value = isolate->factory()->NewNumber(index); |
3253 } | 3230 } |
3254 return Utils::Uint32ToLocal(value); | 3231 RETURN_ESCAPED(Utils::Uint32ToLocal(value)); |
3255 } | 3232 } |
3256 return Local<Uint32>(); | 3233 return Local<Uint32>(); |
3257 } | 3234 } |
3258 | 3235 |
3259 | 3236 |
3260 bool Value::Equals(Handle<Value> that) const { | 3237 Local<Uint32> Value::ToArrayIndex() const { |
3261 i::Handle<i::Object> obj = Utils::OpenHandle(this, true); | 3238 auto self = Utils::OpenHandle(this); |
3262 i::Handle<i::Object> other = Utils::OpenHandle(*that); | 3239 if (self->IsSmi()) { |
3263 if (obj->IsSmi() && other->IsSmi()) { | 3240 if (i::Smi::cast(*self)->value() >= 0) return Utils::Uint32ToLocal(self); |
3264 return obj->Number() == other->Number(); | 3241 return Local<Uint32>(); |
3265 } | 3242 } |
3266 i::Object* ho = obj->IsSmi() ? *other : *obj; | 3243 auto context = ContextFromHeapObject(self); |
3267 i::Isolate* isolate = i::HeapObject::cast(ho)->GetIsolate(); | 3244 RETURN_TO_LOCAL_UNCHECKED(ToArrayIndex(context), Uint32); |
3268 if (!Utils::ApiCheck(!obj.is_null() && !that.IsEmpty(), | 3245 } |
3269 "v8::Value::Equals()", | 3246 |
3270 "Reading from empty handle")) { | 3247 |
3271 return false; | 3248 Maybe<bool> Value::Equals(Local<Context> context, Handle<Value> that) const { |
| 3249 auto self = Utils::OpenHandle(this); |
| 3250 auto other = Utils::OpenHandle(*that); |
| 3251 if (self->IsSmi() && other->IsSmi()) { |
| 3252 return Just(self->Number() == other->Number()); |
3272 } | 3253 } |
3273 LOG_API(isolate, "Equals"); | 3254 if (self->IsJSObject() && other->IsJSObject()) { |
3274 ENTER_V8(isolate); | 3255 return Just(*self == *other); |
3275 // If both obj and other are JSObjects, we'd better compare by identity | |
3276 // immediately when going into JS builtin. The reason is Invoke | |
3277 // would overwrite global object receiver with global proxy. | |
3278 if (obj->IsJSObject() && other->IsJSObject()) { | |
3279 return *obj == *other; | |
3280 } | 3256 } |
| 3257 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Value::Equals()", bool); |
3281 i::Handle<i::Object> args[] = { other }; | 3258 i::Handle<i::Object> args[] = { other }; |
3282 EXCEPTION_PREAMBLE(isolate); | |
3283 i::Handle<i::Object> result; | 3259 i::Handle<i::Object> result; |
3284 has_pending_exception = | 3260 has_pending_exception = |
3285 !CallV8HeapFunction(isolate, "EQUALS", obj, arraysize(args), args) | 3261 !CallV8HeapFunction(isolate, "EQUALS", self, arraysize(args), args) |
3286 .ToHandle(&result); | 3262 .ToHandle(&result); |
3287 EXCEPTION_BAILOUT_CHECK(isolate, false); | 3263 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); |
3288 return *result == i::Smi::FromInt(i::EQUAL); | 3264 return Just(*result == i::Smi::FromInt(i::EQUAL)); |
| 3265 } |
| 3266 |
| 3267 |
| 3268 bool Value::Equals(Handle<Value> that) const { |
| 3269 auto self = Utils::OpenHandle(this); |
| 3270 auto other = Utils::OpenHandle(*that); |
| 3271 if (self->IsSmi() && other->IsSmi()) { |
| 3272 return self->Number() == other->Number(); |
| 3273 } |
| 3274 if (self->IsJSObject() && other->IsJSObject()) { |
| 3275 return *self == *other; |
| 3276 } |
| 3277 auto heap_object = self->IsSmi() ? other : self; |
| 3278 auto context = ContextFromHeapObject(heap_object); |
| 3279 return Equals(context, that).FromMaybe(false); |
3289 } | 3280 } |
3290 | 3281 |
3291 | 3282 |
3292 bool Value::StrictEquals(Handle<Value> that) const { | 3283 bool Value::StrictEquals(Handle<Value> that) const { |
3293 i::Handle<i::Object> obj = Utils::OpenHandle(this, true); | 3284 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
3294 i::Handle<i::Object> other = Utils::OpenHandle(*that); | 3285 i::Handle<i::Object> other = Utils::OpenHandle(*that); |
3295 if (obj->IsSmi()) { | 3286 if (obj->IsSmi()) { |
3296 return other->IsNumber() && obj->Number() == other->Number(); | 3287 return other->IsNumber() && obj->Number() == other->Number(); |
3297 } | 3288 } |
3298 i::Isolate* isolate = i::HeapObject::cast(*obj)->GetIsolate(); | 3289 i::Isolate* isolate = i::HeapObject::cast(*obj)->GetIsolate(); |
3299 if (!Utils::ApiCheck(!obj.is_null() && !that.IsEmpty(), | |
3300 "v8::Value::StrictEquals()", | |
3301 "Reading from empty handle")) { | |
3302 return false; | |
3303 } | |
3304 LOG_API(isolate, "StrictEquals"); | 3290 LOG_API(isolate, "StrictEquals"); |
3305 // Must check HeapNumber first, since NaN !== NaN. | 3291 // Must check HeapNumber first, since NaN !== NaN. |
3306 if (obj->IsHeapNumber()) { | 3292 if (obj->IsHeapNumber()) { |
3307 if (!other->IsNumber()) return false; | 3293 if (!other->IsNumber()) return false; |
3308 double x = obj->Number(); | 3294 double x = obj->Number(); |
3309 double y = other->Number(); | 3295 double y = other->Number(); |
3310 // Must check explicitly for NaN:s on Windows, but -0 works fine. | 3296 // Must check explicitly for NaN:s on Windows, but -0 works fine. |
3311 return x == y && !std::isnan(x) && !std::isnan(y); | 3297 return x == y && !std::isnan(x) && !std::isnan(y); |
3312 } else if (*obj == *other) { // Also covers Booleans. | 3298 } else if (*obj == *other) { // Also covers Booleans. |
3313 return true; | 3299 return true; |
3314 } else if (obj->IsSmi()) { | 3300 } else if (obj->IsSmi()) { |
3315 return other->IsNumber() && obj->Number() == other->Number(); | 3301 return other->IsNumber() && obj->Number() == other->Number(); |
3316 } else if (obj->IsString()) { | 3302 } else if (obj->IsString()) { |
3317 return other->IsString() && | 3303 return other->IsString() && |
3318 i::String::Equals(i::Handle<i::String>::cast(obj), | 3304 i::String::Equals(i::Handle<i::String>::cast(obj), |
3319 i::Handle<i::String>::cast(other)); | 3305 i::Handle<i::String>::cast(other)); |
3320 } else if (obj->IsUndefined() || obj->IsUndetectableObject()) { | 3306 } else if (obj->IsUndefined() || obj->IsUndetectableObject()) { |
3321 return other->IsUndefined() || other->IsUndetectableObject(); | 3307 return other->IsUndefined() || other->IsUndetectableObject(); |
3322 } else { | 3308 } else { |
3323 return false; | 3309 return false; |
3324 } | 3310 } |
3325 } | 3311 } |
3326 | 3312 |
3327 | 3313 |
3328 bool Value::SameValue(Handle<Value> that) const { | 3314 bool Value::SameValue(Handle<Value> that) const { |
3329 i::Handle<i::Object> obj = Utils::OpenHandle(this, true); | 3315 auto self = Utils::OpenHandle(this); |
3330 if (!Utils::ApiCheck(!obj.is_null() && !that.IsEmpty(), | 3316 auto other = Utils::OpenHandle(*that); |
3331 "v8::Value::SameValue()", | 3317 return self->SameValue(*other); |
3332 "Reading from empty handle")) { | |
3333 return false; | |
3334 } | |
3335 i::Handle<i::Object> other = Utils::OpenHandle(*that); | |
3336 return obj->SameValue(*other); | |
3337 } | 3318 } |
3338 | 3319 |
3339 | 3320 |
3340 Maybe<bool> v8::Object::Set(v8::Local<v8::Context> context, | 3321 Maybe<bool> v8::Object::Set(v8::Local<v8::Context> context, |
3341 v8::Local<Value> key, v8::Local<Value> value) { | 3322 v8::Local<Value> key, v8::Local<Value> value) { |
3342 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Object::Set()", bool); | 3323 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Object::Set()", bool); |
3343 auto self = Utils::OpenHandle(this); | 3324 auto self = Utils::OpenHandle(this); |
3344 auto key_obj = Utils::OpenHandle(*key); | 3325 auto key_obj = Utils::OpenHandle(*key); |
3345 auto value_obj = Utils::OpenHandle(*value); | 3326 auto value_obj = Utils::OpenHandle(*value); |
3346 has_pending_exception = | 3327 has_pending_exception = |
(...skipping 505 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3852 | 3833 |
3853 | 3834 |
3854 void Object::SetAccessorProperty(Local<Name> name, | 3835 void Object::SetAccessorProperty(Local<Name> name, |
3855 Local<Function> getter, | 3836 Local<Function> getter, |
3856 Handle<Function> setter, | 3837 Handle<Function> setter, |
3857 PropertyAttribute attribute, | 3838 PropertyAttribute attribute, |
3858 AccessControl settings) { | 3839 AccessControl settings) { |
3859 // TODO(verwaest): Remove |settings|. | 3840 // TODO(verwaest): Remove |settings|. |
3860 DCHECK_EQ(v8::DEFAULT, settings); | 3841 DCHECK_EQ(v8::DEFAULT, settings); |
3861 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 3842 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
3862 ON_BAILOUT(isolate, "v8::Object::SetAccessorProperty()", return); | |
3863 ENTER_V8(isolate); | 3843 ENTER_V8(isolate); |
3864 i::HandleScope scope(isolate); | 3844 i::HandleScope scope(isolate); |
3865 i::Handle<i::Object> getter_i = v8::Utils::OpenHandle(*getter); | 3845 i::Handle<i::Object> getter_i = v8::Utils::OpenHandle(*getter); |
3866 i::Handle<i::Object> setter_i = v8::Utils::OpenHandle(*setter, true); | 3846 i::Handle<i::Object> setter_i = v8::Utils::OpenHandle(*setter, true); |
3867 if (setter_i.is_null()) setter_i = isolate->factory()->null_value(); | 3847 if (setter_i.is_null()) setter_i = isolate->factory()->null_value(); |
3868 i::JSObject::DefineAccessor(v8::Utils::OpenHandle(this), | 3848 i::JSObject::DefineAccessor(v8::Utils::OpenHandle(this), |
3869 v8::Utils::OpenHandle(*name), | 3849 v8::Utils::OpenHandle(*name), |
3870 getter_i, | 3850 getter_i, |
3871 setter_i, | 3851 setter_i, |
3872 static_cast<PropertyAttributes>(attribute)); | 3852 static_cast<PropertyAttributes>(attribute)); |
(...skipping 673 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4546 i::Handle<i::FixedArray> bound_args = i::Handle<i::FixedArray>( | 4526 i::Handle<i::FixedArray> bound_args = i::Handle<i::FixedArray>( |
4547 i::FixedArray::cast(func->function_bindings())); | 4527 i::FixedArray::cast(func->function_bindings())); |
4548 i::Handle<i::Object> original( | 4528 i::Handle<i::Object> original( |
4549 bound_args->get(i::JSFunction::kBoundFunctionIndex), | 4529 bound_args->get(i::JSFunction::kBoundFunctionIndex), |
4550 func->GetIsolate()); | 4530 func->GetIsolate()); |
4551 return Utils::ToLocal(i::Handle<i::JSFunction>::cast(original)); | 4531 return Utils::ToLocal(i::Handle<i::JSFunction>::cast(original)); |
4552 } | 4532 } |
4553 | 4533 |
4554 | 4534 |
4555 int Name::GetIdentityHash() { | 4535 int Name::GetIdentityHash() { |
4556 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 4536 auto self = Utils::OpenHandle(this); |
4557 ON_BAILOUT(isolate, "v8::Name::GetIdentityHash()", return 0); | |
4558 ENTER_V8(isolate); | |
4559 i::HandleScope scope(isolate); | |
4560 i::Handle<i::Name> self = Utils::OpenHandle(this); | |
4561 return static_cast<int>(self->Hash()); | 4537 return static_cast<int>(self->Hash()); |
4562 } | 4538 } |
4563 | 4539 |
4564 | 4540 |
4565 int String::Length() const { | 4541 int String::Length() const { |
4566 i::Handle<i::String> str = Utils::OpenHandle(this); | 4542 i::Handle<i::String> str = Utils::OpenHandle(this); |
4567 return str->length(); | 4543 return str->length(); |
4568 } | 4544 } |
4569 | 4545 |
4570 | 4546 |
(...skipping 944 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5515 if (extensions == NULL) extensions = &no_extensions; | 5491 if (extensions == NULL) extensions = &no_extensions; |
5516 i::Handle<i::Context> env = | 5492 i::Handle<i::Context> env = |
5517 CreateEnvironment(isolate, extensions, global_template, global_object); | 5493 CreateEnvironment(isolate, extensions, global_template, global_object); |
5518 if (env.is_null()) return Local<Context>(); | 5494 if (env.is_null()) return Local<Context>(); |
5519 return Utils::ToLocal(scope.CloseAndEscape(env)); | 5495 return Utils::ToLocal(scope.CloseAndEscape(env)); |
5520 } | 5496 } |
5521 | 5497 |
5522 | 5498 |
5523 void v8::Context::SetSecurityToken(Handle<Value> token) { | 5499 void v8::Context::SetSecurityToken(Handle<Value> token) { |
5524 i::Handle<i::Context> env = Utils::OpenHandle(this); | 5500 i::Handle<i::Context> env = Utils::OpenHandle(this); |
5525 i::Isolate* isolate = env->GetIsolate(); | |
5526 ENTER_V8(isolate); | |
5527 i::Handle<i::Object> token_handle = Utils::OpenHandle(*token); | 5501 i::Handle<i::Object> token_handle = Utils::OpenHandle(*token); |
5528 env->set_security_token(*token_handle); | 5502 env->set_security_token(*token_handle); |
5529 } | 5503 } |
5530 | 5504 |
5531 | 5505 |
5532 void v8::Context::UseDefaultSecurityToken() { | 5506 void v8::Context::UseDefaultSecurityToken() { |
5533 i::Handle<i::Context> env = Utils::OpenHandle(this); | 5507 i::Handle<i::Context> env = Utils::OpenHandle(this); |
5534 i::Isolate* isolate = env->GetIsolate(); | |
5535 ENTER_V8(isolate); | |
5536 env->set_security_token(env->global_object()); | 5508 env->set_security_token(env->global_object()); |
5537 } | 5509 } |
5538 | 5510 |
5539 | 5511 |
5540 Handle<Value> v8::Context::GetSecurityToken() { | 5512 Handle<Value> v8::Context::GetSecurityToken() { |
5541 i::Handle<i::Context> env = Utils::OpenHandle(this); | 5513 i::Handle<i::Context> env = Utils::OpenHandle(this); |
5542 i::Isolate* isolate = env->GetIsolate(); | 5514 i::Isolate* isolate = env->GetIsolate(); |
5543 i::Object* security_token = env->security_token(); | 5515 i::Object* security_token = env->security_token(); |
5544 i::Handle<i::Object> token_handle(security_token, isolate); | 5516 i::Handle<i::Object> token_handle(security_token, isolate); |
5545 return Utils::ToLocal(token_handle); | 5517 return Utils::ToLocal(token_handle); |
(...skipping 2480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8026 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); | 7998 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); |
8027 Address callback_address = | 7999 Address callback_address = |
8028 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 8000 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
8029 VMState<EXTERNAL> state(isolate); | 8001 VMState<EXTERNAL> state(isolate); |
8030 ExternalCallbackScope call_scope(isolate, callback_address); | 8002 ExternalCallbackScope call_scope(isolate, callback_address); |
8031 callback(info); | 8003 callback(info); |
8032 } | 8004 } |
8033 | 8005 |
8034 | 8006 |
8035 } } // namespace v8::internal | 8007 } } // namespace v8::internal |
OLD | NEW |