OLD | NEW |
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 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
245 | 245 |
246 void Comparator::CalculateDifference(Comparator::Input* input, | 246 void Comparator::CalculateDifference(Comparator::Input* input, |
247 Comparator::Output* result_writer) { | 247 Comparator::Output* result_writer) { |
248 Differencer differencer(input); | 248 Differencer differencer(input); |
249 differencer.Initialize(); | 249 differencer.Initialize(); |
250 differencer.FillTable(); | 250 differencer.FillTable(); |
251 differencer.SaveResult(result_writer); | 251 differencer.SaveResult(result_writer); |
252 } | 252 } |
253 | 253 |
254 | 254 |
255 static bool CompareSubstrings(Handle<String> s1, int pos1, | 255 static bool CompareSubstrings(Isolate* isolate, Handle<String> s1, int pos1, |
256 Handle<String> s2, int pos2, int len) { | 256 Handle<String> s2, int pos2, int len) { |
257 static StringInputBuffer buf1; | 257 StringInputBuffer& buf1 = *isolate->liveedit_compare_substrings_buf1(); |
258 static StringInputBuffer buf2; | 258 StringInputBuffer& buf2 = *isolate->liveedit_compare_substrings_buf2(); |
259 buf1.Reset(*s1); | 259 buf1.Reset(*s1); |
260 buf1.Seek(pos1); | 260 buf1.Seek(pos1); |
261 buf2.Reset(*s2); | 261 buf2.Reset(*s2); |
262 buf2.Seek(pos2); | 262 buf2.Seek(pos2); |
263 for (int i = 0; i < len; i++) { | 263 for (int i = 0; i < len; i++) { |
264 ASSERT(buf1.has_more() && buf2.has_more()); | 264 ASSERT(buf1.has_more() && buf2.has_more()); |
265 if (buf1.GetNext() != buf2.GetNext()) { | 265 if (buf1.GetNext() != buf2.GetNext()) { |
266 return false; | 266 return false; |
267 } | 267 } |
268 } | 268 } |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
307 | 307 |
308 int GetPosAfterNewLine(int index) { | 308 int GetPosAfterNewLine(int index) { |
309 return Smi::cast(ends_array_->get(index))->value() + 1; | 309 return Smi::cast(ends_array_->get(index))->value() + 1; |
310 } | 310 } |
311 }; | 311 }; |
312 | 312 |
313 | 313 |
314 // Represents 2 strings as 2 arrays of lines. | 314 // Represents 2 strings as 2 arrays of lines. |
315 class LineArrayCompareInput : public Comparator::Input { | 315 class LineArrayCompareInput : public Comparator::Input { |
316 public: | 316 public: |
317 LineArrayCompareInput(Handle<String> s1, Handle<String> s2, | 317 LineArrayCompareInput(Isolate* isolate, Handle<String> s1, Handle<String> s2, |
318 LineEndsWrapper line_ends1, LineEndsWrapper line_ends2) | 318 LineEndsWrapper line_ends1, LineEndsWrapper line_ends2) |
319 : s1_(s1), s2_(s2), line_ends1_(line_ends1), line_ends2_(line_ends2) { | 319 : isolate_(isolate), s1_(s1), s2_(s2), line_ends1_(line_ends1), |
| 320 line_ends2_(line_ends2) { |
320 } | 321 } |
321 int getLength1() { | 322 int getLength1() { |
322 return line_ends1_.length(); | 323 return line_ends1_.length(); |
323 } | 324 } |
324 int getLength2() { | 325 int getLength2() { |
325 return line_ends2_.length(); | 326 return line_ends2_.length(); |
326 } | 327 } |
327 bool equals(int index1, int index2) { | 328 bool equals(int index1, int index2) { |
328 int line_start1 = line_ends1_.GetLineStart(index1); | 329 int line_start1 = line_ends1_.GetLineStart(index1); |
329 int line_start2 = line_ends2_.GetLineStart(index2); | 330 int line_start2 = line_ends2_.GetLineStart(index2); |
330 int line_end1 = line_ends1_.GetLineEnd(index1); | 331 int line_end1 = line_ends1_.GetLineEnd(index1); |
331 int line_end2 = line_ends2_.GetLineEnd(index2); | 332 int line_end2 = line_ends2_.GetLineEnd(index2); |
332 int len1 = line_end1 - line_start1; | 333 int len1 = line_end1 - line_start1; |
333 int len2 = line_end2 - line_start2; | 334 int len2 = line_end2 - line_start2; |
334 if (len1 != len2) { | 335 if (len1 != len2) { |
335 return false; | 336 return false; |
336 } | 337 } |
337 return CompareSubstrings(s1_, line_start1, s2_, line_start2, len1); | 338 return CompareSubstrings(isolate_, s1_, line_start1, s2_, line_start2, |
| 339 len1); |
338 } | 340 } |
339 | 341 |
340 private: | 342 private: |
| 343 Isolate* isolate_; |
341 Handle<String> s1_; | 344 Handle<String> s1_; |
342 Handle<String> s2_; | 345 Handle<String> s2_; |
343 LineEndsWrapper line_ends1_; | 346 LineEndsWrapper line_ends1_; |
344 LineEndsWrapper line_ends2_; | 347 LineEndsWrapper line_ends2_; |
345 }; | 348 }; |
346 | 349 |
347 | 350 |
348 // Stores compare result in JSArray. Each chunk is stored as 3 array elements: | 351 // Stores compare result in JSArray. Each chunk is stored as 3 array elements: |
349 // (pos1_begin, pos1_end, pos2_end). | 352 // (pos1_begin, pos1_end, pos2_end). |
350 class LineArrayCompareOutput : public Comparator::Output { | 353 class LineArrayCompareOutput : public Comparator::Output { |
(...skipping 27 matching lines...) Expand all Loading... |
378 LineEndsWrapper line_ends1_; | 381 LineEndsWrapper line_ends1_; |
379 LineEndsWrapper line_ends2_; | 382 LineEndsWrapper line_ends2_; |
380 }; | 383 }; |
381 | 384 |
382 | 385 |
383 Handle<JSArray> LiveEdit::CompareStringsLinewise(Handle<String> s1, | 386 Handle<JSArray> LiveEdit::CompareStringsLinewise(Handle<String> s1, |
384 Handle<String> s2) { | 387 Handle<String> s2) { |
385 LineEndsWrapper line_ends1(s1); | 388 LineEndsWrapper line_ends1(s1); |
386 LineEndsWrapper line_ends2(s2); | 389 LineEndsWrapper line_ends2(s2); |
387 | 390 |
388 LineArrayCompareInput input(s1, s2, line_ends1, line_ends2); | 391 LineArrayCompareInput |
| 392 input(Isolate::Current(), s1, s2, line_ends1, line_ends2); |
389 LineArrayCompareOutput output(line_ends1, line_ends2); | 393 LineArrayCompareOutput output(line_ends1, line_ends2); |
390 | 394 |
391 Comparator::CalculateDifference(&input, &output); | 395 Comparator::CalculateDifference(&input, &output); |
392 | 396 |
393 return output.GetResult(); | 397 return output.GetResult(); |
394 } | 398 } |
395 | 399 |
396 | 400 |
397 static void CompileScriptForTracker(Handle<Script> script) { | 401 static void CompileScriptForTracker(Isolate* isolate, Handle<Script> script) { |
398 const bool is_eval = false; | 402 const bool is_eval = false; |
399 const bool is_global = true; | 403 const bool is_global = true; |
400 // TODO(635): support extensions. | 404 // TODO(635): support extensions. |
401 Extension* extension = NULL; | 405 Extension* extension = NULL; |
402 | 406 |
403 PostponeInterruptsScope postpone; | 407 PostponeInterruptsScope postpone; |
404 | 408 |
405 // Only allow non-global compiles for eval. | 409 // Only allow non-global compiles for eval. |
406 ASSERT(is_eval || is_global); | 410 ASSERT(is_eval || is_global); |
407 | 411 |
408 // Build AST. | 412 // Build AST. |
409 ScriptDataImpl* pre_data = NULL; | 413 ScriptDataImpl* pre_data = NULL; |
410 FunctionLiteral* lit = MakeAST(is_global, script, extension, pre_data); | 414 FunctionLiteral* lit = MakeAST(is_global, script, extension, pre_data); |
411 | 415 |
412 // Check for parse errors. | 416 // Check for parse errors. |
413 if (lit == NULL) { | 417 if (lit == NULL) { |
414 ASSERT(Isolate::Current()->has_pending_exception()); | 418 ASSERT(isolate->has_pending_exception()); |
415 return; | 419 return; |
416 } | 420 } |
417 | 421 |
418 // Compile the code. | 422 // Compile the code. |
419 CompilationInfo info(lit, script, is_eval); | 423 CompilationInfo info(lit, script, is_eval); |
420 | 424 |
421 LiveEditFunctionTracker tracker(lit); | 425 LiveEditFunctionTracker tracker(isolate, lit); |
422 Handle<Code> code = MakeCodeForLiveEdit(&info); | 426 Handle<Code> code = MakeCodeForLiveEdit(&info); |
423 | 427 |
424 // Check for stack-overflow exceptions. | 428 // Check for stack-overflow exceptions. |
425 if (code.is_null()) { | 429 if (code.is_null()) { |
426 Isolate::Current()->StackOverflow(); | 430 isolate->StackOverflow(); |
427 return; | 431 return; |
428 } | 432 } |
429 tracker.RecordRootFunctionInfo(code); | 433 tracker.RecordRootFunctionInfo(code); |
430 } | 434 } |
431 | 435 |
432 // Unwraps JSValue object, returning its field "value" | 436 // Unwraps JSValue object, returning its field "value" |
433 static Handle<Object> UnwrapJSValue(Handle<JSValue> jsValue) { | 437 static Handle<Object> UnwrapJSValue(Handle<JSValue> jsValue) { |
434 return Handle<Object>(jsValue->value()); | 438 return Handle<Object>(jsValue->value()); |
435 } | 439 } |
436 | 440 |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
693 Handle<JSArray> GetResult() { | 697 Handle<JSArray> GetResult() { |
694 return result_; | 698 return result_; |
695 } | 699 } |
696 | 700 |
697 private: | 701 private: |
698 Handle<JSArray> result_; | 702 Handle<JSArray> result_; |
699 int len_; | 703 int len_; |
700 int current_parent_index_; | 704 int current_parent_index_; |
701 }; | 705 }; |
702 | 706 |
703 static FunctionInfoListener* active_function_info_listener = NULL; | |
704 | |
705 JSArray* LiveEdit::GatherCompileInfo(Handle<Script> script, | 707 JSArray* LiveEdit::GatherCompileInfo(Handle<Script> script, |
706 Handle<String> source) { | 708 Handle<String> source) { |
| 709 Isolate* isolate = Isolate::Current(); |
707 CompilationZoneScope zone_scope(DELETE_ON_EXIT); | 710 CompilationZoneScope zone_scope(DELETE_ON_EXIT); |
708 | 711 |
709 FunctionInfoListener listener; | 712 FunctionInfoListener listener; |
710 Handle<Object> original_source = Handle<Object>(script->source()); | 713 Handle<Object> original_source = Handle<Object>(script->source()); |
711 script->set_source(*source); | 714 script->set_source(*source); |
712 active_function_info_listener = &listener; | 715 isolate->set_active_function_info_listener(&listener); |
713 CompileScriptForTracker(script); | 716 CompileScriptForTracker(isolate, script); |
714 active_function_info_listener = NULL; | 717 isolate->set_active_function_info_listener(NULL); |
715 script->set_source(*original_source); | 718 script->set_source(*original_source); |
716 | 719 |
717 return *(listener.GetResult()); | 720 return *(listener.GetResult()); |
718 } | 721 } |
719 | 722 |
720 | 723 |
721 void LiveEdit::WrapSharedFunctionInfos(Handle<JSArray> array) { | 724 void LiveEdit::WrapSharedFunctionInfos(Handle<JSArray> array) { |
722 HandleScope scope; | 725 HandleScope scope; |
723 int len = Smi::cast(array->length())->value(); | 726 int len = Smi::cast(array->length())->value(); |
724 for (int i = 0; i < len; i++) { | 727 for (int i = 0; i < len; i++) { |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
862 Handle<DebugInfo> debug_info(DebugInfo::cast(shared_info->debug_info())); | 865 Handle<DebugInfo> debug_info(DebugInfo::cast(shared_info->debug_info())); |
863 Handle<Code> new_original_code = | 866 Handle<Code> new_original_code = |
864 Factory::CopyCode(compile_info_wrapper.GetFunctionCode()); | 867 Factory::CopyCode(compile_info_wrapper.GetFunctionCode()); |
865 debug_info->set_original_code(*new_original_code); | 868 debug_info->set_original_code(*new_original_code); |
866 } | 869 } |
867 | 870 |
868 shared_info->set_start_position(compile_info_wrapper.GetStartPosition()); | 871 shared_info->set_start_position(compile_info_wrapper.GetStartPosition()); |
869 shared_info->set_end_position(compile_info_wrapper.GetEndPosition()); | 872 shared_info->set_end_position(compile_info_wrapper.GetEndPosition()); |
870 | 873 |
871 shared_info->set_construct_stub( | 874 shared_info->set_construct_stub( |
872 Builtins::builtin(Builtins::JSConstructStubGeneric)); | 875 Isolate::Current()->builtins()->builtin( |
| 876 Builtins::JSConstructStubGeneric)); |
873 | 877 |
874 return HEAP->undefined_value(); | 878 return HEAP->undefined_value(); |
875 } | 879 } |
876 | 880 |
877 | 881 |
878 // TODO(635): Eval caches its scripts (same text -- same compiled info). | 882 // TODO(635): Eval caches its scripts (same text -- same compiled info). |
879 // Make sure we clear such caches. | 883 // Make sure we clear such caches. |
880 void LiveEdit::SetFunctionScript(Handle<JSValue> function_wrapper, | 884 void LiveEdit::SetFunctionScript(Handle<JSValue> function_wrapper, |
881 Handle<Object> script_handle) { | 885 Handle<Object> script_handle) { |
882 Handle<SharedFunctionInfo> shared_info = | 886 Handle<SharedFunctionInfo> shared_info = |
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1195 StackFrame* top_frame = frames[top_frame_index]; | 1199 StackFrame* top_frame = frames[top_frame_index]; |
1196 StackFrame* bottom_js_frame = frames[bottom_js_frame_index]; | 1200 StackFrame* bottom_js_frame = frames[bottom_js_frame_index]; |
1197 | 1201 |
1198 ASSERT(bottom_js_frame->is_java_script()); | 1202 ASSERT(bottom_js_frame->is_java_script()); |
1199 | 1203 |
1200 // Check the nature of the top frame. | 1204 // Check the nature of the top frame. |
1201 if (pre_top_frame->code()->is_inline_cache_stub() && | 1205 if (pre_top_frame->code()->is_inline_cache_stub() && |
1202 pre_top_frame->code()->ic_state() == DEBUG_BREAK) { | 1206 pre_top_frame->code()->ic_state() == DEBUG_BREAK) { |
1203 // OK, we can drop inline cache calls. | 1207 // OK, we can drop inline cache calls. |
1204 } else if (pre_top_frame->code() == | 1208 } else if (pre_top_frame->code() == |
1205 Builtins::builtin(Builtins::FrameDropper_LiveEdit)) { | 1209 Isolate::Current()->builtins()->builtin( |
| 1210 Builtins::FrameDropper_LiveEdit)) { |
1206 // OK, we can drop our own code. | 1211 // OK, we can drop our own code. |
1207 } else if (pre_top_frame->code()->kind() == Code::STUB && | 1212 } else if (pre_top_frame->code()->kind() == Code::STUB && |
1208 pre_top_frame->code()->major_key()) { | 1213 pre_top_frame->code()->major_key()) { |
1209 // Unit Test entry, it's fine, we support this case. | 1214 // Unit Test entry, it's fine, we support this case. |
1210 } else { | 1215 } else { |
1211 return "Unknown structure of stack above changing function"; | 1216 return "Unknown structure of stack above changing function"; |
1212 } | 1217 } |
1213 | 1218 |
1214 Address unused_stack_top = top_frame->sp(); | 1219 Address unused_stack_top = top_frame->sp(); |
1215 Address unused_stack_bottom = bottom_js_frame->fp() | 1220 Address unused_stack_bottom = bottom_js_frame->fp() |
1216 - Debug::kFrameDropperFrameSize * kPointerSize // Size of the new frame. | 1221 - Debug::kFrameDropperFrameSize * kPointerSize // Size of the new frame. |
1217 + kPointerSize; // Bigger address end is exclusive. | 1222 + kPointerSize; // Bigger address end is exclusive. |
1218 | 1223 |
1219 if (unused_stack_top > unused_stack_bottom) { | 1224 if (unused_stack_top > unused_stack_bottom) { |
1220 return "Not enough space for frame dropper frame"; | 1225 return "Not enough space for frame dropper frame"; |
1221 } | 1226 } |
1222 | 1227 |
1223 // Committing now. After this point we should return only NULL value. | 1228 // Committing now. After this point we should return only NULL value. |
1224 | 1229 |
1225 FixTryCatchHandler(pre_top_frame, bottom_js_frame); | 1230 FixTryCatchHandler(pre_top_frame, bottom_js_frame); |
1226 // Make sure FixTryCatchHandler is idempotent. | 1231 // Make sure FixTryCatchHandler is idempotent. |
1227 ASSERT(!FixTryCatchHandler(pre_top_frame, bottom_js_frame)); | 1232 ASSERT(!FixTryCatchHandler(pre_top_frame, bottom_js_frame)); |
1228 | 1233 |
1229 Handle<Code> code(Builtins::builtin(Builtins::FrameDropper_LiveEdit)); | 1234 Handle<Code> code(Isolate::Current()->builtins()->builtin( |
| 1235 Builtins::FrameDropper_LiveEdit)); |
1230 top_frame->set_pc(code->entry()); | 1236 top_frame->set_pc(code->entry()); |
1231 pre_top_frame->SetCallerFp(bottom_js_frame->fp()); | 1237 pre_top_frame->SetCallerFp(bottom_js_frame->fp()); |
1232 | 1238 |
1233 Debug::SetUpFrameDropperFrame(bottom_js_frame, code); | 1239 Debug::SetUpFrameDropperFrame(bottom_js_frame, code); |
1234 | 1240 |
1235 for (Address a = unused_stack_top; | 1241 for (Address a = unused_stack_top; |
1236 a < unused_stack_bottom; | 1242 a < unused_stack_bottom; |
1237 a += kPointerSize) { | 1243 a += kPointerSize) { |
1238 Memory::Object_at(a) = Smi::FromInt(0); | 1244 Memory::Object_at(a) = Smi::FromInt(0); |
1239 } | 1245 } |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1401 if (error_message != NULL) { | 1407 if (error_message != NULL) { |
1402 // Add error message as an array extra element. | 1408 // Add error message as an array extra element. |
1403 Vector<const char> vector_message(error_message, StrLength(error_message)); | 1409 Vector<const char> vector_message(error_message, StrLength(error_message)); |
1404 Handle<String> str = Factory::NewStringFromAscii(vector_message); | 1410 Handle<String> str = Factory::NewStringFromAscii(vector_message); |
1405 SetElement(result, len, str); | 1411 SetElement(result, len, str); |
1406 } | 1412 } |
1407 return result; | 1413 return result; |
1408 } | 1414 } |
1409 | 1415 |
1410 | 1416 |
1411 LiveEditFunctionTracker::LiveEditFunctionTracker(FunctionLiteral* fun) { | 1417 LiveEditFunctionTracker::LiveEditFunctionTracker(Isolate* isolate, |
1412 if (active_function_info_listener != NULL) { | 1418 FunctionLiteral* fun) |
1413 active_function_info_listener->FunctionStarted(fun); | 1419 : isolate_(isolate) { |
| 1420 if (isolate_->active_function_info_listener() != NULL) { |
| 1421 isolate_->active_function_info_listener()->FunctionStarted(fun); |
1414 } | 1422 } |
1415 } | 1423 } |
1416 | 1424 |
1417 | 1425 |
1418 LiveEditFunctionTracker::~LiveEditFunctionTracker() { | 1426 LiveEditFunctionTracker::~LiveEditFunctionTracker() { |
1419 if (active_function_info_listener != NULL) { | 1427 if (isolate_->active_function_info_listener() != NULL) { |
1420 active_function_info_listener->FunctionDone(); | 1428 isolate_->active_function_info_listener()->FunctionDone(); |
1421 } | 1429 } |
1422 } | 1430 } |
1423 | 1431 |
1424 | 1432 |
1425 void LiveEditFunctionTracker::RecordFunctionInfo( | 1433 void LiveEditFunctionTracker::RecordFunctionInfo( |
1426 Handle<SharedFunctionInfo> info, FunctionLiteral* lit) { | 1434 Handle<SharedFunctionInfo> info, FunctionLiteral* lit) { |
1427 if (active_function_info_listener != NULL) { | 1435 if (isolate_->active_function_info_listener() != NULL) { |
1428 active_function_info_listener->FunctionInfo(info, lit->scope()); | 1436 isolate_->active_function_info_listener()->FunctionInfo(info, lit->scope()); |
1429 } | 1437 } |
1430 } | 1438 } |
1431 | 1439 |
1432 | 1440 |
1433 void LiveEditFunctionTracker::RecordRootFunctionInfo(Handle<Code> code) { | 1441 void LiveEditFunctionTracker::RecordRootFunctionInfo(Handle<Code> code) { |
1434 active_function_info_listener->FunctionCode(code); | 1442 isolate_->active_function_info_listener()->FunctionCode(code); |
1435 } | 1443 } |
1436 | 1444 |
1437 | 1445 |
1438 bool LiveEditFunctionTracker::IsActive() { | 1446 bool LiveEditFunctionTracker::IsActive(Isolate* isolate) { |
1439 return active_function_info_listener != NULL; | 1447 return isolate->active_function_info_listener() != NULL; |
1440 } | 1448 } |
1441 | 1449 |
1442 | 1450 |
1443 #else // ENABLE_DEBUGGER_SUPPORT | 1451 #else // ENABLE_DEBUGGER_SUPPORT |
1444 | 1452 |
1445 // This ifdef-else-endif section provides working or stub implementation of | 1453 // This ifdef-else-endif section provides working or stub implementation of |
1446 // LiveEditFunctionTracker. | 1454 // LiveEditFunctionTracker. |
1447 LiveEditFunctionTracker::LiveEditFunctionTracker(FunctionLiteral* fun) { | 1455 LiveEditFunctionTracker::LiveEditFunctionTracker(Isolate* isolate, |
| 1456 FunctionLiteral* fun) { |
1448 } | 1457 } |
1449 | 1458 |
1450 | 1459 |
1451 LiveEditFunctionTracker::~LiveEditFunctionTracker() { | 1460 LiveEditFunctionTracker::~LiveEditFunctionTracker() { |
1452 } | 1461 } |
1453 | 1462 |
1454 | 1463 |
1455 void LiveEditFunctionTracker::RecordFunctionInfo( | 1464 void LiveEditFunctionTracker::RecordFunctionInfo( |
1456 Handle<SharedFunctionInfo> info, FunctionLiteral* lit) { | 1465 Handle<SharedFunctionInfo> info, FunctionLiteral* lit) { |
1457 } | 1466 } |
1458 | 1467 |
1459 | 1468 |
1460 void LiveEditFunctionTracker::RecordRootFunctionInfo(Handle<Code> code) { | 1469 void LiveEditFunctionTracker::RecordRootFunctionInfo(Handle<Code> code) { |
1461 } | 1470 } |
1462 | 1471 |
1463 | 1472 |
1464 bool LiveEditFunctionTracker::IsActive() { | 1473 bool LiveEditFunctionTracker::IsActive() { |
1465 return false; | 1474 return false; |
1466 } | 1475 } |
1467 | 1476 |
1468 #endif // ENABLE_DEBUGGER_SUPPORT | 1477 #endif // ENABLE_DEBUGGER_SUPPORT |
1469 | 1478 |
1470 | 1479 |
1471 | 1480 |
1472 } } // namespace v8::internal | 1481 } } // namespace v8::internal |
OLD | NEW |