1967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org// Copyright 2012 the V8 project authors. All rights reserved. 23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// Use of this source code is governed by a BSD-style license that can be 33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// found in the LICENSE file. 443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Default number of frames to include in the response to backtrace request. 6f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgvar kDefaultBacktraceLength = 10; 743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 8f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgvar Debug = {}; 943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Regular expression to skip "crud" at the beginning of a source line which is 1143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// not really code. Currently the regular expression matches whitespace and 1243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// comments. 13f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgvar sourceLineBeginningSkip = /^(?:\s*(?:\/\*.*?\*\/)*)*/; 1443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Debug events which can occour in the V8 JavaScript engine. These originate 1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// from the API include file debug.h. 1743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.DebugEvent = { Break: 1, 1843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Exception: 2, 1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen NewFunction: 3, 2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen BeforeCompile: 4, 2171affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org AfterCompile: 5, 225de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org CompileError: 6, 23d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org PromiseEvent: 7, 245fc1eed70f85bd1e9d0833742945798d6ef49cf0machenbach@chromium.org AsyncTaskEvent: 8, 255fc1eed70f85bd1e9d0833742945798d6ef49cf0machenbach@chromium.org BreakForCommand: 9 }; 2643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Types of exceptions that can be broken upon. 28c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.orgDebug.ExceptionBreak = { Caught : 0, 2943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Uncaught: 1 }; 3043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// The different types of steps. 3243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.StepAction = { StepOut: 0, 3343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen StepNext: 1, 3443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen StepIn: 2, 3543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen StepMin: 3, 3643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen StepInMin: 4 }; 3743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// The different types of scripts matching enum ScriptType in objects.h. 3943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.ScriptType = { Native: 0, 4043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Extension: 1, 4143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Normal: 2 }; 4243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 43e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org// The different types of script compilations matching enum 44e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org// Script::CompilationType in objects.h. 45e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.orgDebug.ScriptCompilationType = { Host: 0, 46e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org Eval: 1, 47e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org JSON: 2 }; 48e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org 497be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// The different script break point types. 507be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgDebug.ScriptBreakPointType = { ScriptId: 0, 51ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org ScriptName: 1, 52ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org ScriptRegExp: 2 }; 537be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 5493a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org// The different types of breakpoint position alignments. 5593a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org// Must match BreakPositionAlignment in debug.h. 5693a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.orgDebug.BreakPositionAlignment = { 5793a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org Statement: 0, 5893a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org BreakPosition: 1 5993a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org}; 6093a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org 6143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction ScriptTypeFlag(type) { 6243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return (1 << type); 6343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 6443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Globals. 6643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvar next_response_seq = 0; 6743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvar next_break_point_number = 1; 6843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvar break_points = []; 6943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvar script_break_points = []; 70e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.orgvar debugger_flags = { 71e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org breakPointsActive: { 72e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org value: true, 73e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org getValue: function() { return this.value; }, 74e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org setValue: function(value) { 75e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org this.value = !!value; 76e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org %SetDisableBreak(!this.value); 77e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org } 78c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org }, 79c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org breakOnCaughtException: { 80c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org getValue: function() { return Debug.isBreakOnException(); }, 81c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org setValue: function(value) { 82c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org if (value) { 83c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org Debug.setBreakOnException(); 84c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org } else { 85c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org Debug.clearBreakOnException(); 86c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org } 87c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org } 88c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org }, 89c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org breakOnUncaughtException: { 90c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org getValue: function() { return Debug.isBreakOnUncaughtException(); }, 91c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org setValue: function(value) { 92c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org if (value) { 93c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org Debug.setBreakOnUncaughtException(); 94c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org } else { 95c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org Debug.clearBreakOnUncaughtException(); 96c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org } 97c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org } 98c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org }, 99e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org}; 10043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 10143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 10243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Create a new break point object and add it to the list of break points. 103c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.orgfunction MakeBreakPoint(source_position, opt_script_break_point) { 104c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org var break_point = new BreakPoint(source_position, opt_script_break_point); 10543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_points.push(break_point); 10643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return break_point; 10741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 10843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 10943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 11043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Object representing a break point. 11143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// NOTE: This object does not have a reference to the function having break 11243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// point as this would cause function not to be garbage collected when it is 11343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// not used any more. We do not want break points to keep functions alive. 114c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.orgfunction BreakPoint(source_position, opt_script_break_point) { 11543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.source_position_ = source_position; 11643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (opt_script_break_point) { 11743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.script_break_point_ = opt_script_break_point; 11843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 11943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.number_ = next_break_point_number++; 12043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 12143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.hit_count_ = 0; 12243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.active_ = true; 12343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.condition_ = null; 12443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.ignoreCount_ = 0; 12541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 12643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.number = function() { 12943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.number_; 13043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 13143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 13243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 13343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.func = function() { 13443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.func_; 13543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 13643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 13743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 13843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.source_position = function() { 13943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.source_position_; 14043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 14143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 14243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 14343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.hit_count = function() { 14443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.hit_count_; 14543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 14643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 14743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 14843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.active = function() { 14943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (this.script_break_point()) { 15043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.script_break_point().active(); 15143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 15243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.active_; 15343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 15443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 15543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 15643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.condition = function() { 15743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (this.script_break_point() && this.script_break_point().condition()) { 15843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.script_break_point().condition(); 15943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 16043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.condition_; 16143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 16243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 16343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 16443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.ignoreCount = function() { 16543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.ignoreCount_; 16643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 16743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 16843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 16943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.script_break_point = function() { 17043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.script_break_point_; 17143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 17243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 17343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 17443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.enable = function() { 17543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.active_ = true; 17643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 17743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 17843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 17943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.disable = function() { 18043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.active_ = false; 18143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 18243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 18343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 18443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.setCondition = function(condition) { 18543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.condition_ = condition; 18643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 18743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 18843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 18943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.setIgnoreCount = function(ignoreCount) { 19043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.ignoreCount_ = ignoreCount; 19143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 19243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 19343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 19443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakPoint.prototype.isTriggered = function(exec_state) { 19543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Break point not active - not triggered. 19643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!this.active()) return false; 19743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 19843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Check for conditional break point. 19943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (this.condition()) { 20043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // If break point has condition try to evaluate it in the top frame. 20143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen try { 2029a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com var mirror = exec_state.frame(0).evaluate(this.condition()); 20343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // If no sensible mirror or non true value break point not triggered. 20443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!(mirror instanceof ValueMirror) || !%ToBoolean(mirror.value_)) { 20543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return false; 20643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 20743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } catch (e) { 20843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Exception evaluating condition counts as not triggered. 20943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return false; 21043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 21143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 21243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 21343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Update the hit count. 21443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.hit_count_++; 21543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (this.script_break_point_) { 21643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.script_break_point_.hit_count_++; 21743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 21843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 21943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // If the break point has an ignore count it is not triggered. 22043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (this.ignoreCount_ > 0) { 22143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.ignoreCount_--; 22243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return false; 22343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 22443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 22543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Break point triggered. 22643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return true; 22743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 22843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 22943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 23043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Function called from the runtime when a break point is hit. Returns true if 23143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// the break point is triggered and supposed to break execution. 23243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction IsBreakPointTriggered(break_id, break_point) { 23343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return break_point.isTriggered(MakeExecutionState(break_id)); 23441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 23543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 23643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 23743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Object representing a script break point. The script is referenced by its 2387be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// script name or script id and the break point is represented as line and 2397be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// column. 24068ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.orgfunction ScriptBreakPoint(type, script_id_or_name, opt_line, opt_column, 24193a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org opt_groupId, opt_position_alignment) { 2427be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org this.type_ = type; 2437be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org if (type == Debug.ScriptBreakPointType.ScriptId) { 2447be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org this.script_id_ = script_id_or_name; 245ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else if (type == Debug.ScriptBreakPointType.ScriptName) { 2467be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org this.script_name_ = script_id_or_name; 247ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else if (type == Debug.ScriptBreakPointType.ScriptRegExp) { 248ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org this.script_regexp_object_ = new RegExp(script_id_or_name); 249ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else { 250ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org throw new Error("Unexpected breakpoint type " + type); 2517be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org } 25243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.line_ = opt_line || 0; 25343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.column_ = opt_column; 25468ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org this.groupId_ = opt_groupId; 25593a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org this.position_alignment_ = IS_UNDEFINED(opt_position_alignment) 25693a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org ? Debug.BreakPositionAlignment.Statement : opt_position_alignment; 25743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.hit_count_ = 0; 25843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.active_ = true; 25943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.condition_ = null; 26043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.ignoreCount_ = 0; 26132d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org this.break_points_ = []; 26241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 26343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 26443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2654111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org//Creates a clone of script breakpoint that is linked to another script. 2664111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.orgScriptBreakPoint.prototype.cloneForOtherScript = function (other_script) { 2674111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org var copy = new ScriptBreakPoint(Debug.ScriptBreakPointType.ScriptId, 26893a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org other_script.id, this.line_, this.column_, this.groupId_, 26993a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org this.position_alignment_); 2704111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org copy.number_ = next_break_point_number++; 2714111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org script_break_points.push(copy); 272e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org 2734111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org copy.hit_count_ = this.hit_count_; 2744111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org copy.active_ = this.active_; 2754111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org copy.condition_ = this.condition_; 2764111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org copy.ignoreCount_ = this.ignoreCount_; 2774111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org return copy; 2781b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 2794111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org 2804111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org 28143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.number = function() { 28243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.number_; 28343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 28443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 28543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 28668ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.orgScriptBreakPoint.prototype.groupId = function() { 28768ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org return this.groupId_; 28868ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org}; 28968ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org 29068ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org 2917be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgScriptBreakPoint.prototype.type = function() { 2927be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org return this.type_; 2937be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org}; 2947be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 2957be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 2967be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgScriptBreakPoint.prototype.script_id = function() { 2977be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org return this.script_id_; 2987be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org}; 2997be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 3007be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 30143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.script_name = function() { 30243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.script_name_; 30343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 30443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 30543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 306ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.orgScriptBreakPoint.prototype.script_regexp_object = function() { 307ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org return this.script_regexp_object_; 308ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org}; 309ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org 310ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org 31143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.line = function() { 31243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.line_; 31343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 31443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 31543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 31643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.column = function() { 31743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.column_; 31843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 31943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 32043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 32132d961d4454609ab4251a760fc46b19f661da90clrn@chromium.orgScriptBreakPoint.prototype.actual_locations = function() { 32232d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org var locations = []; 32332d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org for (var i = 0; i < this.break_points_.length; i++) { 32432d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org locations.push(this.break_points_[i].actual_location); 32532d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org } 32632d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org return locations; 3271b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 32832d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org 32932d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org 3304111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.orgScriptBreakPoint.prototype.update_positions = function(line, column) { 3314111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org this.line_ = line; 3324111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org this.column_ = column; 3331b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 3344111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org 3354111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org 33643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.hit_count = function() { 33743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.hit_count_; 33843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 33943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 34043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 34143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.active = function() { 34243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.active_; 34343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 34443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 34543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 34643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.condition = function() { 34743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.condition_; 34843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 34943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 35043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 35143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.ignoreCount = function() { 35243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.ignoreCount_; 35343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 35443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 35543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 35643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.enable = function() { 35743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.active_ = true; 35843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 35943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 36043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 36143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.disable = function() { 36243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.active_ = false; 36343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 36443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 36543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 36643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.setCondition = function(condition) { 36743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.condition_ = condition; 36843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 36943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 37043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 37143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.setIgnoreCount = function(ignoreCount) { 37243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.ignoreCount_ = ignoreCount; 37343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 37443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Set ignore count on all break points created from this script break point. 37532d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org for (var i = 0; i < this.break_points_.length; i++) { 37632d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org this.break_points_[i].setIgnoreCount(ignoreCount); 37743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 37843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 37943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 38043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 38143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Check whether a script matches this script break point. Currently this is 38243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// only based on script name. 38343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.matchesScript = function(script) { 3847be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org if (this.type_ == Debug.ScriptBreakPointType.ScriptId) { 3857be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org return this.script_id_ == script.id; 386ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else { 387ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org // We might want to account columns here as well. 388ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org if (!(script.line_offset <= this.line_ && 389ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org this.line_ < script.line_offset + script.lineCount())) { 390ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org return false; 391ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } 392ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org if (this.type_ == Debug.ScriptBreakPointType.ScriptName) { 393ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org return this.script_name_ == script.nameOrSourceURL(); 394ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else if (this.type_ == Debug.ScriptBreakPointType.ScriptRegExp) { 395ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org return this.script_regexp_object_.test(script.nameOrSourceURL()); 39628a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org } else { 397ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org throw new Error("Unexpected breakpoint type " + this.type_); 398ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } 3997be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org } 40043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 40143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 40243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 40343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Set the script break point in a script. 40443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.set = function (script) { 40543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var column = this.column(); 40643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var line = this.line(); 40743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // If the column is undefined the break is on the line. To help locate the 40843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // first piece of breakable code on the line try to find the column on the 40943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // line which contains some source. 41043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (IS_UNDEFINED(column)) { 41143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var source_line = script.sourceLine(this.line()); 41243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 41343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Allocate array for caching the columns where the actual source starts. 41443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!script.sourceColumnStart_) { 41543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script.sourceColumnStart_ = new Array(script.lineCount()); 41643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 417c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 41843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Fill cache if needed and get column where the actual source starts. 41943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (IS_UNDEFINED(script.sourceColumnStart_[line])) { 42043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script.sourceColumnStart_[line] = 42143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen source_line.match(sourceLineBeginningSkip)[0].length; 42243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 42343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen column = script.sourceColumnStart_[line]; 42443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 42543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 42643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Convert the line and column into an absolute position within the script. 42732d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org var position = Debug.findScriptSourcePosition(script, this.line(), column); 428c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 4298bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org // If the position is not found in the script (the script might be shorter 4308bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org // than it used to be) just ignore it. 431690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org if (IS_NULL(position)) return; 432c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 43343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Create a break point object and set the break point. 434c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org break_point = MakeBreakPoint(position, this); 43543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_point.setIgnoreCount(this.ignoreCount()); 43693a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org var actual_position = %SetScriptBreakPoint(script, position, 43793a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org this.position_alignment_, 43893a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org break_point); 43932d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org if (IS_UNDEFINED(actual_position)) { 44032d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org actual_position = position; 4415ad5acef6bd4ebc785f946d8bcc2a88b1e031827ricow@chromium.org } 44232d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org var actual_location = script.locationFromPosition(actual_position, true); 44332d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org break_point.actual_location = { line: actual_location.line, 444ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org column: actual_location.column, 445ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org script_id: script.id }; 44632d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org this.break_points_.push(break_point); 44743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return break_point; 44843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 44943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 45043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 45143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Clear all the break points created from this script break point 45243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenScriptBreakPoint.prototype.clear = function () { 45343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var remaining_break_points = []; 45443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = 0; i < break_points.length; i++) { 45543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (break_points[i].script_break_point() && 45643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_points[i].script_break_point() === this) { 45743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen %ClearBreakPoint(break_points[i]); 45843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 45943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen remaining_break_points.push(break_points[i]); 46043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 46143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 46243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_points = remaining_break_points; 46332d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org this.break_points_ = []; 46443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 46543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 46643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 46743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Function called from runtime when a new script is compiled to set any script 46843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// break points set in this script. 46943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction UpdateScriptBreakPoints(script) { 47043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = 0; i < script_break_points.length; i++) { 4711b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org var break_point = script_break_points[i]; 472967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org if ((break_point.type() == Debug.ScriptBreakPointType.ScriptName || 473967e270a034432457500dbf950d2c4951a929e52ulan@chromium.org break_point.type() == Debug.ScriptBreakPointType.ScriptRegExp) && 4741b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org break_point.matchesScript(script)) { 4751b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org break_point.set(script); 47643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 47743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 47841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 47943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 48043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4814111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.orgfunction GetScriptBreakPoints(script) { 4824111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org var result = []; 4834111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org for (var i = 0; i < script_break_points.length; i++) { 4844111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org if (script_break_points[i].matchesScript(script)) { 4854111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org result.push(script_break_points[i]); 4864111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org } 4874111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org } 4884111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org return result; 4894111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org} 4904111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org 4914111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org 492245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgDebug.setListener = function(listener, opt_data) { 493245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (!IS_FUNCTION(listener) && !IS_UNDEFINED(listener) && !IS_NULL(listener)) { 494245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org throw new Error('Parameters have wrong types.'); 495245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 496245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org %SetDebugEventListener(listener, opt_data); 49743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 49843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 49943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5009a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comDebug.breakExecution = function(f) { 50131e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager %Break(); 50243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 50343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 50493a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.orgDebug.breakLocations = function(f, opt_position_aligment) { 50543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.'); 50693a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org var position_aligment = IS_UNDEFINED(opt_position_aligment) 50793a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org ? Debug.BreakPositionAlignment.Statement : opt_position_aligment; 50893a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org return %GetBreakLocations(f, position_aligment); 50943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 51043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 51143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Returns a Script object. If the parameter is a function the return value 51243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// is the script in which the function is defined. If the parameter is a string 51343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// the return value is the script for which the script name has that string 514cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager// value. If it is a regexp and there is a unique script whose name matches 515cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager// we return that, otherwise undefined. 51643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.findScript = function(func_or_script_name) { 51743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (IS_FUNCTION(func_or_script_name)) { 51843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return %FunctionGetScript(func_or_script_name); 519cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager } else if (IS_REGEXP(func_or_script_name)) { 520cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager var scripts = Debug.scripts(); 521cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager var last_result = null; 522cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager var result_count = 0; 523cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager for (var i in scripts) { 524cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager var script = scripts[i]; 525cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager if (func_or_script_name.test(script.name)) { 526cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager last_result = script; 527cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager result_count++; 528cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager } 529cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager } 530cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager // Return the unique script matching the regexp. If there are more 531cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager // than one we don't return a value since there is no good way to 532cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager // decide which one to return. Returning a "random" one, say the 533cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager // first, would introduce nondeterminism (or something close to it) 534cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager // because the order is the heap iteration order. 535cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager if (result_count == 1) { 536cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager return last_result; 537cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager } else { 538cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager return undefined; 539cbaa060d2827a6c7aab497845a1fe6ae6f2dfab4mads.s.ager } 54043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 54143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return %GetScript(func_or_script_name); 54243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 54343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 54443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 54543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Returns the script source. If the parameter is a function the return value 54643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// is the script source for the script in which the function is defined. If the 54743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// parameter is a string the return value is the script for which the script 54843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// name has that string value. 54943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.scriptSource = function(func_or_script_name) { 55043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.findScript(func_or_script_name).source; 55143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 55243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 55343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.source = function(f) { 55443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.'); 55543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return %FunctionGetSourceCode(f); 55643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 55743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 55818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgDebug.disassemble = function(f) { 55943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.'); 56018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return %DebugDisassembleFunction(f); 56118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org}; 56218ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 56318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.orgDebug.disassembleConstructor = function(f) { 56418ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.'); 56518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return %DebugDisassembleConstructor(f); 56643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 56743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 568357bf65ed5309ac3a2c4bf20b6ce7770488787c2ager@chromium.orgDebug.ExecuteInDebugContext = function(f, without_debugger) { 569357bf65ed5309ac3a2c4bf20b6ce7770488787c2ager@chromium.org if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.'); 570357bf65ed5309ac3a2c4bf20b6ce7770488787c2ager@chromium.org return %ExecuteInDebugContext(f, !!without_debugger); 571357bf65ed5309ac3a2c4bf20b6ce7770488787c2ager@chromium.org}; 572357bf65ed5309ac3a2c4bf20b6ce7770488787c2ager@chromium.org 57343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.sourcePosition = function(f) { 57443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.'); 57543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return %FunctionGetScriptSourcePosition(f); 57643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 57743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5787be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 5797be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgDebug.findFunctionSourceLocation = function(func, opt_line, opt_column) { 58043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var script = %FunctionGetScript(func); 58143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var script_offset = %FunctionGetScriptSourcePosition(func); 5827be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org return script.locationFromLine(opt_line, opt_column, script_offset); 5831b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 58443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 58543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 58643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Returns the character position in a script based on a line number and an 58743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// optional position within that line. 58843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.findScriptSourcePosition = function(script, opt_line, opt_column) { 589c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org var location = script.locationFromLine(opt_line, opt_column); 5908bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org return location ? location.position : null; 5911b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 59243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 59343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 59443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.findBreakPoint = function(break_point_number, remove) { 59543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var break_point; 59643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = 0; i < break_points.length; i++) { 59743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (break_points[i].number() == break_point_number) { 59843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_point = break_points[i]; 59943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Remove the break point from the list if requested. 60043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (remove) { 60143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_points.splice(i, 1); 60243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 60343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break; 60443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 60543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 60643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (break_point) { 60743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return break_point; 60843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 60943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.findScriptBreakPoint(break_point_number, remove); 61043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 61143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 61243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 61332d961d4454609ab4251a760fc46b19f661da90clrn@chromium.orgDebug.findBreakPointActualLocations = function(break_point_number) { 61432d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org for (var i = 0; i < script_break_points.length; i++) { 61532d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org if (script_break_points[i].number() == break_point_number) { 61632d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org return script_break_points[i].actual_locations(); 61732d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org } 61832d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org } 61932d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org for (var i = 0; i < break_points.length; i++) { 62032d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org if (break_points[i].number() == break_point_number) { 62132d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org return [break_points[i].actual_location]; 62232d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org } 62332d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org } 62432d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org return []; 6251b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 62643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 62743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.setBreakPoint = function(func, opt_line, opt_column, opt_condition) { 62843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_FUNCTION(func)) throw new Error('Parameters have wrong types.'); 62937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Break points in API functions are not supported. 63037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (%FunctionIsAPIFunction(func)) { 63137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com throw new Error('Cannot set break point in native code.'); 63237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 6337be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org // Find source position relative to start of the function 6347be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org var break_position = 6357be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org this.findFunctionSourceLocation(func, opt_line, opt_column).position; 6367be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org var source_position = break_position - this.sourcePosition(func); 63743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Find the script for the function. 63843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var script = %FunctionGetScript(func); 63937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Break in builtin JavaScript code is not supported. 64037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (script.type == Debug.ScriptType.Native) { 64137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com throw new Error('Cannot set break point in native code.'); 64237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 64343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // If the script for the function has a name convert this to a script break 64443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // point. 6457be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org if (script && script.id) { 64643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Adjust the source position to be script relative. 64743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen source_position += %FunctionGetScriptSourcePosition(func); 64843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Find line and column for the position in the script and set a script 64943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // break point from that. 6503a6061e672323303da424aa33256d0ae621aa3bdager@chromium.org var location = script.locationFromPosition(source_position, false); 6517be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org return this.setScriptBreakPointById(script.id, 6527be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org location.line, location.column, 6537be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org opt_condition); 65443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 65543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Set a break point directly on the function. 656c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org var break_point = MakeBreakPoint(source_position); 65732d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org var actual_position = 65832d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org %SetFunctionBreakPoint(func, source_position, break_point); 65932d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org actual_position += this.sourcePosition(func); 66032d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org var actual_location = script.locationFromPosition(actual_position, true); 66132d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org break_point.actual_location = { line: actual_location.line, 662ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org column: actual_location.column, 663ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org script_id: script.id }; 66443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_point.setCondition(opt_condition); 66543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return break_point.number(); 66643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 66743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 66843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 66943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 670c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.orgDebug.setBreakPointByScriptIdAndPosition = function(script_id, position, 67193a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org condition, enabled, 67293a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org opt_position_alignment) 673c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org{ 674c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org break_point = MakeBreakPoint(position); 675c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org break_point.setCondition(condition); 6761b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org if (!enabled) { 677c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org break_point.disable(); 6781b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org } 679c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org var scripts = this.scripts(); 68093a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org var position_alignment = IS_UNDEFINED(opt_position_alignment) 68193a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org ? Debug.BreakPositionAlignment.Statement : opt_position_alignment; 682c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org for (var i = 0; i < scripts.length; i++) { 683c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org if (script_id == scripts[i].id) { 684c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org break_point.actual_position = %SetScriptBreakPoint(scripts[i], position, 68593a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org position_alignment, break_point); 686c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org break; 687c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org } 688c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org } 689c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org return break_point; 690c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 691c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 692c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 69343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.enableBreakPoint = function(break_point_number) { 69443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var break_point = this.findBreakPoint(break_point_number, false); 695d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Only enable if the breakpoint hasn't been deleted: 696d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (break_point) { 697d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break_point.enable(); 698d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 69943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 70043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 70143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 70243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.disableBreakPoint = function(break_point_number) { 70343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var break_point = this.findBreakPoint(break_point_number, false); 704d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Only enable if the breakpoint hasn't been deleted: 705d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (break_point) { 706d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break_point.disable(); 707d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 70843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 70943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 71043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 71143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.changeBreakPointCondition = function(break_point_number, condition) { 71243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var break_point = this.findBreakPoint(break_point_number, false); 71343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_point.setCondition(condition); 71443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 71543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 71643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 71743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.changeBreakPointIgnoreCount = function(break_point_number, ignoreCount) { 71843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (ignoreCount < 0) { 71943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen throw new Error('Invalid argument'); 72043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 72143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var break_point = this.findBreakPoint(break_point_number, false); 72243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_point.setIgnoreCount(ignoreCount); 72343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 72443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 72543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 72643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.clearBreakPoint = function(break_point_number) { 72743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var break_point = this.findBreakPoint(break_point_number, true); 72843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (break_point) { 72943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return %ClearBreakPoint(break_point); 73043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 73143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_point = this.findScriptBreakPoint(break_point_number, true); 73243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!break_point) { 73343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen throw new Error('Invalid breakpoint'); 73443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 73543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 73643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 73743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 73843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 73943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.clearAllBreakPoints = function() { 74043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = 0; i < break_points.length; i++) { 74143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_point = break_points[i]; 74243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen %ClearBreakPoint(break_point); 74343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 74443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_points = []; 74543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 74643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 74743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 748d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDebug.disableAllBreakPoints = function() { 749d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Disable all user defined breakpoints: 750d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org for (var i = 1; i < next_break_point_number; i++) { 751d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.disableBreakPoint(i); 752d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 753d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Disable all exception breakpoints: 754d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org %ChangeBreakOnException(Debug.ExceptionBreak.Caught, false); 755d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org %ChangeBreakOnException(Debug.ExceptionBreak.Uncaught, false); 756d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org}; 757d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 758d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 75943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.findScriptBreakPoint = function(break_point_number, remove) { 76043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var script_break_point; 76143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = 0; i < script_break_points.length; i++) { 76243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (script_break_points[i].number() == break_point_number) { 76343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script_break_point = script_break_points[i]; 76443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Remove the break point from the list if requested. 76543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (remove) { 76643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script_break_point.clear(); 76743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script_break_points.splice(i,1); 76843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 76943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break; 77043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 77143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 77243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return script_break_point; 7731b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 77443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 77543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 7767be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// Sets a breakpoint in a script identified through id or name at the 77743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// specified source line and column within that line. 7787be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgDebug.setScriptBreakPoint = function(type, script_id_or_name, 77968ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org opt_line, opt_column, opt_condition, 78093a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org opt_groupId, opt_position_alignment) { 78143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Create script break point object. 7827be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org var script_break_point = 78368ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org new ScriptBreakPoint(type, script_id_or_name, opt_line, opt_column, 78493a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org opt_groupId, opt_position_alignment); 78543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 78643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Assign number to the new script break point and add it. 78743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script_break_point.number_ = next_break_point_number++; 78843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script_break_point.setCondition(opt_condition); 78943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script_break_points.push(script_break_point); 79043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 7917be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org // Run through all scripts to see if this script break point matches any 79243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // loaded scripts. 79343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var scripts = this.scripts(); 79443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = 0; i < scripts.length; i++) { 79543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (script_break_point.matchesScript(scripts[i])) { 79643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script_break_point.set(scripts[i]); 79743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 79843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 79943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 80043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return script_break_point.number(); 8011b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 80243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 80343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 8047be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgDebug.setScriptBreakPointById = function(script_id, 8057be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org opt_line, opt_column, 80693a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org opt_condition, opt_groupId, 80793a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org opt_position_alignment) { 8087be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org return this.setScriptBreakPoint(Debug.ScriptBreakPointType.ScriptId, 8097be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org script_id, opt_line, opt_column, 81093a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org opt_condition, opt_groupId, 81193a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org opt_position_alignment); 8121b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 8137be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 8147be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 8157be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgDebug.setScriptBreakPointByName = function(script_name, 8167be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org opt_line, opt_column, 81768ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org opt_condition, opt_groupId) { 8187be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org return this.setScriptBreakPoint(Debug.ScriptBreakPointType.ScriptName, 8197be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org script_name, opt_line, opt_column, 82068ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org opt_condition, opt_groupId); 8211b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 8227be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 8237be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 824ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.orgDebug.setScriptBreakPointByRegExp = function(script_regexp, 825ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org opt_line, opt_column, 826ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org opt_condition, opt_groupId) { 827ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org return this.setScriptBreakPoint(Debug.ScriptBreakPointType.ScriptRegExp, 828ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org script_regexp, opt_line, opt_column, 829ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org opt_condition, opt_groupId); 8301b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 831ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org 832ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org 83343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.enableScriptBreakPoint = function(break_point_number) { 83443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var script_break_point = this.findScriptBreakPoint(break_point_number, false); 83543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script_break_point.enable(); 83643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 83743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 83843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 83943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.disableScriptBreakPoint = function(break_point_number) { 84043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var script_break_point = this.findScriptBreakPoint(break_point_number, false); 84143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script_break_point.disable(); 84243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 84343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 84443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 8451b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgDebug.changeScriptBreakPointCondition = function( 8461b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org break_point_number, condition) { 84743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var script_break_point = this.findScriptBreakPoint(break_point_number, false); 84843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script_break_point.setCondition(condition); 84943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 85043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 85143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 8521b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgDebug.changeScriptBreakPointIgnoreCount = function( 8531b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org break_point_number, ignoreCount) { 85443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (ignoreCount < 0) { 85543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen throw new Error('Invalid argument'); 85643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 85743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var script_break_point = this.findScriptBreakPoint(break_point_number, false); 85843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen script_break_point.setIgnoreCount(ignoreCount); 85943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 86043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 86143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 86243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.scriptBreakPoints = function() { 86343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return script_break_points; 8641b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 86543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 86643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 86743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.clearStepping = function() { 86831e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager %ClearStepping(); 8691b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 87043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 87143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.setBreakOnException = function() { 872c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org return %ChangeBreakOnException(Debug.ExceptionBreak.Caught, true); 87343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 87443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 87543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.clearBreakOnException = function() { 876c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org return %ChangeBreakOnException(Debug.ExceptionBreak.Caught, false); 877c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org}; 878c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org 879c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.orgDebug.isBreakOnException = function() { 880c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org return !!%IsBreakOnException(Debug.ExceptionBreak.Caught); 88143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 88243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 88343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.setBreakOnUncaughtException = function() { 88443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return %ChangeBreakOnException(Debug.ExceptionBreak.Uncaught, true); 88543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 88643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 88743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.clearBreakOnUncaughtException = function() { 88843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return %ChangeBreakOnException(Debug.ExceptionBreak.Uncaught, false); 88943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 89043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 891c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.orgDebug.isBreakOnUncaughtException = function() { 892c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org return !!%IsBreakOnException(Debug.ExceptionBreak.Uncaught); 893c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org}; 894c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org 89593a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.orgDebug.showBreakPoints = function(f, full, opt_position_alignment) { 89643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.'); 89743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var source = full ? this.scriptSource(f) : this.source(f); 89843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var offset = full ? this.sourcePosition(f) : 0; 89993a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org var locations = this.breakLocations(f, opt_position_alignment); 90043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!locations) return source; 90143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen locations.sort(function(x, y) { return x - y; }); 90243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var result = ""; 90343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var prev_pos = 0; 90443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var pos; 90543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = 0; i < locations.length; i++) { 90643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen pos = locations[i] - offset; 90743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen result += source.slice(prev_pos, pos); 90843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen result += "[B" + i + "]"; 90943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen prev_pos = pos; 91043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 91143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen pos = source.length; 91243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen result += source.substring(prev_pos, pos); 91343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return result; 91443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 91543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 91643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 91743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Get all the scripts currently loaded. Locating all the scripts is based on 91843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// scanning the heap. 91943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebug.scripts = function() { 92043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Collect all scripts in the heap. 921e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org return %DebugGetLoadedScripts(); 922e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org}; 923e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org 924e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org 925e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.orgDebug.debuggerFlags = function() { 926e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org return debugger_flags; 927e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org}; 928e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org 9295f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.orgDebug.MakeMirror = MakeMirror; 93043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 93143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction MakeExecutionState(break_id) { 93243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return new ExecutionState(break_id); 93341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 93443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 93543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfunction ExecutionState(break_id) { 93643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.break_id = break_id; 93743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.selected_frame = 0; 93841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 93943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 940639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgExecutionState.prototype.prepareStep = function(opt_action, opt_count, 941639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org opt_callframe) { 94243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var action = Debug.StepAction.StepIn; 94343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_UNDEFINED(opt_action)) action = %ToNumber(opt_action); 94443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var count = opt_count ? %ToNumber(opt_count) : 1; 945639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org var callFrameId = 0; 946639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org if (!IS_UNDEFINED(opt_callframe)) { 947639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org callFrameId = opt_callframe.details_.frameId(); 948639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org } 94943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 950639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org return %PrepareStep(this.break_id, action, count, callFrameId); 9511b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 95243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 9535f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.orgExecutionState.prototype.evaluateGlobal = function(source, disable_break, 9545f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org opt_additional_context) { 9555f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org return MakeMirror(%DebugEvaluateGlobal(this.break_id, source, 9565f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org Boolean(disable_break), 9575f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org opt_additional_context)); 95843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 95943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 9609a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comExecutionState.prototype.frameCount = function() { 96143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return %GetFrameCount(this.break_id); 96243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 96343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 964bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgExecutionState.prototype.threadCount = function() { 965bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org return %GetThreadCount(this.break_id); 966bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org}; 967bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 9689a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comExecutionState.prototype.frame = function(opt_index) { 96943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // If no index supplied return the selected frame. 97043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (opt_index == null) opt_index = this.selected_frame; 9711b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org if (opt_index < 0 || opt_index >= this.frameCount()) { 972df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org throw new Error('Illegal frame index.'); 9731b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org } 97443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return new FrameMirror(this.break_id, opt_index); 97543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 97643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 97743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenExecutionState.prototype.setSelectedFrame = function(index) { 97843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var i = %ToNumber(index); 9799a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com if (i < 0 || i >= this.frameCount()) throw new Error('Illegal frame index.'); 98043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.selected_frame = i; 98143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 98243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 9839a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comExecutionState.prototype.selectedFrame = function() { 98443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.selected_frame; 98543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 98643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 9879d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comExecutionState.prototype.debugCommandProcessor = function(opt_is_running) { 9889d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com return new DebugCommandProcessor(this, opt_is_running); 98943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 99043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 99143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 992c3564d8de4ebfc4fa3dc009fc9f6f18968ffcbd7machenbach@chromium.orgfunction MakeBreakEvent(break_id, break_points_hit) { 993c3564d8de4ebfc4fa3dc009fc9f6f18968ffcbd7machenbach@chromium.org return new BreakEvent(break_id, break_points_hit); 99441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 99543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 99643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 997c3564d8de4ebfc4fa3dc009fc9f6f18968ffcbd7machenbach@chromium.orgfunction BreakEvent(break_id, break_points_hit) { 998c3564d8de4ebfc4fa3dc009fc9f6f18968ffcbd7machenbach@chromium.org this.frame_ = new FrameMirror(break_id, 0); 99943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.break_points_hit_ = break_points_hit; 100041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 100143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 100243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 10038bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.orgBreakEvent.prototype.eventType = function() { 10048bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org return Debug.DebugEvent.Break; 10058bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org}; 10068bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 10078bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 100843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakEvent.prototype.func = function() { 1009c3564d8de4ebfc4fa3dc009fc9f6f18968ffcbd7machenbach@chromium.org return this.frame_.func(); 101043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 101143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 101243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 101343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakEvent.prototype.sourceLine = function() { 1014c3564d8de4ebfc4fa3dc009fc9f6f18968ffcbd7machenbach@chromium.org return this.frame_.sourceLine(); 101543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 101643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 101743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 101843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakEvent.prototype.sourceColumn = function() { 1019c3564d8de4ebfc4fa3dc009fc9f6f18968ffcbd7machenbach@chromium.org return this.frame_.sourceColumn(); 102043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 102143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 102243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 102343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakEvent.prototype.sourceLineText = function() { 1024c3564d8de4ebfc4fa3dc009fc9f6f18968ffcbd7machenbach@chromium.org return this.frame_.sourceLineText(); 102543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 102643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 102743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 102843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakEvent.prototype.breakPointsHit = function() { 102943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.break_points_hit_; 103043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 103143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 103243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 103343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBreakEvent.prototype.toJSONProtocol = function() { 103443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var o = { seq: next_response_seq++, 103543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen type: "event", 103643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen event: "break", 1037c3564d8de4ebfc4fa3dc009fc9f6f18968ffcbd7machenbach@chromium.org body: { invocationText: this.frame_.invocationText() } 1038b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org }; 103943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 104043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Add script related information to the event if available. 104143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var script = this.func().script(); 104243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (script) { 104343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen o.body.sourceLine = this.sourceLine(), 104443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen o.body.sourceColumn = this.sourceColumn(), 104543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen o.body.sourceLineText = this.sourceLineText(), 10467be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org o.body.script = MakeScriptObject_(script, false); 104743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 104843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 104943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Add an Array of break points hit if any. 105043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (this.breakPointsHit()) { 105143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen o.body.breakpoints = []; 105243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = 0; i < this.breakPointsHit().length; i++) { 105343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Find the break point number. For break points originating from a 105443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // script break point supply the script break point number. 105543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var breakpoint = this.breakPointsHit()[i]; 105643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var script_break_point = breakpoint.script_break_point(); 105743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var number; 105843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (script_break_point) { 105943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen number = script_break_point.number(); 106043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 106143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen number = breakpoint.number(); 106243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 106343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen o.body.breakpoints.push(number); 106443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 106543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 1066b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org return JSON.stringify(ObjectToProtocolObject_(o)); 106743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 106843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 106943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1070c3564d8de4ebfc4fa3dc009fc9f6f18968ffcbd7machenbach@chromium.orgfunction MakeExceptionEvent(break_id, exception, uncaught, promise) { 1071c3564d8de4ebfc4fa3dc009fc9f6f18968ffcbd7machenbach@chromium.org return new ExceptionEvent(break_id, exception, uncaught, promise); 107241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 107343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 10748bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 1075c3564d8de4ebfc4fa3dc009fc9f6f18968ffcbd7machenbach@chromium.orgfunction ExceptionEvent(break_id, exception, uncaught, promise) { 1076c3564d8de4ebfc4fa3dc009fc9f6f18968ffcbd7machenbach@chromium.org this.exec_state_ = new ExecutionState(break_id); 107743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.exception_ = exception; 107843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.uncaught_ = uncaught; 1079865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org this.promise_ = promise; 108041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 108143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 10828bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 10838bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.orgExceptionEvent.prototype.eventType = function() { 10848bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org return Debug.DebugEvent.Exception; 10858bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org}; 10868bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 10878bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 10888bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.orgExceptionEvent.prototype.exception = function() { 10898bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org return this.exception_; 10901b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 10918bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 10928bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 109343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenExceptionEvent.prototype.uncaught = function() { 109443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return this.uncaught_; 10951b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 109643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 10978bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 1098865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orgExceptionEvent.prototype.promise = function() { 1099865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org return this.promise_; 1100865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org}; 1101865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org 1102865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org 110343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenExceptionEvent.prototype.func = function() { 11049a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com return this.exec_state_.frame(0).func(); 110543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 110643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 110743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 110843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenExceptionEvent.prototype.sourceLine = function() { 11099a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com return this.exec_state_.frame(0).sourceLine(); 111043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 111143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 111243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 111343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenExceptionEvent.prototype.sourceColumn = function() { 11149a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com return this.exec_state_.frame(0).sourceColumn(); 111543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 111643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 111743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 111843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenExceptionEvent.prototype.sourceLineText = function() { 11199a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com return this.exec_state_.frame(0).sourceLineText(); 112043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 112143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 112243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 112343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenExceptionEvent.prototype.toJSONProtocol = function() { 1124061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org var o = new ProtocolMessage(); 1125061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org o.event = "exception"; 1126061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org o.body = { uncaught: this.uncaught_, 1127061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org exception: MakeMirror(this.exception_) 1128b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org }; 1129c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 1130061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org // Exceptions might happen whithout any JavaScript frames. 1131061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org if (this.exec_state_.frameCount() > 0) { 1132061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org o.body.sourceLine = this.sourceLine(); 1133061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org o.body.sourceColumn = this.sourceColumn(); 1134061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org o.body.sourceLineText = this.sourceLineText(); 1135061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org 1136061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org // Add script information to the event if available. 1137061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org var script = this.func().script(); 1138061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org if (script) { 11397be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org o.body.script = MakeScriptObject_(script, false); 1140061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org } 1141061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org } else { 1142061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org o.body.sourceLine = -1; 114343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 114443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1145061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org return o.toJSONProtocol(); 114643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 114743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1148a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 1149248dd43badb99ffce44eae2d767cda3cefaad521machenbach@chromium.orgfunction MakeCompileEvent(script, type) { 1150248dd43badb99ffce44eae2d767cda3cefaad521machenbach@chromium.org return new CompileEvent(script, type); 115141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 115243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1153a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 1154248dd43badb99ffce44eae2d767cda3cefaad521machenbach@chromium.orgfunction CompileEvent(script, type) { 1155245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org this.script_ = MakeMirror(script); 1156248dd43badb99ffce44eae2d767cda3cefaad521machenbach@chromium.org this.type_ = type; 115741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 115843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 115943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 11608bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.orgCompileEvent.prototype.eventType = function() { 1161248dd43badb99ffce44eae2d767cda3cefaad521machenbach@chromium.org return this.type_; 11628bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org}; 11638bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 11648bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 1165245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgCompileEvent.prototype.script = function() { 1166245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return this.script_; 1167245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org}; 1168245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 1169245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 1170061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.orgCompileEvent.prototype.toJSONProtocol = function() { 1171061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org var o = new ProtocolMessage(); 11725ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org o.running = true; 1173248dd43badb99ffce44eae2d767cda3cefaad521machenbach@chromium.org switch (this.type_) { 1174248dd43badb99ffce44eae2d767cda3cefaad521machenbach@chromium.org case Debug.DebugEvent.BeforeCompile: 1175248dd43badb99ffce44eae2d767cda3cefaad521machenbach@chromium.org o.event = "beforeCompile"; 11765fc1eed70f85bd1e9d0833742945798d6ef49cf0machenbach@chromium.org break; 1177248dd43badb99ffce44eae2d767cda3cefaad521machenbach@chromium.org case Debug.DebugEvent.AfterCompile: 1178248dd43badb99ffce44eae2d767cda3cefaad521machenbach@chromium.org o.event = "afterCompile"; 11795fc1eed70f85bd1e9d0833742945798d6ef49cf0machenbach@chromium.org break; 1180248dd43badb99ffce44eae2d767cda3cefaad521machenbach@chromium.org case Debug.DebugEvent.CompileError: 1181248dd43badb99ffce44eae2d767cda3cefaad521machenbach@chromium.org o.event = "compileError"; 11825fc1eed70f85bd1e9d0833742945798d6ef49cf0machenbach@chromium.org break; 1183061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org } 1184061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org o.body = {}; 1185b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org o.body.script = this.script_; 1186061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org 1187061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org return o.toJSONProtocol(); 11881b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1189061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org 1190061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org 11917be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgfunction MakeScriptObject_(script, include_source) { 11927be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org var o = { id: script.id(), 11937be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org name: script.name(), 11947be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org lineOffset: script.lineOffset(), 11957be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org columnOffset: script.columnOffset(), 11967be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org lineCount: script.lineCount(), 11977be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org }; 119865dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org if (!IS_UNDEFINED(script.data())) { 119965dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org o.data = script.data(); 120065dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org } 12017be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org if (include_source) { 12027be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org o.source = script.source(); 12037be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org } 12047be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org return o; 12051b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org} 12067be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 12077be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 12085de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.orgfunction MakePromiseEvent(event_data) { 12093e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org return new PromiseEvent(event_data); 12105de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org} 12115de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org 12125de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org 12133e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.orgfunction PromiseEvent(event_data) { 1214f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org this.promise_ = event_data.promise; 12153e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org this.parentPromise_ = event_data.parentPromise; 1216f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org this.status_ = event_data.status; 1217f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org this.value_ = event_data.value; 1218f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org} 1219f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org 1220f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org 12213e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.orgPromiseEvent.prototype.promise = function() { 12223e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org return MakeMirror(this.promise_); 1223f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org} 1224f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org 1225f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org 12263e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.orgPromiseEvent.prototype.parentPromise = function() { 12273e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org return MakeMirror(this.parentPromise_); 1228f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org} 1229f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org 1230f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org 12313e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.orgPromiseEvent.prototype.status = function() { 12323e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org return this.status_; 1233f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org} 1234f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org 1235f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org 12363e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.orgPromiseEvent.prototype.value = function() { 12373e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org return MakeMirror(this.value_); 1238f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org} 1239f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org 1240f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org 1241d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.orgfunction MakeAsyncTaskEvent(event_data) { 1242d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org return new AsyncTaskEvent(event_data); 1243d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org} 1244d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org 1245d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org 1246d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.orgfunction AsyncTaskEvent(event_data) { 1247d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org this.type_ = event_data.type; 1248d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org this.name_ = event_data.name; 1249d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org this.id_ = event_data.id; 1250d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org} 1251d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org 1252d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org 1253d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.orgAsyncTaskEvent.prototype.type = function() { 1254d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org return this.type_; 1255d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org} 1256d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org 1257d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org 1258d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.orgAsyncTaskEvent.prototype.name = function() { 1259d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org return this.name_; 1260d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org} 1261d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org 1262d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org 1263d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.orgAsyncTaskEvent.prototype.id = function() { 1264d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org return this.id_; 1265d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org} 1266d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org 1267d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org 12689d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comfunction DebugCommandProcessor(exec_state, opt_is_running) { 126943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.exec_state_ = exec_state; 12709d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com this.running_ = opt_is_running || false; 12711b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org} 127243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 127343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1274a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgDebugCommandProcessor.prototype.processDebugRequest = function (request) { 1275a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org return this.processDebugJSONRequest(request); 12761b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 127743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 127843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1279061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.orgfunction ProtocolMessage(request) { 1280061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org // Update sequence number. 128143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.seq = next_response_seq++; 1282c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 1283061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org if (request) { 1284061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org // If message is based on a request this is a response. Fill the initial 1285061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org // response from the request. 1286061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org this.type = 'response'; 1287061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org this.request_seq = request.seq; 1288061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org this.command = request.command; 1289061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org } else { 1290061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org // If message is not based on a request it is a dabugger generated event. 1291061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org this.type = 'event'; 1292061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org } 129343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.success = true; 12949d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com // Handler may set this field to control debugger state. 12959d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com this.running = undefined; 129641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 129743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 129843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12999085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.orgProtocolMessage.prototype.setOption = function(name, value) { 13009085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org if (!this.options_) { 13019085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org this.options_ = {}; 13029085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org } 13039085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org this.options_[name] = value; 13041b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 13059085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org 13069085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org 130749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.orgProtocolMessage.prototype.failed = function(message, opt_details) { 130843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.success = false; 130943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.message = message; 131049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org if (IS_OBJECT(opt_details)) { 131149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org this.error_details = opt_details; 131249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } 13131b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 131443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 131543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1316061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.orgProtocolMessage.prototype.toJSONProtocol = function() { 131743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Encode the protocol header. 1318b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org var json = {}; 1319b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json.seq= this.seq; 132043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (this.request_seq) { 1321b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json.request_seq = this.request_seq; 132243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 1323b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json.type = this.type; 1324061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org if (this.event) { 1325b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json.event = this.event; 1326061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org } 132743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (this.command) { 1328b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json.command = this.command; 132943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 133043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (this.success) { 1331b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json.success = this.success; 133243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 1333b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json.success = false; 133443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 133543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (this.body) { 133643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Encode the body part. 1337b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org var bodyJson; 13389085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org var serializer = MakeMirrorSerializer(true, this.options_); 13393291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org if (this.body instanceof Mirror) { 1340b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org bodyJson = serializer.serializeValue(this.body); 134143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (this.body instanceof Array) { 1342b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org bodyJson = []; 134343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = 0; i < this.body.length; i++) { 13443291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org if (this.body[i] instanceof Mirror) { 1345b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org bodyJson.push(serializer.serializeValue(this.body[i])); 134643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 1347b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org bodyJson.push(ObjectToProtocolObject_(this.body[i], serializer)); 134843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 134943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 135043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 1351b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org bodyJson = ObjectToProtocolObject_(this.body, serializer); 135243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 1353b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json.body = bodyJson; 1354b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json.refs = serializer.serializeReferencedObjects(); 135543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 135643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (this.message) { 1357b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json.message = this.message; 135843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 135949a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org if (this.error_details) { 136049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org json.error_details = this.error_details; 136149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } 13629d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com json.running = this.running; 1363b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org return JSON.stringify(json); 13641b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 136543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 136643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 136743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebugCommandProcessor.prototype.createResponse = function(request) { 1368061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org return new ProtocolMessage(request); 136943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 137043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 137143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 13721b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgDebugCommandProcessor.prototype.processDebugJSONRequest = function( 13731b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org json_request) { 137443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var request; // Current request. 137543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var response; // Generated response. 137643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen try { 137743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen try { 137843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Convert the JSON string to an object. 1379fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org request = JSON.parse(json_request); 138043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 138143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Create an initial response. 138243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response = this.createResponse(request); 138343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 138443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!request.type) { 138543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen throw new Error('Type not specified'); 138643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 138743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 138843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (request.type != 'request') { 138943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen throw new Error("Illegal type '" + request.type + "' in request"); 139043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 139143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 139243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!request.command) { 139343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen throw new Error('Command not specified'); 139443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 139543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1396b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org if (request.arguments) { 1397b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org var args = request.arguments; 1398b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org // TODO(yurys): remove request.arguments.compactFormat check once 1399b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org // ChromeDevTools are switched to 'inlineRefs' 1400b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org if (args.inlineRefs || args.compactFormat) { 1401b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org response.setOption('inlineRefs', true); 1402b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org } 1403b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org if (!IS_UNDEFINED(args.maxStringLength)) { 1404b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org response.setOption('maxStringLength', args.maxStringLength); 1405b95b98b0c30bcd40b657aa45f6cd75a46a4772adfschneider@chromium.org } 14063e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org } 14073e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org 1408285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org var key = request.command.toLowerCase(); 1409285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org var handler = DebugCommandProcessor.prototype.dispatch_[key]; 1410285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org if (IS_FUNCTION(handler)) { 1411285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org %_CallFunction(this, request, response, handler); 141243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 141343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen throw new Error('Unknown command "' + request.command + '" in request'); 141443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 141543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } catch (e) { 141643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // If there is no response object created one (without command). 141743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!response) { 141843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response = this.createResponse(); 141943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 142043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.success = false; 142143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.message = %ToString(e); 142243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 142343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 142443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Return the response as a JSON encoded string. 142543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen try { 14269d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com if (!IS_UNDEFINED(response.running)) { 14279d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com // Response controls running state. 14289d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com this.running_ = response.running; 14299d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com } 143025156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org response.running = this.running_; 143143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return response.toJSONProtocol(); 143243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } catch (e) { 143343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Failed to generate response - return generic error. 143443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return '{"seq":' + response.seq + ',' + 143543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen '"request_seq":' + request.seq + ',' + 143643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen '"type":"response",' + 143743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen '"success":false,' + 143843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen '"message":"Internal error: ' + %ToString(e) + '"}'; 143943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 144043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } catch (e) { 144143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Failed in one of the catch blocks above - most generic error. 144243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return '{"seq":0,"type":"response","success":false,"message":"Internal error"}'; 144343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 144443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 144543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 144643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 144743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebugCommandProcessor.prototype.continueRequest_ = function(request, response) { 144843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Check for arguments for continue. 144943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (request.arguments) { 145043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var count = 1; 145143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var action = Debug.StepAction.StepIn; 145243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 145343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Pull out arguments. 145443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var stepaction = request.arguments.stepaction; 145543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var stepcount = request.arguments.stepcount; 145643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 145743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Get the stepcount argument if any. 145843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (stepcount) { 145943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen count = %ToNumber(stepcount); 146043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (count < 0) { 146143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen throw new Error('Invalid stepcount argument "' + stepcount + '".'); 146243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 146343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 146443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 146543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Get the stepaction argument. 146643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (stepaction) { 146743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (stepaction == 'in') { 146843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen action = Debug.StepAction.StepIn; 146943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (stepaction == 'min') { 147043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen action = Debug.StepAction.StepMin; 147143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (stepaction == 'next') { 147243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen action = Debug.StepAction.StepNext; 147343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (stepaction == 'out') { 147443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen action = Debug.StepAction.StepOut; 147543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 147643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen throw new Error('Invalid stepaction argument "' + stepaction + '".'); 147743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 147843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 147943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1480f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com // Set up the VM for stepping. 148143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.exec_state_.prepareStep(action, count); 148243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 148343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 148443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // VM should be running after executing this request. 148543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.running = true; 148643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 148743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 148843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 148943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebugCommandProcessor.prototype.breakRequest_ = function(request, response) { 149043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Ignore as break command does not do anything when broken. 149143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 149243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 149343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 149443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebugCommandProcessor.prototype.setBreakPointRequest_ = 149543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen function(request, response) { 149643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Check for legal request. 149743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!request.arguments) { 149843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.failed('Missing arguments'); 149943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 150043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 150143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 150243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Pull out arguments. 150343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var type = request.arguments.type; 150443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var target = request.arguments.target; 150543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var line = request.arguments.line; 150643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var column = request.arguments.column; 150743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var enabled = IS_UNDEFINED(request.arguments.enabled) ? 150843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen true : request.arguments.enabled; 150943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var condition = request.arguments.condition; 151043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var ignoreCount = request.arguments.ignoreCount; 151168ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org var groupId = request.arguments.groupId; 151243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 151343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Check for legal arguments. 151465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org if (!type || IS_UNDEFINED(target)) { 151543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.failed('Missing argument "type" or "target"'); 151643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 151743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 151828a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org 151943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Either function or script break point. 152043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var break_point_number; 152143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (type == 'function') { 152243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Handle function break point. 152343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_STRING(target)) { 152443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.failed('Argument "target" is not a string value'); 152543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 152643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 152743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var f; 152843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen try { 152943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Find the function through a global evaluate. 15309a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com f = this.exec_state_.evaluateGlobal(target).value(); 153143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } catch (e) { 153243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.failed('Error: "' + %ToString(e) + 153343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen '" evaluating "' + target + '"'); 153443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 153543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 153643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_FUNCTION(f)) { 153743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.failed('"' + target + '" does not evaluate to a function'); 153843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 153943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 154043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 154143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Set function break point. 154243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break_point_number = Debug.setBreakPoint(f, line, column, condition); 154365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org } else if (type == 'handle') { 154465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // Find the object pointed by the specified handle. 154565dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org var handle = parseInt(target, 10); 154665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org var mirror = LookupMirror(handle); 154765dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org if (!mirror) { 154865dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org return response.failed('Object #' + handle + '# not found'); 154965dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org } 155065dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org if (!mirror.isFunction()) { 155165dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org return response.failed('Object #' + handle + '# is not a function'); 155265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org } 155365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org 155465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // Set function break point. 155565dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org break_point_number = Debug.setBreakPoint(mirror.value(), 155665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org line, column, condition); 15577be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org } else if (type == 'script') { 155843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // set script break point. 15597be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org break_point_number = 156068ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org Debug.setScriptBreakPointByName(target, line, column, condition, 156168ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org groupId); 156228a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org } else if (type == 'scriptId') { 15637be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org break_point_number = 156468ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org Debug.setScriptBreakPointById(target, line, column, condition, groupId); 156528a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org } else if (type == 'scriptRegExp') { 1566ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org break_point_number = 1567ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org Debug.setScriptBreakPointByRegExp(target, line, column, condition, 1568ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org groupId); 1569ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else { 1570ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org response.failed('Illegal type "' + type + '"'); 1571ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org return; 157243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 157343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 157443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Set additional break point properties. 157543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var break_point = Debug.findBreakPoint(break_point_number); 157643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (ignoreCount) { 157743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Debug.changeBreakPointIgnoreCount(break_point_number, ignoreCount); 157843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 157943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!enabled) { 158043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Debug.disableBreakPoint(break_point_number); 158143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 158243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 158343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Add the break point number to the response. 158443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body = { type: type, 15851b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org breakpoint: break_point_number }; 158643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 158743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Add break point information to the response. 158843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (break_point instanceof ScriptBreakPoint) { 15897be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org if (break_point.type() == Debug.ScriptBreakPointType.ScriptId) { 15907be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org response.body.type = 'scriptId'; 15917be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org response.body.script_id = break_point.script_id(); 1592ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else if (break_point.type() == Debug.ScriptBreakPointType.ScriptName) { 15937be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org response.body.type = 'scriptName'; 15947be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org response.body.script_name = break_point.script_name(); 1595ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else if (break_point.type() == Debug.ScriptBreakPointType.ScriptRegExp) { 1596ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org response.body.type = 'scriptRegExp'; 1597ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org response.body.script_regexp = break_point.script_regexp_object().source; 1598ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else { 15991b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org throw new Error("Internal error: Unexpected breakpoint type: " + 16001b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org break_point.type()); 16017be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org } 160243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body.line = break_point.line(); 160343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body.column = break_point.column(); 160432d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org response.body.actual_locations = break_point.actual_locations(); 160543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 160643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body.type = 'function'; 160732d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org response.body.actual_locations = [break_point.actual_location]; 160843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 160943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 161043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 161143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 16121b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgDebugCommandProcessor.prototype.changeBreakPointRequest_ = function( 16131b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org request, response) { 161443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Check for legal request. 161543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!request.arguments) { 161643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.failed('Missing arguments'); 161743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 161843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 161943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 162043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Pull out arguments. 162143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var break_point = %ToNumber(request.arguments.breakpoint); 162243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var enabled = request.arguments.enabled; 162343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var condition = request.arguments.condition; 162443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var ignoreCount = request.arguments.ignoreCount; 162543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 162643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Check for legal arguments. 162743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!break_point) { 162843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.failed('Missing argument "breakpoint"'); 162943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 163043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 163143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 163243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Change enabled state if supplied. 163343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_UNDEFINED(enabled)) { 163443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (enabled) { 163543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Debug.enableBreakPoint(break_point); 163643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 163743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Debug.disableBreakPoint(break_point); 163843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 163943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 164043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 164143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Change condition if supplied 164243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_UNDEFINED(condition)) { 164343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Debug.changeBreakPointCondition(break_point, condition); 164443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 164543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 164643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Change ignore count if supplied 164743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_UNDEFINED(ignoreCount)) { 164843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Debug.changeBreakPointIgnoreCount(break_point, ignoreCount); 164943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 16501b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 165143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 165243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 16531b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgDebugCommandProcessor.prototype.clearBreakPointGroupRequest_ = function( 16541b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org request, response) { 165568ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org // Check for legal request. 165668ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org if (!request.arguments) { 165768ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org response.failed('Missing arguments'); 165868ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org return; 165968ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org } 166068ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org 166168ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org // Pull out arguments. 166268ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org var group_id = request.arguments.groupId; 166368ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org 166468ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org // Check for legal arguments. 166568ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org if (!group_id) { 166668ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org response.failed('Missing argument "groupId"'); 166768ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org return; 166868ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org } 1669c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 167068ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org var cleared_break_points = []; 167168ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org var new_script_break_points = []; 167268ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org for (var i = 0; i < script_break_points.length; i++) { 167368ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org var next_break_point = script_break_points[i]; 167468ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org if (next_break_point.groupId() == group_id) { 167568ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org cleared_break_points.push(next_break_point.number()); 167668ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org next_break_point.clear(); 167768ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org } else { 167868ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org new_script_break_points.push(next_break_point); 167968ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org } 168068ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org } 168168ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org script_break_points = new_script_break_points; 168268ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org 168368ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org // Add the cleared break point numbers to the response. 168468ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org response.body = { breakpoints: cleared_break_points }; 16851b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 168668ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org 168768ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org 16881b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgDebugCommandProcessor.prototype.clearBreakPointRequest_ = function( 16891b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org request, response) { 169043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Check for legal request. 169143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!request.arguments) { 169243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.failed('Missing arguments'); 169343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 169443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 169543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 169643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Pull out arguments. 169743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var break_point = %ToNumber(request.arguments.breakpoint); 169843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 169943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Check for legal arguments. 170043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!break_point) { 170143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.failed('Missing argument "breakpoint"'); 170243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 170343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 170443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 170543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Clear break point. 170643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Debug.clearBreakPoint(break_point); 170737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 170837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Add the cleared break point number to the response. 17091b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org response.body = { breakpoint: break_point }; 17101b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 171143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1712e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org 17131b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgDebugCommandProcessor.prototype.listBreakpointsRequest_ = function( 17141b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org request, response) { 1715dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org var array = []; 1716dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org for (var i = 0; i < script_break_points.length; i++) { 1717dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org var break_point = script_break_points[i]; 1718dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org 1719dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org var description = { 1720dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org number: break_point.number(), 1721dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org line: break_point.line(), 1722dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org column: break_point.column(), 1723dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org groupId: break_point.groupId(), 1724dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org hit_count: break_point.hit_count(), 1725dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org active: break_point.active(), 1726dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org condition: break_point.condition(), 172732d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org ignoreCount: break_point.ignoreCount(), 172832d961d4454609ab4251a760fc46b19f661da90clrn@chromium.org actual_locations: break_point.actual_locations() 17291b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org }; 1730e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org 1731dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org if (break_point.type() == Debug.ScriptBreakPointType.ScriptId) { 1732dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org description.type = 'scriptId'; 1733dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org description.script_id = break_point.script_id(); 1734ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else if (break_point.type() == Debug.ScriptBreakPointType.ScriptName) { 1735dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org description.type = 'scriptName'; 1736dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org description.script_name = break_point.script_name(); 1737ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else if (break_point.type() == Debug.ScriptBreakPointType.ScriptRegExp) { 1738ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org description.type = 'scriptRegExp'; 1739ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org description.script_regexp = break_point.script_regexp_object().source; 1740ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else { 17411b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org throw new Error("Internal error: Unexpected breakpoint type: " + 17421b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org break_point.type()); 1743dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org } 1744dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org array.push(description); 1745dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org } 1746e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org 1747d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org response.body = { 1748d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org breakpoints: array, 1749d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org breakOnExceptions: Debug.isBreakOnException(), 1750d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org breakOnUncaughtExceptions: Debug.isBreakOnUncaughtException() 17511b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org }; 17521b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1753d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1754d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1755d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDebugCommandProcessor.prototype.disconnectRequest_ = 1756d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org function(request, response) { 1757d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.disableAllBreakPoints(); 1758d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.continueRequest_(request, response); 17591b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1760d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1761d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1762d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDebugCommandProcessor.prototype.setExceptionBreakRequest_ = 1763d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org function(request, response) { 1764d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Check for legal request. 1765d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (!request.arguments) { 1766d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org response.failed('Missing arguments'); 1767d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return; 1768d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1769d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1770d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Pull out and check the 'type' argument: 1771d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var type = request.arguments.type; 1772d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (!type) { 1773d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org response.failed('Missing argument "type"'); 1774d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return; 1775d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1776d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1777d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Initialize the default value of enable: 1778d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var enabled; 1779d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (type == 'all') { 1780d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org enabled = !Debug.isBreakOnException(); 1781d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (type == 'uncaught') { 1782d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org enabled = !Debug.isBreakOnUncaughtException(); 178328a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org } 1784d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1785d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Pull out and check the 'enabled' argument if present: 1786d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (!IS_UNDEFINED(request.arguments.enabled)) { 1787d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org enabled = request.arguments.enabled; 1788d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if ((enabled != true) && (enabled != false)) { 1789d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org response.failed('Illegal value for "enabled":"' + enabled + '"'); 1790d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1791d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1792d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1793d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Now set the exception break state: 1794d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (type == 'all') { 1795d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org %ChangeBreakOnException(Debug.ExceptionBreak.Caught, enabled); 1796d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (type == 'uncaught') { 1797d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org %ChangeBreakOnException(Debug.ExceptionBreak.Uncaught, enabled); 1798d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else { 1799d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org response.failed('Unknown "type":"' + type + '"'); 1800d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1801d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1802d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Add the cleared break point number to the response. 1803d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org response.body = { 'type': type, 'enabled': enabled }; 18041b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1805dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org 180643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 18071b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgDebugCommandProcessor.prototype.backtraceRequest_ = function( 18081b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org request, response) { 180943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Get the number of frames. 18109a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com var total_frames = this.exec_state_.frameCount(); 181143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 18128bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org // Create simple response if there are no frames. 18138bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org if (total_frames == 0) { 18148bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org response.body = { 18158bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org totalFrames: total_frames 18161b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org }; 18178bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org return; 18188bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org } 18198bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 182043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Default frame range to include in backtrace. 18211b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org var from_index = 0; 182243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var to_index = kDefaultBacktraceLength; 182343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 182443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Get the range from the arguments. 182543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (request.arguments) { 1826b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org if (request.arguments.fromFrame) { 1827b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org from_index = request.arguments.fromFrame; 1828b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } 1829b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org if (request.arguments.toFrame) { 1830b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org to_index = request.arguments.toFrame; 183143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 1832b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org if (request.arguments.bottom) { 1833b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org var tmp_index = total_frames - from_index; 18341b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org from_index = total_frames - to_index; 1835b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org to_index = tmp_index; 1836b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } 1837b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org if (from_index < 0 || to_index < 0) { 183843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return response.failed('Invalid frame number'); 183943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 184043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 184143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 184243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Adjust the index. 184343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen to_index = Math.min(total_frames, to_index); 184443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 184543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (to_index <= from_index) { 184643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var error = 'Invalid frame range'; 184743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return response.failed(error); 184843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 184943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 185043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Create the response body. 185143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var frames = []; 185243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = from_index; i < to_index; i++) { 18539a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com frames.push(this.exec_state_.frame(i)); 185443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 185543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body = { 185643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen fromFrame: from_index, 185743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen toFrame: to_index, 185843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen totalFrames: total_frames, 185943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen frames: frames 18601b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org }; 186143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 186243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 186343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 186443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebugCommandProcessor.prototype.frameRequest_ = function(request, response) { 186537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // No frames no source. 186637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (this.exec_state_.frameCount() == 0) { 186737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return response.failed('No frames'); 186837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 186937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 187043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // With no arguments just keep the selected frame. 1871ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (request.arguments) { 1872eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org var index = request.arguments.number; 1873ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (index < 0 || this.exec_state_.frameCount() <= index) { 1874ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return response.failed('Invalid frame number'); 1875ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 1876c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 187743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen this.exec_state_.setSelectedFrame(request.arguments.number); 187843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 18799a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com response.body = this.exec_state_.frame(); 188043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 188143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 188243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 188349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.orgDebugCommandProcessor.prototype.resolveFrameFromScopeDescription_ = 188449a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org function(scope_description) { 18851b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org // Get the frame for which the scope or scopes are requested. 18861b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org // With no frameNumber argument use the currently selected frame. 188749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org if (scope_description && !IS_UNDEFINED(scope_description.frameNumber)) { 188849a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org frame_index = scope_description.frameNumber; 1889eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org if (frame_index < 0 || this.exec_state_.frameCount() <= frame_index) { 18901044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org throw new Error('Invalid frame number'); 1891eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 1892eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org return this.exec_state_.frame(frame_index); 1893eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } else { 1894eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org return this.exec_state_.frame(); 1895eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 18961b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1897eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 1898eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 18991044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org// Gets scope host object from request. It is either a function 19001044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org// ('functionHandle' argument must be specified) or a stack frame 19011044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org// ('frameNumber' may be specified and the current frame is taken by default). 190249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.orgDebugCommandProcessor.prototype.resolveScopeHolder_ = 190349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org function(scope_description) { 190449a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org if (scope_description && "functionHandle" in scope_description) { 190549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org if (!IS_NUMBER(scope_description.functionHandle)) { 19061044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org throw new Error('Function handle must be a number'); 19071044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org } 190849a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var function_mirror = LookupMirror(scope_description.functionHandle); 19091044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org if (!function_mirror) { 19101044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org throw new Error('Failed to find function object by handle'); 19111044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org } 19121044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org if (!function_mirror.isFunction()) { 19131044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org throw new Error('Value of non-function type is found by handle'); 19141044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org } 19151044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org return function_mirror; 19161044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org } else { 19171044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org // No frames no scopes. 19181044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org if (this.exec_state_.frameCount() == 0) { 19191044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org throw new Error('No scopes'); 19201044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org } 19211044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org 19221044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org // Get the frame for which the scopes are requested. 192349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var frame = this.resolveFrameFromScopeDescription_(scope_description); 19241044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org return frame; 1925eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 19261044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org} 1927eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 1928c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 19291044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.orgDebugCommandProcessor.prototype.scopesRequest_ = function(request, response) { 193049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var scope_holder = this.resolveScopeHolder_(request.arguments); 19311044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org 19321044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org // Fill all scopes for this frame or function. 19331044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org var total_scopes = scope_holder.scopeCount(); 1934eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org var scopes = []; 1935eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org for (var i = 0; i < total_scopes; i++) { 19361044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org scopes.push(scope_holder.scope(i)); 1937eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 1938eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org response.body = { 1939eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org fromScope: 0, 1940eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org toScope: total_scopes, 1941eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org totalScopes: total_scopes, 1942eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org scopes: scopes 19431b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org }; 1944eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org}; 1945eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 1946eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 1947eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.orgDebugCommandProcessor.prototype.scopeRequest_ = function(request, response) { 19481044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org // Get the frame or function for which the scope is requested. 194949a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var scope_holder = this.resolveScopeHolder_(request.arguments); 1950eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 1951eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org // With no scope argument just return top scope. 1952eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org var scope_index = 0; 1953eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org if (request.arguments && !IS_UNDEFINED(request.arguments.number)) { 1954eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org scope_index = %ToNumber(request.arguments.number); 19551044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org if (scope_index < 0 || scope_holder.scopeCount() <= scope_index) { 1956eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org return response.failed('Invalid scope number'); 1957eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 1958eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 1959eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 19601044a4d5f9e933d03cf05a0d7d49d8afccec0879danno@chromium.org response.body = scope_holder.scope(scope_index); 1961eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org}; 1962eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 1963eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 196449a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org// Reads value from protocol description. Description may be in form of type 196549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org// (for singletons), raw value (primitive types supported in JSON), 196649a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org// string value description plus type (for primitive values) or handle id. 196749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org// Returns raw value or throws exception. 196849a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.orgDebugCommandProcessor.resolveValue_ = function(value_description) { 196949a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org if ("handle" in value_description) { 197049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var value_mirror = LookupMirror(value_description.handle); 197149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org if (!value_mirror) { 197249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org throw new Error("Failed to resolve value by handle, ' #" + 197349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org mapping.handle + "# not found"); 197449a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } 197549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org return value_mirror.value(); 197649a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } else if ("stringDescription" in value_description) { 197749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org if (value_description.type == BOOLEAN_TYPE) { 197849a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org return Boolean(value_description.stringDescription); 197949a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } else if (value_description.type == NUMBER_TYPE) { 198049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org return Number(value_description.stringDescription); 198149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } if (value_description.type == STRING_TYPE) { 198249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org return String(value_description.stringDescription); 198349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } else { 198449a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org throw new Error("Unknown type"); 198549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } 198649a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } else if ("value" in value_description) { 198749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org return value_description.value; 198849a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } else if (value_description.type == UNDEFINED_TYPE) { 1989690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org return UNDEFINED; 199049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } else if (value_description.type == NULL_TYPE) { 199149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org return null; 199249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } else { 199349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org throw new Error("Failed to parse value description"); 199449a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } 199549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org}; 199649a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 199749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 199849a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.orgDebugCommandProcessor.prototype.setVariableValueRequest_ = 199949a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org function(request, response) { 200049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org if (!request.arguments) { 200149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org response.failed('Missing arguments'); 200249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org return; 200349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } 200449a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 200549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org if (IS_UNDEFINED(request.arguments.name)) { 200649a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org response.failed('Missing variable name'); 200749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } 200849a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var variable_name = request.arguments.name; 200949a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 201049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var scope_description = request.arguments.scope; 201149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 201249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org // Get the frame or function for which the scope is requested. 201349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var scope_holder = this.resolveScopeHolder_(scope_description); 201449a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 201549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org if (IS_UNDEFINED(scope_description.number)) { 201649a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org response.failed('Missing scope number'); 201749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } 201849a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var scope_index = %ToNumber(scope_description.number); 201949a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 202049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var scope = scope_holder.scope(scope_index); 202149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 202249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var new_value = 202349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org DebugCommandProcessor.resolveValue_(request.arguments.newValue); 202449a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 202549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org scope.setVariableValue(variable_name, new_value); 202649a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 202749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var new_value_mirror = MakeMirror(new_value); 202849a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 202949a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org response.body = { 203049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org newValue: new_value_mirror 203149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org }; 203249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org}; 203349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 203449a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 203543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebugCommandProcessor.prototype.evaluateRequest_ = function(request, response) { 203643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!request.arguments) { 203743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return response.failed('Missing arguments'); 203843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 203943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 204043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Pull out arguments. 204143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var expression = request.arguments.expression; 204243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var frame = request.arguments.frame; 204343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var global = request.arguments.global; 2044bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund var disable_break = request.arguments.disable_break; 20455f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org var additional_context = request.arguments.additional_context; 2046bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund 2047bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund // The expression argument could be an integer so we convert it to a 2048bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund // string. 2049bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund try { 2050bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund expression = String(expression); 2051bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund } catch(e) { 2052bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund return response.failed('Failed to convert expression argument to string'); 2053bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund } 205443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 205543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Check for legal arguments. 205643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_UNDEFINED(frame) && global) { 205743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return response.failed('Arguments "frame" and "global" are exclusive'); 205843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 205928a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org 20605f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org var additional_context_object; 20615f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org if (additional_context) { 20625f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org additional_context_object = {}; 20635f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org for (var i = 0; i < additional_context.length; i++) { 20645f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org var mapping = additional_context[i]; 2065a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org 2066a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org if (!IS_STRING(mapping.name)) { 206728a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org return response.failed("Context element #" + i + 2068a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org " doesn't contain name:string property"); 20695f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org } 2070a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org 2071a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org var raw_value = DebugCommandProcessor.resolveValue_(mapping); 2072a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org additional_context_object[mapping.name] = raw_value; 20735f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org } 20745f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org } 207543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 207643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Global evaluate. 207743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (global) { 207846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org // Evaluate in the native context. 20795f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org response.body = this.exec_state_.evaluateGlobal( 20805f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org expression, Boolean(disable_break), additional_context_object); 208143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 208243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 208343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2084bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund // Default value for disable_break is true. 2085bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund if (IS_UNDEFINED(disable_break)) { 2086bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund disable_break = true; 2087bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund } 2088bd3ec4e5037180e591d597bc7a8c92200798c3dbkasper.lund 2089381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org // No frames no evaluate in frame. 2090381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org if (this.exec_state_.frameCount() == 0) { 2091381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org return response.failed('No frames'); 2092381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org } 2093381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org 209443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Check whether a frame was specified. 209543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_UNDEFINED(frame)) { 209643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var frame_number = %ToNumber(frame); 20979a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com if (frame_number < 0 || frame_number >= this.exec_state_.frameCount()) { 209843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return response.failed('Invalid frame "' + frame + '"'); 209943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 210043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Evaluate in the specified frame. 21019a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com response.body = this.exec_state_.frame(frame_number).evaluate( 21025f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org expression, Boolean(disable_break), additional_context_object); 210343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 210443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 210543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Evaluate in the selected frame. 21069a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com response.body = this.exec_state_.frame().evaluate( 21075f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org expression, Boolean(disable_break), additional_context_object); 210843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 210943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 211043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 211143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 211243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2113ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgDebugCommandProcessor.prototype.lookupRequest_ = function(request, response) { 2114ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (!request.arguments) { 2115ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return response.failed('Missing arguments'); 2116ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 2117ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 2118ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org // Pull out arguments. 211965dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org var handles = request.arguments.handles; 2120ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 2121ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org // Check for legal arguments. 212265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org if (IS_UNDEFINED(handles)) { 212365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org return response.failed('Argument "handles" missing'); 2124ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 2125ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 2126b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org // Set 'includeSource' option for script lookup. 2127b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org if (!IS_UNDEFINED(request.arguments.includeSource)) { 2128b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org includeSource = %ToBoolean(request.arguments.includeSource); 2129b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org response.setOption('includeSource', includeSource); 2130b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } 2131c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org 213265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // Lookup handles. 213365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org var mirrors = {}; 213465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org for (var i = 0; i < handles.length; i++) { 213565dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org var handle = handles[i]; 213665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org var mirror = LookupMirror(handle); 213765dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org if (!mirror) { 213865dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org return response.failed('Object #' + handle + '# not found'); 213965dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org } 214065dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org mirrors[handle] = mirror; 2141ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 214265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org response.body = mirrors; 2143ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org}; 2144ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 2145ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 2146245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgDebugCommandProcessor.prototype.referencesRequest_ = 2147245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org function(request, response) { 2148245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (!request.arguments) { 2149245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return response.failed('Missing arguments'); 2150245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 2151245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 2152245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org // Pull out arguments. 2153245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org var type = request.arguments.type; 2154245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org var handle = request.arguments.handle; 2155245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 2156245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org // Check for legal arguments. 2157245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (IS_UNDEFINED(type)) { 2158245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return response.failed('Argument "type" missing'); 2159245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 2160245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (IS_UNDEFINED(handle)) { 2161245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return response.failed('Argument "handle" missing'); 2162245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 2163245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (type != 'referencedBy' && type != 'constructedBy') { 2164245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return response.failed('Invalid type "' + type + '"'); 2165245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 2166245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 2167245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org // Lookup handle and return objects with references the object. 2168245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org var mirror = LookupMirror(handle); 2169245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (mirror) { 2170245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (type == 'referencedBy') { 2171245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org response.body = mirror.referencedBy(); 2172245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } else { 2173245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org response.body = mirror.constructedBy(); 2174245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 2175245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } else { 2176245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return response.failed('Object #' + handle + '# not found'); 2177245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 2178245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org}; 2179245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 2180245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 218143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebugCommandProcessor.prototype.sourceRequest_ = function(request, response) { 218237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // No frames no source. 218337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (this.exec_state_.frameCount() == 0) { 218437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return response.failed('No source'); 218537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 218637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 218743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var from_line; 218843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var to_line; 21899a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com var frame = this.exec_state_.frame(); 219043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (request.arguments) { 219143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Pull out arguments. 219243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen from_line = request.arguments.fromLine; 219343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen to_line = request.arguments.toLine; 219443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 219543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_UNDEFINED(request.arguments.frame)) { 219643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var frame_number = %ToNumber(request.arguments.frame); 21979a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com if (frame_number < 0 || frame_number >= this.exec_state_.frameCount()) { 219843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return response.failed('Invalid frame "' + frame + '"'); 219943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 22009a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com frame = this.exec_state_.frame(frame_number); 220143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 220243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 220343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 220443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Get the script selected. 220543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var script = frame.func().script(); 220643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!script) { 220743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return response.failed('No source'); 220843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 220943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 221043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Get the source slice and fill it into the response. 221143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var slice = script.sourceSlice(from_line, to_line); 221243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!slice) { 221343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return response.failed('Invalid line interval'); 221443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 221543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body = {}; 221643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body.source = slice.sourceText(); 221743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body.fromLine = slice.from_line; 221843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body.toLine = slice.to_line; 221943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body.fromPosition = slice.from_position; 222043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body.toPosition = slice.to_position; 222143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body.totalLines = script.lineCount(); 222243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 222343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 222443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 222543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebugCommandProcessor.prototype.scriptsRequest_ = function(request, response) { 222643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen var types = ScriptTypeFlag(Debug.ScriptType.Normal); 222741826e77311db718135ef6517b846933dfd275f3ager@chromium.org var includeSource = false; 2228b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org var idsToInclude = null; 222943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (request.arguments) { 223043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Pull out arguments. 223143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IS_UNDEFINED(request.arguments.types)) { 223243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen types = %ToNumber(request.arguments.types); 223343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (isNaN(types) || types < 0) { 22341b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org return response.failed('Invalid types "' + 22351b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org request.arguments.types + '"'); 223643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 223743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 223825156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 223941826e77311db718135ef6517b846933dfd275f3ager@chromium.org if (!IS_UNDEFINED(request.arguments.includeSource)) { 224041826e77311db718135ef6517b846933dfd275f3ager@chromium.org includeSource = %ToBoolean(request.arguments.includeSource); 22419085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org response.setOption('includeSource', includeSource); 224241826e77311db718135ef6517b846933dfd275f3ager@chromium.org } 224325156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 2244b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org if (IS_ARRAY(request.arguments.ids)) { 2245b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org idsToInclude = {}; 2246b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org var ids = request.arguments.ids; 2247b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org for (var i = 0; i < ids.length; i++) { 2248b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org idsToInclude[ids[i]] = true; 2249b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } 2250b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } 2251d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 2252d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var filterStr = null; 2253d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var filterNum = null; 2254d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (!IS_UNDEFINED(request.arguments.filter)) { 2255d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var num = %ToNumber(request.arguments.filter); 2256d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (!isNaN(num)) { 2257d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org filterNum = num; 2258d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 2259d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org filterStr = request.arguments.filter; 2260d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 226143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 226243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 226343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Collect all scripts in the heap. 2264e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org var scripts = %DebugGetLoadedScripts(); 226543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 226643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen response.body = []; 226743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 226843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = 0; i < scripts.length; i++) { 2269b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org if (idsToInclude && !idsToInclude[scripts[i].id]) { 2270b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org continue; 2271b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } 2272d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (filterStr || filterNum) { 2273d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var script = scripts[i]; 2274d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var found = false; 2275d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (filterNum && !found) { 2276d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (script.id && script.id === filterNum) { 2277d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org found = true; 2278d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 2279d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 2280d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (filterStr && !found) { 2281d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (script.name && script.name.indexOf(filterStr) >= 0) { 2282d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org found = true; 2283d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 2284d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 2285d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (!found) continue; 2286d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 228743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (types & ScriptTypeFlag(scripts[i].type)) { 22889085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org response.body.push(MakeMirror(scripts[i])); 228943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 229043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 229143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 229243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 229343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2294bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgDebugCommandProcessor.prototype.threadsRequest_ = function(request, response) { 2295bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org // Get the number of threads. 2296bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org var total_threads = this.exec_state_.threadCount(); 2297bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 2298bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org // Get information for all threads. 2299bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org var threads = []; 2300bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org for (var i = 0; i < total_threads; i++) { 2301bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org var details = %GetThreadDetails(this.exec_state_.break_id, i); 2302bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org var thread_info = { current: details[0], 2303bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org id: details[1] 23041b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org }; 2305bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org threads.push(thread_info); 2306bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org } 2307bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 2308bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org // Create the response body. 2309bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org response.body = { 2310bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org totalThreads: total_threads, 2311bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org threads: threads 23121b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org }; 2313bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org}; 2314bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 2315bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 23169d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comDebugCommandProcessor.prototype.suspendRequest_ = function(request, response) { 23179d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com response.running = false; 23189d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com}; 23199d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 23209d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 23213811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgDebugCommandProcessor.prototype.versionRequest_ = function(request, response) { 23223811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org response.body = { 23233811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org V8Version: %GetV8Version() 23241b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org }; 23253811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org}; 23263811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 23273811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 23281b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgDebugCommandProcessor.prototype.changeLiveRequest_ = function( 23291b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org request, response) { 2330ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org if (!request.arguments) { 2331ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org return response.failed('Missing arguments'); 2332ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org } 2333ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org var script_id = request.arguments.script_id; 233469ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org var preview_only = !!request.arguments.preview_only; 233542841968c3c92e3b07bcd67e79eb6ba3f83032c1vegorov@chromium.org 2336e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org var scripts = %DebugGetLoadedScripts(); 2337ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 2338ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org var the_script = null; 2339ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org for (var i = 0; i < scripts.length; i++) { 2340ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org if (scripts[i].id == script_id) { 2341ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org the_script = scripts[i]; 2342ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org } 2343ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org } 2344ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org if (!the_script) { 2345ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org response.failed('Script not found'); 2346ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org return; 2347ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org } 234825156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 2349ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org var change_log = new Array(); 2350e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org 23514111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org if (!IS_STRING(request.arguments.new_source)) { 23524111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org throw "new_source argument expected"; 235325156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org } 235425156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 23554111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org var new_source = request.arguments.new_source; 235642841968c3c92e3b07bcd67e79eb6ba3f83032c1vegorov@chromium.org 235749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org var result_description; 235849a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org try { 235949a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org result_description = Debug.LiveEdit.SetScriptSource(the_script, 236049a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org new_source, preview_only, change_log); 236149a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } catch (e) { 236249a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org if (e instanceof Debug.LiveEdit.Failure && "details" in e) { 236349a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org response.failed(e.message, e.details); 236449a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org return; 236549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } 236649a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org throw e; 236749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org } 236869ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org response.body = {change_log: change_log, result: result_description}; 236942841968c3c92e3b07bcd67e79eb6ba3f83032c1vegorov@chromium.org 2370e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org if (!preview_only && !this.running_ && result_description.stack_modified) { 2371e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org response.body.stepin_recommended = true; 2372e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org } 2373ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org}; 2374ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 2375ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 23765a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.orgDebugCommandProcessor.prototype.restartFrameRequest_ = function( 23775a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org request, response) { 23785a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org if (!request.arguments) { 23795a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org return response.failed('Missing arguments'); 23805a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org } 23815a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org var frame = request.arguments.frame; 23825a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org 23835a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org // No frames to evaluate in frame. 23845a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org if (this.exec_state_.frameCount() == 0) { 23855a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org return response.failed('No frames'); 23865a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org } 23875a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org 23885a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org var frame_mirror; 23895a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org // Check whether a frame was specified. 23905a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org if (!IS_UNDEFINED(frame)) { 23915a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org var frame_number = %ToNumber(frame); 23925a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org if (frame_number < 0 || frame_number >= this.exec_state_.frameCount()) { 23935a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org return response.failed('Invalid frame "' + frame + '"'); 23945a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org } 23955a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org // Restart specified frame. 23965a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org frame_mirror = this.exec_state_.frame(frame_number); 23975a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org } else { 23985a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org // Restart selected frame. 23995a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org frame_mirror = this.exec_state_.frame(); 24005a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org } 24015a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org 24025a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org var result_description = Debug.LiveEdit.RestartFrame(frame_mirror); 24035a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org response.body = {result: result_description}; 24045a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org}; 24055a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org 24065a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org 2407e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.orgDebugCommandProcessor.prototype.debuggerFlagsRequest_ = function(request, 2408e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org response) { 2409e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org // Check for legal request. 2410e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org if (!request.arguments) { 2411e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org response.failed('Missing arguments'); 2412e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org return; 2413e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org } 2414e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org 2415e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org // Pull out arguments. 2416e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org var flags = request.arguments.flags; 2417e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org 2418e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org response.body = { flags: [] }; 2419e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org if (!IS_UNDEFINED(flags)) { 2420e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org for (var i = 0; i < flags.length; i++) { 2421e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org var name = flags[i].name; 2422e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org var debugger_flag = debugger_flags[name]; 2423e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org if (!debugger_flag) { 2424e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org continue; 2425e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org } 2426e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org if ('value' in flags[i]) { 2427e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org debugger_flag.setValue(flags[i].value); 2428e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org } 2429e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org response.body.flags.push({ name: name, value: debugger_flag.getValue() }); 2430e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org } 2431e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org } else { 2432e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org for (var name in debugger_flags) { 2433e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org var value = debugger_flags[name].getValue(); 2434e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org response.body.flags.push({ name: name, value: value }); 2435e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org } 2436e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org } 24371b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 2438e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org 2439e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org 2440d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDebugCommandProcessor.prototype.v8FlagsRequest_ = function(request, response) { 2441d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var flags = request.arguments.flags; 2442d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (!flags) flags = ''; 2443d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org %SetFlags(flags); 2444d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org}; 2445d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 2446d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 2447d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDebugCommandProcessor.prototype.gcRequest_ = function(request, response) { 2448d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var type = request.arguments.type; 2449d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (!type) type = 'all'; 2450d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 2451d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var before = %GetHeapUsage(); 2452d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org %CollectGarbage(type); 2453d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var after = %GetHeapUsage(); 2454d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 2455d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org response.body = { "before": before, "after": after }; 2456d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org}; 2457d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 2458d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 2459285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.orgDebugCommandProcessor.prototype.dispatch_ = (function() { 2460285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org var proto = DebugCommandProcessor.prototype; 2461285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org return { 2462285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "continue": proto.continueRequest_, 2463285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "break" : proto.breakRequest_, 2464285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "setbreakpoint" : proto.setBreakPointRequest_, 2465285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "changebreakpoint": proto.changeBreakPointRequest_, 2466285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "clearbreakpoint": proto.clearBreakPointRequest_, 2467285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "clearbreakpointgroup": proto.clearBreakPointGroupRequest_, 2468285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "disconnect": proto.disconnectRequest_, 2469285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "setexceptionbreak": proto.setExceptionBreakRequest_, 2470285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "listbreakpoints": proto.listBreakpointsRequest_, 2471285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "backtrace": proto.backtraceRequest_, 2472285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "frame": proto.frameRequest_, 2473285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "scopes": proto.scopesRequest_, 2474285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "scope": proto.scopeRequest_, 2475285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "setvariablevalue": proto.setVariableValueRequest_, 2476285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "evaluate": proto.evaluateRequest_, 2477285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "lookup": proto.lookupRequest_, 2478285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "references": proto.referencesRequest_, 2479285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "source": proto.sourceRequest_, 2480285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "scripts": proto.scriptsRequest_, 2481285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "threads": proto.threadsRequest_, 2482285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "suspend": proto.suspendRequest_, 2483285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "version": proto.versionRequest_, 2484285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "changelive": proto.changeLiveRequest_, 2485285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "restartframe": proto.restartFrameRequest_, 2486285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "flags": proto.debuggerFlagsRequest_, 2487285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "v8flag": proto.v8FlagsRequest_, 2488285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org "gc": proto.gcRequest_, 2489285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org }; 2490285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org})(); 2491285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org 2492285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org 2493245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org// Check whether the previously processed command caused the VM to become 2494245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org// running. 2495245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgDebugCommandProcessor.prototype.isRunning = function() { 2496245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return this.running_; 24971b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 249843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 249943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 250043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenDebugCommandProcessor.prototype.systemBreak = function(cmd, args) { 250131e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager return %SystemBreak(); 250243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 250343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 250443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 250543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 2506b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * Convert an Object to its debugger protocol representation. The representation 2507b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * may be serilized to a JSON object using JSON.stringify(). 2508b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * This implementation simply runs through all string property names, converts 2509b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * each property value to a protocol value and adds the property to the result 2510b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * object. For type "object" the function will be called recursively. Note that 2511b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * circular structures will cause infinite recursion. 2512b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * @param {Object} object The object to format as protocol object. 25133291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org * @param {MirrorSerializer} mirror_serializer The serializer to use if any 25143291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org * mirror objects are encountered. 2515b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * @return {Object} Protocol object value. 251643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 2517b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.orgfunction ObjectToProtocolObject_(object, mirror_serializer) { 2518b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org var content = {}; 251943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var key in object) { 252043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Only consider string keys. 252143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (typeof key == 'string') { 252243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Format the value based on its type. 2523b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org var property_value_json = ValueToProtocolValue_(object[key], 2524b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org mirror_serializer); 252543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Add the property if relevant. 2526b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org if (!IS_UNDEFINED(property_value_json)) { 2527b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org content[key] = property_value_json; 252843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 252943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 253043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 253125156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 2532b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org return content; 253341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 253443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2535b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 253643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 2537b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * Convert an array to its debugger protocol representation. It will convert 2538b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * each array element to a protocol value. 2539b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * @param {Array} array The array to format as protocol array. 25403291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org * @param {MirrorSerializer} mirror_serializer The serializer to use if any 25413291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org * mirror objects are encountered. 2542b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * @return {Array} Protocol array value. 254343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 2544b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.orgfunction ArrayToProtocolArray_(array, mirror_serializer) { 2545b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org var json = []; 254643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (var i = 0; i < array.length; i++) { 2547b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json.push(ValueToProtocolValue_(array[i], mirror_serializer)); 2548b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } 2549b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org return json; 2550b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org} 2551b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 2552b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 2553b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org/** 255425156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org * Convert a value to its debugger protocol representation. 2555b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * @param {*} value The value to format as protocol value. 2556b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * @param {MirrorSerializer} mirror_serializer The serializer to use if any 2557b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * mirror objects are encountered. 2558b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org * @return {*} Protocol value. 2559b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org */ 2560b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.orgfunction ValueToProtocolValue_(value, mirror_serializer) { 2561b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org // Format the value based on its type. 2562b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org var json; 2563b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org switch (typeof value) { 2564b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org case 'object': 2565b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org if (value instanceof Mirror) { 2566b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json = mirror_serializer.serializeValue(value); 2567b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } else if (IS_ARRAY(value)){ 2568b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json = ArrayToProtocolArray_(value, mirror_serializer); 2569b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } else { 2570b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json = ObjectToProtocolObject_(value, mirror_serializer); 2571b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } 2572b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org break; 2573b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 2574b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org case 'boolean': 2575b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org case 'string': 2576b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org case 'number': 2577b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json = value; 25781b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org break; 2579b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 2580b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org default: 2581b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org json = null; 258243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 258343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return json; 258441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 258549a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org 258649a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.orgDebug.TestApi = { 258749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org CommandProcessorResolveValue: DebugCommandProcessor.resolveValue_ 258849a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.org}; 2589