OLD | NEW |
1 // Copyright 2008 the V8 project authors. All rights reserved. | 1 // Copyright 2008 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 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
157 result += ' in '; | 157 result += ' in '; |
158 result += body.invocationText; | 158 result += body.invocationText; |
159 result += ', '; | 159 result += ', '; |
160 result += SourceInfo(body); | 160 result += SourceInfo(body); |
161 result += '\n'; | 161 result += '\n'; |
162 result += SourceUnderline(body.sourceLineText, body.sourceColumn); | 162 result += SourceUnderline(body.sourceLineText, body.sourceColumn); |
163 Debug.State.currentSourceLine = body.sourceLine; | 163 Debug.State.currentSourceLine = body.sourceLine; |
164 Debug.State.currentFrame = 0; | 164 Debug.State.currentFrame = 0; |
165 details.text = result; | 165 details.text = result; |
166 break; | 166 break; |
167 | 167 |
168 case 'exception': | 168 case 'exception': |
169 if (body.uncaught) { | 169 if (body.uncaught) { |
170 result += 'Uncaught: '; | 170 result += 'Uncaught: '; |
171 } else { | 171 } else { |
172 result += 'Exception: '; | 172 result += 'Exception: '; |
173 } | 173 } |
174 result += '"'; | 174 result += '"'; |
175 result += body.exception.text; | 175 result += body.exception.text; |
176 result += '"'; | 176 result += '"'; |
177 if (body.sourceLine >= 0) { | 177 if (body.sourceLine >= 0) { |
(...skipping 27 matching lines...) Expand all Loading... |
205 default: | 205 default: |
206 details.text = 'Unknown debug event ' + response.event(); | 206 details.text = 'Unknown debug event ' + response.event(); |
207 } | 207 } |
208 | 208 |
209 return details; | 209 return details; |
210 }; | 210 }; |
211 | 211 |
212 | 212 |
213 function SourceInfo(body) { | 213 function SourceInfo(body) { |
214 var result = ''; | 214 var result = ''; |
215 | 215 |
216 if (body.script) { | 216 if (body.script) { |
217 if (body.script.name) { | 217 if (body.script.name) { |
218 result += body.script.name; | 218 result += body.script.name; |
219 } else { | 219 } else { |
220 result += '[unnamed]'; | 220 result += '[unnamed]'; |
221 } | 221 } |
222 } | 222 } |
223 result += ' line '; | 223 result += ' line '; |
224 result += body.sourceLine + 1; | 224 result += body.sourceLine + 1; |
225 result += ' column '; | 225 result += ' column '; |
226 result += body.sourceColumn + 1; | 226 result += body.sourceColumn + 1; |
227 | 227 |
228 return result; | 228 return result; |
229 } | 229 } |
230 | 230 |
231 | 231 |
232 function SourceUnderline(source_text, position) { | 232 function SourceUnderline(source_text, position) { |
233 if (!source_text) { | 233 if (!source_text) { |
234 return; | 234 return; |
235 } | 235 } |
236 | 236 |
237 // Create an underline with a caret pointing to the source position. If the | 237 // Create an underline with a caret pointing to the source position. If the |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
290 | 290 |
291 case 'step': | 291 case 'step': |
292 case 's': | 292 case 's': |
293 this.request_ = this.stepCommandToJSONRequest_(args); | 293 this.request_ = this.stepCommandToJSONRequest_(args); |
294 break; | 294 break; |
295 | 295 |
296 case 'backtrace': | 296 case 'backtrace': |
297 case 'bt': | 297 case 'bt': |
298 this.request_ = this.backtraceCommandToJSONRequest_(args); | 298 this.request_ = this.backtraceCommandToJSONRequest_(args); |
299 break; | 299 break; |
300 | 300 |
301 case 'frame': | 301 case 'frame': |
302 case 'f': | 302 case 'f': |
303 this.request_ = this.frameCommandToJSONRequest_(args); | 303 this.request_ = this.frameCommandToJSONRequest_(args); |
304 break; | 304 break; |
305 | 305 |
306 case 'scopes': | 306 case 'scopes': |
307 this.request_ = this.scopesCommandToJSONRequest_(args); | 307 this.request_ = this.scopesCommandToJSONRequest_(args); |
308 break; | 308 break; |
309 | 309 |
310 case 'scope': | 310 case 'scope': |
311 this.request_ = this.scopeCommandToJSONRequest_(args); | 311 this.request_ = this.scopeCommandToJSONRequest_(args); |
312 break; | 312 break; |
313 | 313 |
314 case 'print': | 314 case 'print': |
315 case 'p': | 315 case 'p': |
316 this.request_ = this.printCommandToJSONRequest_(args); | 316 this.request_ = this.printCommandToJSONRequest_(args); |
317 break; | 317 break; |
318 | 318 |
319 case 'dir': | 319 case 'dir': |
320 this.request_ = this.dirCommandToJSONRequest_(args); | 320 this.request_ = this.dirCommandToJSONRequest_(args); |
321 break; | 321 break; |
322 | 322 |
323 case 'references': | 323 case 'references': |
324 this.request_ = this.referencesCommandToJSONRequest_(args); | 324 this.request_ = this.referencesCommandToJSONRequest_(args); |
325 break; | 325 break; |
326 | 326 |
327 case 'instances': | 327 case 'instances': |
328 this.request_ = this.instancesCommandToJSONRequest_(args); | 328 this.request_ = this.instancesCommandToJSONRequest_(args); |
329 break; | 329 break; |
330 | 330 |
331 case 'source': | 331 case 'source': |
332 this.request_ = this.sourceCommandToJSONRequest_(args); | 332 this.request_ = this.sourceCommandToJSONRequest_(args); |
333 break; | 333 break; |
334 | 334 |
335 case 'scripts': | 335 case 'scripts': |
336 this.request_ = this.scriptsCommandToJSONRequest_(args); | 336 this.request_ = this.scriptsCommandToJSONRequest_(args); |
337 break; | 337 break; |
338 | 338 |
339 case 'break': | 339 case 'break': |
340 case 'b': | 340 case 'b': |
341 this.request_ = this.breakCommandToJSONRequest_(args); | 341 this.request_ = this.breakCommandToJSONRequest_(args); |
342 break; | 342 break; |
343 | 343 |
344 case 'clear': | 344 case 'clear': |
345 this.request_ = this.clearCommandToJSONRequest_(args); | 345 this.request_ = this.clearCommandToJSONRequest_(args); |
346 break; | 346 break; |
347 | 347 |
348 case 'threads': | 348 case 'threads': |
349 this.request_ = this.threadsCommandToJSONRequest_(args); | 349 this.request_ = this.threadsCommandToJSONRequest_(args); |
350 break; | 350 break; |
351 | 351 |
352 case 'trace': | 352 case 'trace': |
353 // Return undefined to indicate command handled internally (no JSON). | 353 // Return undefined to indicate command handled internally (no JSON). |
354 this.request_ = void 0; | 354 this.request_ = void 0; |
355 this.traceCommand_(args); | 355 this.traceCommand_(args); |
356 break; | 356 break; |
357 | 357 |
358 case 'help': | 358 case 'help': |
359 case '?': | 359 case '?': |
360 this.helpCommand_(args); | 360 this.helpCommand_(args); |
361 // Return undefined to indicate command handled internally (no JSON). | 361 // Return undefined to indicate command handled internally (no JSON). |
362 this.request_ = void 0; | 362 this.request_ = void 0; |
363 break; | 363 break; |
364 | 364 |
365 default: | 365 default: |
366 throw new Error('Unknown command "' + cmd + '"'); | 366 throw new Error('Unknown command "' + cmd + '"'); |
367 } | 367 } |
368 | 368 |
369 last_cmd = cmd; | 369 last_cmd = cmd; |
370 } | 370 } |
371 | 371 |
372 DebugRequest.prototype.JSONRequest = function() { | 372 DebugRequest.prototype.JSONRequest = function() { |
373 return this.request_; | 373 return this.request_; |
374 } | 374 } |
375 | 375 |
376 | 376 |
377 function RequestPacket(command) { | 377 function RequestPacket(command) { |
378 this.seq = 0; | 378 this.seq = 0; |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
483 } | 483 } |
484 request.arguments.stepcount = stepcount; | 484 request.arguments.stepcount = stepcount; |
485 } | 485 } |
486 | 486 |
487 // Get the step action. | 487 // Get the step action. |
488 switch (args[0]) { | 488 switch (args[0]) { |
489 case 'in': | 489 case 'in': |
490 case 'i': | 490 case 'i': |
491 request.arguments.stepaction = 'in'; | 491 request.arguments.stepaction = 'in'; |
492 break; | 492 break; |
493 | 493 |
494 case 'min': | 494 case 'min': |
495 case 'm': | 495 case 'm': |
496 request.arguments.stepaction = 'min'; | 496 request.arguments.stepaction = 'min'; |
497 break; | 497 break; |
498 | 498 |
499 case 'next': | 499 case 'next': |
500 case 'n': | 500 case 'n': |
501 request.arguments.stepaction = 'next'; | 501 request.arguments.stepaction = 'next'; |
502 break; | 502 break; |
503 | 503 |
504 case 'out': | 504 case 'out': |
505 case 'o': | 505 case 'o': |
506 request.arguments.stepaction = 'out'; | 506 request.arguments.stepaction = 'out'; |
507 break; | 507 break; |
508 | 508 |
509 default: | 509 default: |
510 throw new Error('Invalid step argument "' + args[0] + '".'); | 510 throw new Error('Invalid step argument "' + args[0] + '".'); |
511 } | 511 } |
512 } | 512 } |
513 } else { | 513 } else { |
514 // Default is step next. | 514 // Default is step next. |
515 request.arguments.stepaction = 'next'; | 515 request.arguments.stepaction = 'next'; |
516 } | 516 } |
517 | 517 |
518 return request.toJSONProtocol(); | 518 return request.toJSONProtocol(); |
519 }; | 519 }; |
520 | 520 |
521 | 521 |
522 // Create a JSON request for the backtrace command. | 522 // Create a JSON request for the backtrace command. |
523 DebugRequest.prototype.backtraceCommandToJSONRequest_ = function(args) { | 523 DebugRequest.prototype.backtraceCommandToJSONRequest_ = function(args) { |
524 // Build a backtrace request from the text command. | 524 // Build a backtrace request from the text command. |
525 var request = this.createRequest('backtrace'); | 525 var request = this.createRequest('backtrace'); |
526 | 526 |
527 // Default is to show top 10 frames. | 527 // Default is to show top 10 frames. |
528 request.arguments = {}; | 528 request.arguments = {}; |
529 request.arguments.fromFrame = 0; | 529 request.arguments.fromFrame = 0; |
530 request.arguments.toFrame = 10; | 530 request.arguments.toFrame = 10; |
531 | 531 |
532 args = args.split(/\s*[ ]+\s*/g); | 532 args = args.split(/\s*[ ]+\s*/g); |
533 if (args.length == 1 && args[0].length > 0) { | 533 if (args.length == 1 && args[0].length > 0) { |
534 var frameCount = parseInt(args[0]); | 534 var frameCount = parseInt(args[0]); |
535 if (frameCount > 0) { | 535 if (frameCount > 0) { |
536 // Show top frames. | 536 // Show top frames. |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
619 return this.makeEvaluateJSONRequest_(args); | 619 return this.makeEvaluateJSONRequest_(args); |
620 }; | 620 }; |
621 | 621 |
622 | 622 |
623 // Create a JSON request for the references command. | 623 // Create a JSON request for the references command. |
624 DebugRequest.prototype.referencesCommandToJSONRequest_ = function(args) { | 624 DebugRequest.prototype.referencesCommandToJSONRequest_ = function(args) { |
625 // Build an evaluate request from the text command. | 625 // Build an evaluate request from the text command. |
626 if (args.length == 0) { | 626 if (args.length == 0) { |
627 throw new Error('Missing object id.'); | 627 throw new Error('Missing object id.'); |
628 } | 628 } |
629 | 629 |
630 return this.makeReferencesJSONRequest_(args, 'referencedBy'); | 630 return this.makeReferencesJSONRequest_(args, 'referencedBy'); |
631 }; | 631 }; |
632 | 632 |
633 | 633 |
634 // Create a JSON request for the instances command. | 634 // Create a JSON request for the instances command. |
635 DebugRequest.prototype.instancesCommandToJSONRequest_ = function(args) { | 635 DebugRequest.prototype.instancesCommandToJSONRequest_ = function(args) { |
636 // Build an evaluate request from the text command. | 636 // Build an evaluate request from the text command. |
637 if (args.length == 0) { | 637 if (args.length == 0) { |
638 throw new Error('Missing object id.'); | 638 throw new Error('Missing object id.'); |
639 } | 639 } |
640 | 640 |
641 // Build a references request. | 641 // Build a references request. |
642 return this.makeReferencesJSONRequest_(args, 'constructedBy'); | 642 return this.makeReferencesJSONRequest_(args, 'constructedBy'); |
643 }; | 643 }; |
644 | 644 |
645 | 645 |
646 // Create a JSON request for the source command. | 646 // Create a JSON request for the source command. |
647 DebugRequest.prototype.sourceCommandToJSONRequest_ = function(args) { | 647 DebugRequest.prototype.sourceCommandToJSONRequest_ = function(args) { |
648 // Build a evaluate request from the text command. | 648 // Build a evaluate request from the text command. |
649 var request = this.createRequest('source'); | 649 var request = this.createRequest('source'); |
650 | 650 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
684 | 684 |
685 if (args.length > 1) { | 685 if (args.length > 1) { |
686 throw new Error('Invalid scripts arguments.'); | 686 throw new Error('Invalid scripts arguments.'); |
687 } | 687 } |
688 | 688 |
689 request.arguments = {}; | 689 request.arguments = {}; |
690 switch (args[0]) { | 690 switch (args[0]) { |
691 case 'natives': | 691 case 'natives': |
692 request.arguments.types = ScriptTypeFlag(Debug.ScriptType.Native); | 692 request.arguments.types = ScriptTypeFlag(Debug.ScriptType.Native); |
693 break; | 693 break; |
694 | 694 |
695 case 'extensions': | 695 case 'extensions': |
696 request.arguments.types = ScriptTypeFlag(Debug.ScriptType.Extension); | 696 request.arguments.types = ScriptTypeFlag(Debug.ScriptType.Extension); |
697 break; | 697 break; |
698 | 698 |
699 case 'all': | 699 case 'all': |
700 request.arguments.types = | 700 request.arguments.types = |
701 ScriptTypeFlag(Debug.ScriptType.Normal) | | 701 ScriptTypeFlag(Debug.ScriptType.Normal) | |
702 ScriptTypeFlag(Debug.ScriptType.Native) | | 702 ScriptTypeFlag(Debug.ScriptType.Native) | |
703 ScriptTypeFlag(Debug.ScriptType.Extension); | 703 ScriptTypeFlag(Debug.ScriptType.Extension); |
704 break; | 704 break; |
705 | 705 |
706 default: | 706 default: |
707 throw new Error('Invalid argument "' + args[0] + '".'); | 707 throw new Error('Invalid argument "' + args[0] + '".'); |
708 } | 708 } |
709 } | 709 } |
710 | 710 |
711 return request.toJSONProtocol(); | 711 return request.toJSONProtocol(); |
712 }; | 712 }; |
713 | 713 |
714 | 714 |
715 // Create a JSON request for the break command. | 715 // Create a JSON request for the break command. |
(...skipping 17 matching lines...) Expand all Loading... |
733 condition = args.substring(pos + 1, args.length); | 733 condition = args.substring(pos + 1, args.length); |
734 } | 734 } |
735 | 735 |
736 // Check for script breakpoint (name:line[:column]). If no ':' in break | 736 // Check for script breakpoint (name:line[:column]). If no ':' in break |
737 // specification it is considered a function break point. | 737 // specification it is considered a function break point. |
738 pos = target.indexOf(':'); | 738 pos = target.indexOf(':'); |
739 if (pos > 0) { | 739 if (pos > 0) { |
740 type = 'script'; | 740 type = 'script'; |
741 var tmp = target.substring(pos + 1, target.length); | 741 var tmp = target.substring(pos + 1, target.length); |
742 target = target.substring(0, pos); | 742 target = target.substring(0, pos); |
743 | 743 |
744 // Check for both line and column. | 744 // Check for both line and column. |
745 pos = tmp.indexOf(':'); | 745 pos = tmp.indexOf(':'); |
746 if (pos > 0) { | 746 if (pos > 0) { |
747 column = parseInt(tmp.substring(pos + 1, tmp.length)) - 1; | 747 column = parseInt(tmp.substring(pos + 1, tmp.length)) - 1; |
748 line = parseInt(tmp.substring(0, pos)) - 1; | 748 line = parseInt(tmp.substring(0, pos)) - 1; |
749 } else { | 749 } else { |
750 line = parseInt(tmp) - 1; | 750 line = parseInt(tmp) - 1; |
751 } | 751 } |
752 } else if (target[0] == '#' && target[target.length - 1] == '#') { | 752 } else if (target[0] == '#' && target[target.length - 1] == '#') { |
753 type = 'handle'; | 753 type = 'handle'; |
754 target = target.substring(1, target.length - 1); | 754 target = target.substring(1, target.length - 1); |
755 } else { | 755 } else { |
756 type = 'function'; | 756 type = 'function'; |
757 } | 757 } |
758 | 758 |
759 request.arguments = {}; | 759 request.arguments = {}; |
760 request.arguments.type = type; | 760 request.arguments.type = type; |
761 request.arguments.target = target; | 761 request.arguments.target = target; |
762 request.arguments.line = line; | 762 request.arguments.line = line; |
763 request.arguments.column = column; | 763 request.arguments.column = column; |
764 request.arguments.condition = condition; | 764 request.arguments.condition = condition; |
765 } else { | 765 } else { |
766 throw new Error('Invalid break arguments.'); | 766 throw new Error('Invalid break arguments.'); |
767 } | 767 } |
768 | 768 |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
929 details.running = response.running(); | 929 details.running = response.running(); |
930 | 930 |
931 var body = response.body(); | 931 var body = response.body(); |
932 var result = ''; | 932 var result = ''; |
933 switch (response.command()) { | 933 switch (response.command()) { |
934 case 'setbreakpoint': | 934 case 'setbreakpoint': |
935 result = 'set breakpoint #'; | 935 result = 'set breakpoint #'; |
936 result += body.breakpoint; | 936 result += body.breakpoint; |
937 details.text = result; | 937 details.text = result; |
938 break; | 938 break; |
939 | 939 |
940 case 'clearbreakpoint': | 940 case 'clearbreakpoint': |
941 result = 'cleared breakpoint #'; | 941 result = 'cleared breakpoint #'; |
942 result += body.breakpoint; | 942 result += body.breakpoint; |
943 details.text = result; | 943 details.text = result; |
944 break; | 944 break; |
945 | 945 |
946 case 'backtrace': | 946 case 'backtrace': |
947 if (body.totalFrames == 0) { | 947 if (body.totalFrames == 0) { |
948 result = '(empty stack)'; | 948 result = '(empty stack)'; |
949 } else { | 949 } else { |
950 var result = 'Frames #' + body.fromFrame + ' to #' + | 950 var result = 'Frames #' + body.fromFrame + ' to #' + |
951 (body.toFrame - 1) + ' of ' + body.totalFrames + '\n'; | 951 (body.toFrame - 1) + ' of ' + body.totalFrames + '\n'; |
952 for (i = 0; i < body.frames.length; i++) { | 952 for (i = 0; i < body.frames.length; i++) { |
953 if (i != 0) result += '\n'; | 953 if (i != 0) result += '\n'; |
954 result += body.frames[i].text; | 954 result += body.frames[i].text; |
955 } | 955 } |
956 } | 956 } |
957 details.text = result; | 957 details.text = result; |
958 break; | 958 break; |
959 | 959 |
960 case 'frame': | 960 case 'frame': |
961 details.text = SourceUnderline(body.sourceLineText, | 961 details.text = SourceUnderline(body.sourceLineText, |
962 body.column); | 962 body.column); |
963 Debug.State.currentSourceLine = body.line; | 963 Debug.State.currentSourceLine = body.line; |
964 Debug.State.currentFrame = body.index; | 964 Debug.State.currentFrame = body.index; |
965 break; | 965 break; |
966 | 966 |
967 case 'scopes': | 967 case 'scopes': |
968 if (body.totalScopes == 0) { | 968 if (body.totalScopes == 0) { |
969 result = '(no scopes)'; | 969 result = '(no scopes)'; |
970 } else { | 970 } else { |
971 result = 'Scopes #' + body.fromScope + ' to #' + | 971 result = 'Scopes #' + body.fromScope + ' to #' + |
972 (body.toScope - 1) + ' of ' + body.totalScopes + '\n'; | 972 (body.toScope - 1) + ' of ' + body.totalScopes + '\n'; |
973 for (i = 0; i < body.scopes.length; i++) { | 973 for (i = 0; i < body.scopes.length; i++) { |
974 if (i != 0) { | 974 if (i != 0) { |
975 result += '\n'; | 975 result += '\n'; |
976 } | 976 } |
977 result += formatScope_(body.scopes[i]); | 977 result += formatScope_(body.scopes[i]); |
978 } | 978 } |
979 } | 979 } |
980 details.text = result; | 980 details.text = result; |
981 break; | 981 break; |
982 | 982 |
983 case 'scope': | 983 case 'scope': |
984 result += formatScope_(body); | 984 result += formatScope_(body); |
985 result += '\n'; | 985 result += '\n'; |
986 var scope_object_value = response.lookup(body.object.ref); | 986 var scope_object_value = response.lookup(body.object.ref); |
987 result += formatObject_(scope_object_value, true); | 987 result += formatObject_(scope_object_value, true); |
988 details.text = result; | 988 details.text = result; |
989 break; | 989 break; |
990 | 990 |
991 case 'evaluate': | 991 case 'evaluate': |
992 case 'lookup': | 992 case 'lookup': |
993 if (last_cmd == 'p' || last_cmd == 'print') { | 993 if (last_cmd == 'p' || last_cmd == 'print') { |
994 result = body.text; | 994 result = body.text; |
995 } else { | 995 } else { |
996 var value; | 996 var value; |
997 if (lookup_handle) { | 997 if (lookup_handle) { |
998 value = response.bodyValue(lookup_handle); | 998 value = response.bodyValue(lookup_handle); |
999 } else { | 999 } else { |
1000 value = response.bodyValue(); | 1000 value = response.bodyValue(); |
(...skipping 23 matching lines...) Expand all Loading... |
1024 var count = body.length; | 1024 var count = body.length; |
1025 result += 'found ' + count + ' objects'; | 1025 result += 'found ' + count + ' objects'; |
1026 result += '\n'; | 1026 result += '\n'; |
1027 for (var i = 0; i < count; i++) { | 1027 for (var i = 0; i < count; i++) { |
1028 var value = response.bodyValue(i); | 1028 var value = response.bodyValue(i); |
1029 result += formatObject_(value, false); | 1029 result += formatObject_(value, false); |
1030 result += '\n'; | 1030 result += '\n'; |
1031 } | 1031 } |
1032 details.text = result; | 1032 details.text = result; |
1033 break; | 1033 break; |
1034 | 1034 |
1035 case 'source': | 1035 case 'source': |
1036 // Get the source from the response. | 1036 // Get the source from the response. |
1037 var source = body.source; | 1037 var source = body.source; |
1038 var from_line = body.fromLine + 1; | 1038 var from_line = body.fromLine + 1; |
1039 var lines = source.split('\n'); | 1039 var lines = source.split('\n'); |
1040 var maxdigits = 1 + Math.floor(log10(from_line + lines.length)); | 1040 var maxdigits = 1 + Math.floor(log10(from_line + lines.length)); |
1041 if (maxdigits < 3) { | 1041 if (maxdigits < 3) { |
1042 maxdigits = 3; | 1042 maxdigits = 3; |
1043 } | 1043 } |
1044 var result = ''; | 1044 var result = ''; |
(...skipping 14 matching lines...) Expand all Loading... |
1059 for (var i = 0; i < spacer; i++) { | 1059 for (var i = 0; i < spacer; i++) { |
1060 result += ' '; | 1060 result += ' '; |
1061 } | 1061 } |
1062 result += current_line + ': '; | 1062 result += current_line + ': '; |
1063 } | 1063 } |
1064 result += lines[num]; | 1064 result += lines[num]; |
1065 result += '\n'; | 1065 result += '\n'; |
1066 } | 1066 } |
1067 details.text = result; | 1067 details.text = result; |
1068 break; | 1068 break; |
1069 | 1069 |
1070 case 'scripts': | 1070 case 'scripts': |
1071 var result = ''; | 1071 var result = ''; |
1072 for (i = 0; i < body.length; i++) { | 1072 for (i = 0; i < body.length; i++) { |
1073 if (i != 0) result += '\n'; | 1073 if (i != 0) result += '\n'; |
1074 if (body[i].id) { | 1074 if (body[i].id) { |
1075 result += body[i].id; | 1075 result += body[i].id; |
1076 } else { | 1076 } else { |
1077 result += '[no id]'; | 1077 result += '[no id]'; |
1078 } | 1078 } |
1079 result += ', '; | 1079 result += ', '; |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1121 result += ' '; | 1121 result += ' '; |
1122 result += body.threads[i].id; | 1122 result += body.threads[i].id; |
1123 result += '\n'; | 1123 result += '\n'; |
1124 } | 1124 } |
1125 details.text = result; | 1125 details.text = result; |
1126 break; | 1126 break; |
1127 | 1127 |
1128 case 'continue': | 1128 case 'continue': |
1129 details.text = "(running)"; | 1129 details.text = "(running)"; |
1130 break; | 1130 break; |
1131 | 1131 |
1132 default: | 1132 default: |
1133 details.text = | 1133 details.text = |
1134 'Response for unknown command \'' + response.command + '\'' + | 1134 'Response for unknown command \'' + response.command + '\'' + |
1135 ' (' + json_response + ')'; | 1135 ' (' + json_response + ')'; |
1136 } | 1136 } |
1137 } catch (e) { | 1137 } catch (e) { |
1138 details.text = 'Error: "' + e + '" formatting response'; | 1138 details.text = 'Error: "' + e + '" formatting response'; |
1139 } | 1139 } |
1140 | 1140 |
1141 return details; | 1141 return details; |
1142 }; | 1142 }; |
1143 | 1143 |
1144 | 1144 |
1145 /** | 1145 /** |
1146 * Protocol packages send from the debugger. | 1146 * Protocol packages send from the debugger. |
1147 * @param {string} json - raw protocol packet as JSON string. | 1147 * @param {string} json - raw protocol packet as JSON string. |
1148 * @constructor | 1148 * @constructor |
1149 */ | 1149 */ |
1150 function ProtocolPackage(json) { | 1150 function ProtocolPackage(json) { |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1247 /** | 1247 /** |
1248 * Get the value type. | 1248 * Get the value type. |
1249 * @return {String} the value type | 1249 * @return {String} the value type |
1250 */ | 1250 */ |
1251 ProtocolValue.prototype.type = function() { | 1251 ProtocolValue.prototype.type = function() { |
1252 return this.value_.type; | 1252 return this.value_.type; |
1253 } | 1253 } |
1254 | 1254 |
1255 | 1255 |
1256 /** | 1256 /** |
1257 * Get a metadata field from a protocol value. | 1257 * Get a metadata field from a protocol value. |
1258 * @return {Object} the metadata field value | 1258 * @return {Object} the metadata field value |
1259 */ | 1259 */ |
1260 ProtocolValue.prototype.field = function(name) { | 1260 ProtocolValue.prototype.field = function(name) { |
1261 return this.value_[name]; | 1261 return this.value_[name]; |
1262 } | 1262 } |
1263 | 1263 |
1264 | 1264 |
1265 /** | 1265 /** |
1266 * Check is the value is a primitive value. | 1266 * Check is the value is a primitive value. |
1267 * @return {boolean} true if the value is primitive | 1267 * @return {boolean} true if the value is primitive |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1428 return '{' + content.join(',') + '}'; | 1428 return '{' + content.join(',') + '}'; |
1429 } | 1429 } |
1430 | 1430 |
1431 | 1431 |
1432 function ArrayToJSONArray_(content) { | 1432 function ArrayToJSONArray_(content) { |
1433 return '[' + content.join(',') + ']'; | 1433 return '[' + content.join(',') + ']'; |
1434 } | 1434 } |
1435 | 1435 |
1436 | 1436 |
1437 function BooleanToJSON_(value) { | 1437 function BooleanToJSON_(value) { |
1438 return String(value); | 1438 return String(value); |
1439 } | 1439 } |
1440 | 1440 |
1441 | 1441 |
1442 function NumberToJSON_(value) { | 1442 function NumberToJSON_(value) { |
1443 return String(value); | 1443 return String(value); |
1444 } | 1444 } |
1445 | 1445 |
1446 | 1446 |
1447 // Mapping of some control characters to avoid the \uXXXX syntax for most | 1447 // Mapping of some control characters to avoid the \uXXXX syntax for most |
1448 // commonly used control cahracters. | 1448 // commonly used control cahracters. |
1449 const ctrlCharMap_ = { | 1449 const ctrlCharMap_ = { |
1450 '\b': '\\b', | 1450 '\b': '\\b', |
1451 '\t': '\\t', | 1451 '\t': '\\t', |
1452 '\n': '\\n', | 1452 '\n': '\\n', |
1453 '\f': '\\f', | 1453 '\f': '\\f', |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1616 json += NumberToJSON_(elem); | 1616 json += NumberToJSON_(elem); |
1617 } else if (typeof(elem) === 'string') { | 1617 } else if (typeof(elem) === 'string') { |
1618 json += StringToJSON_(elem); | 1618 json += StringToJSON_(elem); |
1619 } else { | 1619 } else { |
1620 json += elem; | 1620 json += elem; |
1621 } | 1621 } |
1622 } | 1622 } |
1623 json += ']'; | 1623 json += ']'; |
1624 return json; | 1624 return json; |
1625 } | 1625 } |
OLD | NEW |