| 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 <fstream>  // NOLINT(readability/streams) |     7 #include <fstream>  // NOLINT(readability/streams) | 
|     8 #include <sstream> |     8 #include <sstream> | 
|     9  |     9  | 
|    10 #include "src/v8.h" |    10 #include "src/v8.h" | 
| (...skipping 1051 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1062         !(Script::cast(script)->source()->IsUndefined())) { |  1062         !(Script::cast(script)->source()->IsUndefined())) { | 
|  1063       int pos = frame->LookupCode()->SourcePosition(frame->pc()); |  1063       int pos = frame->LookupCode()->SourcePosition(frame->pc()); | 
|  1064       // Compute the location from the function and the reloc info. |  1064       // Compute the location from the function and the reloc info. | 
|  1065       Handle<Script> casted_script(Script::cast(script)); |  1065       Handle<Script> casted_script(Script::cast(script)); | 
|  1066       *target = MessageLocation(casted_script, pos, pos + 1, handle(fun)); |  1066       *target = MessageLocation(casted_script, pos, pos + 1, handle(fun)); | 
|  1067     } |  1067     } | 
|  1068   } |  1068   } | 
|  1069 } |  1069 } | 
|  1070  |  1070  | 
|  1071  |  1071  | 
 |  1072 bool Isolate::ComputeLocationFromException(MessageLocation* target, | 
 |  1073                                            Handle<Object> exception) { | 
 |  1074   if (!exception->IsJSObject()) return false; | 
 |  1075  | 
 |  1076   Handle<Name> start_pos_symbol = factory()->error_start_pos_symbol(); | 
 |  1077   Handle<Object> start_pos = JSObject::GetDataProperty( | 
 |  1078       Handle<JSObject>::cast(exception), start_pos_symbol); | 
 |  1079   if (!start_pos->IsSmi()) return false; | 
 |  1080   int start_pos_value = Handle<Smi>::cast(start_pos)->value(); | 
 |  1081  | 
 |  1082   Handle<Name> end_pos_symbol = factory()->error_end_pos_symbol(); | 
 |  1083   Handle<Object> end_pos = JSObject::GetDataProperty( | 
 |  1084       Handle<JSObject>::cast(exception), end_pos_symbol); | 
 |  1085   if (!end_pos->IsSmi()) return false; | 
 |  1086   int end_pos_value = Handle<Smi>::cast(end_pos)->value(); | 
 |  1087  | 
 |  1088   Handle<Name> script_symbol = factory()->error_script_symbol(); | 
 |  1089   Handle<Object> script = JSObject::GetDataProperty( | 
 |  1090       Handle<JSObject>::cast(exception), script_symbol); | 
 |  1091   if (!script->IsScript()) return false; | 
 |  1092  | 
 |  1093   Handle<Script> cast_script(Script::cast(*script)); | 
 |  1094   *target = MessageLocation(cast_script, start_pos_value, end_pos_value); | 
 |  1095   return true; | 
 |  1096 } | 
 |  1097  | 
 |  1098  | 
|  1072 bool Isolate::ComputeLocationFromStackTrace(MessageLocation* target, |  1099 bool Isolate::ComputeLocationFromStackTrace(MessageLocation* target, | 
|  1073                                             Handle<Object> exception) { |  1100                                             Handle<Object> exception) { | 
|  1074   *target = MessageLocation(Handle<Script>(heap_.empty_script()), -1, -1); |  1101   *target = MessageLocation(Handle<Script>(heap_.empty_script()), -1, -1); | 
|  1075  |  1102  | 
|  1076   if (!exception->IsJSObject()) return false; |  1103   if (!exception->IsJSObject()) return false; | 
|  1077   Handle<Name> key = factory()->stack_trace_symbol(); |  1104   Handle<Name> key = factory()->stack_trace_symbol(); | 
|  1078   Handle<Object> property = |  1105   Handle<Object> property = | 
|  1079       JSObject::GetDataProperty(Handle<JSObject>::cast(exception), key); |  1106       JSObject::GetDataProperty(Handle<JSObject>::cast(exception), key); | 
|  1080   if (!property->IsJSArray()) return false; |  1107   if (!property->IsJSArray()) return false; | 
|  1081   Handle<JSArray> simple_stack_trace = Handle<JSArray>::cast(property); |  1108   Handle<JSArray> simple_stack_trace = Handle<JSArray>::cast(property); | 
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1174           GetDetailedStackTrace(Handle<JSObject>::cast(exception)); |  1201           GetDetailedStackTrace(Handle<JSObject>::cast(exception)); | 
|  1175     } |  1202     } | 
|  1176     if (stack_trace_object.is_null()) { |  1203     if (stack_trace_object.is_null()) { | 
|  1177       // Not an error object, we capture stack and location at throw site. |  1204       // Not an error object, we capture stack and location at throw site. | 
|  1178       stack_trace_object = CaptureCurrentStackTrace( |  1205       stack_trace_object = CaptureCurrentStackTrace( | 
|  1179           stack_trace_for_uncaught_exceptions_frame_limit_, |  1206           stack_trace_for_uncaught_exceptions_frame_limit_, | 
|  1180           stack_trace_for_uncaught_exceptions_options_); |  1207           stack_trace_for_uncaught_exceptions_options_); | 
|  1181     } |  1208     } | 
|  1182   } |  1209   } | 
|  1183   if (!location) { |  1210   if (!location) { | 
|  1184     if (!ComputeLocationFromStackTrace(&potential_computed_location, |  1211     if (!ComputeLocationFromException(&potential_computed_location, | 
|  1185                                        exception)) { |  1212                                       exception)) { | 
|  1186       ComputeLocation(&potential_computed_location); |  1213       if (!ComputeLocationFromStackTrace(&potential_computed_location, | 
 |  1214                                          exception)) { | 
 |  1215         ComputeLocation(&potential_computed_location); | 
 |  1216       } | 
|  1187     } |  1217     } | 
|  1188     location = &potential_computed_location; |  1218     location = &potential_computed_location; | 
|  1189   } |  1219   } | 
|  1190  |  1220  | 
|  1191   // If the exception argument is a custom object, turn it into a string |  1221   // If the exception argument is a custom object, turn it into a string | 
|  1192   // before throwing as uncaught exception.  Note that the pending |  1222   // before throwing as uncaught exception.  Note that the pending | 
|  1193   // exception object to be set later must not be turned into a string. |  1223   // exception object to be set later must not be turned into a string. | 
|  1194   if (exception->IsJSObject() && !IsErrorObject(exception)) { |  1224   if (exception->IsJSObject() && !IsErrorObject(exception)) { | 
|  1195     MaybeHandle<Object> maybe_exception = |  1225     MaybeHandle<Object> maybe_exception = | 
|  1196         Execution::ToDetailString(this, exception); |  1226         Execution::ToDetailString(this, exception); | 
| (...skipping 1358 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2555   if (prev_ && prev_->Intercept(flag)) return true; |  2585   if (prev_ && prev_->Intercept(flag)) return true; | 
|  2556   // Then check whether this scope intercepts. |  2586   // Then check whether this scope intercepts. | 
|  2557   if ((flag & intercept_mask_)) { |  2587   if ((flag & intercept_mask_)) { | 
|  2558     intercepted_flags_ |= flag; |  2588     intercepted_flags_ |= flag; | 
|  2559     return true; |  2589     return true; | 
|  2560   } |  2590   } | 
|  2561   return false; |  2591   return false; | 
|  2562 } |  2592 } | 
|  2563  |  2593  | 
|  2564 } }  // namespace v8::internal |  2594 } }  // namespace v8::internal | 
| OLD | NEW |