1967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org// Copyright 2012 the V8 project authors. All rights reserved. 243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Redistribution and use in source and binary forms, with or without 343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// modification, are permitted provided that the following conditions are 443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// met: 543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// 643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// * Redistributions of source code must retain the above copyright 743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// notice, this list of conditions and the following disclaimer. 843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// * Redistributions in binary form must reproduce the above 943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// copyright notice, this list of conditions and the following 1043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// disclaimer in the documentation and/or other materials provided 1143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// with the distribution. 1243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// * Neither the name of Google Inc. nor the names of its 1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// contributors may be used to endorse or promote products derived 1443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// from this software without specific prior written permission. 1543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// 1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Default number of frames to include in the response to backtrace request. 29f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgvar kDefaultBacktraceLength = 10; 3043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 31f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgvar Debug = {}; 3243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Regular expression to skip "crud" at the beginning of a source line which is 3443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// not really code. Currently the regular expression matches whitespace and 3543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// comments. 36f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgvar sourceLineBeginningSkip = /^(?:\s*(?:\/\*.*?\*\/)*)*/; 3743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Debug events which can occour in the V8 JavaScript engine. These originate 3943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// from the API include file debug.h. 4043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.DebugEvent = { Break: 1, 4143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Exception: 2, 4243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen NewFunction: 3, 4343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen BeforeCompile: 4, 4471affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org AfterCompile: 5, 4571affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org ScriptCollected: 6 }; 4643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Types of exceptions that can be broken upon. 48c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.orgDebug.ExceptionBreak = { Caught : 0, 4943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Uncaught: 1 }; 5043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// The different types of steps. 5243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.StepAction = { StepOut: 0, 5343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen StepNext: 1, 5443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen StepIn: 2, 5543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen StepMin: 3, 5643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen StepInMin: 4 }; 5743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// The different types of scripts matching enum ScriptType in objects.h. 5943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.ScriptType = { Native: 0, 6043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Extension: 1, 6143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Normal: 2 }; 6243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 63e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org// The different types of script compilations matching enum 64e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org// Script::CompilationType in objects.h. 65e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.orgDebug.ScriptCompilationType = { Host: 0, 66e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org Eval: 1, 67e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org JSON: 2 }; 68e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org 697be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// The different script break point types. 707be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgDebug.ScriptBreakPointType = { ScriptId: 0, 71ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org ScriptName: 1, 72ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org ScriptRegExp: 2 }; 737be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 7493a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org// The different types of breakpoint position alignments. 7593a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org// Must match BreakPositionAlignment in debug.h. 7693a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.orgDebug.BreakPositionAlignment = { 7793a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org Statement: 0, 7893a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org BreakPosition: 1 7993a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org}; 8093a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org 8143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction ScriptTypeFlag(type) { 8243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return (1 << type); 8343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 8443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 8543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Globals. 8643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvar next_response_seq = 0; 8743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvar next_break_point_number = 1; 8843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvar break_points = []; 8943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvar script_break_points = []; 90e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.orgvar debugger_flags = { 91e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org breakPointsActive: { 92e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org value: true, 93e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org getValue: function() { return this.value; }, 94e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org setValue: function(value) { 95e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org this.value = !!value; 96e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org %SetDisableBreak(!this.value); 97e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org } 98c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org }, 99c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org breakOnCaughtException: { 100c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org getValue: function() { return Debug.isBreakOnException(); }, 101c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org setValue: function(value) { 102c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org if (value) { 103c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org Debug.setBreakOnException(); 104c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org } else { 105c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org Debug.clearBreakOnException(); 106c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org } 107c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org } 108c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org }, 109c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org breakOnUncaughtException: { 110c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org getValue: function() { return Debug.isBreakOnUncaughtException(); }, 111c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org setValue: function(value) { 112c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org if (value) { 113c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org Debug.setBreakOnUncaughtException(); 114c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org } else { 115c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org Debug.clearBreakOnUncaughtException(); 116c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org } 117c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org } 118c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org }, 119e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org}; 12043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Create a new break point object and add it to the list of break points. 123c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.orgfunction MakeBreakPoint(source_position, opt_script_break_point) { 124c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org var break_point = new BreakPoint(source_position, opt_script_break_point); 12543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_points.push(break_point); 12643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return break_point; 12741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 12843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 13043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Object representing a break point. 13143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// NOTE: This object does not have a reference to the function having break 13243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// point as this would cause function not to be garbage collected when it is 13343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// not used any more. We do not want break points to keep functions alive. 134c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.orgfunction BreakPoint(source_position, opt_script_break_point) { 13543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.source_position_ = source_position; 13643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (opt_script_break_point) { 13743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.script_break_point_ = opt_script_break_point; 13843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 13943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.number_ = next_break_point_number++; 14043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 14143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.hit_count_ = 0; 14243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.active_ = true; 14343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.condition_ = null; 14443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.ignoreCount_ = 0; 14541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 14643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 14743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 14843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.number = function() { 14943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.number_; 15043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 15143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 15243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 15343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.func = function() { 15443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.func_; 15543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 15643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 15743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 15843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.source_position = function() { 15943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.source_position_; 16043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 16143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 16243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 16343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.hit_count = function() { 16443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.hit_count_; 16543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 16643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 16743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 16843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.active = function() { 16943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (this.script_break_point()) { 17043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.script_break_point().active(); 17143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 17243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.active_; 17343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 17443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 17543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 17643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.condition = function() { 17743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (this.script_break_point() && this.script_break_point().condition()) { 17843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.script_break_point().condition(); 17943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 18043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.condition_; 18143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 18243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 18343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 18443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.ignoreCount = function() { 18543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.ignoreCount_; 18643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 18743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 18843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 18943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.script_break_point = function() { 19043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.script_break_point_; 19143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 19243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 19343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 19443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.enable = function() { 19543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.active_ = true; 19643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 19743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 19843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 19943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.disable = function() { 20043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.active_ = false; 20143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 20243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 20343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 20443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.setCondition = function(condition) { 20543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.condition_ = condition; 20643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 20743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 20843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 20943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.setIgnoreCount = function(ignoreCount) { 21043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.ignoreCount_ = ignoreCount; 21143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 21243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 21343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 21443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.isTriggered = function(exec_state) { 21543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Break point not active - not triggered. 21643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!this.active()) return false; 21743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 21843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Check for conditional break point. 21943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (this.condition()) { 22043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // If break point has condition try to evaluate it in the top frame. 22143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen try { 2229a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com var mirror = exec_state.frame(0).evaluate(this.condition()); 22343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // If no sensible mirror or non true value break point not triggered. 22443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!(mirror instanceof ValueMirror) || !%ToBoolean(mirror.value_)) { 22543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return false; 22643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 22743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } catch (e) { 22843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Exception evaluating condition counts as not triggered. 22943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return false; 23043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 23143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 23243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 23343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Update the hit count. 23443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.hit_count_++; 23543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (this.script_break_point_) { 23643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.script_break_point_.hit_count_++; 23743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 23843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 23943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // If the break point has an ignore count it is not triggered. 24043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (this.ignoreCount_ > 0) { 24143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.ignoreCount_--; 24243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return false; 24343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 24443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 24543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Break point triggered. 24643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return true; 24743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 24843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 24943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 25043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Function called from the runtime when a break point is hit. Returns true if 25143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// the break point is triggered and supposed to break execution. 25243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction IsBreakPointTriggered(break_id, break_point) { 25343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return break_point.isTriggered(MakeExecutionState(break_id)); 25441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 25543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 25643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 25743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Object representing a script break point. The script is referenced by its 2587be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// script name or script id and the break point is represented as line and 2597be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// column. 26068ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.orgfunction ScriptBreakPoint(type, script_id_or_name, opt_line, opt_column, 26193a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org opt_groupId, opt_position_alignment) { 2627be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org this.type_ = type; 2637be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org if (type == Debug.ScriptBreakPointType.ScriptId) { 2647be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org this.script_id_ = script_id_or_name; 265ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else if (type == Debug.ScriptBreakPointType.ScriptName) { 2667be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org this.script_name_ = script_id_or_name; 267ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else if (type == Debug.ScriptBreakPointType.ScriptRegExp) { 268ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org this.script_regexp_object_ = new RegExp(script_id_or_name); 269ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else { 270ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org throw new Error("Unexpected breakpoint type " + type); 2717be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org } 27243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.line_ = opt_line || 0; 27343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.column_ = opt_column; 27468ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org this.groupId_ = opt_groupId; 27593a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org this.position_alignment_ = IS_UNDEFINED(opt_position_alignment) 27693a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org ? Debug.BreakPositionAlignment.Statement : opt_position_alignment; 27743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.hit_count_ = 0; 27843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.active_ = true; 27943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.condition_ = null; 28043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.ignoreCount_ = 0; 28132d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org this.break_points_ = []; 28241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 28343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 28443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2854111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org//Creates a clone of script breakpoint that is linked to another script. 2864111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.orgScriptBreakPoint.prototype.cloneForOtherScript = function (other_script) { 2874111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org var copy = new ScriptBreakPoint(Debug.ScriptBreakPointType.ScriptId, 28893a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org other_script.id, this.line_, this.column_, this.groupId_, 28993a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org this.position_alignment_); 2904111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org copy.number_ = next_break_point_number++; 2914111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org script_break_points.push(copy); 292e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org 2934111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org copy.hit_count_ = this.hit_count_; 2944111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org copy.active_ = this.active_; 2954111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org copy.condition_ = this.condition_; 2964111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org copy.ignoreCount_ = this.ignoreCount_; 2974111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org return copy; 2981b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 2994111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org 3004111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org 30143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.number = function() { 30243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.number_; 30343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 30443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 30543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 30668ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.orgScriptBreakPoint.prototype.groupId = function() { 30768ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org return this.groupId_; 30868ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org}; 30968ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org 31068ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org 3117be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgScriptBreakPoint.prototype.type = function() { 3127be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org return this.type_; 3137be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org}; 3147be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 3157be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 3167be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgScriptBreakPoint.prototype.script_id = function() { 3177be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org return this.script_id_; 3187be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org}; 3197be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 3207be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 32143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.script_name = function() { 32243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.script_name_; 32343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 32443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 32543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 326ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.orgScriptBreakPoint.prototype.script_regexp_object = function() { 327ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org return this.script_regexp_object_; 328ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org}; 329ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org 330ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org 33143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.line = function() { 33243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.line_; 33343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 33443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 33543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 33643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.column = function() { 33743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.column_; 33843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 33943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 34043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 34132d961d4454609ab4251a760fc46b19f661da90clrn@chromium.orgScriptBreakPoint.prototype.actual_locations = function() { 34232d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org var locations = []; 34332d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org for (var i = 0; i < this.break_points_.length; i++) { 34432d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org locations.push(this.break_points_[i].actual_location); 34532d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org } 34632d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org return locations; 3471b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 34832d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org 34932d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org 3504111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.orgScriptBreakPoint.prototype.update_positions = function(line, column) { 3514111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org this.line_ = line; 3524111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org this.column_ = column; 3531b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 3544111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org 3554111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org 35643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.hit_count = function() { 35743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.hit_count_; 35843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 35943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 36043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 36143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.active = function() { 36243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.active_; 36343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 36443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 36543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 36643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.condition = function() { 36743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.condition_; 36843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 36943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 37043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 37143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.ignoreCount = function() { 37243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.ignoreCount_; 37343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 37443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 37543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 37643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.enable = function() { 37743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.active_ = true; 37843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 37943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 38043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 38143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.disable = function() { 38243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.active_ = false; 38343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 38443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 38543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 38643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.setCondition = function(condition) { 38743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.condition_ = condition; 38843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 38943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 39043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 39143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.setIgnoreCount = function(ignoreCount) { 39243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.ignoreCount_ = ignoreCount; 39343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 39443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Set ignore count on all break points created from this script break point. 39532d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org for (var i = 0; i < this.break_points_.length; i++) { 39632d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org this.break_points_[i].setIgnoreCount(ignoreCount); 39743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 39843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 39943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 40043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 40143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Check whether a script matches this script break point. Currently this is 40243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// only based on script name. 40343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.matchesScript = function(script) { 4047be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org if (this.type_ == Debug.ScriptBreakPointType.ScriptId) { 4057be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org return this.script_id_ == script.id; 406ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else { 407ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org // We might want to account columns here as well. 408ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org if (!(script.line_offset <= this.line_ && 409ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org this.line_ < script.line_offset + script.lineCount())) { 410ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org return false; 411ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } 412ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org if (this.type_ == Debug.ScriptBreakPointType.ScriptName) { 413ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org return this.script_name_ == script.nameOrSourceURL(); 414ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else if (this.type_ == Debug.ScriptBreakPointType.ScriptRegExp) { 415ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org return this.script_regexp_object_.test(script.nameOrSourceURL()); 41628a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org } else { 417ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org throw new Error("Unexpected breakpoint type " + this.type_); 418ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } 4197be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org } 42043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 42143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 42243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 42343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Set the script break point in a script. 42443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.set = function (script) { 42543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var column = this.column(); 42643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var line = this.line(); 42743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // If the column is undefined the break is on the line. To help locate the 42843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // first piece of breakable code on the line try to find the column on the 42943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // line which contains some source. 43043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (IS_UNDEFINED(column)) { 43143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var source_line = script.sourceLine(this.line()); 43243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 43343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Allocate array for caching the columns where the actual source starts. 43443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!script.sourceColumnStart_) { 43543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script.sourceColumnStart_ = new Array(script.lineCount()); 43643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 437c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 43843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Fill cache if needed and get column where the actual source starts. 43943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (IS_UNDEFINED(script.sourceColumnStart_[line])) { 44043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script.sourceColumnStart_[line] = 44143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen source_line.match(sourceLineBeginningSkip)[0].length; 44243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 44343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen column = script.sourceColumnStart_[line]; 44443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 44543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 44643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Convert the line and column into an absolute position within the script. 44732d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org var position = Debug.findScriptSourcePosition(script, this.line(), column); 448c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 4498bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org // If the position is not found in the script (the script might be shorter 4508bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org // than it used to be) just ignore it. 451690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org if (IS_NULL(position)) return; 452c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 45343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Create a break point object and set the break point. 454c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org break_point = MakeBreakPoint(position, this); 45543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_point.setIgnoreCount(this.ignoreCount()); 45693a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org var actual_position = %SetScriptBreakPoint(script, position, 45793a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org this.position_alignment_, 45893a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org break_point); 45932d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org if (IS_UNDEFINED(actual_position)) { 46032d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org actual_position = position; 4615ad5acef6bd4ebc785f946d8bcc2a88b1e031827ricow@chromium.org } 46232d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org var actual_location = script.locationFromPosition(actual_position, true); 46332d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org break_point.actual_location = { line: actual_location.line, 464ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org column: actual_location.column, 465ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org script_id: script.id }; 46632d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org this.break_points_.push(break_point); 46743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return break_point; 46843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 46943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 47043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 47143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Clear all the break points created from this script break point 47243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.clear = function () { 47343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var remaining_break_points = []; 47443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = 0; i < break_points.length; i++) { 47543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (break_points[i].script_break_point() && 47643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_points[i].script_break_point() === this) { 47743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen %ClearBreakPoint(break_points[i]); 47843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 47943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen remaining_break_points.push(break_points[i]); 48043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 48143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 48243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_points = remaining_break_points; 48332d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org this.break_points_ = []; 48443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 48543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 48643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 48743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Function called from runtime when a new script is compiled to set any script 48843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// break points set in this script. 48943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction UpdateScriptBreakPoints(script) { 49043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = 0; i < script_break_points.length; i++) { 4911b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org var break_point = script_break_points[i]; 492967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org if ((break_point.type() == Debug.ScriptBreakPointType.ScriptName || 493967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org break_point.type() == Debug.ScriptBreakPointType.ScriptRegExp) && 4941b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org break_point.matchesScript(script)) { 4951b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org break_point.set(script); 49643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 49743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 49841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 49943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 50043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5014111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.orgfunction GetScriptBreakPoints(script) { 5024111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org var result = []; 5034111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org for (var i = 0; i < script_break_points.length; i++) { 5044111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org if (script_break_points[i].matchesScript(script)) { 5054111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org result.push(script_break_points[i]); 5064111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org } 5074111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org } 5084111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org return result; 5094111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org} 5104111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org 5114111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org 512245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgDebug.setListener = function(listener, opt_data) { 513245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (!IS_FUNCTION(listener) && !IS_UNDEFINED(listener) && !IS_NULL(listener)) { 514245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org throw new Error('Parameters have wrong types.'); 515245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 516245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org %SetDebugEventListener(listener, opt_data); 51743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 51843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 51943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5209a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comDebug.breakExecution = function(f) { 52131e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager %Break(); 52243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 52343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 52493a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.orgDebug.breakLocations = function(f, opt_position_aligment) { 52543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.'); 52693a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org var position_aligment = IS_UNDEFINED(opt_position_aligment) 52793a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org ? Debug.BreakPositionAlignment.Statement : opt_position_aligment; 52893a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org return %GetBreakLocations(f, position_aligment); 52943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 53043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 53143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Returns a Script object. If the parameter is a function the return value 53243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// is the script in which the function is defined. If the parameter is a string 53343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// the return value is the script for which the script name has that string 534cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager// value. If it is a regexp and there is a unique script whose name matches 535cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager// we return that, otherwise undefined. 53643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.findScript = function(func_or_script_name) { 53743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (IS_FUNCTION(func_or_script_name)) { 53843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return %FunctionGetScript(func_or_script_name); 539cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager } else if (IS_REGEXP(func_or_script_name)) { 540cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager var scripts = Debug.scripts(); 541cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager var last_result = null; 542cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager var result_count = 0; 543cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager for (var i in scripts) { 544cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager var script = scripts[i]; 545cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager if (func_or_script_name.test(script.name)) { 546cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager last_result = script; 547cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager result_count++; 548cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager } 549cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager } 550cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager // Return the unique script matching the regexp. If there are more 551cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager // than one we don't return a value since there is no good way to 552cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager // decide which one to return. Returning a "random" one, say the 553cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager // first, would introduce nondeterminism (or something close to it) 554cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager // because the order is the heap iteration order. 555cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager if (result_count == 1) { 556cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager return last_result; 557cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager } else { 558cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager return undefined; 559cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager } 56043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 56143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return %GetScript(func_or_script_name); 56243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 56343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 56443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 56543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Returns the script source. If the parameter is a function the return value 56643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// is the script source for the script in which the function is defined. If the 56743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// parameter is a string the return value is the script for which the script 56843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// name has that string value. 56943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.scriptSource = function(func_or_script_name) { 57043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.findScript(func_or_script_name).source; 57143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 57243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 57343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.source = function(f) { 57443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.'); 57543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return %FunctionGetSourceCode(f); 57643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 57743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 57818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgDebug.disassemble = function(f) { 57943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.'); 58018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return %DebugDisassembleFunction(f); 58118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org}; 58218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 58318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgDebug.disassembleConstructor = function(f) { 58418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.'); 58518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return %DebugDisassembleConstructor(f); 58643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 58743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 588357bf65ed5309ac3a2c4bf20b6ce7770488787c2ager@chromium.orgDebug.ExecuteInDebugContext = function(f, without_debugger) { 589357bf65ed5309ac3a2c4bf20b6ce7770488787c2ager@chromium.org if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.'); 590357bf65ed5309ac3a2c4bf20b6ce7770488787c2ager@chromium.org return %ExecuteInDebugContext(f, !!without_debugger); 591357bf65ed5309ac3a2c4bf20b6ce7770488787c2ager@chromium.org}; 592357bf65ed5309ac3a2c4bf20b6ce7770488787c2ager@chromium.org 59343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.sourcePosition = function(f) { 59443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.'); 59543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return %FunctionGetScriptSourcePosition(f); 59643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 59743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5987be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 5997be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgDebug.findFunctionSourceLocation = function(func, opt_line, opt_column) { 60043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var script = %FunctionGetScript(func); 60143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var script_offset = %FunctionGetScriptSourcePosition(func); 6027be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org return script.locationFromLine(opt_line, opt_column, script_offset); 6031b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 60443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 60543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 60643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Returns the character position in a script based on a line number and an 60743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// optional position within that line. 60843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.findScriptSourcePosition = function(script, opt_line, opt_column) { 609c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org var location = script.locationFromLine(opt_line, opt_column); 6108bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org return location ? location.position : null; 6111b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 61243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 61343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 61443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.findBreakPoint = function(break_point_number, remove) { 61543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var break_point; 61643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = 0; i < break_points.length; i++) { 61743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (break_points[i].number() == break_point_number) { 61843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_point = break_points[i]; 61943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Remove the break point from the list if requested. 62043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (remove) { 62143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_points.splice(i, 1); 62243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 62343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break; 62443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 62543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 62643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (break_point) { 62743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return break_point; 62843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 62943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.findScriptBreakPoint(break_point_number, remove); 63043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 63143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 63243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 63332d961d4454609ab4251a760fc46b19f661da90clrn@chromium.orgDebug.findBreakPointActualLocations = function(break_point_number) { 63432d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org for (var i = 0; i < script_break_points.length; i++) { 63532d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org if (script_break_points[i].number() == break_point_number) { 63632d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org return script_break_points[i].actual_locations(); 63732d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org } 63832d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org } 63932d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org for (var i = 0; i < break_points.length; i++) { 64032d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org if (break_points[i].number() == break_point_number) { 64132d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org return [break_points[i].actual_location]; 64232d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org } 64332d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org } 64432d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org return []; 6451b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 64643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 64743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.setBreakPoint = function(func, opt_line, opt_column, opt_condition) { 64843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_FUNCTION(func)) throw new Error('Parameters have wrong types.'); 64937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Break points in API functions are not supported. 65037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (%FunctionIsAPIFunction(func)) { 65137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com throw new Error('Cannot set break point in native code.'); 65237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 6537be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org // Find source position relative to start of the function 6547be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org var break_position = 6557be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org this.findFunctionSourceLocation(func, opt_line, opt_column).position; 6567be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org var source_position = break_position - this.sourcePosition(func); 65743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Find the script for the function. 65843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var script = %FunctionGetScript(func); 65937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Break in builtin JavaScript code is not supported. 66037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (script.type == Debug.ScriptType.Native) { 66137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com throw new Error('Cannot set break point in native code.'); 66237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 66343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // If the script for the function has a name convert this to a script break 66443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // point. 6657be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org if (script && script.id) { 66643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Adjust the source position to be script relative. 66743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen source_position += %FunctionGetScriptSourcePosition(func); 66843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Find line and column for the position in the script and set a script 66943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // break point from that. 6703a6061e672323303da424aa33256d0ae621aa3bdager@chromium.org var location = script.locationFromPosition(source_position, false); 6717be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org return this.setScriptBreakPointById(script.id, 6727be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org location.line, location.column, 6737be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org opt_condition); 67443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 67543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Set a break point directly on the function. 676c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org var break_point = MakeBreakPoint(source_position); 67732d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org var actual_position = 67832d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org %SetFunctionBreakPoint(func, source_position, break_point); 67932d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org actual_position += this.sourcePosition(func); 68032d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org var actual_location = script.locationFromPosition(actual_position, true); 68132d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org break_point.actual_location = { line: actual_location.line, 682ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org column: actual_location.column, 683ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org script_id: script.id }; 68443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_point.setCondition(opt_condition); 68543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return break_point.number(); 68643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 68743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 68843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 68943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 690c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.orgDebug.setBreakPointByScriptIdAndPosition = function(script_id, position, 69193a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org condition, enabled, 69293a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org opt_position_alignment) 693c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org{ 694c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org break_point = MakeBreakPoint(position); 695c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org break_point.setCondition(condition); 6961b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org if (!enabled) { 697c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org break_point.disable(); 6981b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org } 699c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org var scripts = this.scripts(); 70093a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org var position_alignment = IS_UNDEFINED(opt_position_alignment) 70193a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org ? Debug.BreakPositionAlignment.Statement : opt_position_alignment; 702c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org for (var i = 0; i < scripts.length; i++) { 703c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org if (script_id == scripts[i].id) { 704c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org break_point.actual_position = %SetScriptBreakPoint(scripts[i], position, 70593a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org position_alignment, break_point); 706c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org break; 707c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org } 708c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org } 709c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org return break_point; 710c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 711c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 712c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 71343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.enableBreakPoint = function(break_point_number) { 71443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var break_point = this.findBreakPoint(break_point_number, false); 715d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Only enable if the breakpoint hasn't been deleted: 716d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (break_point) { 717d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break_point.enable(); 718d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 71943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 72043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 72143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 72243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.disableBreakPoint = function(break_point_number) { 72343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var break_point = this.findBreakPoint(break_point_number, false); 724d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Only enable if the breakpoint hasn't been deleted: 725d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (break_point) { 726d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break_point.disable(); 727d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 72843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 72943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 73043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 73143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.changeBreakPointCondition = function(break_point_number, condition) { 73243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var break_point = this.findBreakPoint(break_point_number, false); 73343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_point.setCondition(condition); 73443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 73543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 73643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 73743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.changeBreakPointIgnoreCount = function(break_point_number, ignoreCount) { 73843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (ignoreCount < 0) { 73943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen throw new Error('Invalid argument'); 74043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 74143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var break_point = this.findBreakPoint(break_point_number, false); 74243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_point.setIgnoreCount(ignoreCount); 74343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 74443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 74543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 74643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.clearBreakPoint = function(break_point_number) { 74743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var break_point = this.findBreakPoint(break_point_number, true); 74843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (break_point) { 74943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return %ClearBreakPoint(break_point); 75043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 75143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_point = this.findScriptBreakPoint(break_point_number, true); 75243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!break_point) { 75343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen throw new Error('Invalid breakpoint'); 75443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 75543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 75643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 75743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 75843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 75943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.clearAllBreakPoints = function() { 76043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = 0; i < break_points.length; i++) { 76143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_point = break_points[i]; 76243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen %ClearBreakPoint(break_point); 76343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 76443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_points = []; 76543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 76643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 76743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 768d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDebug.disableAllBreakPoints = function() { 769d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Disable all user defined breakpoints: 770d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org for (var i = 1; i < next_break_point_number; i++) { 771d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.disableBreakPoint(i); 772d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 773d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Disable all exception breakpoints: 774d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org %ChangeBreakOnException(Debug.ExceptionBreak.Caught, false); 775d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org %ChangeBreakOnException(Debug.ExceptionBreak.Uncaught, false); 776d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org}; 777d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 778d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 77943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.findScriptBreakPoint = function(break_point_number, remove) { 78043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var script_break_point; 78143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = 0; i < script_break_points.length; i++) { 78243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (script_break_points[i].number() == break_point_number) { 78343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script_break_point = script_break_points[i]; 78443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Remove the break point from the list if requested. 78543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (remove) { 78643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script_break_point.clear(); 78743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script_break_points.splice(i,1); 78843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 78943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break; 79043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 79143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 79243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return script_break_point; 7931b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 79443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 79543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 7967be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// Sets a breakpoint in a script identified through id or name at the 79743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// specified source line and column within that line. 7987be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgDebug.setScriptBreakPoint = function(type, script_id_or_name, 79968ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org opt_line, opt_column, opt_condition, 80093a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org opt_groupId, opt_position_alignment) { 80143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Create script break point object. 8027be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org var script_break_point = 80368ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org new ScriptBreakPoint(type, script_id_or_name, opt_line, opt_column, 80493a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org opt_groupId, opt_position_alignment); 80543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 80643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Assign number to the new script break point and add it. 80743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script_break_point.number_ = next_break_point_number++; 80843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script_break_point.setCondition(opt_condition); 80943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script_break_points.push(script_break_point); 81043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 8117be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org // Run through all scripts to see if this script break point matches any 81243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // loaded scripts. 81343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var scripts = this.scripts(); 81443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = 0; i < scripts.length; i++) { 81543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (script_break_point.matchesScript(scripts[i])) { 81643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script_break_point.set(scripts[i]); 81743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 81843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 81943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 82043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return script_break_point.number(); 8211b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 82243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 82343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 8247be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgDebug.setScriptBreakPointById = function(script_id, 8257be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org opt_line, opt_column, 82693a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org opt_condition, opt_groupId, 82793a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org opt_position_alignment) { 8287be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org return this.setScriptBreakPoint(Debug.ScriptBreakPointType.ScriptId, 8297be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org script_id, opt_line, opt_column, 83093a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org opt_condition, opt_groupId, 83193a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org opt_position_alignment); 8321b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 8337be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 8347be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 8357be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgDebug.setScriptBreakPointByName = function(script_name, 8367be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org opt_line, opt_column, 83768ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org opt_condition, opt_groupId) { 8387be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org return this.setScriptBreakPoint(Debug.ScriptBreakPointType.ScriptName, 8397be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org script_name, opt_line, opt_column, 84068ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org opt_condition, opt_groupId); 8411b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 8427be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 8437be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 844ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.orgDebug.setScriptBreakPointByRegExp = function(script_regexp, 845ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org opt_line, opt_column, 846ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org opt_condition, opt_groupId) { 847ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org return this.setScriptBreakPoint(Debug.ScriptBreakPointType.ScriptRegExp, 848ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org script_regexp, opt_line, opt_column, 849ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org opt_condition, opt_groupId); 8501b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 851ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org 852ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org 85343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.enableScriptBreakPoint = function(break_point_number) { 85443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var script_break_point = this.findScriptBreakPoint(break_point_number, false); 85543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script_break_point.enable(); 85643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 85743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 85843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 85943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.disableScriptBreakPoint = function(break_point_number) { 86043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var script_break_point = this.findScriptBreakPoint(break_point_number, false); 86143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script_break_point.disable(); 86243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 86343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 86443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 8651b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgDebug.changeScriptBreakPointCondition = function( 8661b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org break_point_number, condition) { 86743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var script_break_point = this.findScriptBreakPoint(break_point_number, false); 86843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script_break_point.setCondition(condition); 86943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 87043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 87143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 8721b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgDebug.changeScriptBreakPointIgnoreCount = function( 8731b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org break_point_number, ignoreCount) { 87443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (ignoreCount < 0) { 87543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen throw new Error('Invalid argument'); 87643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 87743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var script_break_point = this.findScriptBreakPoint(break_point_number, false); 87843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script_break_point.setIgnoreCount(ignoreCount); 87943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 88043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 88143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 88243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.scriptBreakPoints = function() { 88343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return script_break_points; 8841b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 88543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 88643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 88743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.clearStepping = function() { 88831e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager %ClearStepping(); 8891b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 89043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 89143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.setBreakOnException = function() { 892c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org return %ChangeBreakOnException(Debug.ExceptionBreak.Caught, true); 89343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 89443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 89543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.clearBreakOnException = function() { 896c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org return %ChangeBreakOnException(Debug.ExceptionBreak.Caught, false); 897c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org}; 898c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org 899c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.orgDebug.isBreakOnException = function() { 900c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org return !!%IsBreakOnException(Debug.ExceptionBreak.Caught); 90143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 90243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 90343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.setBreakOnUncaughtException = function() { 90443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return %ChangeBreakOnException(Debug.ExceptionBreak.Uncaught, true); 90543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 90643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 90743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.clearBreakOnUncaughtException = function() { 90843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return %ChangeBreakOnException(Debug.ExceptionBreak.Uncaught, false); 90943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 91043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 911c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.orgDebug.isBreakOnUncaughtException = function() { 912c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org return !!%IsBreakOnException(Debug.ExceptionBreak.Uncaught); 913c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org}; 914c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org 91593a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.orgDebug.showBreakPoints = function(f, full, opt_position_alignment) { 91643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.'); 91743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var source = full ? this.scriptSource(f) : this.source(f); 91843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var offset = full ? this.sourcePosition(f) : 0; 91993a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org var locations = this.breakLocations(f, opt_position_alignment); 92043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!locations) return source; 92143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen locations.sort(function(x, y) { return x - y; }); 92243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var result = ""; 92343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var prev_pos = 0; 92443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var pos; 92543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = 0; i < locations.length; i++) { 92643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen pos = locations[i] - offset; 92743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen result += source.slice(prev_pos, pos); 92843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen result += "[B" + i + "]"; 92943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen prev_pos = pos; 93043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 93143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen pos = source.length; 93243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen result += source.substring(prev_pos, pos); 93343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return result; 93443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 93543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 93643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 93743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Get all the scripts currently loaded. Locating all the scripts is based on 93843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// scanning the heap. 93943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.scripts = function() { 94043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Collect all scripts in the heap. 94131e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager return %DebugGetLoadedScripts(); 942e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org}; 943e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org 944e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org 945e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.orgDebug.debuggerFlags = function() { 946e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org return debugger_flags; 947e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org}; 948e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org 9495f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.orgDebug.MakeMirror = MakeMirror; 95043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 95143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction MakeExecutionState(break_id) { 95243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return new ExecutionState(break_id); 95341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 95443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 95543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction ExecutionState(break_id) { 95643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.break_id = break_id; 95743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.selected_frame = 0; 95841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 95943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 960639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgExecutionState.prototype.prepareStep = function(opt_action, opt_count, 961639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org opt_callframe) { 96243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var action = Debug.StepAction.StepIn; 96343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_UNDEFINED(opt_action)) action = %ToNumber(opt_action); 96443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var count = opt_count ? %ToNumber(opt_count) : 1; 965639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org var callFrameId = 0; 966639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org if (!IS_UNDEFINED(opt_callframe)) { 967639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org callFrameId = opt_callframe.details_.frameId(); 968639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org } 96943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 970639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org return %PrepareStep(this.break_id, action, count, callFrameId); 9711b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 97243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 9735f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.orgExecutionState.prototype.evaluateGlobal = function(source, disable_break, 9745f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org opt_additional_context) { 9755f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org return MakeMirror(%DebugEvaluateGlobal(this.break_id, source, 9765f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org Boolean(disable_break), 9775f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org opt_additional_context)); 97843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 97943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 9809a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comExecutionState.prototype.frameCount = function() { 98143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return %GetFrameCount(this.break_id); 98243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 98343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 984bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgExecutionState.prototype.threadCount = function() { 985bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org return %GetThreadCount(this.break_id); 986bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org}; 987bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 9889a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comExecutionState.prototype.frame = function(opt_index) { 98943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // If no index supplied return the selected frame. 99043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (opt_index == null) opt_index = this.selected_frame; 9911b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org if (opt_index < 0 || opt_index >= this.frameCount()) { 992df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org throw new Error('Illegal frame index.'); 9931b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org } 99443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return new FrameMirror(this.break_id, opt_index); 99543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 99643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 99743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenExecutionState.prototype.setSelectedFrame = function(index) { 99843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var i = %ToNumber(index); 9999a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com if (i < 0 || i >= this.frameCount()) throw new Error('Illegal frame index.'); 100043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.selected_frame = i; 100143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 100243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 10039a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comExecutionState.prototype.selectedFrame = function() { 100443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.selected_frame; 100543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 100643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 10079d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comExecutionState.prototype.debugCommandProcessor = function(opt_is_running) { 10089d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com return new DebugCommandProcessor(this, opt_is_running); 100943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 101043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 101143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 101243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction MakeBreakEvent(exec_state, break_points_hit) { 101343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return new BreakEvent(exec_state, break_points_hit); 101441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 101543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 101643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 101743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction BreakEvent(exec_state, break_points_hit) { 101843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.exec_state_ = exec_state; 101943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.break_points_hit_ = break_points_hit; 102041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 102143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 102243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 10238bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.orgBreakEvent.prototype.executionState = function() { 10248bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org return this.exec_state_; 10258bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org}; 10268bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 10278bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 10288bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.orgBreakEvent.prototype.eventType = function() { 10298bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org return Debug.DebugEvent.Break; 10308bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org}; 10318bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 10328bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 103343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakEvent.prototype.func = function() { 10349a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com return this.exec_state_.frame(0).func(); 103543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 103643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 103743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 103843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakEvent.prototype.sourceLine = function() { 10399a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com return this.exec_state_.frame(0).sourceLine(); 104043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 104143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 104243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 104343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakEvent.prototype.sourceColumn = function() { 10449a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com return this.exec_state_.frame(0).sourceColumn(); 104543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 104643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 104743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 104843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakEvent.prototype.sourceLineText = function() { 10499a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com return this.exec_state_.frame(0).sourceLineText(); 105043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 105143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 105243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 105343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakEvent.prototype.breakPointsHit = function() { 105443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.break_points_hit_; 105543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 105643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 105743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 105843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakEvent.prototype.toJSONProtocol = function() { 105943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var o = { seq: next_response_seq++, 106043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen type: "event", 106143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen event: "break", 10629a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com body: { invocationText: this.exec_state_.frame(0).invocationText(), 106343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 1064b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org }; 106543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 106643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Add script related information to the event if available. 106743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var script = this.func().script(); 106843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (script) { 106943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen o.body.sourceLine = this.sourceLine(), 107043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen o.body.sourceColumn = this.sourceColumn(), 107143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen o.body.sourceLineText = this.sourceLineText(), 10727be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org o.body.script = MakeScriptObject_(script, false); 107343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 107443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 107543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Add an Array of break points hit if any. 107643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (this.breakPointsHit()) { 107743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen o.body.breakpoints = []; 107843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = 0; i < this.breakPointsHit().length; i++) { 107943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Find the break point number. For break points originating from a 108043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // script break point supply the script break point number. 108143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var breakpoint = this.breakPointsHit()[i]; 108243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var script_break_point = breakpoint.script_break_point(); 108343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var number; 108443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (script_break_point) { 108543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen number = script_break_point.number(); 108643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 108743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen number = breakpoint.number(); 108843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 108943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen o.body.breakpoints.push(number); 109043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 109143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 1092b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org return JSON.stringify(ObjectToProtocolObject_(o)); 109343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 109443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 109543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 109643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction MakeExceptionEvent(exec_state, exception, uncaught) { 109743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return new ExceptionEvent(exec_state, exception, uncaught); 109841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 109943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 11008bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 110143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction ExceptionEvent(exec_state, exception, uncaught) { 110243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.exec_state_ = exec_state; 110343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.exception_ = exception; 110443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.uncaught_ = uncaught; 110541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 110643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 11078bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 11088bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.orgExceptionEvent.prototype.executionState = function() { 11098bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org return this.exec_state_; 11108bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org}; 11118bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 11128bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 11138bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.orgExceptionEvent.prototype.eventType = function() { 11148bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org return Debug.DebugEvent.Exception; 11158bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org}; 11168bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 11178bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 11188bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.orgExceptionEvent.prototype.exception = function() { 11198bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org return this.exception_; 11201b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 11218bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 11228bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 112343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenExceptionEvent.prototype.uncaught = function() { 112443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.uncaught_; 11251b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 112643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 11278bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 112843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenExceptionEvent.prototype.func = function() { 11299a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com return this.exec_state_.frame(0).func(); 113043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 113143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 113243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 113343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenExceptionEvent.prototype.sourceLine = function() { 11349a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com return this.exec_state_.frame(0).sourceLine(); 113543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 113643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 113743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 113843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenExceptionEvent.prototype.sourceColumn = function() { 11399a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com return this.exec_state_.frame(0).sourceColumn(); 114043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 114143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 114243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 114343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenExceptionEvent.prototype.sourceLineText = function() { 11449a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com return this.exec_state_.frame(0).sourceLineText(); 114543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 114643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 114743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 114843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenExceptionEvent.prototype.toJSONProtocol = function() { 1149061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org var o = new ProtocolMessage(); 1150061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org o.event = "exception"; 1151061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org o.body = { uncaught: this.uncaught_, 1152061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org exception: MakeMirror(this.exception_) 1153b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org }; 1154c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 1155061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org // Exceptions might happen whithout any JavaScript frames. 1156061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org if (this.exec_state_.frameCount() > 0) { 1157061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org o.body.sourceLine = this.sourceLine(); 1158061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org o.body.sourceColumn = this.sourceColumn(); 1159061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org o.body.sourceLineText = this.sourceLineText(); 1160061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org 1161061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org // Add script information to the event if available. 1162061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org var script = this.func().script(); 1163061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org if (script) { 11647be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org o.body.script = MakeScriptObject_(script, false); 1165061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org } 1166061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org } else { 1167061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org o.body.sourceLine = -1; 116843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 116943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1170061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org return o.toJSONProtocol(); 117143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 117243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1173a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 1174245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgfunction MakeCompileEvent(exec_state, script, before) { 1175245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return new CompileEvent(exec_state, script, before); 117641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 117743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1178a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 1179245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgfunction CompileEvent(exec_state, script, before) { 1180245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org this.exec_state_ = exec_state; 1181245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org this.script_ = MakeMirror(script); 1182245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org this.before_ = before; 118341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 118443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 118543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1186245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgCompileEvent.prototype.executionState = function() { 1187245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return this.exec_state_; 1188245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org}; 1189245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 1190245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 11918bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.orgCompileEvent.prototype.eventType = function() { 1192245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (this.before_) { 1193245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return Debug.DebugEvent.BeforeCompile; 11948bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org } else { 1195245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return Debug.DebugEvent.AfterCompile; 11968bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org } 11978bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org}; 11988bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 11998bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 1200245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgCompileEvent.prototype.script = function() { 1201245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return this.script_; 1202245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org}; 1203245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 1204245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 1205061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.orgCompileEvent.prototype.toJSONProtocol = function() { 1206061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org var o = new ProtocolMessage(); 12075ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org o.running = true; 1208061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org if (this.before_) { 1209061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org o.event = "beforeCompile"; 1210061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org } else { 1211061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org o.event = "afterCompile"; 1212061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org } 1213061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org o.body = {}; 1214b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org o.body.script = this.script_; 1215061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org 1216061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org return o.toJSONProtocol(); 12171b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1218061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org 1219061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org 122043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction MakeNewFunctionEvent(func) { 122143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return new NewFunctionEvent(func); 122241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 122343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1224a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 122543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction NewFunctionEvent(func) { 122643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.func = func; 122741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 122843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12298bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 12308bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.orgNewFunctionEvent.prototype.eventType = function() { 12318bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org return Debug.DebugEvent.NewFunction; 12328bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org}; 12338bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 12348bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 123543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenNewFunctionEvent.prototype.name = function() { 123643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.func.name; 123743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 123843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1239a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 124043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenNewFunctionEvent.prototype.setBreakPoint = function(p) { 124143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Debug.setBreakPoint(this.func, p || 0); 124243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 124343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1244a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 124571affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgfunction MakeScriptCollectedEvent(exec_state, id) { 124671affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org return new ScriptCollectedEvent(exec_state, id); 124771affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org} 124871affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org 124971affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org 125071affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgfunction ScriptCollectedEvent(exec_state, id) { 125171affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org this.exec_state_ = exec_state; 125271affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org this.id_ = id; 125371affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org} 125471affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org 125571affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org 125671affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgScriptCollectedEvent.prototype.id = function() { 125771affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org return this.id_; 125871affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org}; 125971affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org 126071affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org 126171affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgScriptCollectedEvent.prototype.executionState = function() { 126271affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org return this.exec_state_; 126371affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org}; 126471affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org 126571affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org 126671affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgScriptCollectedEvent.prototype.toJSONProtocol = function() { 126771affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org var o = new ProtocolMessage(); 126871affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org o.running = true; 126971affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org o.event = "scriptCollected"; 127071affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org o.body = {}; 127171affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org o.body.script = { id: this.id() }; 127271affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org return o.toJSONProtocol(); 12731b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 127471affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org 127571affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org 12767be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgfunction MakeScriptObject_(script, include_source) { 12777be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org var o = { id: script.id(), 12787be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org name: script.name(), 12797be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org lineOffset: script.lineOffset(), 12807be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org columnOffset: script.columnOffset(), 12817be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org lineCount: script.lineCount(), 12827be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org }; 128365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org if (!IS_UNDEFINED(script.data())) { 128465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org o.data = script.data(); 128565dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org } 12867be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org if (include_source) { 12877be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org o.source = script.source(); 12887be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org } 12897be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org return o; 12901b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org} 12917be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 12927be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 12939d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comfunction DebugCommandProcessor(exec_state, opt_is_running) { 129443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.exec_state_ = exec_state; 12959d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com this.running_ = opt_is_running || false; 12961b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org} 129743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 129843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1299a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgDebugCommandProcessor.prototype.processDebugRequest = function (request) { 1300a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org return this.processDebugJSONRequest(request); 13011b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 130243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 130343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1304061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.orgfunction ProtocolMessage(request) { 1305061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org // Update sequence number. 130643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.seq = next_response_seq++; 1307c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 1308061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org if (request) { 1309061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org // If message is based on a request this is a response. Fill the initial 1310061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org // response from the request. 1311061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org this.type = 'response'; 1312061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org this.request_seq = request.seq; 1313061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org this.command = request.command; 1314061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org } else { 1315061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org // If message is not based on a request it is a dabugger generated event. 1316061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org this.type = 'event'; 1317061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org } 131843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.success = true; 13199d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com // Handler may set this field to control debugger state. 13209d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com this.running = undefined; 132141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 132243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 132343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 13249085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.orgProtocolMessage.prototype.setOption = function(name, value) { 13259085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org if (!this.options_) { 13269085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org this.options_ = {}; 13279085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org } 13289085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org this.options_[name] = value; 13291b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 13309085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org 13319085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org 133249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.orgProtocolMessage.prototype.failed = function(message, opt_details) { 133343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.success = false; 133443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.message = message; 133549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org if (IS_OBJECT(opt_details)) { 133649a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org this.error_details = opt_details; 133749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } 13381b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 133943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 134043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1341061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.orgProtocolMessage.prototype.toJSONProtocol = function() { 134243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Encode the protocol header. 1343b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org var json = {}; 1344b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json.seq= this.seq; 134543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (this.request_seq) { 1346b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json.request_seq = this.request_seq; 134743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 1348b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json.type = this.type; 1349061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org if (this.event) { 1350b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json.event = this.event; 1351061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org } 135243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (this.command) { 1353b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json.command = this.command; 135443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 135543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (this.success) { 1356b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json.success = this.success; 135743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 1358b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json.success = false; 135943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 136043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (this.body) { 136143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Encode the body part. 1362b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org var bodyJson; 13639085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org var serializer = MakeMirrorSerializer(true, this.options_); 13643291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org if (this.body instanceof Mirror) { 1365b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org bodyJson = serializer.serializeValue(this.body); 136643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (this.body instanceof Array) { 1367b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org bodyJson = []; 136843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = 0; i < this.body.length; i++) { 13693291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org if (this.body[i] instanceof Mirror) { 1370b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org bodyJson.push(serializer.serializeValue(this.body[i])); 137143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 1372b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org bodyJson.push(ObjectToProtocolObject_(this.body[i], serializer)); 137343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 137443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 137543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 1376b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org bodyJson = ObjectToProtocolObject_(this.body, serializer); 137743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 1378b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json.body = bodyJson; 1379b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json.refs = serializer.serializeReferencedObjects(); 138043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 138143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (this.message) { 1382b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json.message = this.message; 138343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 138449a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org if (this.error_details) { 138549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org json.error_details = this.error_details; 138649a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } 13879d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com json.running = this.running; 1388b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org return JSON.stringify(json); 13891b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 139043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 139143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 139243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebugCommandProcessor.prototype.createResponse = function(request) { 1393061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org return new ProtocolMessage(request); 139443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 139543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 139643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 13971b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgDebugCommandProcessor.prototype.processDebugJSONRequest = function( 13981b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org json_request) { 139943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var request; // Current request. 140043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var response; // Generated response. 140143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen try { 140243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen try { 140343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Convert the JSON string to an object. 1404fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org request = JSON.parse(json_request); 140543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 140643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Create an initial response. 140743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response = this.createResponse(request); 140843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 140943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!request.type) { 141043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen throw new Error('Type not specified'); 141143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 141243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 141343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (request.type != 'request') { 141443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen throw new Error("Illegal type '" + request.type + "' in request"); 141543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 141643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 141743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!request.command) { 141843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen throw new Error('Command not specified'); 141943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 142043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1421b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org if (request.arguments) { 1422b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org var args = request.arguments; 1423b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org // TODO(yurys): remove request.arguments.compactFormat check once 1424b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org // ChromeDevTools are switched to 'inlineRefs' 1425b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org if (args.inlineRefs || args.compactFormat) { 1426b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org response.setOption('inlineRefs', true); 1427b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org } 1428b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org if (!IS_UNDEFINED(args.maxStringLength)) { 1429b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org response.setOption('maxStringLength', args.maxStringLength); 1430b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org } 14313e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org } 14323e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org 143343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (request.command == 'continue') { 143443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.continueRequest_(request, response); 143543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (request.command == 'break') { 143643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.breakRequest_(request, response); 143743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (request.command == 'setbreakpoint') { 143843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.setBreakPointRequest_(request, response); 143943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (request.command == 'changebreakpoint') { 144043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.changeBreakPointRequest_(request, response); 144143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (request.command == 'clearbreakpoint') { 144243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.clearBreakPointRequest_(request, response); 144368ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org } else if (request.command == 'clearbreakpointgroup') { 144468ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org this.clearBreakPointGroupRequest_(request, response); 1445d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (request.command == 'disconnect') { 1446d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.disconnectRequest_(request, response); 1447d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (request.command == 'setexceptionbreak') { 1448d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.setExceptionBreakRequest_(request, response); 1449dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org } else if (request.command == 'listbreakpoints') { 1450dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org this.listBreakpointsRequest_(request, response); 145143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (request.command == 'backtrace') { 145243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.backtraceRequest_(request, response); 145343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (request.command == 'frame') { 145443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.frameRequest_(request, response); 1455eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } else if (request.command == 'scopes') { 1456eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org this.scopesRequest_(request, response); 1457eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } else if (request.command == 'scope') { 1458eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org this.scopeRequest_(request, response); 145949a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } else if (request.command == 'setVariableValue') { 146049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org this.setVariableValueRequest_(request, response); 146143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (request.command == 'evaluate') { 146243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.evaluateRequest_(request, response); 1463ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } else if (request.command == 'lookup') { 1464ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org this.lookupRequest_(request, response); 1465245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } else if (request.command == 'references') { 1466245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org this.referencesRequest_(request, response); 146743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (request.command == 'source') { 146843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.sourceRequest_(request, response); 146943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (request.command == 'scripts') { 147043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.scriptsRequest_(request, response); 1471bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org } else if (request.command == 'threads') { 1472bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org this.threadsRequest_(request, response); 14739d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com } else if (request.command == 'suspend') { 14749d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com this.suspendRequest_(request, response); 14753811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org } else if (request.command == 'version') { 14763811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org this.versionRequest_(request, response); 1477ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org } else if (request.command == 'changelive') { 1478e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org this.changeLiveRequest_(request, response); 14795a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org } else if (request.command == 'restartframe') { 14805a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org this.restartFrameRequest_(request, response); 1481e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org } else if (request.command == 'flags') { 1482e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org this.debuggerFlagsRequest_(request, response); 1483d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (request.command == 'v8flags') { 1484d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.v8FlagsRequest_(request, response); 1485d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1486d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // GC tools: 1487d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (request.command == 'gc') { 1488d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.gcRequest_(request, response); 1489d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 149043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 149143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen throw new Error('Unknown command "' + request.command + '" in request'); 149243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 149343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } catch (e) { 149443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // If there is no response object created one (without command). 149543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!response) { 149643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response = this.createResponse(); 149743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 149843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.success = false; 149943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.message = %ToString(e); 150043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 150143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 150243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Return the response as a JSON encoded string. 150343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen try { 15049d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com if (!IS_UNDEFINED(response.running)) { 15059d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com // Response controls running state. 15069d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com this.running_ = response.running; 15079d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com } 150825156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org response.running = this.running_; 150943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return response.toJSONProtocol(); 151043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } catch (e) { 151143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Failed to generate response - return generic error. 151243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return '{"seq":' + response.seq + ',' + 151343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen '"request_seq":' + request.seq + ',' + 151443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen '"type":"response",' + 151543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen '"success":false,' + 151643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen '"message":"Internal error: ' + %ToString(e) + '"}'; 151743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 151843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } catch (e) { 151943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Failed in one of the catch blocks above - most generic error. 152043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return '{"seq":0,"type":"response","success":false,"message":"Internal error"}'; 152143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 152243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 152343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 152443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 152543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebugCommandProcessor.prototype.continueRequest_ = function(request, response) { 152643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Check for arguments for continue. 152743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (request.arguments) { 152843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var count = 1; 152943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var action = Debug.StepAction.StepIn; 153043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 153143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Pull out arguments. 153243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var stepaction = request.arguments.stepaction; 153343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var stepcount = request.arguments.stepcount; 153443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 153543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Get the stepcount argument if any. 153643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (stepcount) { 153743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen count = %ToNumber(stepcount); 153843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (count < 0) { 153943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen throw new Error('Invalid stepcount argument "' + stepcount + '".'); 154043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 154143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 154243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 154343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Get the stepaction argument. 154443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (stepaction) { 154543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (stepaction == 'in') { 154643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen action = Debug.StepAction.StepIn; 154743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (stepaction == 'min') { 154843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen action = Debug.StepAction.StepMin; 154943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (stepaction == 'next') { 155043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen action = Debug.StepAction.StepNext; 155143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (stepaction == 'out') { 155243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen action = Debug.StepAction.StepOut; 155343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 155443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen throw new Error('Invalid stepaction argument "' + stepaction + '".'); 155543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 155643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 155743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1558f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com // Set up the VM for stepping. 155943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.exec_state_.prepareStep(action, count); 156043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 156143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 156243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // VM should be running after executing this request. 156343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.running = true; 156443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 156543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 156643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 156743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebugCommandProcessor.prototype.breakRequest_ = function(request, response) { 156843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Ignore as break command does not do anything when broken. 156943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 157043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 157143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 157243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebugCommandProcessor.prototype.setBreakPointRequest_ = 157343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen function(request, response) { 157443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Check for legal request. 157543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!request.arguments) { 157643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.failed('Missing arguments'); 157743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 157843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 157943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 158043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Pull out arguments. 158143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var type = request.arguments.type; 158243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var target = request.arguments.target; 158343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var line = request.arguments.line; 158443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var column = request.arguments.column; 158543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var enabled = IS_UNDEFINED(request.arguments.enabled) ? 158643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen true : request.arguments.enabled; 158743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var condition = request.arguments.condition; 158843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var ignoreCount = request.arguments.ignoreCount; 158968ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org var groupId = request.arguments.groupId; 159043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 159143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Check for legal arguments. 159265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org if (!type || IS_UNDEFINED(target)) { 159343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.failed('Missing argument "type" or "target"'); 159443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 159543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 159628a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org 159743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Either function or script break point. 159843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var break_point_number; 159943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (type == 'function') { 160043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Handle function break point. 160143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_STRING(target)) { 160243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.failed('Argument "target" is not a string value'); 160343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 160443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 160543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var f; 160643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen try { 160743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Find the function through a global evaluate. 16089a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com f = this.exec_state_.evaluateGlobal(target).value(); 160943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } catch (e) { 161043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.failed('Error: "' + %ToString(e) + 161143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen '" evaluating "' + target + '"'); 161243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 161343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 161443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_FUNCTION(f)) { 161543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.failed('"' + target + '" does not evaluate to a function'); 161643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 161743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 161843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 161943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Set function break point. 162043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_point_number = Debug.setBreakPoint(f, line, column, condition); 162165dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org } else if (type == 'handle') { 162265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // Find the object pointed by the specified handle. 162365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org var handle = parseInt(target, 10); 162465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org var mirror = LookupMirror(handle); 162565dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org if (!mirror) { 162665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org return response.failed('Object #' + handle + '# not found'); 162765dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org } 162865dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org if (!mirror.isFunction()) { 162965dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org return response.failed('Object #' + handle + '# is not a function'); 163065dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org } 163165dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org 163265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // Set function break point. 163365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org break_point_number = Debug.setBreakPoint(mirror.value(), 163465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org line, column, condition); 16357be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org } else if (type == 'script') { 163643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // set script break point. 16377be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org break_point_number = 163868ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org Debug.setScriptBreakPointByName(target, line, column, condition, 163968ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org groupId); 164028a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org } else if (type == 'scriptId') { 16417be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org break_point_number = 164268ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org Debug.setScriptBreakPointById(target, line, column, condition, groupId); 164328a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org } else if (type == 'scriptRegExp') { 1644ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org break_point_number = 1645ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org Debug.setScriptBreakPointByRegExp(target, line, column, condition, 1646ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org groupId); 1647ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else { 1648ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org response.failed('Illegal type "' + type + '"'); 1649ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org return; 165043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 165143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 165243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Set additional break point properties. 165343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var break_point = Debug.findBreakPoint(break_point_number); 165443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (ignoreCount) { 165543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Debug.changeBreakPointIgnoreCount(break_point_number, ignoreCount); 165643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 165743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!enabled) { 165843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Debug.disableBreakPoint(break_point_number); 165943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 166043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 166143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Add the break point number to the response. 166243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body = { type: type, 16631b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org breakpoint: break_point_number }; 166443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 166543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Add break point information to the response. 166643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (break_point instanceof ScriptBreakPoint) { 16677be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org if (break_point.type() == Debug.ScriptBreakPointType.ScriptId) { 16687be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org response.body.type = 'scriptId'; 16697be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org response.body.script_id = break_point.script_id(); 1670ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else if (break_point.type() == Debug.ScriptBreakPointType.ScriptName) { 16717be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org response.body.type = 'scriptName'; 16727be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org response.body.script_name = break_point.script_name(); 1673ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else if (break_point.type() == Debug.ScriptBreakPointType.ScriptRegExp) { 1674ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org response.body.type = 'scriptRegExp'; 1675ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org response.body.script_regexp = break_point.script_regexp_object().source; 1676ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else { 16771b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org throw new Error("Internal error: Unexpected breakpoint type: " + 16781b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org break_point.type()); 16797be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org } 168043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body.line = break_point.line(); 168143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body.column = break_point.column(); 168232d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org response.body.actual_locations = break_point.actual_locations(); 168343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 168443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body.type = 'function'; 168532d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org response.body.actual_locations = [break_point.actual_location]; 168643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 168743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 168843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 168943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 16901b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgDebugCommandProcessor.prototype.changeBreakPointRequest_ = function( 16911b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org request, response) { 169243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Check for legal request. 169343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!request.arguments) { 169443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.failed('Missing arguments'); 169543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 169643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 169743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 169843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Pull out arguments. 169943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var break_point = %ToNumber(request.arguments.breakpoint); 170043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var enabled = request.arguments.enabled; 170143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var condition = request.arguments.condition; 170243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var ignoreCount = request.arguments.ignoreCount; 170343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 170443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Check for legal arguments. 170543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!break_point) { 170643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.failed('Missing argument "breakpoint"'); 170743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 170843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 170943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 171043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Change enabled state if supplied. 171143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_UNDEFINED(enabled)) { 171243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (enabled) { 171343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Debug.enableBreakPoint(break_point); 171443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 171543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Debug.disableBreakPoint(break_point); 171643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 171743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 171843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 171943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Change condition if supplied 172043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_UNDEFINED(condition)) { 172143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Debug.changeBreakPointCondition(break_point, condition); 172243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 172343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 172443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Change ignore count if supplied 172543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_UNDEFINED(ignoreCount)) { 172643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Debug.changeBreakPointIgnoreCount(break_point, ignoreCount); 172743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 17281b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 172943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 173043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 17311b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgDebugCommandProcessor.prototype.clearBreakPointGroupRequest_ = function( 17321b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org request, response) { 173368ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org // Check for legal request. 173468ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org if (!request.arguments) { 173568ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org response.failed('Missing arguments'); 173668ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org return; 173768ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org } 173868ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org 173968ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org // Pull out arguments. 174068ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org var group_id = request.arguments.groupId; 174168ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org 174268ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org // Check for legal arguments. 174368ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org if (!group_id) { 174468ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org response.failed('Missing argument "groupId"'); 174568ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org return; 174668ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org } 1747c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 174868ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org var cleared_break_points = []; 174968ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org var new_script_break_points = []; 175068ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org for (var i = 0; i < script_break_points.length; i++) { 175168ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org var next_break_point = script_break_points[i]; 175268ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org if (next_break_point.groupId() == group_id) { 175368ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org cleared_break_points.push(next_break_point.number()); 175468ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org next_break_point.clear(); 175568ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org } else { 175668ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org new_script_break_points.push(next_break_point); 175768ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org } 175868ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org } 175968ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org script_break_points = new_script_break_points; 176068ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org 176168ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org // Add the cleared break point numbers to the response. 176268ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org response.body = { breakpoints: cleared_break_points }; 17631b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 176468ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org 176568ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org 17661b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgDebugCommandProcessor.prototype.clearBreakPointRequest_ = function( 17671b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org request, response) { 176843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Check for legal request. 176943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!request.arguments) { 177043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.failed('Missing arguments'); 177143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 177243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 177343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 177443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Pull out arguments. 177543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var break_point = %ToNumber(request.arguments.breakpoint); 177643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 177743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Check for legal arguments. 177843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!break_point) { 177943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.failed('Missing argument "breakpoint"'); 178043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 178143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 178243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 178343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Clear break point. 178443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Debug.clearBreakPoint(break_point); 178537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 178637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Add the cleared break point number to the response. 17871b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org response.body = { breakpoint: break_point }; 17881b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 178943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1790e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org 17911b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgDebugCommandProcessor.prototype.listBreakpointsRequest_ = function( 17921b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org request, response) { 1793dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org var array = []; 1794dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org for (var i = 0; i < script_break_points.length; i++) { 1795dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org var break_point = script_break_points[i]; 1796dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org 1797dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org var description = { 1798dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org number: break_point.number(), 1799dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org line: break_point.line(), 1800dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org column: break_point.column(), 1801dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org groupId: break_point.groupId(), 1802dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org hit_count: break_point.hit_count(), 1803dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org active: break_point.active(), 1804dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org condition: break_point.condition(), 180532d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org ignoreCount: break_point.ignoreCount(), 180632d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org actual_locations: break_point.actual_locations() 18071b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org }; 1808e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org 1809dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org if (break_point.type() == Debug.ScriptBreakPointType.ScriptId) { 1810dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org description.type = 'scriptId'; 1811dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org description.script_id = break_point.script_id(); 1812ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else if (break_point.type() == Debug.ScriptBreakPointType.ScriptName) { 1813dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org description.type = 'scriptName'; 1814dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org description.script_name = break_point.script_name(); 1815ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else if (break_point.type() == Debug.ScriptBreakPointType.ScriptRegExp) { 1816ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org description.type = 'scriptRegExp'; 1817ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org description.script_regexp = break_point.script_regexp_object().source; 1818ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else { 18191b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org throw new Error("Internal error: Unexpected breakpoint type: " + 18201b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org break_point.type()); 1821dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org } 1822dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org array.push(description); 1823dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org } 1824e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org 1825d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org response.body = { 1826d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org breakpoints: array, 1827d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org breakOnExceptions: Debug.isBreakOnException(), 1828d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org breakOnUncaughtExceptions: Debug.isBreakOnUncaughtException() 18291b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org }; 18301b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1831d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1832d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1833d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDebugCommandProcessor.prototype.disconnectRequest_ = 1834d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org function(request, response) { 1835d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.disableAllBreakPoints(); 1836d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.continueRequest_(request, response); 18371b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1838d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1839d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1840d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDebugCommandProcessor.prototype.setExceptionBreakRequest_ = 1841d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org function(request, response) { 1842d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Check for legal request. 1843d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (!request.arguments) { 1844d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org response.failed('Missing arguments'); 1845d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return; 1846d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1847d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1848d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Pull out and check the 'type' argument: 1849d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var type = request.arguments.type; 1850d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (!type) { 1851d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org response.failed('Missing argument "type"'); 1852d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return; 1853d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1854d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1855d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Initialize the default value of enable: 1856d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var enabled; 1857d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (type == 'all') { 1858d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org enabled = !Debug.isBreakOnException(); 1859d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (type == 'uncaught') { 1860d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org enabled = !Debug.isBreakOnUncaughtException(); 186128a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org } 1862d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1863d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Pull out and check the 'enabled' argument if present: 1864d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (!IS_UNDEFINED(request.arguments.enabled)) { 1865d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org enabled = request.arguments.enabled; 1866d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if ((enabled != true) && (enabled != false)) { 1867d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org response.failed('Illegal value for "enabled":"' + enabled + '"'); 1868d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1869d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1870d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1871d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Now set the exception break state: 1872d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (type == 'all') { 1873d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org %ChangeBreakOnException(Debug.ExceptionBreak.Caught, enabled); 1874d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (type == 'uncaught') { 1875d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org %ChangeBreakOnException(Debug.ExceptionBreak.Uncaught, enabled); 1876d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else { 1877d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org response.failed('Unknown "type":"' + type + '"'); 1878d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1879d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1880d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Add the cleared break point number to the response. 1881d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org response.body = { 'type': type, 'enabled': enabled }; 18821b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1883dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org 188443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 18851b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgDebugCommandProcessor.prototype.backtraceRequest_ = function( 18861b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org request, response) { 188743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Get the number of frames. 18889a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com var total_frames = this.exec_state_.frameCount(); 188943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 18908bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org // Create simple response if there are no frames. 18918bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org if (total_frames == 0) { 18928bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org response.body = { 18938bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org totalFrames: total_frames 18941b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org }; 18958bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org return; 18968bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org } 18978bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 189843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Default frame range to include in backtrace. 18991b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org var from_index = 0; 190043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var to_index = kDefaultBacktraceLength; 190143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 190243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Get the range from the arguments. 190343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (request.arguments) { 1904b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org if (request.arguments.fromFrame) { 1905b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org from_index = request.arguments.fromFrame; 1906b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } 1907b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org if (request.arguments.toFrame) { 1908b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org to_index = request.arguments.toFrame; 190943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 1910b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org if (request.arguments.bottom) { 1911b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org var tmp_index = total_frames - from_index; 19121b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org from_index = total_frames - to_index; 1913b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org to_index = tmp_index; 1914b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } 1915b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org if (from_index < 0 || to_index < 0) { 191643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return response.failed('Invalid frame number'); 191743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 191843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 191943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 192043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Adjust the index. 192143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen to_index = Math.min(total_frames, to_index); 192243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 192343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (to_index <= from_index) { 192443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var error = 'Invalid frame range'; 192543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return response.failed(error); 192643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 192743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 192843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Create the response body. 192943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var frames = []; 193043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = from_index; i < to_index; i++) { 19319a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com frames.push(this.exec_state_.frame(i)); 193243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 193343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body = { 193443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen fromFrame: from_index, 193543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen toFrame: to_index, 193643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen totalFrames: total_frames, 193743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen frames: frames 19381b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org }; 193943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 194043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 194143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 194243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebugCommandProcessor.prototype.frameRequest_ = function(request, response) { 194337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // No frames no source. 194437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (this.exec_state_.frameCount() == 0) { 194537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return response.failed('No frames'); 194637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 194737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 194843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // With no arguments just keep the selected frame. 1949ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (request.arguments) { 1950eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org var index = request.arguments.number; 1951ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (index < 0 || this.exec_state_.frameCount() <= index) { 1952ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return response.failed('Invalid frame number'); 1953ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 1954c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 195543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.exec_state_.setSelectedFrame(request.arguments.number); 195643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 19579a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com response.body = this.exec_state_.frame(); 195843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 195943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 196043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 196149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.orgDebugCommandProcessor.prototype.resolveFrameFromScopeDescription_ = 196249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org function(scope_description) { 19631b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org // Get the frame for which the scope or scopes are requested. 19641b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org // With no frameNumber argument use the currently selected frame. 196549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org if (scope_description && !IS_UNDEFINED(scope_description.frameNumber)) { 196649a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org frame_index = scope_description.frameNumber; 1967eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org if (frame_index < 0 || this.exec_state_.frameCount() <= frame_index) { 19681044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org throw new Error('Invalid frame number'); 1969eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 1970eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org return this.exec_state_.frame(frame_index); 1971eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } else { 1972eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org return this.exec_state_.frame(); 1973eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 19741b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1975eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 1976eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 19771044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org// Gets scope host object from request. It is either a function 19781044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org// ('functionHandle' argument must be specified) or a stack frame 19791044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org// ('frameNumber' may be specified and the current frame is taken by default). 198049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.orgDebugCommandProcessor.prototype.resolveScopeHolder_ = 198149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org function(scope_description) { 198249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org if (scope_description && "functionHandle" in scope_description) { 198349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org if (!IS_NUMBER(scope_description.functionHandle)) { 19841044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org throw new Error('Function handle must be a number'); 19851044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org } 198649a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var function_mirror = LookupMirror(scope_description.functionHandle); 19871044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org if (!function_mirror) { 19881044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org throw new Error('Failed to find function object by handle'); 19891044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org } 19901044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org if (!function_mirror.isFunction()) { 19911044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org throw new Error('Value of non-function type is found by handle'); 19921044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org } 19931044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org return function_mirror; 19941044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org } else { 19951044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org // No frames no scopes. 19961044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org if (this.exec_state_.frameCount() == 0) { 19971044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org throw new Error('No scopes'); 19981044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org } 19991044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org 20001044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org // Get the frame for which the scopes are requested. 200149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var frame = this.resolveFrameFromScopeDescription_(scope_description); 20021044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org return frame; 2003eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 20041044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org} 2005eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 2006c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 20071044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.orgDebugCommandProcessor.prototype.scopesRequest_ = function(request, response) { 200849a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var scope_holder = this.resolveScopeHolder_(request.arguments); 20091044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org 20101044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org // Fill all scopes for this frame or function. 20111044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org var total_scopes = scope_holder.scopeCount(); 2012eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org var scopes = []; 2013eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org for (var i = 0; i < total_scopes; i++) { 20141044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org scopes.push(scope_holder.scope(i)); 2015eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 2016eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org response.body = { 2017eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org fromScope: 0, 2018eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org toScope: total_scopes, 2019eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org totalScopes: total_scopes, 2020eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org scopes: scopes 20211b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org }; 2022eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org}; 2023eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 2024eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 2025eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.orgDebugCommandProcessor.prototype.scopeRequest_ = function(request, response) { 20261044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org // Get the frame or function for which the scope is requested. 202749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var scope_holder = this.resolveScopeHolder_(request.arguments); 2028eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 2029eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org // With no scope argument just return top scope. 2030eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org var scope_index = 0; 2031eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org if (request.arguments && !IS_UNDEFINED(request.arguments.number)) { 2032eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org scope_index = %ToNumber(request.arguments.number); 20331044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org if (scope_index < 0 || scope_holder.scopeCount() <= scope_index) { 2034eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org return response.failed('Invalid scope number'); 2035eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 2036eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 2037eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 20381044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org response.body = scope_holder.scope(scope_index); 2039eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org}; 2040eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 2041eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 204249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org// Reads value from protocol description. Description may be in form of type 204349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org// (for singletons), raw value (primitive types supported in JSON), 204449a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org// string value description plus type (for primitive values) or handle id. 204549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org// Returns raw value or throws exception. 204649a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.orgDebugCommandProcessor.resolveValue_ = function(value_description) { 204749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org if ("handle" in value_description) { 204849a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var value_mirror = LookupMirror(value_description.handle); 204949a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org if (!value_mirror) { 205049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org throw new Error("Failed to resolve value by handle, ' #" + 205149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org mapping.handle + "# not found"); 205249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } 205349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org return value_mirror.value(); 205449a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } else if ("stringDescription" in value_description) { 205549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org if (value_description.type == BOOLEAN_TYPE) { 205649a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org return Boolean(value_description.stringDescription); 205749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } else if (value_description.type == NUMBER_TYPE) { 205849a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org return Number(value_description.stringDescription); 205949a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } if (value_description.type == STRING_TYPE) { 206049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org return String(value_description.stringDescription); 206149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } else { 206249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org throw new Error("Unknown type"); 206349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } 206449a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } else if ("value" in value_description) { 206549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org return value_description.value; 206649a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } else if (value_description.type == UNDEFINED_TYPE) { 2067690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org return UNDEFINED; 206849a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } else if (value_description.type == NULL_TYPE) { 206949a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org return null; 207049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } else { 207149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org throw new Error("Failed to parse value description"); 207249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } 207349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org}; 207449a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 207549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 207649a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.orgDebugCommandProcessor.prototype.setVariableValueRequest_ = 207749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org function(request, response) { 207849a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org if (!request.arguments) { 207949a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org response.failed('Missing arguments'); 208049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org return; 208149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } 208249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 208349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org if (IS_UNDEFINED(request.arguments.name)) { 208449a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org response.failed('Missing variable name'); 208549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } 208649a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var variable_name = request.arguments.name; 208749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 208849a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var scope_description = request.arguments.scope; 208949a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 209049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org // Get the frame or function for which the scope is requested. 209149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var scope_holder = this.resolveScopeHolder_(scope_description); 209249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 209349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org if (IS_UNDEFINED(scope_description.number)) { 209449a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org response.failed('Missing scope number'); 209549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } 209649a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var scope_index = %ToNumber(scope_description.number); 209749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 209849a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var scope = scope_holder.scope(scope_index); 209949a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 210049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var new_value = 210149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org DebugCommandProcessor.resolveValue_(request.arguments.newValue); 210249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 210349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org scope.setVariableValue(variable_name, new_value); 210449a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 210549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var new_value_mirror = MakeMirror(new_value); 210649a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 210749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org response.body = { 210849a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org newValue: new_value_mirror 210949a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org }; 211049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org}; 211149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 211249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 211343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebugCommandProcessor.prototype.evaluateRequest_ = function(request, response) { 211443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!request.arguments) { 211543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return response.failed('Missing arguments'); 211643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 211743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 211843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Pull out arguments. 211943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var expression = request.arguments.expression; 212043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var frame = request.arguments.frame; 212143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var global = request.arguments.global; 2122bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund var disable_break = request.arguments.disable_break; 21235f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org var additional_context = request.arguments.additional_context; 2124bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund 2125bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund // The expression argument could be an integer so we convert it to a 2126bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund // string. 2127bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund try { 2128bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund expression = String(expression); 2129bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund } catch(e) { 2130bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund return response.failed('Failed to convert expression argument to string'); 2131bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund } 213243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 213343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Check for legal arguments. 213443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_UNDEFINED(frame) && global) { 213543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return response.failed('Arguments "frame" and "global" are exclusive'); 213643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 213728a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org 21385f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org var additional_context_object; 21395f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org if (additional_context) { 21405f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org additional_context_object = {}; 21415f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org for (var i = 0; i < additional_context.length; i++) { 21425f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org var mapping = additional_context[i]; 2143a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org 2144a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org if (!IS_STRING(mapping.name)) { 214528a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org return response.failed("Context element #" + i + 2146a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org " doesn't contain name:string property"); 21475f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org } 2148a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org 2149a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org var raw_value = DebugCommandProcessor.resolveValue_(mapping); 2150a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org additional_context_object[mapping.name] = raw_value; 21515f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org } 21525f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org } 215343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 215443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Global evaluate. 215543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (global) { 215646839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org // Evaluate in the native context. 21575f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org response.body = this.exec_state_.evaluateGlobal( 21585f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org expression, Boolean(disable_break), additional_context_object); 215943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 216043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 216143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2162bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund // Default value for disable_break is true. 2163bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund if (IS_UNDEFINED(disable_break)) { 2164bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund disable_break = true; 2165bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund } 2166bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund 2167381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org // No frames no evaluate in frame. 2168381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org if (this.exec_state_.frameCount() == 0) { 2169381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org return response.failed('No frames'); 2170381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org } 2171381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org 217243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Check whether a frame was specified. 217343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_UNDEFINED(frame)) { 217443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var frame_number = %ToNumber(frame); 21759a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com if (frame_number < 0 || frame_number >= this.exec_state_.frameCount()) { 217643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return response.failed('Invalid frame "' + frame + '"'); 217743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 217843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Evaluate in the specified frame. 21799a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com response.body = this.exec_state_.frame(frame_number).evaluate( 21805f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org expression, Boolean(disable_break), additional_context_object); 218143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 218243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 218343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Evaluate in the selected frame. 21849a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com response.body = this.exec_state_.frame().evaluate( 21855f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org expression, Boolean(disable_break), additional_context_object); 218643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 218743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 218843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 218943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 219043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2191ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgDebugCommandProcessor.prototype.lookupRequest_ = function(request, response) { 2192ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (!request.arguments) { 2193ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return response.failed('Missing arguments'); 2194ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 2195ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 2196ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org // Pull out arguments. 219765dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org var handles = request.arguments.handles; 2198ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 2199ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org // Check for legal arguments. 220065dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org if (IS_UNDEFINED(handles)) { 220165dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org return response.failed('Argument "handles" missing'); 2202ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 2203ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 2204b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org // Set 'includeSource' option for script lookup. 2205b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org if (!IS_UNDEFINED(request.arguments.includeSource)) { 2206b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org includeSource = %ToBoolean(request.arguments.includeSource); 2207b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org response.setOption('includeSource', includeSource); 2208b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } 2209c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 221065dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // Lookup handles. 221165dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org var mirrors = {}; 221265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org for (var i = 0; i < handles.length; i++) { 221365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org var handle = handles[i]; 221465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org var mirror = LookupMirror(handle); 221565dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org if (!mirror) { 221665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org return response.failed('Object #' + handle + '# not found'); 221765dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org } 221865dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org mirrors[handle] = mirror; 2219ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 222065dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org response.body = mirrors; 2221ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org}; 2222ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 2223ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 2224245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgDebugCommandProcessor.prototype.referencesRequest_ = 2225245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org function(request, response) { 2226245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (!request.arguments) { 2227245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return response.failed('Missing arguments'); 2228245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 2229245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 2230245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org // Pull out arguments. 2231245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org var type = request.arguments.type; 2232245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org var handle = request.arguments.handle; 2233245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 2234245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org // Check for legal arguments. 2235245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (IS_UNDEFINED(type)) { 2236245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return response.failed('Argument "type" missing'); 2237245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 2238245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (IS_UNDEFINED(handle)) { 2239245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return response.failed('Argument "handle" missing'); 2240245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 2241245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (type != 'referencedBy' && type != 'constructedBy') { 2242245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return response.failed('Invalid type "' + type + '"'); 2243245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 2244245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 2245245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org // Lookup handle and return objects with references the object. 2246245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org var mirror = LookupMirror(handle); 2247245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (mirror) { 2248245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (type == 'referencedBy') { 2249245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org response.body = mirror.referencedBy(); 2250245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } else { 2251245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org response.body = mirror.constructedBy(); 2252245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 2253245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } else { 2254245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return response.failed('Object #' + handle + '# not found'); 2255245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 2256245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org}; 2257245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 2258245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 225943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebugCommandProcessor.prototype.sourceRequest_ = function(request, response) { 226037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // No frames no source. 226137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (this.exec_state_.frameCount() == 0) { 226237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return response.failed('No source'); 226337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 226437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 226543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var from_line; 226643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var to_line; 22679a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com var frame = this.exec_state_.frame(); 226843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (request.arguments) { 226943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Pull out arguments. 227043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen from_line = request.arguments.fromLine; 227143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen to_line = request.arguments.toLine; 227243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 227343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_UNDEFINED(request.arguments.frame)) { 227443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var frame_number = %ToNumber(request.arguments.frame); 22759a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com if (frame_number < 0 || frame_number >= this.exec_state_.frameCount()) { 227643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return response.failed('Invalid frame "' + frame + '"'); 227743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 22789a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com frame = this.exec_state_.frame(frame_number); 227943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 228043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 228143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 228243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Get the script selected. 228343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var script = frame.func().script(); 228443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!script) { 228543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return response.failed('No source'); 228643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 228743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 228843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Get the source slice and fill it into the response. 228943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var slice = script.sourceSlice(from_line, to_line); 229043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!slice) { 229143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return response.failed('Invalid line interval'); 229243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 229343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body = {}; 229443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body.source = slice.sourceText(); 229543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body.fromLine = slice.from_line; 229643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body.toLine = slice.to_line; 229743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body.fromPosition = slice.from_position; 229843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body.toPosition = slice.to_position; 229943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body.totalLines = script.lineCount(); 230043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 230143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 230243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 230343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebugCommandProcessor.prototype.scriptsRequest_ = function(request, response) { 230443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var types = ScriptTypeFlag(Debug.ScriptType.Normal); 230541826e77311db718135ef6517b846933dfd275f3ager@chromium.org var includeSource = false; 2306b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org var idsToInclude = null; 230743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (request.arguments) { 230843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Pull out arguments. 230943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_UNDEFINED(request.arguments.types)) { 231043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen types = %ToNumber(request.arguments.types); 231143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (isNaN(types) || types < 0) { 23121b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org return response.failed('Invalid types "' + 23131b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org request.arguments.types + '"'); 231443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 231543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 231625156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 231741826e77311db718135ef6517b846933dfd275f3ager@chromium.org if (!IS_UNDEFINED(request.arguments.includeSource)) { 231841826e77311db718135ef6517b846933dfd275f3ager@chromium.org includeSource = %ToBoolean(request.arguments.includeSource); 23199085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org response.setOption('includeSource', includeSource); 232041826e77311db718135ef6517b846933dfd275f3ager@chromium.org } 232125156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 2322b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org if (IS_ARRAY(request.arguments.ids)) { 2323b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org idsToInclude = {}; 2324b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org var ids = request.arguments.ids; 2325b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org for (var i = 0; i < ids.length; i++) { 2326b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org idsToInclude[ids[i]] = true; 2327b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } 2328b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } 2329d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 2330d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var filterStr = null; 2331d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var filterNum = null; 2332d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (!IS_UNDEFINED(request.arguments.filter)) { 2333d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var num = %ToNumber(request.arguments.filter); 2334d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (!isNaN(num)) { 2335d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org filterNum = num; 2336d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 2337d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org filterStr = request.arguments.filter; 2338d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 233943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 234043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 234143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Collect all scripts in the heap. 234231e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager var scripts = %DebugGetLoadedScripts(); 234343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 234443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body = []; 234543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 234643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = 0; i < scripts.length; i++) { 2347b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org if (idsToInclude && !idsToInclude[scripts[i].id]) { 2348b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org continue; 2349b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } 2350d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (filterStr || filterNum) { 2351d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var script = scripts[i]; 2352d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var found = false; 2353d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (filterNum && !found) { 2354d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (script.id && script.id === filterNum) { 2355d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org found = true; 2356d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 2357d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 2358d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (filterStr && !found) { 2359d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (script.name && script.name.indexOf(filterStr) >= 0) { 2360d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org found = true; 2361d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 2362d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 2363d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (!found) continue; 2364d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 236543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (types & ScriptTypeFlag(scripts[i].type)) { 23669085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org response.body.push(MakeMirror(scripts[i])); 236743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 236843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 236943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 237043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 237143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2372bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgDebugCommandProcessor.prototype.threadsRequest_ = function(request, response) { 2373bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org // Get the number of threads. 2374bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org var total_threads = this.exec_state_.threadCount(); 2375bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 2376bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org // Get information for all threads. 2377bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org var threads = []; 2378bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org for (var i = 0; i < total_threads; i++) { 2379bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org var details = %GetThreadDetails(this.exec_state_.break_id, i); 2380bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org var thread_info = { current: details[0], 2381bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org id: details[1] 23821b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org }; 2383bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org threads.push(thread_info); 2384bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org } 2385bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 2386bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org // Create the response body. 2387bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org response.body = { 2388bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org totalThreads: total_threads, 2389bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org threads: threads 23901b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org }; 2391bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org}; 2392bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 2393bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 23949d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comDebugCommandProcessor.prototype.suspendRequest_ = function(request, response) { 23959d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com response.running = false; 23969d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com}; 23979d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 23989d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 23993811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgDebugCommandProcessor.prototype.versionRequest_ = function(request, response) { 24003811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org response.body = { 24013811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org V8Version: %GetV8Version() 24021b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org }; 24033811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org}; 24043811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 24053811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 24061b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgDebugCommandProcessor.prototype.changeLiveRequest_ = function( 24071b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org request, response) { 2408ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org if (!request.arguments) { 2409ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org return response.failed('Missing arguments'); 2410ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org } 2411ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org var script_id = request.arguments.script_id; 241269ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org var preview_only = !!request.arguments.preview_only; 241342841968c3c92e3b07bcd67e79eb6ba3f83032c1vegorov@chromium.org 2414ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org var scripts = %DebugGetLoadedScripts(); 2415ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 2416ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org var the_script = null; 2417ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org for (var i = 0; i < scripts.length; i++) { 2418ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org if (scripts[i].id == script_id) { 2419ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org the_script = scripts[i]; 2420ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org } 2421ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org } 2422ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org if (!the_script) { 2423ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org response.failed('Script not found'); 2424ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org return; 2425ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org } 242625156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 2427ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org var change_log = new Array(); 2428e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org 24294111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org if (!IS_STRING(request.arguments.new_source)) { 24304111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org throw "new_source argument expected"; 243125156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org } 243225156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 24334111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org var new_source = request.arguments.new_source; 243442841968c3c92e3b07bcd67e79eb6ba3f83032c1vegorov@chromium.org 243549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var result_description; 243649a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org try { 243749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org result_description = Debug.LiveEdit.SetScriptSource(the_script, 243849a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org new_source, preview_only, change_log); 243949a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } catch (e) { 244049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org if (e instanceof Debug.LiveEdit.Failure && "details" in e) { 244149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org response.failed(e.message, e.details); 244249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org return; 244349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } 244449a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org throw e; 244549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } 244669ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org response.body = {change_log: change_log, result: result_description}; 244742841968c3c92e3b07bcd67e79eb6ba3f83032c1vegorov@chromium.org 2448e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org if (!preview_only && !this.running_ && result_description.stack_modified) { 2449e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org response.body.stepin_recommended = true; 2450e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org } 2451ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org}; 2452ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 2453ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 24545a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.orgDebugCommandProcessor.prototype.restartFrameRequest_ = function( 24555a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org request, response) { 24565a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org if (!request.arguments) { 24575a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org return response.failed('Missing arguments'); 24585a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org } 24595a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org var frame = request.arguments.frame; 24605a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org 24615a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org // No frames to evaluate in frame. 24625a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org if (this.exec_state_.frameCount() == 0) { 24635a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org return response.failed('No frames'); 24645a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org } 24655a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org 24665a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org var frame_mirror; 24675a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org // Check whether a frame was specified. 24685a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org if (!IS_UNDEFINED(frame)) { 24695a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org var frame_number = %ToNumber(frame); 24705a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org if (frame_number < 0 || frame_number >= this.exec_state_.frameCount()) { 24715a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org return response.failed('Invalid frame "' + frame + '"'); 24725a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org } 24735a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org // Restart specified frame. 24745a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org frame_mirror = this.exec_state_.frame(frame_number); 24755a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org } else { 24765a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org // Restart selected frame. 24775a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org frame_mirror = this.exec_state_.frame(); 24785a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org } 24795a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org 24805a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org var result_description = Debug.LiveEdit.RestartFrame(frame_mirror); 24815a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org response.body = {result: result_description}; 24825a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org}; 24835a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org 24845a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org 2485e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.orgDebugCommandProcessor.prototype.debuggerFlagsRequest_ = function(request, 2486e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org response) { 2487e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org // Check for legal request. 2488e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org if (!request.arguments) { 2489e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org response.failed('Missing arguments'); 2490e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org return; 2491e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org } 2492e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org 2493e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org // Pull out arguments. 2494e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org var flags = request.arguments.flags; 2495e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org 2496e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org response.body = { flags: [] }; 2497e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org if (!IS_UNDEFINED(flags)) { 2498e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org for (var i = 0; i < flags.length; i++) { 2499e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org var name = flags[i].name; 2500e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org var debugger_flag = debugger_flags[name]; 2501e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org if (!debugger_flag) { 2502e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org continue; 2503e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org } 2504e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org if ('value' in flags[i]) { 2505e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org debugger_flag.setValue(flags[i].value); 2506e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org } 2507e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org response.body.flags.push({ name: name, value: debugger_flag.getValue() }); 2508e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org } 2509e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org } else { 2510e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org for (var name in debugger_flags) { 2511e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org var value = debugger_flags[name].getValue(); 2512e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org response.body.flags.push({ name: name, value: value }); 2513e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org } 2514e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org } 25151b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 2516e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org 2517e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org 2518d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDebugCommandProcessor.prototype.v8FlagsRequest_ = function(request, response) { 2519d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var flags = request.arguments.flags; 2520d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (!flags) flags = ''; 2521d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org %SetFlags(flags); 2522d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org}; 2523d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 2524d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 2525d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDebugCommandProcessor.prototype.gcRequest_ = function(request, response) { 2526d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var type = request.arguments.type; 2527d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (!type) type = 'all'; 2528d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 2529d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var before = %GetHeapUsage(); 2530d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org %CollectGarbage(type); 2531d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var after = %GetHeapUsage(); 2532d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 2533d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org response.body = { "before": before, "after": after }; 2534d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org}; 2535d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 2536d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 2537245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org// Check whether the previously processed command caused the VM to become 2538245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org// running. 2539245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgDebugCommandProcessor.prototype.isRunning = function() { 2540245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return this.running_; 25411b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 254243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 254343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 254443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebugCommandProcessor.prototype.systemBreak = function(cmd, args) { 254531e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager return %SystemBreak(); 254643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 254743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 254843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 254943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction NumberToHex8Str(n) { 255043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var r = ""; 255143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = 0; i < 8; ++i) { 255243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var c = hexCharArray[n & 0x0F]; // hexCharArray is defined in uri.js 255343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen r = c + r; 255443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen n = n >>> 4; 255543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 255643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return r; 25571b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org} 255843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 255943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 256043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 2561b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * Convert an Object to its debugger protocol representation. The representation 2562b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * may be serilized to a JSON object using JSON.stringify(). 2563b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * This implementation simply runs through all string property names, converts 2564b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * each property value to a protocol value and adds the property to the result 2565b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * object. For type "object" the function will be called recursively. Note that 2566b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * circular structures will cause infinite recursion. 2567b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * @param {Object} object The object to format as protocol object. 25683291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org * @param {MirrorSerializer} mirror_serializer The serializer to use if any 25693291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org * mirror objects are encountered. 2570b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * @return {Object} Protocol object value. 257143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 2572b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.orgfunction ObjectToProtocolObject_(object, mirror_serializer) { 2573b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org var content = {}; 257443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var key in object) { 257543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Only consider string keys. 257643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (typeof key == 'string') { 257743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Format the value based on its type. 2578b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org var property_value_json = ValueToProtocolValue_(object[key], 2579b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org mirror_serializer); 258043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Add the property if relevant. 2581b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org if (!IS_UNDEFINED(property_value_json)) { 2582b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org content[key] = property_value_json; 258343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 258443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 258543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 258625156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 2587b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org return content; 258841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 258943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2590b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 259143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 2592b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * Convert an array to its debugger protocol representation. It will convert 2593b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * each array element to a protocol value. 2594b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * @param {Array} array The array to format as protocol array. 25953291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org * @param {MirrorSerializer} mirror_serializer The serializer to use if any 25963291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org * mirror objects are encountered. 2597b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * @return {Array} Protocol array value. 259843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 2599b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.orgfunction ArrayToProtocolArray_(array, mirror_serializer) { 2600b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org var json = []; 260143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = 0; i < array.length; i++) { 2602b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json.push(ValueToProtocolValue_(array[i], mirror_serializer)); 2603b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } 2604b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org return json; 2605b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org} 2606b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 2607b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 2608b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org/** 260925156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org * Convert a value to its debugger protocol representation. 2610b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * @param {*} value The value to format as protocol value. 2611b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * @param {MirrorSerializer} mirror_serializer The serializer to use if any 2612b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * mirror objects are encountered. 2613b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * @return {*} Protocol value. 2614b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org */ 2615b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.orgfunction ValueToProtocolValue_(value, mirror_serializer) { 2616b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org // Format the value based on its type. 2617b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org var json; 2618b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org switch (typeof value) { 2619b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org case 'object': 2620b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org if (value instanceof Mirror) { 2621b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json = mirror_serializer.serializeValue(value); 2622b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } else if (IS_ARRAY(value)){ 2623b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json = ArrayToProtocolArray_(value, mirror_serializer); 2624b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } else { 2625b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json = ObjectToProtocolObject_(value, mirror_serializer); 2626b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } 2627b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org break; 2628b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 2629b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org case 'boolean': 2630b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org case 'string': 2631b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org case 'number': 2632b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json = value; 26331b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org break; 2634b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 2635b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org default: 2636b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json = null; 263743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 263843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return json; 263941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 264049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 264149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.orgDebug.TestApi = { 264249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org CommandProcessorResolveValue: DebugCommandProcessor.resolveValue_ 264349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org}; 2644