Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(766)

Side by Side Diff: src/liveedit.cc

Issue 11421100: Issue 2429, core implementation and the protocol change (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: clean Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 907 matching lines...) Expand 10 before | Expand all | Expand 10 after
918 918
919 919
920 JSArray* LiveEdit::GatherCompileInfo(Handle<Script> script, 920 JSArray* LiveEdit::GatherCompileInfo(Handle<Script> script,
921 Handle<String> source) { 921 Handle<String> source) {
922 Isolate* isolate = Isolate::Current(); 922 Isolate* isolate = Isolate::Current();
923 923
924 FunctionInfoListener listener; 924 FunctionInfoListener listener;
925 Handle<Object> original_source = Handle<Object>(script->source()); 925 Handle<Object> original_source = Handle<Object>(script->source());
926 script->set_source(*source); 926 script->set_source(*source);
927 isolate->set_active_function_info_listener(&listener); 927 isolate->set_active_function_info_listener(&listener);
928 CompileScriptForTracker(isolate, script); 928
929 Handle<Object> rethrow_exception;
930 {
931 // Creating TryCatch from public API is currently the only way to get
932 // message object. Without TryCatch the message object won't even be
933 // prepared at all.
934 v8::TryCatch try_catch;
935 try_catch.SetVerbose(true);
936
937 // A logical 'try' section.
938 CompileScriptForTracker(isolate, script);
939
940 // A logical 'catch' section.
941 if (isolate->has_pending_exception()) {
942 isolate->ReportPendingMessages();
943 isolate->clear_pending_exception();
Yang 2012/11/29 16:38:57 If I'm not mistaken, ReportPendingMessages() alrea
Peter Rybin 2012/11/29 23:16:05 It does clear message. I don't see that it clears
944 isolate->clear_pending_message();
945 }
946 if (!try_catch.Exception().IsEmpty()) {
Yang 2012/11/29 16:38:57 use try_catch.HasCaught() seems cleaner.
Peter Rybin 2012/11/29 23:16:05 Done.
947 Handle<Object> exception =
948 Utils::OpenHandle(*try_catch.Exception(), false);
949
950 // If possible, copy positions from message object to exception object.
951 if (exception->IsJSObject() && !try_catch.Message().IsEmpty()) {
Yang 2012/11/29 16:38:57 It seems that GetLineNumber() and the Get*Column()
Peter Rybin 2012/11/29 23:16:05 Done.
952 Handle<JSObject> exception_struct = Handle<JSObject>::cast(exception);
953
954 Factory* factory = isolate->factory();
955 JSReceiver::SetProperty(exception_struct,
956 factory->LookupAsciiSymbol("startLine"),
957 Handle<Smi>(Smi::FromInt(try_catch.Message()->GetLineNumber())),
958 NONE, kNonStrictMode);
959 JSReceiver::SetProperty(exception_struct,
960 factory->LookupAsciiSymbol("startPosition"),
961 Handle<Smi>(Smi::FromInt(try_catch.Message()->GetStartPosition())),
962 NONE, kNonStrictMode);
963 JSReceiver::SetProperty(exception_struct,
964 factory->LookupAsciiSymbol("endPosition"),
965 Handle<Smi>(Smi::FromInt(try_catch.Message()->GetEndPosition())),
966 NONE, kNonStrictMode);
967 JSReceiver::SetProperty(exception_struct,
968 factory->LookupAsciiSymbol("startColumn"),
969 Handle<Smi>(Smi::FromInt(try_catch.Message()->GetStartColumn())),
970 NONE, kNonStrictMode);
971 JSReceiver::SetProperty(exception_struct,
972 factory->LookupAsciiSymbol("endColumn"),
973 Handle<Smi>(Smi::FromInt(try_catch.Message()->GetEndColumn())),
974 NONE, kNonStrictMode);
975 }
976
977 rethrow_exception = exception;
978 }
979 }
980
929 isolate->set_active_function_info_listener(NULL); 981 isolate->set_active_function_info_listener(NULL);
930 script->set_source(*original_source); 982 script->set_source(*original_source);
931 983
932 return *(listener.GetResult()); 984 if (rethrow_exception.is_null()) {
Yang 2012/11/29 16:38:57 Would it be possible to use try_catch.ReThrow()?
Peter Rybin 2012/11/29 23:16:05 I don't see a nice way to reach TryCatch outside f
985 return *(listener.GetResult());
986 } else {
987 isolate->Throw(*rethrow_exception);
988 return 0;
989 }
933 } 990 }
934 991
935 992
936 void LiveEdit::WrapSharedFunctionInfos(Handle<JSArray> array) { 993 void LiveEdit::WrapSharedFunctionInfos(Handle<JSArray> array) {
937 HandleScope scope; 994 HandleScope scope;
938 int len = GetArrayLength(array); 995 int len = GetArrayLength(array);
939 for (int i = 0; i < len; i++) { 996 for (int i = 0; i < len; i++) {
940 Handle<SharedFunctionInfo> info( 997 Handle<SharedFunctionInfo> info(
941 SharedFunctionInfo::cast(array->GetElementNoExceptionThrown(i))); 998 SharedFunctionInfo::cast(array->GetElementNoExceptionThrown(i)));
942 SharedInfoWrapper info_wrapper = SharedInfoWrapper::Create(); 999 SharedInfoWrapper info_wrapper = SharedInfoWrapper::Create();
(...skipping 1113 matching lines...) Expand 10 before | Expand all | Expand 10 after
2056 2113
2057 bool LiveEditFunctionTracker::IsActive(Isolate* isolate) { 2114 bool LiveEditFunctionTracker::IsActive(Isolate* isolate) {
2058 return false; 2115 return false;
2059 } 2116 }
2060 2117
2061 #endif // ENABLE_DEBUGGER_SUPPORT 2118 #endif // ENABLE_DEBUGGER_SUPPORT
2062 2119
2063 2120
2064 2121
2065 } } // namespace v8::internal 2122 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/debug-debugger.js ('k') | src/liveedit-debugger.js » ('j') | src/liveedit-debugger.js » ('J')

Powered by Google App Engine
This is Rietveld 408576698