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 <stdlib.h> | 5 #include <stdlib.h> |
6 | 6 |
7 #include "src/v8.h" | 7 #include "src/v8.h" |
8 | 8 |
9 #include "src/ast.h" | 9 #include "src/ast.h" |
10 #include "src/base/platform/platform.h" | 10 #include "src/base/platform/platform.h" |
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
446 } | 446 } |
447 | 447 |
448 | 448 |
449 Handle<JSArray> Isolate::CaptureCurrentStackTrace( | 449 Handle<JSArray> Isolate::CaptureCurrentStackTrace( |
450 int frame_limit, StackTrace::StackTraceOptions options) { | 450 int frame_limit, StackTrace::StackTraceOptions options) { |
451 // Ensure no negative values. | 451 // Ensure no negative values. |
452 int limit = Max(frame_limit, 0); | 452 int limit = Max(frame_limit, 0); |
453 Handle<JSArray> stack_trace = factory()->NewJSArray(frame_limit); | 453 Handle<JSArray> stack_trace = factory()->NewJSArray(frame_limit); |
454 | 454 |
455 Handle<String> column_key = | 455 Handle<String> column_key = |
456 factory()->InternalizeOneByteString(STATIC_ASCII_VECTOR("column")); | 456 factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("column")); |
457 Handle<String> line_key = | 457 Handle<String> line_key = |
458 factory()->InternalizeOneByteString(STATIC_ASCII_VECTOR("lineNumber")); | 458 factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("lineNumber")); |
459 Handle<String> script_id_key = | 459 Handle<String> script_id_key = |
460 factory()->InternalizeOneByteString(STATIC_ASCII_VECTOR("scriptId")); | 460 factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("scriptId")); |
461 Handle<String> script_name_key = | 461 Handle<String> script_name_key = |
462 factory()->InternalizeOneByteString(STATIC_ASCII_VECTOR("scriptName")); | 462 factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("scriptName")); |
463 Handle<String> script_name_or_source_url_key = | 463 Handle<String> script_name_or_source_url_key = |
464 factory()->InternalizeOneByteString( | 464 factory()->InternalizeOneByteString( |
465 STATIC_ASCII_VECTOR("scriptNameOrSourceURL")); | 465 STATIC_CHAR_VECTOR("scriptNameOrSourceURL")); |
466 Handle<String> function_key = | 466 Handle<String> function_key = |
467 factory()->InternalizeOneByteString(STATIC_ASCII_VECTOR("functionName")); | 467 factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("functionName")); |
468 Handle<String> eval_key = | 468 Handle<String> eval_key = |
469 factory()->InternalizeOneByteString(STATIC_ASCII_VECTOR("isEval")); | 469 factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("isEval")); |
470 Handle<String> constructor_key = | 470 Handle<String> constructor_key = |
471 factory()->InternalizeOneByteString(STATIC_ASCII_VECTOR("isConstructor")); | 471 factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("isConstructor")); |
472 | 472 |
473 StackTraceFrameIterator it(this); | 473 StackTraceFrameIterator it(this); |
474 int frames_seen = 0; | 474 int frames_seen = 0; |
475 while (!it.done() && (frames_seen < limit)) { | 475 while (!it.done() && (frames_seen < limit)) { |
476 JavaScriptFrame* frame = it.frame(); | 476 JavaScriptFrame* frame = it.frame(); |
477 // Set initial size to the maximum inlining level + 1 for the outermost | 477 // Set initial size to the maximum inlining level + 1 for the outermost |
478 // function. | 478 // function. |
479 List<FrameSummary> frames(FLAG_max_inlining_levels + 1); | 479 List<FrameSummary> frames(FLAG_max_inlining_levels + 1); |
480 frame->Summarize(&frames); | 480 frame->Summarize(&frames); |
481 for (int i = frames.length() - 1; i >= 0 && frames_seen < limit; i--) { | 481 for (int i = frames.length() - 1; i >= 0 && frames_seen < limit; i--) { |
(...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
985 // Report the exception if it isn't caught by JavaScript code. | 985 // Report the exception if it isn't caught by JavaScript code. |
986 return handler == NULL; | 986 return handler == NULL; |
987 } | 987 } |
988 } | 988 } |
989 | 989 |
990 | 990 |
991 bool Isolate::IsErrorObject(Handle<Object> obj) { | 991 bool Isolate::IsErrorObject(Handle<Object> obj) { |
992 if (!obj->IsJSObject()) return false; | 992 if (!obj->IsJSObject()) return false; |
993 | 993 |
994 Handle<String> error_key = | 994 Handle<String> error_key = |
995 factory()->InternalizeOneByteString(STATIC_ASCII_VECTOR("$Error")); | 995 factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("$Error")); |
996 Handle<Object> error_constructor = Object::GetProperty( | 996 Handle<Object> error_constructor = Object::GetProperty( |
997 js_builtins_object(), error_key).ToHandleChecked(); | 997 js_builtins_object(), error_key).ToHandleChecked(); |
998 | 998 |
999 DisallowHeapAllocation no_gc; | 999 DisallowHeapAllocation no_gc; |
1000 for (PrototypeIterator iter(this, *obj, PrototypeIterator::START_AT_RECEIVER); | 1000 for (PrototypeIterator iter(this, *obj, PrototypeIterator::START_AT_RECEIVER); |
1001 !iter.IsAtEnd(); iter.Advance()) { | 1001 !iter.IsAtEnd(); iter.Advance()) { |
1002 if (iter.GetCurrent()->IsJSProxy()) return false; | 1002 if (iter.GetCurrent()->IsJSProxy()) return false; |
1003 if (JSObject::cast(iter.GetCurrent())->map()->constructor() == | 1003 if (JSObject::cast(iter.GetCurrent())->map()->constructor() == |
1004 *error_constructor) { | 1004 *error_constructor) { |
1005 return true; | 1005 return true; |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1072 | 1072 |
1073 Handle<Object> exception_arg = exception_handle; | 1073 Handle<Object> exception_arg = exception_handle; |
1074 // If the exception argument is a custom object, turn it into a string | 1074 // If the exception argument is a custom object, turn it into a string |
1075 // before throwing as uncaught exception. Note that the pending | 1075 // before throwing as uncaught exception. Note that the pending |
1076 // exception object to be set later must not be turned into a string. | 1076 // exception object to be set later must not be turned into a string. |
1077 if (exception_arg->IsJSObject() && !IsErrorObject(exception_arg)) { | 1077 if (exception_arg->IsJSObject() && !IsErrorObject(exception_arg)) { |
1078 MaybeHandle<Object> maybe_exception = | 1078 MaybeHandle<Object> maybe_exception = |
1079 Execution::ToDetailString(this, exception_arg); | 1079 Execution::ToDetailString(this, exception_arg); |
1080 if (!maybe_exception.ToHandle(&exception_arg)) { | 1080 if (!maybe_exception.ToHandle(&exception_arg)) { |
1081 exception_arg = factory()->InternalizeOneByteString( | 1081 exception_arg = factory()->InternalizeOneByteString( |
1082 STATIC_ASCII_VECTOR("exception")); | 1082 STATIC_CHAR_VECTOR("exception")); |
1083 } | 1083 } |
1084 } | 1084 } |
1085 Handle<Object> message_obj = MessageHandler::MakeMessageObject( | 1085 Handle<Object> message_obj = MessageHandler::MakeMessageObject( |
1086 this, | 1086 this, |
1087 "uncaught_exception", | 1087 "uncaught_exception", |
1088 location, | 1088 location, |
1089 HandleVector<Object>(&exception_arg, 1), | 1089 HandleVector<Object>(&exception_arg, 1), |
1090 stack_trace_object); | 1090 stack_trace_object); |
1091 thread_local_top()->pending_message_obj_ = *message_obj; | 1091 thread_local_top()->pending_message_obj_ = *message_obj; |
1092 if (location != NULL) { | 1092 if (location != NULL) { |
(...skipping 1288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2381 if (prev_ && prev_->Intercept(flag)) return true; | 2381 if (prev_ && prev_->Intercept(flag)) return true; |
2382 // Then check whether this scope intercepts. | 2382 // Then check whether this scope intercepts. |
2383 if ((flag & intercept_mask_)) { | 2383 if ((flag & intercept_mask_)) { |
2384 intercepted_flags_ |= flag; | 2384 intercepted_flags_ |= flag; |
2385 return true; | 2385 return true; |
2386 } | 2386 } |
2387 return false; | 2387 return false; |
2388 } | 2388 } |
2389 | 2389 |
2390 } } // namespace v8::internal | 2390 } } // namespace v8::internal |
OLD | NEW |