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 |
11 // with the distribution. | 11 // with the distribution. |
12 // * Neither the name of Google Inc. nor the names of its | 12 // * Neither the name of Google Inc. nor the names of its |
13 // contributors may be used to endorse or promote products derived | 13 // contributors may be used to endorse or promote products derived |
14 // from this software without specific prior written permission. | 14 // from this software without specific prior written permission. |
15 // | 15 // |
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 | 27 |
28 String.prototype.startsWith = function (str) { | 28 String.prototype.startsWith = function (str) { |
29 if (str.length > this.length) | 29 if (str.length > this.length) { |
30 return false; | 30 return false; |
| 31 } |
31 return this.substr(0, str.length) == str; | 32 return this.substr(0, str.length) == str; |
32 } | 33 } |
33 | 34 |
34 function log10(num) { | 35 function log10(num) { |
35 return Math.log(num)/Math.log(10); | 36 return Math.log(num)/Math.log(10); |
36 } | 37 } |
37 | 38 |
38 function ToInspectableObject(obj) { | 39 function ToInspectableObject(obj) { |
39 if (!obj && typeof obj === 'object') { | 40 if (!obj && typeof obj === 'object') { |
40 return void 0; | 41 return void 0; |
41 } else { | 42 } else { |
42 return Object(obj); | 43 return Object(obj); |
43 } | 44 } |
44 } | 45 } |
45 | 46 |
46 function GetCompletions(global, last, full) { | 47 function GetCompletions(global, last, full) { |
47 var full_tokens = full.split(); | 48 var full_tokens = full.split(); |
48 full = full_tokens.pop(); | 49 full = full_tokens.pop(); |
49 var parts = full.split('.'); | 50 var parts = full.split('.'); |
50 parts.pop(); | 51 parts.pop(); |
51 var current = global; | 52 var current = global; |
52 for (var i = 0; i < parts.length; i++) { | 53 for (var i = 0; i < parts.length; i++) { |
53 var part = parts[i]; | 54 var part = parts[i]; |
54 var next = current[part]; | 55 var next = current[part]; |
55 if (!next) | 56 if (!next) { |
56 return []; | 57 return []; |
| 58 } |
57 current = next; | 59 current = next; |
58 } | 60 } |
59 var result = []; | 61 var result = []; |
60 current = ToInspectableObject(current); | 62 current = ToInspectableObject(current); |
61 while (typeof current !== 'undefined') { | 63 while (typeof current !== 'undefined') { |
62 var mirror = new $debug.ObjectMirror(current); | 64 var mirror = new $debug.ObjectMirror(current); |
63 var properties = mirror.properties(); | 65 var properties = mirror.properties(); |
64 for (var i = 0; i < properties.length; i++) { | 66 for (var i = 0; i < properties.length; i++) { |
65 var name = properties[i].name(); | 67 var name = properties[i].name(); |
66 if (typeof name === 'string' && name.startsWith(last)) | 68 if (typeof name === 'string' && name.startsWith(last)) { |
67 result.push(name); | 69 result.push(name); |
| 70 } |
68 } | 71 } |
69 current = ToInspectableObject(current.__proto__); | 72 current = ToInspectableObject(current.__proto__); |
70 } | 73 } |
71 return result; | 74 return result; |
72 } | 75 } |
73 | 76 |
74 | 77 |
75 // Global object holding debugger related constants and state. | 78 // Global object holding debugger related constants and state. |
76 const Debug = {}; | 79 const Debug = {}; |
77 | 80 |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
143 is_running = response.running(); | 146 is_running = response.running(); |
144 | 147 |
145 if (response.type() == 'event') { | 148 if (response.type() == 'event') { |
146 return DebugEventDetails(response); | 149 return DebugEventDetails(response); |
147 } else { | 150 } else { |
148 return DebugResponseDetails(response); | 151 return DebugResponseDetails(response); |
149 } | 152 } |
150 } | 153 } |
151 | 154 |
152 function DebugEventDetails(response) { | 155 function DebugEventDetails(response) { |
153 details = {text:'', running:false} | 156 details = {text:'', running:false}; |
154 | 157 |
155 // Get the running state. | 158 // Get the running state. |
156 details.running = response.running(); | 159 details.running = response.running(); |
157 | 160 |
158 var body = response.body(); | 161 var body = response.body(); |
159 var result = ''; | 162 var result = ''; |
160 switch (response.event()) { | 163 switch (response.event()) { |
161 case 'break': | 164 case 'break': |
162 if (body.breakpoints) { | 165 if (body.breakpoints) { |
163 result += 'breakpoint'; | 166 result += 'breakpoint'; |
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
529 var json = '{'; | 532 var json = '{'; |
530 json += '"seq":' + this.seq; | 533 json += '"seq":' + this.seq; |
531 json += ',"type":"' + this.type + '"'; | 534 json += ',"type":"' + this.type + '"'; |
532 if (this.command) { | 535 if (this.command) { |
533 json += ',"command":' + StringToJSON_(this.command); | 536 json += ',"command":' + StringToJSON_(this.command); |
534 } | 537 } |
535 if (this.arguments) { | 538 if (this.arguments) { |
536 json += ',"arguments":'; | 539 json += ',"arguments":'; |
537 // Encode the arguments part. | 540 // Encode the arguments part. |
538 if (this.arguments.toJSONProtocol) { | 541 if (this.arguments.toJSONProtocol) { |
539 json += this.arguments.toJSONProtocol() | 542 json += this.arguments.toJSONProtocol(); |
540 } else { | 543 } else { |
541 json += SimpleObjectToJSON_(this.arguments); | 544 json += SimpleObjectToJSON_(this.arguments); |
542 } | 545 } |
543 } | 546 } |
544 json += '}'; | 547 json += '}'; |
545 return json; | 548 return json; |
546 } | 549 } |
547 | 550 |
548 | 551 |
549 DebugRequest.prototype.createRequest = function(command) { | 552 DebugRequest.prototype.createRequest = function(command) { |
(...skipping 2181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2731 if (typeof key == 'string') { | 2734 if (typeof key == 'string') { |
2732 var property_value = object[key]; | 2735 var property_value = object[key]; |
2733 | 2736 |
2734 // Format the value based on its type. | 2737 // Format the value based on its type. |
2735 var property_value_json; | 2738 var property_value_json; |
2736 switch (typeof property_value) { | 2739 switch (typeof property_value) { |
2737 case 'object': | 2740 case 'object': |
2738 if (property_value === null) { | 2741 if (property_value === null) { |
2739 property_value_json = 'null'; | 2742 property_value_json = 'null'; |
2740 } else if (typeof property_value.toJSONProtocol == 'function') { | 2743 } else if (typeof property_value.toJSONProtocol == 'function') { |
2741 property_value_json = property_value.toJSONProtocol(true) | 2744 property_value_json = property_value.toJSONProtocol(true); |
2742 } else if (property_value.constructor.name == 'Array'){ | 2745 } else if (property_value.constructor.name == 'Array'){ |
2743 property_value_json = SimpleArrayToJSON_(property_value); | 2746 property_value_json = SimpleArrayToJSON_(property_value); |
2744 } else { | 2747 } else { |
2745 property_value_json = SimpleObjectToJSON_(property_value); | 2748 property_value_json = SimpleObjectToJSON_(property_value); |
2746 } | 2749 } |
2747 break; | 2750 break; |
2748 | 2751 |
2749 case 'boolean': | 2752 case 'boolean': |
2750 property_value_json = BooleanToJSON_(property_value); | 2753 property_value_json = BooleanToJSON_(property_value); |
2751 break; | 2754 break; |
(...skipping 30 matching lines...) Expand all Loading... |
2782 */ | 2785 */ |
2783 function SimpleArrayToJSON_(array) { | 2786 function SimpleArrayToJSON_(array) { |
2784 // Make JSON array representation. | 2787 // Make JSON array representation. |
2785 var json = '['; | 2788 var json = '['; |
2786 for (var i = 0; i < array.length; i++) { | 2789 for (var i = 0; i < array.length; i++) { |
2787 if (i != 0) { | 2790 if (i != 0) { |
2788 json += ','; | 2791 json += ','; |
2789 } | 2792 } |
2790 var elem = array[i]; | 2793 var elem = array[i]; |
2791 if (elem.toJSONProtocol) { | 2794 if (elem.toJSONProtocol) { |
2792 json += elem.toJSONProtocol(true) | 2795 json += elem.toJSONProtocol(true); |
2793 } else if (typeof(elem) === 'object') { | 2796 } else if (typeof(elem) === 'object') { |
2794 json += SimpleObjectToJSON_(elem); | 2797 json += SimpleObjectToJSON_(elem); |
2795 } else if (typeof(elem) === 'boolean') { | 2798 } else if (typeof(elem) === 'boolean') { |
2796 json += BooleanToJSON_(elem); | 2799 json += BooleanToJSON_(elem); |
2797 } else if (typeof(elem) === 'number') { | 2800 } else if (typeof(elem) === 'number') { |
2798 json += NumberToJSON_(elem); | 2801 json += NumberToJSON_(elem); |
2799 } else if (typeof(elem) === 'string') { | 2802 } else if (typeof(elem) === 'string') { |
2800 json += StringToJSON_(elem); | 2803 json += StringToJSON_(elem); |
2801 } else { | 2804 } else { |
2802 json += elem; | 2805 json += elem; |
2803 } | 2806 } |
2804 } | 2807 } |
2805 json += ']'; | 2808 json += ']'; |
2806 return json; | 2809 return json; |
2807 } | 2810 } |
OLD | NEW |