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 18 matching lines...) Expand all Loading... | |
29 #include "v8.h" | 29 #include "v8.h" |
30 | 30 |
31 #include "liveedit.h" | 31 #include "liveedit.h" |
32 | 32 |
33 #include "code-stubs.h" | 33 #include "code-stubs.h" |
34 #include "compilation-cache.h" | 34 #include "compilation-cache.h" |
35 #include "compiler.h" | 35 #include "compiler.h" |
36 #include "debug.h" | 36 #include "debug.h" |
37 #include "deoptimizer.h" | 37 #include "deoptimizer.h" |
38 #include "global-handles.h" | 38 #include "global-handles.h" |
39 #include "messages.h" | |
39 #include "parser.h" | 40 #include "parser.h" |
40 #include "scopeinfo.h" | 41 #include "scopeinfo.h" |
41 #include "scopes.h" | 42 #include "scopes.h" |
42 #include "v8memory.h" | 43 #include "v8memory.h" |
43 | 44 |
44 namespace v8 { | 45 namespace v8 { |
45 namespace internal { | 46 namespace internal { |
46 | 47 |
47 | 48 |
48 #ifdef ENABLE_DEBUGGER_SUPPORT | 49 #ifdef ENABLE_DEBUGGER_SUPPORT |
(...skipping 869 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
918 | 919 |
919 | 920 |
920 JSArray* LiveEdit::GatherCompileInfo(Handle<Script> script, | 921 JSArray* LiveEdit::GatherCompileInfo(Handle<Script> script, |
921 Handle<String> source) { | 922 Handle<String> source) { |
922 Isolate* isolate = Isolate::Current(); | 923 Isolate* isolate = Isolate::Current(); |
923 | 924 |
924 FunctionInfoListener listener; | 925 FunctionInfoListener listener; |
925 Handle<Object> original_source = Handle<Object>(script->source()); | 926 Handle<Object> original_source = Handle<Object>(script->source()); |
926 script->set_source(*source); | 927 script->set_source(*source); |
927 isolate->set_active_function_info_listener(&listener); | 928 isolate->set_active_function_info_listener(&listener); |
928 CompileScriptForTracker(isolate, script); | 929 |
930 { | |
931 // Creating verbose TryCatch from public API is currently the only way to | |
932 // force code save location. We do not use this the object directly. | |
933 v8::TryCatch try_catch; | |
934 try_catch.SetVerbose(true); | |
935 | |
936 // A logical 'try' section. | |
937 CompileScriptForTracker(isolate, script); | |
938 } | |
939 | |
940 // A logical 'catch' section. | |
941 Handle<Object> rethrow_exception; | |
942 if (isolate->has_pending_exception()) { | |
943 Handle<Object> exception(isolate->pending_exception()->ToObjectChecked()); | |
944 MessageLocation message_location = isolate->GetMessageLocation(); | |
945 | |
946 isolate->clear_pending_message(); | |
947 isolate->clear_pending_exception(); | |
948 | |
949 // If possible, copy positions from message object to exception object. | |
950 if (exception->IsJSObject() && !message_location.script().is_null()) { | |
951 Handle<JSObject> exception_struct = Handle<JSObject>::cast(exception); | |
952 | |
953 Factory* factory = isolate->factory(); | |
954 JSReceiver::SetProperty(exception_struct, | |
955 factory->LookupAsciiSymbol("startPosition"), | |
Michael Starzinger
2012/12/04 09:51:05
This pattern is not GC safe. Other handles might h
| |
956 Handle<Smi>(Smi::FromInt(message_location.start_pos())), | |
957 NONE, kNonStrictMode); | |
958 JSReceiver::SetProperty(exception_struct, | |
959 factory->LookupAsciiSymbol("endPosition"), | |
Michael Starzinger
2012/12/04 09:51:05
Likewise.
| |
960 Handle<Smi>(Smi::FromInt(message_location.end_pos())), | |
961 NONE, kNonStrictMode); | |
962 JSReceiver::SetProperty(exception_struct, | |
963 factory->LookupAsciiSymbol("scriptObject"), | |
Michael Starzinger
2012/12/04 09:51:05
Likewise.
| |
964 GetScriptWrapper(message_location.script()), | |
965 NONE, kNonStrictMode); | |
966 } | |
967 | |
968 rethrow_exception = exception; | |
969 } | |
970 | |
971 // A logical 'finally' section. | |
929 isolate->set_active_function_info_listener(NULL); | 972 isolate->set_active_function_info_listener(NULL); |
930 script->set_source(*original_source); | 973 script->set_source(*original_source); |
931 | 974 |
932 return *(listener.GetResult()); | 975 if (rethrow_exception.is_null()) { |
976 return *(listener.GetResult()); | |
977 } else { | |
978 isolate->Throw(*rethrow_exception); | |
979 return 0; | |
980 } | |
933 } | 981 } |
934 | 982 |
935 | 983 |
936 void LiveEdit::WrapSharedFunctionInfos(Handle<JSArray> array) { | 984 void LiveEdit::WrapSharedFunctionInfos(Handle<JSArray> array) { |
937 HandleScope scope; | 985 HandleScope scope; |
938 int len = GetArrayLength(array); | 986 int len = GetArrayLength(array); |
939 for (int i = 0; i < len; i++) { | 987 for (int i = 0; i < len; i++) { |
940 Handle<SharedFunctionInfo> info( | 988 Handle<SharedFunctionInfo> info( |
941 SharedFunctionInfo::cast(array->GetElementNoExceptionThrown(i))); | 989 SharedFunctionInfo::cast(array->GetElementNoExceptionThrown(i))); |
942 SharedInfoWrapper info_wrapper = SharedInfoWrapper::Create(); | 990 SharedInfoWrapper info_wrapper = SharedInfoWrapper::Create(); |
(...skipping 1113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2056 | 2104 |
2057 bool LiveEditFunctionTracker::IsActive(Isolate* isolate) { | 2105 bool LiveEditFunctionTracker::IsActive(Isolate* isolate) { |
2058 return false; | 2106 return false; |
2059 } | 2107 } |
2060 | 2108 |
2061 #endif // ENABLE_DEBUGGER_SUPPORT | 2109 #endif // ENABLE_DEBUGGER_SUPPORT |
2062 | 2110 |
2063 | 2111 |
2064 | 2112 |
2065 } } // namespace v8::internal | 2113 } } // namespace v8::internal |
OLD | NEW |