OLD | NEW |
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-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 853 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
864 return this.exec_state_.frame(0).sourceColumn(); | 864 return this.exec_state_.frame(0).sourceColumn(); |
865 }; | 865 }; |
866 | 866 |
867 | 867 |
868 ExceptionEvent.prototype.sourceLineText = function() { | 868 ExceptionEvent.prototype.sourceLineText = function() { |
869 return this.exec_state_.frame(0).sourceLineText(); | 869 return this.exec_state_.frame(0).sourceLineText(); |
870 }; | 870 }; |
871 | 871 |
872 | 872 |
873 ExceptionEvent.prototype.toJSONProtocol = function() { | 873 ExceptionEvent.prototype.toJSONProtocol = function() { |
874 var o = { seq: next_response_seq++, | 874 var o = new ProtocolMessage(); |
875 type: "event", | 875 o.event = "exception"; |
876 event: "exception", | 876 o.body = { uncaught: this.uncaught_, |
877 body: { uncaught: this.uncaught_, | 877 exception: MakeMirror(this.exception_) |
878 exception: MakeMirror(this.exception_), | 878 } |
879 sourceLine: this.sourceLine(), | 879 |
880 sourceColumn: this.sourceColumn(), | 880 // Exceptions might happen whithout any JavaScript frames. |
881 sourceLineText: this.sourceLineText(), | 881 if (this.exec_state_.frameCount() > 0) { |
882 } | 882 o.body.sourceLine = this.sourceLine(); |
883 } | 883 o.body.sourceColumn = this.sourceColumn(); |
| 884 o.body.sourceLineText = this.sourceLineText(); |
884 | 885 |
885 // Add script information to the event if available. | 886 // Add script information to the event if available. |
886 var script = this.func().script(); | 887 var script = this.func().script(); |
887 if (script) { | 888 if (script) { |
888 o.body.script = { name: script.name(), | 889 o.body.script = { name: script.name(), |
889 lineOffset: script.lineOffset(), | 890 lineOffset: script.lineOffset(), |
890 columnOffset: script.columnOffset(), | 891 columnOffset: script.columnOffset(), |
891 lineCount: script.lineCount() | 892 lineCount: script.lineCount() |
892 }; | 893 }; |
| 894 } |
| 895 } else { |
| 896 o.body.sourceLine = -1; |
893 } | 897 } |
894 | 898 |
895 return SimpleObjectToJSON_(o); | 899 return o.toJSONProtocol(); |
896 }; | 900 }; |
897 | 901 |
898 | 902 |
899 function MakeCompileEvent(exec_state, script, before) { | 903 function MakeCompileEvent(exec_state, script, before) { |
900 return new CompileEvent(exec_state, script, before); | 904 return new CompileEvent(exec_state, script, before); |
901 } | 905 } |
902 | 906 |
903 | 907 |
904 function CompileEvent(exec_state, script, before) { | 908 function CompileEvent(exec_state, script, before) { |
905 this.exec_state_ = exec_state; | 909 this.exec_state_ = exec_state; |
(...skipping 14 matching lines...) Expand all Loading... |
920 return Debug.DebugEvent.AfterCompile; | 924 return Debug.DebugEvent.AfterCompile; |
921 } | 925 } |
922 }; | 926 }; |
923 | 927 |
924 | 928 |
925 CompileEvent.prototype.script = function() { | 929 CompileEvent.prototype.script = function() { |
926 return this.script_; | 930 return this.script_; |
927 }; | 931 }; |
928 | 932 |
929 | 933 |
| 934 CompileEvent.prototype.toJSONProtocol = function() { |
| 935 var o = new ProtocolMessage(); |
| 936 if (this.before_) { |
| 937 o.event = "beforeCompile"; |
| 938 } else { |
| 939 o.event = "afterCompile"; |
| 940 } |
| 941 o.body = {}; |
| 942 o.body.script = { name: this.script_.name(), |
| 943 lineOffset: this.script_.lineOffset(), |
| 944 columnOffset: this.script_.columnOffset(), |
| 945 lineCount: this.script_.lineCount(), |
| 946 source: this.script_.source() |
| 947 }; |
| 948 |
| 949 return o.toJSONProtocol(); |
| 950 } |
| 951 |
| 952 |
930 function MakeNewFunctionEvent(func) { | 953 function MakeNewFunctionEvent(func) { |
931 return new NewFunctionEvent(func); | 954 return new NewFunctionEvent(func); |
932 } | 955 } |
933 | 956 |
934 | 957 |
935 function NewFunctionEvent(func) { | 958 function NewFunctionEvent(func) { |
936 this.func = func; | 959 this.func = func; |
937 } | 960 } |
938 | 961 |
939 | 962 |
(...skipping 16 matching lines...) Expand all Loading... |
956 this.exec_state_ = exec_state; | 979 this.exec_state_ = exec_state; |
957 this.running_ = false; | 980 this.running_ = false; |
958 }; | 981 }; |
959 | 982 |
960 | 983 |
961 DebugCommandProcessor.prototype.processDebugRequest = function (request) { | 984 DebugCommandProcessor.prototype.processDebugRequest = function (request) { |
962 return this.processDebugJSONRequest(request); | 985 return this.processDebugJSONRequest(request); |
963 } | 986 } |
964 | 987 |
965 | 988 |
966 function ResponsePacket(request) { | 989 function ProtocolMessage(request) { |
967 // Build the initial response from the request. | 990 // Update sequence number. |
968 this.seq = next_response_seq++; | 991 this.seq = next_response_seq++; |
969 this.type = 'response'; | 992 |
970 if (request) this.request_seq = request.seq; | 993 if (request) { |
971 if (request) this.command = request.command; | 994 // If message is based on a request this is a response. Fill the initial |
| 995 // response from the request. |
| 996 this.type = 'response'; |
| 997 this.request_seq = request.seq; |
| 998 this.command = request.command; |
| 999 } else { |
| 1000 // If message is not based on a request it is a dabugger generated event. |
| 1001 this.type = 'event'; |
| 1002 } |
972 this.success = true; | 1003 this.success = true; |
973 this.running = false; | 1004 this.running = false; |
974 } | 1005 } |
975 | 1006 |
976 | 1007 |
977 ResponsePacket.prototype.failed = function(message) { | 1008 ProtocolMessage.prototype.failed = function(message) { |
978 this.success = false; | 1009 this.success = false; |
979 this.message = message; | 1010 this.message = message; |
980 } | 1011 } |
981 | 1012 |
982 | 1013 |
983 ResponsePacket.prototype.toJSONProtocol = function() { | 1014 ProtocolMessage.prototype.toJSONProtocol = function() { |
984 // Encode the protocol header. | 1015 // Encode the protocol header. |
985 var json = '{'; | 1016 var json = '{'; |
986 json += '"seq":' + this.seq; | 1017 json += '"seq":' + this.seq; |
987 if (this.request_seq) { | 1018 if (this.request_seq) { |
988 json += ',"request_seq":' + this.request_seq; | 1019 json += ',"request_seq":' + this.request_seq; |
989 } | 1020 } |
990 json += ',"type":"' + this.type + '"'; | 1021 json += ',"type":"' + this.type + '"'; |
| 1022 if (this.event) { |
| 1023 json += ',"event":' + StringToJSON_(this.event); |
| 1024 } |
991 if (this.command) { | 1025 if (this.command) { |
992 json += ',"command":' + StringToJSON_(this.command); | 1026 json += ',"command":' + StringToJSON_(this.command); |
993 } | 1027 } |
994 if (this.success) { | 1028 if (this.success) { |
995 json += ',"success":' + this.success; | 1029 json += ',"success":' + this.success; |
996 } else { | 1030 } else { |
997 json += ',"success":false'; | 1031 json += ',"success":false'; |
998 } | 1032 } |
999 if (this.body) { | 1033 if (this.body) { |
1000 json += ',"body":'; | 1034 json += ',"body":'; |
(...skipping 25 matching lines...) Expand all Loading... |
1026 json += ',"running":true'; | 1060 json += ',"running":true'; |
1027 } else { | 1061 } else { |
1028 json += ',"running":false'; | 1062 json += ',"running":false'; |
1029 } | 1063 } |
1030 json += '}'; | 1064 json += '}'; |
1031 return json; | 1065 return json; |
1032 } | 1066 } |
1033 | 1067 |
1034 | 1068 |
1035 DebugCommandProcessor.prototype.createResponse = function(request) { | 1069 DebugCommandProcessor.prototype.createResponse = function(request) { |
1036 return new ResponsePacket(request); | 1070 return new ProtocolMessage(request); |
1037 }; | 1071 }; |
1038 | 1072 |
1039 | 1073 |
1040 DebugCommandProcessor.prototype.processDebugJSONRequest = function(json_request)
{ | 1074 DebugCommandProcessor.prototype.processDebugJSONRequest = function(json_request)
{ |
1041 var request; // Current request. | 1075 var request; // Current request. |
1042 var response; // Generated response. | 1076 var response; // Generated response. |
1043 try { | 1077 try { |
1044 try { | 1078 try { |
1045 // Convert the JSON string to an object. | 1079 // Convert the JSON string to an object. |
1046 request = %CompileString('(' + json_request + ')', 0)(); | 1080 request = %CompileString('(' + json_request + ')', 0)(); |
(...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1645 var content = []; | 1679 var content = []; |
1646 for (var key in object) { | 1680 for (var key in object) { |
1647 // Only consider string keys. | 1681 // Only consider string keys. |
1648 if (typeof key == 'string') { | 1682 if (typeof key == 'string') { |
1649 var property_value = object[key]; | 1683 var property_value = object[key]; |
1650 | 1684 |
1651 // Format the value based on its type. | 1685 // Format the value based on its type. |
1652 var property_value_json; | 1686 var property_value_json; |
1653 switch (typeof property_value) { | 1687 switch (typeof property_value) { |
1654 case 'object': | 1688 case 'object': |
1655 if (typeof property_value.toJSONProtocol == 'function') { | 1689 if (property_value instanceof Mirror) { |
| 1690 property_value_json = mirror_serializer.serializeValue(property_valu
e); |
| 1691 } else if (typeof property_value.toJSONProtocol == 'function') { |
1656 property_value_json = property_value.toJSONProtocol(true) | 1692 property_value_json = property_value.toJSONProtocol(true) |
1657 } else if (IS_ARRAY(property_value)){ | 1693 } else if (IS_ARRAY(property_value)){ |
1658 property_value_json = SimpleArrayToJSON_(property_value, mirror_seri
alizer); | 1694 property_value_json = SimpleArrayToJSON_(property_value, mirror_seri
alizer); |
1659 } else { | 1695 } else { |
1660 property_value_json = SimpleObjectToJSON_(property_value, mirror_ser
ializer); | 1696 property_value_json = SimpleObjectToJSON_(property_value, mirror_ser
ializer); |
1661 } | 1697 } |
1662 break; | 1698 break; |
1663 | 1699 |
1664 case 'boolean': | 1700 case 'boolean': |
1665 property_value_json = BooleanToJSON_(property_value); | 1701 property_value_json = BooleanToJSON_(property_value); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1714 json += NumberToJSON_(elem); | 1750 json += NumberToJSON_(elem); |
1715 } else if (IS_STRING(elem)) { | 1751 } else if (IS_STRING(elem)) { |
1716 json += StringToJSON_(elem); | 1752 json += StringToJSON_(elem); |
1717 } else { | 1753 } else { |
1718 json += elem; | 1754 json += elem; |
1719 } | 1755 } |
1720 } | 1756 } |
1721 json += ']'; | 1757 json += ']'; |
1722 return json; | 1758 return json; |
1723 } | 1759 } |
OLD | NEW |