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

Side by Side Diff: src/liveedit.cc

Issue 2866008: [Isolates] Move contents of Top into Isolate.... (Closed) Base URL: http://v8.googlecode.com/svn/branches/experimental/isolates/
Patch Set: ensure we're synced Created 10 years, 6 months 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
« no previous file with comments | « src/jsregexp.cc ('k') | src/log.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2010 the V8 project authors. All rights reserved. 1 // Copyright 2010 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 393 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 404
405 // Only allow non-global compiles for eval. 405 // Only allow non-global compiles for eval.
406 ASSERT(is_eval || is_global); 406 ASSERT(is_eval || is_global);
407 407
408 // Build AST. 408 // Build AST.
409 ScriptDataImpl* pre_data = NULL; 409 ScriptDataImpl* pre_data = NULL;
410 FunctionLiteral* lit = MakeAST(is_global, script, extension, pre_data); 410 FunctionLiteral* lit = MakeAST(is_global, script, extension, pre_data);
411 411
412 // Check for parse errors. 412 // Check for parse errors.
413 if (lit == NULL) { 413 if (lit == NULL) {
414 ASSERT(Top::has_pending_exception()); 414 ASSERT(Isolate::Current()->has_pending_exception());
415 return; 415 return;
416 } 416 }
417 417
418 // Compile the code. 418 // Compile the code.
419 CompilationInfo info(lit, script, is_eval); 419 CompilationInfo info(lit, script, is_eval);
420 420
421 LiveEditFunctionTracker tracker(lit); 421 LiveEditFunctionTracker tracker(lit);
422 Handle<Code> code = MakeCodeForLiveEdit(&info); 422 Handle<Code> code = MakeCodeForLiveEdit(&info);
423 423
424 // Check for stack-overflow exceptions. 424 // Check for stack-overflow exceptions.
425 if (code.is_null()) { 425 if (code.is_null()) {
426 Top::StackOverflow(); 426 Isolate::Current()->StackOverflow();
427 return; 427 return;
428 } 428 }
429 tracker.RecordRootFunctionInfo(code); 429 tracker.RecordRootFunctionInfo(code);
430 } 430 }
431 431
432 // Unwraps JSValue object, returning its field "value" 432 // Unwraps JSValue object, returning its field "value"
433 static Handle<Object> UnwrapJSValue(Handle<JSValue> jsValue) { 433 static Handle<Object> UnwrapJSValue(Handle<JSValue> jsValue) {
434 return Handle<Object>(jsValue->value()); 434 return Handle<Object>(jsValue->value());
435 } 435 }
436 436
437 // Wraps any object into a OpaqueReference, that will hide the object 437 // Wraps any object into a OpaqueReference, that will hide the object
438 // from JavaScript. 438 // from JavaScript.
439 static Handle<JSValue> WrapInJSValue(Object* object) { 439 static Handle<JSValue> WrapInJSValue(Object* object) {
440 Handle<JSFunction> constructor = Top::opaque_reference_function(); 440 Handle<JSFunction> constructor =
441 Isolate::Current()->opaque_reference_function();
441 Handle<JSValue> result = 442 Handle<JSValue> result =
442 Handle<JSValue>::cast(Factory::NewJSObject(constructor)); 443 Handle<JSValue>::cast(Factory::NewJSObject(constructor));
443 result->set_value(object); 444 result->set_value(object);
444 return result; 445 return result;
445 } 446 }
446 447
447 // Simple helper class that creates more or less typed structures over 448 // Simple helper class that creates more or less typed structures over
448 // JSArray object. This is an adhoc method of passing structures from C++ 449 // JSArray object. This is an adhoc method of passing structures from C++
449 // to JavaScript. 450 // to JavaScript.
450 template<typename S> 451 template<typename S>
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after
786 }; 787 };
787 788
788 class FrameUncookingThreadVisitor : public ThreadVisitor { 789 class FrameUncookingThreadVisitor : public ThreadVisitor {
789 public: 790 public:
790 void VisitThread(ThreadLocalTop* top) { 791 void VisitThread(ThreadLocalTop* top) {
791 StackFrame::UncookFramesForThread(top); 792 StackFrame::UncookFramesForThread(top);
792 } 793 }
793 }; 794 };
794 795
795 static void IterateAllThreads(ThreadVisitor* visitor) { 796 static void IterateAllThreads(ThreadVisitor* visitor) {
796 Top::IterateThread(visitor); 797 Isolate::Current()->IterateThread(visitor);
797 ThreadManager::IterateArchivedThreads(visitor); 798 ThreadManager::IterateArchivedThreads(visitor);
798 } 799 }
799 800
800 // Finds all references to original and replaces them with substitution. 801 // Finds all references to original and replaces them with substitution.
801 static void ReplaceCodeObject(Code* original, Code* substitution) { 802 static void ReplaceCodeObject(Code* original, Code* substitution) {
802 ASSERT(!HEAP->InNewSpace(substitution)); 803 ASSERT(!HEAP->InNewSpace(substitution));
803 804
804 AssertNoAllocation no_allocations_please; 805 AssertNoAllocation no_allocations_please;
805 806
806 // A zone scope for ReferenceCollectorVisitor. 807 // A zone scope for ReferenceCollectorVisitor.
(...skipping 30 matching lines...) Expand all
837 static bool IsJSFunctionCode(Code* code) { 838 static bool IsJSFunctionCode(Code* code) {
838 return code->kind() == Code::FUNCTION; 839 return code->kind() == Code::FUNCTION;
839 } 840 }
840 841
841 842
842 Object* LiveEdit::ReplaceFunctionCode(Handle<JSArray> new_compile_info_array, 843 Object* LiveEdit::ReplaceFunctionCode(Handle<JSArray> new_compile_info_array,
843 Handle<JSArray> shared_info_array) { 844 Handle<JSArray> shared_info_array) {
844 HandleScope scope; 845 HandleScope scope;
845 846
846 if (!SharedInfoWrapper::IsInstance(shared_info_array)) { 847 if (!SharedInfoWrapper::IsInstance(shared_info_array)) {
847 return Top::ThrowIllegalOperation(); 848 return Isolate::Current()->ThrowIllegalOperation();
848 } 849 }
849 850
850 FunctionInfoWrapper compile_info_wrapper(new_compile_info_array); 851 FunctionInfoWrapper compile_info_wrapper(new_compile_info_array);
851 SharedInfoWrapper shared_info_wrapper(shared_info_array); 852 SharedInfoWrapper shared_info_wrapper(shared_info_array);
852 853
853 Handle<SharedFunctionInfo> shared_info = shared_info_wrapper.GetInfo(); 854 Handle<SharedFunctionInfo> shared_info = shared_info_wrapper.GetInfo();
854 855
855 if (IsJSFunctionCode(shared_info->code())) { 856 if (IsJSFunctionCode(shared_info->code())) {
856 ReplaceCodeObject(shared_info->code(), 857 ReplaceCodeObject(shared_info->code(),
857 *(compile_info_wrapper.GetFunctionCode())); 858 *(compile_info_wrapper.GetFunctionCode()));
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
1031 Handle<Code> result(Factory::CopyCode(code, buffer)); 1032 Handle<Code> result(Factory::CopyCode(code, buffer));
1032 return result; 1033 return result;
1033 } 1034 }
1034 } 1035 }
1035 1036
1036 1037
1037 Object* LiveEdit::PatchFunctionPositions( 1038 Object* LiveEdit::PatchFunctionPositions(
1038 Handle<JSArray> shared_info_array, Handle<JSArray> position_change_array) { 1039 Handle<JSArray> shared_info_array, Handle<JSArray> position_change_array) {
1039 1040
1040 if (!SharedInfoWrapper::IsInstance(shared_info_array)) { 1041 if (!SharedInfoWrapper::IsInstance(shared_info_array)) {
1041 return Top::ThrowIllegalOperation(); 1042 return Isolate::Current()->ThrowIllegalOperation();
1042 } 1043 }
1043 1044
1044 SharedInfoWrapper shared_info_wrapper(shared_info_array); 1045 SharedInfoWrapper shared_info_wrapper(shared_info_array);
1045 Handle<SharedFunctionInfo> info = shared_info_wrapper.GetInfo(); 1046 Handle<SharedFunctionInfo> info = shared_info_wrapper.GetInfo();
1046 1047
1047 int old_function_start = info->start_position(); 1048 int old_function_start = info->start_position();
1048 int new_function_start = TranslatePosition(old_function_start, 1049 int new_function_start = TranslatePosition(old_function_start,
1049 position_change_array); 1050 position_change_array);
1050 info->set_start_position(new_function_start); 1051 info->set_start_position(new_function_start);
1051 info->set_end_position(TranslatePosition(info->end_position(), 1052 info->set_end_position(TranslatePosition(info->end_position(),
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
1159 } 1160 }
1160 return false; 1161 return false;
1161 } 1162 }
1162 1163
1163 1164
1164 // Iterates over handler chain and removes all elements that are inside 1165 // Iterates over handler chain and removes all elements that are inside
1165 // frames being dropped. 1166 // frames being dropped.
1166 static bool FixTryCatchHandler(StackFrame* top_frame, 1167 static bool FixTryCatchHandler(StackFrame* top_frame,
1167 StackFrame* bottom_frame) { 1168 StackFrame* bottom_frame) {
1168 Address* pointer_address = 1169 Address* pointer_address =
1169 &Memory::Address_at(Top::get_address_from_id(Top::k_handler_address)); 1170 &Memory::Address_at(Isolate::Current()->get_address_from_id(
1171 Isolate::k_handler_address));
1170 1172
1171 while (*pointer_address < top_frame->sp()) { 1173 while (*pointer_address < top_frame->sp()) {
1172 pointer_address = &Memory::Address_at(*pointer_address); 1174 pointer_address = &Memory::Address_at(*pointer_address);
1173 } 1175 }
1174 Address* above_frame_address = pointer_address; 1176 Address* above_frame_address = pointer_address;
1175 while (*pointer_address < bottom_frame->fp()) { 1177 while (*pointer_address < bottom_frame->fp()) {
1176 pointer_address = &Memory::Address_at(*pointer_address); 1178 pointer_address = &Memory::Address_at(*pointer_address);
1177 } 1179 }
1178 bool change = *above_frame_address != *pointer_address; 1180 bool change = *above_frame_address != *pointer_address;
1179 *above_frame_address = *pointer_address; 1181 *above_frame_address = *pointer_address;
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
1459 1461
1460 bool LiveEditFunctionTracker::IsActive() { 1462 bool LiveEditFunctionTracker::IsActive() {
1461 return false; 1463 return false;
1462 } 1464 }
1463 1465
1464 #endif // ENABLE_DEBUGGER_SUPPORT 1466 #endif // ENABLE_DEBUGGER_SUPPORT
1465 1467
1466 1468
1467 1469
1468 } } // namespace v8::internal 1470 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/jsregexp.cc ('k') | src/log.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698