15a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// Copyright 2008 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. 45a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 5f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org"use strict"; 6f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org 75a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgString.prototype.startsWith = function (str) { 81b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org if (str.length > this.length) { 95a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org return false; 101b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org } 115a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org return this.substr(0, str.length) == str; 121b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 1437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comfunction log10(num) { 1537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return Math.log(num)/Math.log(10); 1637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com} 175a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 185a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgfunction ToInspectableObject(obj) { 195a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org if (!obj && typeof obj === 'object') { 20690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org return UNDEFINED; 215a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org } else { 225a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org return Object(obj); 235a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org } 245a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org} 255a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 265a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgfunction GetCompletions(global, last, full) { 275a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org var full_tokens = full.split(); 285a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org full = full_tokens.pop(); 295a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org var parts = full.split('.'); 305a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org parts.pop(); 315a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org var current = global; 325a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org for (var i = 0; i < parts.length; i++) { 335a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org var part = parts[i]; 345a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org var next = current[part]; 351b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org if (!next) { 365a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org return []; 371b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org } 385a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org current = next; 395a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org } 405a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org var result = []; 415a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org current = ToInspectableObject(current); 425a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org while (typeof current !== 'undefined') { 435a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org var mirror = new $debug.ObjectMirror(current); 445a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org var properties = mirror.properties(); 455a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org for (var i = 0; i < properties.length; i++) { 465a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org var name = properties[i].name(); 471b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org if (typeof name === 'string' && name.startsWith(last)) { 485a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org result.push(name); 491b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org } 505a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org } 51750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org current = ToInspectableObject(Object.getPrototypeOf(current)); 525a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org } 535a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org return result; 545a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org} 5537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 5637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 5737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Global object holding debugger related constants and state. 58f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgvar Debug = {}; 5937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 6037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 6137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Debug events which can occour in the V8 JavaScript engine. These originate 62245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org// from the API include file v8-debug.h. 6337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebug.DebugEvent = { Break: 1, 6437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com Exception: 2, 6537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com NewFunction: 3, 6637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com BeforeCompile: 4, 6737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com AfterCompile: 5 }; 6837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 6937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 7037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// The different types of scripts matching enum ScriptType in objects.h. 7137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebug.ScriptType = { Native: 0, 7237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com Extension: 1, 7337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com Normal: 2 }; 7437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 7537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 76e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org// The different types of script compilations matching enum 77e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org// Script::CompilationType in objects.h. 78e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.orgDebug.ScriptCompilationType = { Host: 0, 79e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org Eval: 1, 80e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org JSON: 2 }; 81e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org 82e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org 83eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org// The different types of scopes matching constants runtime.cc. 84eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.orgDebug.ScopeType = { Global: 0, 85eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org Local: 1, 86eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org With: 2, 87a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org Closure: 3, 884acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org Catch: 4, 894acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org Block: 5 }; 90eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 91eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 9237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Current debug state. 93f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgvar kNoFrame = -1; 9437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebug.State = { 9537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com currentFrame: kNoFrame, 96d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org displaySourceStartLine: -1, 97d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org displaySourceEndLine: -1, 9837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com currentSourceLine: -1 991b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 100245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgvar trace_compile = false; // Tracing all compile events? 101d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgvar trace_debug_json = false; // Tracing all debug json packets? 102ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.orgvar last_cmd = ''; 103d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgvar repeat_cmd_line = ''; 104d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgvar is_running = true; 105ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.org// Global variable used to store whether a handle was requested. 106ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.orgvar lookup_handle = null; 107d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 108d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org// Copied from debug-delay.js. This is needed below: 109d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgfunction ScriptTypeFlag(type) { 110d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return (1 << type); 111d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org} 11237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 11337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 1147be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// Process a debugger JSON message into a display text and a running status. 1157be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// This function returns an object with properties "text" and "running" holding 1167be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// this information. 1177be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgfunction DebugMessageDetails(message) { 118d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (trace_debug_json) { 119d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print("received: '" + message + "'"); 120d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 121061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org // Convert the JSON string to an object. 1227be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org var response = new ProtocolPackage(message); 123d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org is_running = response.running(); 1247be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 1257be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org if (response.type() == 'event') { 1267be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org return DebugEventDetails(response); 1277be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org } else { 1287be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org return DebugResponseDetails(response); 1297be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org } 1307be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org} 1317be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 1327be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgfunction DebugEventDetails(response) { 133ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.org var details = {text:'', running:false}; 1347be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 1357be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org // Get the running state. 1367be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org details.running = response.running(); 137061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org 138061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org var body = response.body(); 1397be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org var result = ''; 140061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org switch (response.event()) { 141061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org case 'break': 142061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org if (body.breakpoints) { 1437be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += 'breakpoint'; 144061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org if (body.breakpoints.length > 1) { 1457be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += 's'; 14637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 1477be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += ' #'; 148061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org for (var i = 0; i < body.breakpoints.length; i++) { 149245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (i > 0) { 1507be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += ', #'; 151245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 1527be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += body.breakpoints[i]; 15337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 154245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } else { 1557be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += 'break'; 15637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 1577be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += ' in '; 1587be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += body.invocationText; 1597be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += ', '; 1607be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += SourceInfo(body); 1617be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += '\n'; 1627be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += SourceUnderline(body.sourceLineText, body.sourceColumn); 163061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org Debug.State.currentSourceLine = body.sourceLine; 164d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.displaySourceStartLine = -1; 165d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.displaySourceEndLine = -1; 16637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com Debug.State.currentFrame = 0; 1677be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org details.text = result; 1687be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org break; 16925156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 170061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org case 'exception': 171061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org if (body.uncaught) { 1727be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += 'Uncaught: '; 173245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } else { 1747be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += 'Exception: '; 175245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 1767be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += '"'; 1777be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += body.exception.text; 1787be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += '"'; 179061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org if (body.sourceLine >= 0) { 1807be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += ', '; 1817be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += SourceInfo(body); 1827be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += '\n'; 1837be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += SourceUnderline(body.sourceLineText, body.sourceColumn); 184061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org Debug.State.currentSourceLine = body.sourceLine; 185d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.displaySourceStartLine = -1; 186d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.displaySourceEndLine = -1; 187245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org Debug.State.currentFrame = 0; 188245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } else { 1897be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += ' (empty stack)'; 190245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org Debug.State.currentSourceLine = -1; 191d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.displaySourceStartLine = -1; 192d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.displaySourceEndLine = -1; 193245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org Debug.State.currentFrame = kNoFrame; 194245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 1957be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org details.text = result; 1967be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org break; 197061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org 198061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org case 'afterCompile': 199245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (trace_compile) { 2001b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org result = 'Source ' + body.script.name + ' compiled:\n'; 201061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org var source = body.script.source; 202245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (!(source[source.length - 1] == '\n')) { 2037be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += source; 204245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } else { 2057be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += source.substring(0, source.length - 1); 206245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 207245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 2087be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org details.text = result; 2097be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org break; 2107be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 2117be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org default: 2127be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org details.text = 'Unknown debug event ' + response.event(); 21337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 2147be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 2157be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org return details; 2161b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org} 21737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 21837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 219061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.orgfunction SourceInfo(body) { 220061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org var result = ''; 22125156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 222061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org if (body.script) { 223061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org if (body.script.name) { 224061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org result += body.script.name; 225061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org } else { 226061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org result += '[unnamed]'; 227061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org } 228061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org } 229061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org result += ' line '; 230061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org result += body.sourceLine + 1; 231061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org result += ' column '; 232061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org result += body.sourceColumn + 1; 23325156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 234061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org return result; 235061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org} 236061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org 237061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org 23837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comfunction SourceUnderline(source_text, position) { 23937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (!source_text) { 24037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return; 24137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 24237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 24337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Create an underline with a caret pointing to the source position. If the 24437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // source contains a tab character the underline will have a tab character in 24537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // the same place otherwise the underline will have a space character. 24637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var underline = ''; 24737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com for (var i = 0; i < position; i++) { 24837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (source_text[i] == '\t') { 24937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com underline += '\t'; 25037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else { 25137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com underline += ' '; 25237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 25337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 25437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com underline += '^'; 25537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 25637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Return the source line text with the underline beneath. 25737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return source_text + '\n' + underline; 2581b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org} 25937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 26037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 26137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Converts a text command to a JSON request. 26237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comfunction DebugCommandToJSONRequest(cmd_line) { 263d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var result = new DebugRequest(cmd_line).JSONRequest(); 264d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (trace_debug_json && result) { 265d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print("sending: '" + result + "'"); 266d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 267d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return result; 2681b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org} 26937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 27037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 27137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comfunction DebugRequest(cmd_line) { 27237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // If the very first character is a { assume that a JSON request have been 27337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // entered as a command. Converting that to a JSON request is trivial. 27437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (cmd_line && cmd_line.length > 0 && cmd_line.charAt(0) == '{') { 27537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.request_ = cmd_line; 27637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return; 27737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 27837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 279d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Check for a simple carriage return to repeat the last command: 280d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var is_repeating = false; 281d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (cmd_line == '\n') { 282d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (is_running) { 283d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org cmd_line = 'break'; // Not in debugger mode, break with a frame request. 284d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else { 285d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org cmd_line = repeat_cmd_line; // use command to repeat. 286d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org is_repeating = true; 287d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 288d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 289d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (!is_running) { // Only save the command if in debugger mode. 290d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org repeat_cmd_line = cmd_line; // save last command. 291d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 292d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 29337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Trim string for leading and trailing whitespace. 29437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com cmd_line = cmd_line.replace(/^\s+|\s+$/g, ''); 29537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 29637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Find the command. 29737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var pos = cmd_line.indexOf(' '); 29837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var cmd; 29937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var args; 30037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (pos == -1) { 30137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com cmd = cmd_line; 30237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com args = ''; 30337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else { 30437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com cmd = cmd_line.slice(0, pos); 30537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com args = cmd_line.slice(pos).replace(/^\s+|\s+$/g, ''); 30637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 30737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 308d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if ((cmd === undefined) || !cmd) { 309690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org this.request_ = UNDEFINED; 310d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return; 311d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 312d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 313d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org last_cmd = cmd; 314d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 31537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Switch on command. 31637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com switch (cmd) { 31737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'continue': 31837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'c': 31937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.request_ = this.continueCommandToJSONRequest_(args); 32037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 32137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 32237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'step': 32337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 's': 324d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = this.stepCommandToJSONRequest_(args, 'in'); 325d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 326d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 327d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'stepi': 328d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'si': 329d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = this.stepCommandToJSONRequest_(args, 'min'); 330d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 331d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 332d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'next': 333d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'n': 334d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = this.stepCommandToJSONRequest_(args, 'next'); 335d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 336d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 337d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'finish': 338d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'fin': 339d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = this.stepCommandToJSONRequest_(args, 'out'); 34037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 34137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 34237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'backtrace': 34337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'bt': 34437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.request_ = this.backtraceCommandToJSONRequest_(args); 34537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 34625156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 34737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'frame': 34837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'f': 34937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.request_ = this.frameCommandToJSONRequest_(args); 35037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 35125156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 352eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org case 'scopes': 353eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org this.request_ = this.scopesCommandToJSONRequest_(args); 354eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org break; 35525156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 356eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org case 'scope': 357eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org this.request_ = this.scopeCommandToJSONRequest_(args); 358eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org break; 35925156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 360d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'disconnect': 361d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'exit': 362d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'quit': 363d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = this.disconnectCommandToJSONRequest_(args); 364d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 365d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 366d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'up': 367d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = 368d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.frameCommandToJSONRequest_('' + 369d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org (Debug.State.currentFrame + 1)); 370d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 37128a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org 372d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'down': 373d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'do': 374d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = 375d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.frameCommandToJSONRequest_('' + 376d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org (Debug.State.currentFrame - 1)); 377d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 37828a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org 379d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'set': 38037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'print': 38137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'p': 38237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.request_ = this.printCommandToJSONRequest_(args); 38337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 38437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 385ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org case 'dir': 386ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org this.request_ = this.dirCommandToJSONRequest_(args); 387ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org break; 388ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 389245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org case 'references': 390245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org this.request_ = this.referencesCommandToJSONRequest_(args); 391245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org break; 392245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 393245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org case 'instances': 394245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org this.request_ = this.instancesCommandToJSONRequest_(args); 395245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org break; 396245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 397d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'list': 398d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'l': 399d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = this.listCommandToJSONRequest_(args); 400d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 40137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'source': 40237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.request_ = this.sourceCommandToJSONRequest_(args); 40337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 40425156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 40537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'scripts': 406d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'script': 407d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'scr': 40837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.request_ = this.scriptsCommandToJSONRequest_(args); 40937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 41025156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 41137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'break': 41237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'b': 41337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.request_ = this.breakCommandToJSONRequest_(args); 41437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 41525156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 416dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org case 'breakpoints': 417dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org case 'bb': 418dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org this.request_ = this.breakpointsCommandToJSONRequest_(args); 419dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org break; 420dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org 42137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'clear': 422d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'delete': 423d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'd': 42437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.request_ = this.clearCommandToJSONRequest_(args); 42537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 42637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 427bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org case 'threads': 428bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org this.request_ = this.threadsCommandToJSONRequest_(args); 429bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org break; 430bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 431d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'cond': 432d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = this.changeBreakpointCommandToJSONRequest_(args, 'cond'); 433d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 434d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 435d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'enable': 436d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'en': 437d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = 438d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.changeBreakpointCommandToJSONRequest_(args, 'enable'); 439d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 440d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 441d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'disable': 442d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'dis': 443d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = 444d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.changeBreakpointCommandToJSONRequest_(args, 'disable'); 445d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 446d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 447d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'ignore': 448d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = 449d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.changeBreakpointCommandToJSONRequest_(args, 'ignore'); 450d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 451d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 452d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'info': 453d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'inf': 454d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = this.infoCommandToJSONRequest_(args); 455d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 456d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 457d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'flags': 458d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = this.v8FlagsToJSONRequest_(args); 459d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 460d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 461d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'gc': 462d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = this.gcToJSONRequest_(args); 463d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 464d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 465245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org case 'trace': 466d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'tr': 467245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org // Return undefined to indicate command handled internally (no JSON). 468690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org this.request_ = UNDEFINED; 469245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org this.traceCommand_(args); 470245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org break; 471245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 47237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'help': 47337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case '?': 47437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.helpCommand_(args); 475245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org // Return undefined to indicate command handled internally (no JSON). 476690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org this.request_ = UNDEFINED; 47737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 47837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 47937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com default: 48037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com throw new Error('Unknown command "' + cmd + '"'); 48137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 48237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com} 48337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 48437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebugRequest.prototype.JSONRequest = function() { 48537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return this.request_; 4861b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 48737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 48837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 48937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comfunction RequestPacket(command) { 49037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.seq = 0; 49137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.type = 'request'; 49237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.command = command; 49337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com} 49437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 49537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 49637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comRequestPacket.prototype.toJSONProtocol = function() { 49737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Encode the protocol header. 49837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var json = '{'; 49937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com json += '"seq":' + this.seq; 50037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com json += ',"type":"' + this.type + '"'; 50137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (this.command) { 502285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org json += ',"command":' + JSON.stringify(this.command); 50337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 50437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (this.arguments) { 50537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com json += ',"arguments":'; 50637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Encode the arguments part. 50737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (this.arguments.toJSONProtocol) { 5081b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org json += this.arguments.toJSONProtocol(); 50937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else { 510285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org json += JSON.stringify(this.arguments); 51137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 51237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 51337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com json += '}'; 51437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return json; 5151b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 51637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 51737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 51837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebugRequest.prototype.createRequest = function(command) { 51937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return new RequestPacket(command); 52037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com}; 52137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 52237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 523ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org// Create a JSON request for the evaluation command. 524ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgDebugRequest.prototype.makeEvaluateJSONRequest_ = function(expression) { 525eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org lookup_handle = null; 5269ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 527ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org // Check if the expression is a handle id in the form #<handle>#. 528ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org var handle_match = expression.match(/^#([0-9]*)#$/); 529ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (handle_match) { 530eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org // Remember the handle requested in a global variable. 531eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org lookup_handle = parseInt(handle_match[1]); 532245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org // Build a lookup request. 533ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org var request = this.createRequest('lookup'); 534ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org request.arguments = {}; 535eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org request.arguments.handles = [ lookup_handle ]; 536ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return request.toJSONProtocol(); 537ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } else { 538ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org // Build an evaluate request. 539ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org var request = this.createRequest('evaluate'); 540ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org request.arguments = {}; 541ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org request.arguments.expression = expression; 542381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org // Request a global evaluation if there is no current frame. 543381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org if (Debug.State.currentFrame == kNoFrame) { 544381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org request.arguments.global = true; 545381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org } 546ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return request.toJSONProtocol(); 547ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 548ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org}; 549ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 550ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 551245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org// Create a JSON request for the references/instances command. 552245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgDebugRequest.prototype.makeReferencesJSONRequest_ = function(handle, type) { 553245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org // Build a references request. 554245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org var handle_match = handle.match(/^#([0-9]*)#$/); 555245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (handle_match) { 556245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org var request = this.createRequest('references'); 557245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org request.arguments = {}; 558245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org request.arguments.type = type; 559245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org request.arguments.handle = parseInt(handle_match[1]); 560245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return request.toJSONProtocol(); 561245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } else { 562245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org throw new Error('Invalid object id.'); 563245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 564245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org}; 565245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 566ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 56737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Create a JSON request for the continue command. 56837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebugRequest.prototype.continueCommandToJSONRequest_ = function(args) { 56937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var request = this.createRequest('continue'); 57037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return request.toJSONProtocol(); 57137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com}; 57237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 57337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 57437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Create a JSON request for the step command. 575d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDebugRequest.prototype.stepCommandToJSONRequest_ = function(args, type) { 57637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Requesting a step is through the continue command with additional 57737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // arguments. 57837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var request = this.createRequest('continue'); 57937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments = {}; 58037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 58137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Process arguments if any. 582d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 583d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Only process args if the command is 'step' which is indicated by type being 584d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // set to 'in'. For all other commands, ignore the args. 58537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (args && args.length > 0) { 586d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org args = args.split(/\s+/g); 58737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 58837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (args.length > 2) { 58937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com throw new Error('Invalid step arguments.'); 59037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 59137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 59237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (args.length > 0) { 593d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Check if we have a gdb stype step command. If so, the 1st arg would 594d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // be the step count. If it's not a number, then assume that we're 595d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // parsing for the legacy v8 step command. 596d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var stepcount = Number(args[0]); 597d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (stepcount == Number.NaN) { 598d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // No step count at arg 1. Process as legacy d8 step command: 599d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (args.length == 2) { 600d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var stepcount = parseInt(args[1]); 601d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (isNaN(stepcount) || stepcount <= 0) { 602d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org throw new Error('Invalid step count argument "' + args[0] + '".'); 603d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 604d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.stepcount = stepcount; 60537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 60637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 607d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Get the step action. 608d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org switch (args[0]) { 609d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'in': 610d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'i': 611d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.stepaction = 'in'; 612d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 61325156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 614d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'min': 615d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'm': 616d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.stepaction = 'min'; 617d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 61825156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 619d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'next': 620d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'n': 621d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.stepaction = 'next'; 622d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 62325156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 624d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'out': 625d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'o': 626d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.stepaction = 'out'; 627d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 62825156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 629d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org default: 630d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org throw new Error('Invalid step argument "' + args[0] + '".'); 631d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 632d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 633d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else { 634d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // gdb style step commands: 635d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.stepaction = type; 636d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.stepcount = stepcount; 63737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 63837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 63937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else { 640d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Default is step of the specified type. 641d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.stepaction = type; 64237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 64337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 64437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return request.toJSONProtocol(); 64537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com}; 64637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 64737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 64837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Create a JSON request for the backtrace command. 64937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebugRequest.prototype.backtraceCommandToJSONRequest_ = function(args) { 65037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Build a backtrace request from the text command. 65137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var request = this.createRequest('backtrace'); 65225156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 653b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org // Default is to show top 10 frames. 654b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org request.arguments = {}; 655b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org request.arguments.fromFrame = 0; 656b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org request.arguments.toFrame = 10; 657b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 65837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com args = args.split(/\s*[ ]+\s*/g); 659b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org if (args.length == 1 && args[0].length > 0) { 660b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org var frameCount = parseInt(args[0]); 661b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org if (frameCount > 0) { 662b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org // Show top frames. 663b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org request.arguments.fromFrame = 0; 664b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org request.arguments.toFrame = frameCount; 665b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } else { 666b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org // Show bottom frames. 667b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org request.arguments.fromFrame = 0; 668b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org request.arguments.toFrame = -frameCount; 669b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org request.arguments.bottom = true; 670b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } 671b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } else if (args.length == 2) { 67237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var fromFrame = parseInt(args[0]); 67337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var toFrame = parseInt(args[1]); 67437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (isNaN(fromFrame) || fromFrame < 0) { 67537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com throw new Error('Invalid start frame argument "' + args[0] + '".'); 67637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 67737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (isNaN(toFrame) || toFrame < 0) { 67837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com throw new Error('Invalid end frame argument "' + args[1] + '".'); 67937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 68037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (fromFrame > toFrame) { 68137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com throw new Error('Invalid arguments start frame cannot be larger ' + 68237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 'than end frame.'); 68337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 684b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org // Show frame range. 68537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments.fromFrame = fromFrame; 68637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments.toFrame = toFrame + 1; 687b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } else if (args.length > 2) { 688b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org throw new Error('Invalid backtrace arguments.'); 68937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 690b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 69137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return request.toJSONProtocol(); 69237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com}; 69337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 69437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 69537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Create a JSON request for the frame command. 69637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebugRequest.prototype.frameCommandToJSONRequest_ = function(args) { 69737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Build a frame request from the text command. 69837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var request = this.createRequest('frame'); 69937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com args = args.split(/\s*[ ]+\s*/g); 70037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (args.length > 0 && args[0].length > 0) { 70137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments = {}; 70237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments.number = args[0]; 70337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 70437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return request.toJSONProtocol(); 70537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com}; 70637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 70737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 708eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org// Create a JSON request for the scopes command. 709eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.orgDebugRequest.prototype.scopesCommandToJSONRequest_ = function(args) { 710eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org // Build a scopes request from the text command. 711eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org var request = this.createRequest('scopes'); 712eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org return request.toJSONProtocol(); 713eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org}; 714eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 715eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 716eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org// Create a JSON request for the scope command. 717eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.orgDebugRequest.prototype.scopeCommandToJSONRequest_ = function(args) { 718eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org // Build a scope request from the text command. 719eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org var request = this.createRequest('scope'); 720eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org args = args.split(/\s*[ ]+\s*/g); 721eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org if (args.length > 0 && args[0].length > 0) { 722eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org request.arguments = {}; 723eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org request.arguments.number = args[0]; 724eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 725eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org return request.toJSONProtocol(); 726eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org}; 727eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 728eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 72937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Create a JSON request for the print command. 73037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebugRequest.prototype.printCommandToJSONRequest_ = function(args) { 731ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org // Build an evaluate request from the text command. 73237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (args.length == 0) { 73337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com throw new Error('Missing expression.'); 73437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 735ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.makeEvaluateJSONRequest_(args); 736ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org}; 73737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 73837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 739ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org// Create a JSON request for the dir command. 740ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgDebugRequest.prototype.dirCommandToJSONRequest_ = function(args) { 741ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org // Build an evaluate request from the text command. 742ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (args.length == 0) { 743ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org throw new Error('Missing expression.'); 744ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 745ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.makeEvaluateJSONRequest_(args); 74637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com}; 74737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 74837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 749245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org// Create a JSON request for the references command. 750245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgDebugRequest.prototype.referencesCommandToJSONRequest_ = function(args) { 751245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org // Build an evaluate request from the text command. 752245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (args.length == 0) { 753245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org throw new Error('Missing object id.'); 754245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 75525156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 756245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return this.makeReferencesJSONRequest_(args, 'referencedBy'); 757245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org}; 758245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 759245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 760245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org// Create a JSON request for the instances command. 761245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgDebugRequest.prototype.instancesCommandToJSONRequest_ = function(args) { 762245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org // Build an evaluate request from the text command. 763245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (args.length == 0) { 764245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org throw new Error('Missing object id.'); 765245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 76625156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 767245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org // Build a references request. 768245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return this.makeReferencesJSONRequest_(args, 'constructedBy'); 769245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org}; 770245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 771245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 772d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org// Create a JSON request for the list command. 773d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDebugRequest.prototype.listCommandToJSONRequest_ = function(args) { 774d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 775d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Default is ten lines starting five lines before the current location. 776d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (Debug.State.displaySourceEndLine == -1) { 777d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // If we list forwards, we will start listing after the last source end 778d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // line. Set it to start from 5 lines before the current location. 779d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.displaySourceEndLine = Debug.State.currentSourceLine - 5; 780d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // If we list backwards, we will start listing backwards from the last 781d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // source start line. Set it to start from 1 lines before the current 782d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // location. 783d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.displaySourceStartLine = Debug.State.currentSourceLine + 1; 784d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 785d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 786d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var from = Debug.State.displaySourceEndLine + 1; 787d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var lines = 10; 788d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 789d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Parse the arguments. 790d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org args = args.split(/\s*,\s*/g); 791d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (args == '') { 792d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if ((args.length == 1) && (args[0] == '-')) { 793d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org from = Debug.State.displaySourceStartLine - lines; 794d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (args.length == 2) { 795d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org from = parseInt(args[0]); 796d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org lines = parseInt(args[1]) - from + 1; // inclusive of the ending line. 797d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else { 798d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org throw new Error('Invalid list arguments.'); 799d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 800d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.displaySourceStartLine = from; 801d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.displaySourceEndLine = from + lines - 1; 802d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var sourceArgs = '' + from + ' ' + lines; 803d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return this.sourceCommandToJSONRequest_(sourceArgs); 804d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org}; 805d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 806d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 80737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Create a JSON request for the source command. 80837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebugRequest.prototype.sourceCommandToJSONRequest_ = function(args) { 80937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Build a evaluate request from the text command. 81037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var request = this.createRequest('source'); 81137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 81237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Default is ten lines starting five lines before the current location. 81337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var from = Debug.State.currentSourceLine - 5; 81437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var lines = 10; 81537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 81637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Parse the arguments. 81737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com args = args.split(/\s*[ ]+\s*/g); 81837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (args.length > 1 && args[0].length > 0 && args[1].length > 0) { 81937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com from = parseInt(args[0]) - 1; 82037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com lines = parseInt(args[1]); 82137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else if (args.length > 0 && args[0].length > 0) { 82237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com from = parseInt(args[0]) - 1; 82337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 82437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 82537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (from < 0) from = 0; 82637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (lines < 0) lines = 10; 82737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 82837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Request source arround current source location. 82937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments = {}; 83037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments.fromLine = from; 83137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments.toLine = from + lines; 83237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 83337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return request.toJSONProtocol(); 83437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com}; 83537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 83637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 83737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Create a JSON request for the scripts command. 83837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebugRequest.prototype.scriptsCommandToJSONRequest_ = function(args) { 83937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Build a evaluate request from the text command. 84037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var request = this.createRequest('scripts'); 84137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 84237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Process arguments if any. 84337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (args && args.length > 0) { 84437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com args = args.split(/\s*[ ]+\s*/g); 84537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 84637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (args.length > 1) { 84737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com throw new Error('Invalid scripts arguments.'); 84837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 84937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 85037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments = {}; 85137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com switch (args[0]) { 85237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'natives': 85337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments.types = ScriptTypeFlag(Debug.ScriptType.Native); 85437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 85525156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 85637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'extensions': 85737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments.types = ScriptTypeFlag(Debug.ScriptType.Extension); 85837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 85925156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 86037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'all': 86137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments.types = 86237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com ScriptTypeFlag(Debug.ScriptType.Normal) | 86337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com ScriptTypeFlag(Debug.ScriptType.Native) | 86437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com ScriptTypeFlag(Debug.ScriptType.Extension); 86537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 86625156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 86737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com default: 868d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // If the arg is not one of the know one aboves, then it must be a 869d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // filter used for filtering the results: 870d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.filter = args[0]; 871d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 87237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 87337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 87437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 87537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return request.toJSONProtocol(); 87637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com}; 87737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 87837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 87937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Create a JSON request for the break command. 88037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebugRequest.prototype.breakCommandToJSONRequest_ = function(args) { 88137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Build a evaluate request from the text command. 88237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Process arguments if any. 88337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (args && args.length > 0) { 88437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var target = args; 88565dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org var type = 'function'; 88665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org var line; 88765dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org var column; 88837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var condition; 88965dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org var pos; 89037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 891c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org var request = this.createRequest('setbreakpoint'); 892c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org 893d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Break the args into target spec and condition if appropriate. 894d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 89565dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // Check for breakpoint condition. 89665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org pos = args.indexOf(' '); 89737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (pos > 0) { 89837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com target = args.substring(0, pos); 89937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com condition = args.substring(pos + 1, args.length); 90037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 90137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 90265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // Check for script breakpoint (name:line[:column]). If no ':' in break 90365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // specification it is considered a function break point. 90465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org pos = target.indexOf(':'); 90565dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org if (pos > 0) { 90665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org var tmp = target.substring(pos + 1, target.length); 90765dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org target = target.substring(0, pos); 908ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org if (target[0] == '/' && target[target.length - 1] == '/') { 909ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org type = 'scriptRegExp'; 910ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org target = target.substring(1, target.length - 1); 911ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else { 912ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org type = 'script'; 913ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } 91425156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 91565dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // Check for both line and column. 91665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org pos = tmp.indexOf(':'); 91765dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org if (pos > 0) { 91865dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org column = parseInt(tmp.substring(pos + 1, tmp.length)) - 1; 91965dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org line = parseInt(tmp.substring(0, pos)) - 1; 92065dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org } else { 92165dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org line = parseInt(tmp) - 1; 92265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org } 92365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org } else if (target[0] == '#' && target[target.length - 1] == '#') { 92465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org type = 'handle'; 92565dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org target = target.substring(1, target.length - 1); 92665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org } else { 92765dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org type = 'function'; 92865dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org } 92925156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 93037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments = {}; 93165dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org request.arguments.type = type; 93237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments.target = target; 93365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org request.arguments.line = line; 93465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org request.arguments.column = column; 93537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments.condition = condition; 93637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else { 937c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org var request = this.createRequest('suspend'); 93837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 93937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 94037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return request.toJSONProtocol(); 94137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com}; 94237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 94337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 944dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.orgDebugRequest.prototype.breakpointsCommandToJSONRequest_ = function(args) { 945dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org if (args && args.length > 0) { 946dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org throw new Error('Unexpected arguments.'); 947dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org } 948dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org var request = this.createRequest('listbreakpoints'); 949dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org return request.toJSONProtocol(); 950dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org}; 951dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org 952dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org 95337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Create a JSON request for the clear command. 95437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebugRequest.prototype.clearCommandToJSONRequest_ = function(args) { 95537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Build a evaluate request from the text command. 95637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var request = this.createRequest('clearbreakpoint'); 95737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 95837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Process arguments if any. 95937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (args && args.length > 0) { 96037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments = {}; 96137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments.breakpoint = parseInt(args); 96237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else { 96337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com throw new Error('Invalid break arguments.'); 96437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 96537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 96637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return request.toJSONProtocol(); 96737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com}; 96837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 96937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 970d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org// Create a JSON request for the change breakpoint command. 971d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDebugRequest.prototype.changeBreakpointCommandToJSONRequest_ = 972d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org function(args, command) { 973d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 974d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var request; 975d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 976d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Check for exception breaks first: 977d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // en[able] exc[eptions] [all|unc[aught]] 978d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // en[able] [all|unc[aught]] exc[eptions] 979d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // dis[able] exc[eptions] [all|unc[aught]] 980d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // dis[able] [all|unc[aught]] exc[eptions] 981d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if ((command == 'enable' || command == 'disable') && 982d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org args && args.length > 1) { 983d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var nextPos = args.indexOf(' '); 984d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var arg1 = (nextPos > 0) ? args.substring(0, nextPos) : args; 985d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var excType = null; 986d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 987d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Check for: 988d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // en[able] exc[eptions] [all|unc[aught]] 989d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // dis[able] exc[eptions] [all|unc[aught]] 990d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (arg1 == 'exc' || arg1 == 'exception' || arg1 == 'exceptions') { 991d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 992d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var arg2 = (nextPos > 0) ? 993d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org args.substring(nextPos + 1, args.length) : 'all'; 994d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (!arg2) { 995d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org arg2 = 'all'; // if unspecified, set for all. 996c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org } else if (arg2 == 'unc') { // check for short cut. 997d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org arg2 = 'uncaught'; 998d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 999d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org excType = arg2; 100028a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org 1001d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Check for: 1002d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // en[able] [all|unc[aught]] exc[eptions] 1003d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // dis[able] [all|unc[aught]] exc[eptions] 1004d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (arg1 == 'all' || arg1 == 'unc' || arg1 == 'uncaught') { 1005d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1006d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var arg2 = (nextPos > 0) ? 1007d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org args.substring(nextPos + 1, args.length) : null; 1008d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (arg2 == 'exc' || arg1 == 'exception' || arg1 == 'exceptions') { 1009d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org excType = arg1; 1010d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (excType == 'unc') { 1011d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org excType = 'uncaught'; 1012d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1013d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1014d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1015d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1016d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // If we matched one of the command formats, then excType will be non-null: 1017d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (excType) { 1018d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Build a evaluate request from the text command. 1019d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request = this.createRequest('setexceptionbreak'); 1020d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1021d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments = {}; 1022d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.type = excType; 1023d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.enabled = (command == 'enable'); 1024d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1025d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return request.toJSONProtocol(); 1026d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1027d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1028d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1029d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Build a evaluate request from the text command. 1030d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request = this.createRequest('changebreakpoint'); 1031d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1032d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Process arguments if any. 1033d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (args && args.length > 0) { 1034d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments = {}; 1035d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var pos = args.indexOf(' '); 1036d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var breakpointArg = args; 1037d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var otherArgs; 1038d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (pos > 0) { 1039d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org breakpointArg = args.substring(0, pos); 1040d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org otherArgs = args.substring(pos + 1, args.length); 1041d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1042d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1043d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.breakpoint = parseInt(breakpointArg); 1044d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1045d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org switch(command) { 1046d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'cond': 1047d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.condition = otherArgs ? otherArgs : null; 1048d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 1049d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'enable': 1050d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.enabled = true; 1051d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 1052d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'disable': 1053d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.enabled = false; 1054d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 1055d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'ignore': 1056d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.ignoreCount = parseInt(otherArgs); 1057d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 1058d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org default: 105928a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org throw new Error('Invalid arguments.'); 1060d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1061d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else { 1062d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org throw new Error('Invalid arguments.'); 1063d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1064d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1065d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return request.toJSONProtocol(); 1066d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org}; 1067d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1068d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1069d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org// Create a JSON request for the disconnect command. 1070d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDebugRequest.prototype.disconnectCommandToJSONRequest_ = function(args) { 1071d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var request; 1072d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request = this.createRequest('disconnect'); 1073d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return request.toJSONProtocol(); 1074d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org}; 1075d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1076d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1077d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org// Create a JSON request for the info command. 1078d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDebugRequest.prototype.infoCommandToJSONRequest_ = function(args) { 1079d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var request; 1080d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (args && (args == 'break' || args == 'br')) { 1081d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Build a evaluate request from the text command. 1082d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request = this.createRequest('listbreakpoints'); 1083d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org last_cmd = 'info break'; 1084d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (args && (args == 'locals' || args == 'lo')) { 1085d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Build a evaluate request from the text command. 1086d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request = this.createRequest('frame'); 1087d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org last_cmd = 'info locals'; 1088d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (args && (args == 'args' || args == 'ar')) { 1089d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Build a evaluate request from the text command. 1090d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request = this.createRequest('frame'); 1091d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org last_cmd = 'info args'; 1092d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else { 1093d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org throw new Error('Invalid info arguments.'); 1094d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1095d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1096d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return request.toJSONProtocol(); 1097d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org}; 1098d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1099d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1100d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDebugRequest.prototype.v8FlagsToJSONRequest_ = function(args) { 1101d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var request; 1102d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request = this.createRequest('v8flags'); 1103d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments = {}; 1104d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.flags = args; 1105d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return request.toJSONProtocol(); 1106d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org}; 1107d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1108d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1109d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDebugRequest.prototype.gcToJSONRequest_ = function(args) { 1110d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var request; 1111d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (!args) { 1112d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org args = 'all'; 1113d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1114d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var args = args.split(/\s+/g); 1115d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var cmd = args[0]; 1116d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1117d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org switch(cmd) { 1118d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'all': 1119d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'quick': 1120d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'full': 1121d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'young': 1122d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'old': 1123d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'compact': 1124d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'sweep': 1125d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'scavenge': { 1126d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (cmd == 'young') { cmd = 'quick'; } 1127d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org else if (cmd == 'old') { cmd = 'full'; } 1128d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1129d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request = this.createRequest('gc'); 1130d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments = {}; 1131d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.type = cmd; 1132d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 1133d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1134d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Else fall thru to the default case below to report the error. 1135d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org default: 1136d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org throw new Error('Missing arguments after ' + cmd + '.'); 1137d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1138d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return request.toJSONProtocol(); 1139d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org}; 1140d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1141d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1142bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org// Create a JSON request for the threads command. 1143bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgDebugRequest.prototype.threadsCommandToJSONRequest_ = function(args) { 1144bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org // Build a threads request from the text command. 1145bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org var request = this.createRequest('threads'); 1146bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org return request.toJSONProtocol(); 1147bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org}; 1148bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 1149bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 1150245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org// Handle the trace command. 1151245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgDebugRequest.prototype.traceCommand_ = function(args) { 1152245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org // Process arguments. 1153245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (args && args.length > 0) { 1154245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (args == 'compile') { 1155245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org trace_compile = !trace_compile; 1156245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org print('Tracing of compiled scripts ' + (trace_compile ? 'on' : 'off')); 1157d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (args === 'debug json' || args === 'json' || args === 'packets') { 1158d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org trace_debug_json = !trace_debug_json; 1159d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('Tracing of debug json packets ' + 1160d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org (trace_debug_json ? 'on' : 'off')); 1161245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } else { 1162245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org throw new Error('Invalid trace arguments.'); 1163245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 1164245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } else { 1165245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org throw new Error('Invalid trace arguments.'); 1166245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 11671b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1168245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 1169245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org// Handle the help command. 117037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebugRequest.prototype.helpCommand_ = function(args) { 117137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Help os quite simple. 117237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (args && args.length > 0) { 117337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com print('warning: arguments to \'help\' are ignored'); 117437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 117537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 1176d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('Note: <> denotes symbollic values to be replaced with real values.'); 1177d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('Note: [] denotes optional parts of commands, or optional options / arguments.'); 1178d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(' e.g. d[elete] - you get the same command if you type d or delete.'); 1179d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(''); 1180d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('[break] - break as soon as possible'); 1181d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('b[reak] location [condition]'); 1182d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(' - break on named function: location is a function name'); 1183d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(' - break on function: location is #<id>#'); 1184d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(' - break on script position: location is name:line[:column]'); 1185d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(''); 1186d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('clear <breakpoint #> - deletes the specified user defined breakpoint'); 1187d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('d[elete] <breakpoint #> - deletes the specified user defined breakpoint'); 1188d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('dis[able] <breakpoint #> - disables the specified user defined breakpoint'); 1189d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('dis[able] exc[eptions] [[all] | unc[aught]]'); 1190d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(' - disables breaking on exceptions'); 1191d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('en[able] <breakpoint #> - enables the specified user defined breakpoint'); 1192d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('en[able] exc[eptions] [[all] | unc[aught]]'); 1193d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(' - enables breaking on exceptions'); 1194d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(''); 1195d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('b[ack]t[race] [n] | [-n] | [from to]'); 1196d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(' - prints the stack back trace'); 1197d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('f[rame] - prints info about the current frame context'); 1198d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('f[rame] <frame #> - set context to specified frame #'); 1199eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org print('scopes'); 1200eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org print('scope <scope #>'); 1201d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(''); 1202d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('up - set context to caller of current frame'); 1203d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('do[wn] - set context to callee of current frame'); 1204d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('inf[o] br[eak] - prints info about breakpoints in use'); 1205d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('inf[o] ar[gs] - prints info about arguments of the current function'); 1206d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('inf[o] lo[cals] - prints info about locals in the current function'); 1207d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(''); 120837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com print('step [in | next | out| min [step count]]'); 1209d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('c[ontinue] - continue executing after a breakpoint'); 1210d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('s[tep] [<N>] - step into the next N callees (default N is 1)'); 1211d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('s[tep]i [<N>] - step into the next N callees (default N is 1)'); 1212d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('n[ext] [<N>] - step over the next N callees (default N is 1)'); 1213d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('fin[ish] [<N>] - step out of N frames (default N is 1)'); 1214d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(''); 1215d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('p[rint] <expression> - prints the result of the specified expression'); 1216d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('dir <expression> - prints the object structure of the result'); 1217d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('set <var> = <expression> - executes the specified statement'); 1218d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(''); 1219d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('l[ist] - list the source code around for the current pc'); 1220d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('l[ist] [- | <start>,<end>] - list the specified range of source code'); 122137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com print('source [from line [num lines]]'); 1222d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('scr[ipts] [native|extensions|all]'); 1223d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('scr[ipts] [<filter text>] - list scripts with the specified text in its description'); 1224d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(''); 1225d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('gc - runs the garbage collector'); 1226d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(''); 1227245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org print('trace compile'); 1228d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // hidden command: trace debug json - toggles tracing of debug json packets 1229d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(''); 1230d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('disconnect|exit|quit - disconnects and quits the debugger'); 1231d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('help - prints this help information'); 12321b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 123337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 123437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 1235ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgfunction formatHandleReference_(value) { 1236eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org if (value.handle() >= 0) { 1237eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org return '#' + value.handle() + '#'; 1238eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } else { 1239eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org return '#Transient#'; 1240eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 1241ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org} 1242ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1243ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1244245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgfunction formatObject_(value, include_properties) { 1245245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org var result = ''; 1246245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += formatHandleReference_(value); 12471b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org result += ', type: object'; 1248245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += ', constructor '; 1249245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org var ctor = value.constructorFunctionValue(); 1250245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += formatHandleReference_(ctor); 1251245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += ', __proto__ '; 1252245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org var proto = value.protoObjectValue(); 1253245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += formatHandleReference_(proto); 1254245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += ', '; 1255245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += value.propertyCount(); 1256245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += ' properties.'; 1257245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (include_properties) { 1258245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += '\n'; 1259245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org for (var i = 0; i < value.propertyCount(); i++) { 1260245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += ' '; 1261245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += value.propertyName(i); 1262245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += ': '; 1263245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org var property_value = value.propertyValue(i); 1264eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org if (property_value instanceof ProtocolReference) { 1265245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += '<no type>'; 1266eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } else { 1267eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org if (property_value && property_value.type()) { 1268eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += property_value.type(); 1269eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } else { 1270eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += '<no type>'; 1271eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 1272245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 1273245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += ' '; 1274245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += formatHandleReference_(property_value); 1275245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += '\n'; 1276245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 1277245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 1278245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return result; 1279245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org} 1280245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 1281245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 1282eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.orgfunction formatScope_(scope) { 1283eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org var result = ''; 1284eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org var index = scope.index; 1285eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += '#' + (index <= 9 ? '0' : '') + index; 1286eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += ' '; 1287eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org switch (scope.type) { 1288eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org case Debug.ScopeType.Global: 1289eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += 'Global, '; 1290eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += '#' + scope.object.ref + '#'; 1291eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org break; 1292eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org case Debug.ScopeType.Local: 1293eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += 'Local'; 1294eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org break; 1295eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org case Debug.ScopeType.With: 1296eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += 'With, '; 1297eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += '#' + scope.object.ref + '#'; 1298eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org break; 1299a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org case Debug.ScopeType.Catch: 1300a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org result += 'Catch, '; 1301a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org result += '#' + scope.object.ref + '#'; 1302a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org break; 1303eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org case Debug.ScopeType.Closure: 1304eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += 'Closure'; 1305eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org break; 1306eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org default: 1307eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += 'UNKNOWN'; 1308eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 1309eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org return result; 1310eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org} 1311eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 1312eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 1313d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgfunction refObjectToString_(protocolPackage, handle) { 1314d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var value = protocolPackage.lookup(handle); 1315d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var result = ''; 1316d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (value.isString()) { 1317d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result = '"' + value.value() + '"'; 1318d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (value.isPrimitive()) { 1319d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result = value.valueString(); 1320d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (value.isObject()) { 1321d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += formatObject_(value, true); 1322d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1323d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return result; 1324d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org} 1325d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1326d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1327d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org// Rounds number 'num' to 'length' decimal places. 1328d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgfunction roundNumber(num, length) { 1329d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var factor = Math.pow(10, length); 1330d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return Math.round(num * factor) / factor; 1331d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org} 1332d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1333d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 133437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Convert a JSON response to text for display in a text based debugger. 13357be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgfunction DebugResponseDetails(response) { 1336ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.org var details = { text: '', running: false }; 133737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 133837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com try { 1339ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (!response.success()) { 1340ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org details.text = response.message(); 134137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return details; 134237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 134337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 134437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Get the running state. 1345ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org details.running = response.running(); 134637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 1347ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org var body = response.body(); 1348ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org var result = ''; 1349ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org switch (response.command()) { 1350c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org case 'suspend': 1351c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org details.text = 'stopped'; 1352c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org break; 135342841968c3c92e3b07bcd67e79eb6ba3f83032c1vegorov@chromium.org 135437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'setbreakpoint': 135537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result = 'set breakpoint #'; 135637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += body.breakpoint; 135737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com details.text = result; 135837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 135925156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 136037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'clearbreakpoint': 136137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result = 'cleared breakpoint #'; 136237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += body.breakpoint; 136337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com details.text = result; 136437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 136542841968c3c92e3b07bcd67e79eb6ba3f83032c1vegorov@chromium.org 1366d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'changebreakpoint': 1367d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result = 'successfully changed breakpoint'; 1368d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org details.text = result; 1369d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 1370d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1371dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org case 'listbreakpoints': 1372dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org result = 'breakpoints: (' + body.breakpoints.length + ')'; 1373dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org for (var i = 0; i < body.breakpoints.length; i++) { 1374dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org var breakpoint = body.breakpoints[i]; 1375dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org result += '\n id=' + breakpoint.number; 1376dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org result += ' type=' + breakpoint.type; 1377dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org if (breakpoint.script_id) { 1378dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org result += ' script_id=' + breakpoint.script_id; 1379dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org } 1380dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org if (breakpoint.script_name) { 1381dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org result += ' script_name=' + breakpoint.script_name; 1382dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org } 1383ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org if (breakpoint.script_regexp) { 1384ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org result += ' script_regexp=' + breakpoint.script_regexp; 1385ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } 1386d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += ' line=' + (breakpoint.line + 1); 1387dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org if (breakpoint.column != null) { 1388d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += ' column=' + (breakpoint.column + 1); 1389dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org } 1390dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org if (breakpoint.groupId) { 1391dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org result += ' groupId=' + breakpoint.groupId; 1392dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org } 1393dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org if (breakpoint.ignoreCount) { 1394dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org result += ' ignoreCount=' + breakpoint.ignoreCount; 1395dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org } 1396dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org if (breakpoint.active === false) { 1397dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org result += ' inactive'; 1398dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org } 1399dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org if (breakpoint.condition) { 1400dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org result += ' condition=' + breakpoint.condition; 1401dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org } 1402dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org result += ' hit_count=' + breakpoint.hit_count; 1403dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org } 1404d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (body.breakpoints.length === 0) { 1405d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result = "No user defined breakpoints\n"; 1406d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else { 1407d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += '\n'; 1408d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1409d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (body.breakOnExceptions) { 1410d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += '* breaking on ALL exceptions is enabled\n'; 1411d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (body.breakOnUncaughtExceptions) { 1412d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += '* breaking on UNCAUGHT exceptions is enabled\n'; 1413d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else { 141428a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org result += '* all exception breakpoints are disabled\n'; 1415d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1416d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org details.text = result; 1417d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 1418d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1419d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'setexceptionbreak': 1420d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result = 'Break on ' + body.type + ' exceptions: '; 1421d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += body.enabled ? 'enabled' : 'disabled'; 1422dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org details.text = result; 1423dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org break; 142425156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 142537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'backtrace': 142637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (body.totalFrames == 0) { 142737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result = '(empty stack)'; 142837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else { 142937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var result = 'Frames #' + body.fromFrame + ' to #' + 143037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com (body.toFrame - 1) + ' of ' + body.totalFrames + '\n'; 143137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com for (i = 0; i < body.frames.length; i++) { 143237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (i != 0) result += '\n'; 143337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += body.frames[i].text; 143437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 143537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 143637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com details.text = result; 143737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 143825156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 143937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'frame': 1440d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (last_cmd === 'info locals') { 1441d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var locals = body.locals; 1442d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (locals.length === 0) { 1443d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result = 'No locals'; 1444d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else { 1445d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org for (var i = 0; i < locals.length; i++) { 1446d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var local = locals[i]; 1447d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += local.name + ' = '; 1448d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += refObjectToString_(response, local.value.ref); 1449d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += '\n'; 1450d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1451d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1452d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (last_cmd === 'info args') { 1453d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var args = body.arguments; 1454d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (args.length === 0) { 1455d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result = 'No arguments'; 1456d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else { 1457d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org for (var i = 0; i < args.length; i++) { 1458d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var arg = args[i]; 1459d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += arg.name + ' = '; 1460d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += refObjectToString_(response, arg.value.ref); 1461d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += '\n'; 1462d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1463d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1464d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else { 1465d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result = SourceUnderline(body.sourceLineText, 1466d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org body.column); 1467d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.currentSourceLine = body.line; 1468d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.currentFrame = body.index; 1469d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.displaySourceStartLine = -1; 1470d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.displaySourceEndLine = -1; 1471d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1472d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org details.text = result; 147337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 147425156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 1475eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org case 'scopes': 1476eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org if (body.totalScopes == 0) { 1477eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result = '(no scopes)'; 1478eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } else { 1479eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result = 'Scopes #' + body.fromScope + ' to #' + 1480eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org (body.toScope - 1) + ' of ' + body.totalScopes + '\n'; 1481eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org for (i = 0; i < body.scopes.length; i++) { 1482eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org if (i != 0) { 1483eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += '\n'; 1484eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 1485eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += formatScope_(body.scopes[i]); 1486eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 1487eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 1488eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org details.text = result; 1489eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org break; 1490eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 1491eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org case 'scope': 1492eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += formatScope_(body); 1493eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += '\n'; 1494eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org var scope_object_value = response.lookup(body.object.ref); 1495eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += formatObject_(scope_object_value, true); 1496eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org details.text = result; 1497eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org break; 149825156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 149937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'evaluate': 1500ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org case 'lookup': 15019ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org case 'getobj': 1502ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (last_cmd == 'p' || last_cmd == 'print') { 1503381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org result = body.text; 1504ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } else { 1505eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org var value; 1506eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org if (lookup_handle) { 1507eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org value = response.bodyValue(lookup_handle); 1508eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } else { 1509eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org value = response.bodyValue(); 1510eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 1511ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (value.isObject()) { 1512245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += formatObject_(value, true); 1513ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } else { 1514ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org result += 'type: '; 1515ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org result += value.type(); 1516ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (!value.isUndefined() && !value.isNull()) { 1517ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org result += ', '; 1518ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (value.isString()) { 1519ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org result += '"'; 1520ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 1521ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org result += value.value(); 1522ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (value.isString()) { 1523ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org result += '"'; 1524ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 1525ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 1526ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org result += '\n'; 1527ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 1528ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 1529ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org details.text = result; 153037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 1531245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 1532245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org case 'references': 1533245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org var count = body.length; 1534245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += 'found ' + count + ' objects'; 1535245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += '\n'; 1536245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org for (var i = 0; i < count; i++) { 1537245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org var value = response.bodyValue(i); 1538245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += formatObject_(value, false); 1539245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += '\n'; 1540245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 1541245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org details.text = result; 1542245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org break; 154325156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 154437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'source': 154537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Get the source from the response. 1546ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org var source = body.source; 1547ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org var from_line = body.fromLine + 1; 154837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var lines = source.split('\n'); 154937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var maxdigits = 1 + Math.floor(log10(from_line + lines.length)); 155037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (maxdigits < 3) { 155137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com maxdigits = 3; 155237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 155337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var result = ''; 155437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com for (var num = 0; num < lines.length; num++) { 155537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Check if there's an extra newline at the end. 155637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (num == (lines.length - 1) && lines[num].length == 0) { 155737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 155837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 155937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 156037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var current_line = from_line + num; 15611456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org var spacer = maxdigits - (1 + Math.floor(log10(current_line))); 156237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (current_line == Debug.State.currentSourceLine + 1) { 156337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com for (var i = 0; i < maxdigits; i++) { 156437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += '>'; 156537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 156637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += ' '; 156737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else { 156837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com for (var i = 0; i < spacer; i++) { 156937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += ' '; 157037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 157137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += current_line + ': '; 157237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 157337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += lines[num]; 157437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += '\n'; 157537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 157637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com details.text = result; 157737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 157825156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 157937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'scripts': 158037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var result = ''; 1581ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org for (i = 0; i < body.length; i++) { 158237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (i != 0) result += '\n'; 15837be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org if (body[i].id) { 15847be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += body[i].id; 15857be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org } else { 15867be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += '[no id]'; 15877be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org } 15887be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += ', '; 1589ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (body[i].name) { 1590ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org result += body[i].name; 159137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else { 1592d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (body[i].compilationType == Debug.ScriptCompilationType.Eval 1593d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org && body[i].evalFromScript 1594d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org ) { 1595e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org result += 'eval from '; 1596e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org var script_value = response.lookup(body[i].evalFromScript.ref); 1597e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org result += ' ' + script_value.field('name'); 1598e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org result += ':' + (body[i].evalFromLocation.line + 1); 1599e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org result += ':' + body[i].evalFromLocation.column; 1600e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org } else if (body[i].compilationType == 1601e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org Debug.ScriptCompilationType.JSON) { 1602e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org result += 'JSON '; 1603e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org } else { // body[i].compilation == Debug.ScriptCompilationType.Host 1604e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org result += '[unnamed] '; 1605e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org } 160637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 160737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += ' (lines: '; 16087be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += body[i].lineCount; 160937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += ', length: '; 1610ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org result += body[i].sourceLength; 1611ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (body[i].type == Debug.ScriptType.Native) { 161237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += ', native'; 1613ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } else if (body[i].type == Debug.ScriptType.Extension) { 161437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += ', extension'; 161537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 16167be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += '), ['; 16177be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org var sourceStart = body[i].sourceStart; 16187be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org if (sourceStart.length > 40) { 16197be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org sourceStart = sourceStart.substring(0, 37) + '...'; 16207be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org } 16217be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += sourceStart; 16227be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += ']'; 162337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 1624d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (body.length == 0) { 1625d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result = "no matching scripts found"; 1626d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 162737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com details.text = result; 162837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 162937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 1630bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org case 'threads': 1631bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org var result = 'Active V8 threads: ' + body.totalThreads + '\n'; 1632bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org body.threads.sort(function(a, b) { return a.id - b.id; }); 1633bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org for (i = 0; i < body.threads.length; i++) { 1634bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org result += body.threads[i].current ? '*' : ' '; 1635bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org result += ' '; 1636bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org result += body.threads[i].id; 1637bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org result += '\n'; 1638bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org } 1639bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org details.text = result; 1640bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org break; 1641bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 164237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'continue': 164337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com details.text = "(running)"; 164437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 164525156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 1646d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'v8flags': 1647d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org details.text = "flags set"; 1648d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 1649d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1650d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'gc': 1651d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org details.text = "GC " + body.before + " => " + body.after; 1652d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (body.after > (1024*1024)) { 1653d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org details.text += 1654d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org " (" + roundNumber(body.before/(1024*1024), 1) + "M => " + 1655d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org roundNumber(body.after/(1024*1024), 1) + "M)"; 1656d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (body.after > 1024) { 1657d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org details.text += 1658d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org " (" + roundNumber(body.before/1024, 1) + "K => " + 1659d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org roundNumber(body.after/1024, 1) + "K)"; 1660d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1661d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 1662d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 166337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com default: 166437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com details.text = 1665dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org 'Response for unknown command \'' + response.command() + '\'' + 1666dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org ' (' + response.raw_json() + ')'; 166737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 166837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } catch (e) { 166937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com details.text = 'Error: "' + e + '" formatting response'; 167037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 167125156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 167237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return details; 16731b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org} 167437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 167537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 1676ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1677ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Protocol packages send from the debugger. 1678ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @param {string} json - raw protocol packet as JSON string. 1679ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @constructor 1680ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1681ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgfunction ProtocolPackage(json) { 1682dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org this.raw_json_ = json; 168318ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org this.packet_ = JSON.parse(json); 1684ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org this.refs_ = []; 1685ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (this.packet_.refs) { 1686ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org for (var i = 0; i < this.packet_.refs.length; i++) { 1687ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org this.refs_[this.packet_.refs[i].handle] = this.packet_.refs[i]; 1688ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 1689ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 1690ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org} 1691ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1692ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1693ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1694ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Get the packet type. 1695ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {String} the packet type 1696ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1697ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolPackage.prototype.type = function() { 1698ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.packet_.type; 16991b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1700ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1701ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1702ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1703ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Get the packet event. 1704ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {Object} the packet event 1705ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1706ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolPackage.prototype.event = function() { 1707ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.packet_.event; 17081b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1709ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1710ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1711ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1712ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Get the packet request sequence. 1713ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {number} the packet request sequence 1714ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1715ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolPackage.prototype.requestSeq = function() { 1716ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.packet_.request_seq; 17171b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1718ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1719ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1720ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1721ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Get the packet request sequence. 1722ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {number} the packet request sequence 1723ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1724ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolPackage.prototype.running = function() { 1725ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.packet_.running ? true : false; 17261b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1727ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1728ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1729ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolPackage.prototype.success = function() { 1730ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.packet_.success ? true : false; 17311b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1732ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1733ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1734ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolPackage.prototype.message = function() { 1735ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.packet_.message; 17361b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1737ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1738ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1739ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolPackage.prototype.command = function() { 1740ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.packet_.command; 17411b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1742ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1743ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1744ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolPackage.prototype.body = function() { 1745ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.packet_.body; 17461b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1747ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1748ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1749245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgProtocolPackage.prototype.bodyValue = function(index) { 1750eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org if (index != null) { 1751245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return new ProtocolValue(this.packet_.body[index], this); 1752381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org } else { 1753381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org return new ProtocolValue(this.packet_.body, this); 1754245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 17551b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1756ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1757ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1758ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolPackage.prototype.body = function() { 1759ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.packet_.body; 17601b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1761ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1762ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1763ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolPackage.prototype.lookup = function(handle) { 1764ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org var value = this.refs_[handle]; 1765ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (value) { 1766ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return new ProtocolValue(value, this); 1767ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } else { 1768ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return new ProtocolReference(handle); 1769ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 17701b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1771ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1772ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1773dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.orgProtocolPackage.prototype.raw_json = function() { 1774dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org return this.raw_json_; 17751b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1776dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org 1777dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org 1778ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgfunction ProtocolValue(value, packet) { 1779ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org this.value_ = value; 1780ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org this.packet_ = packet; 1781ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org} 1782ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1783ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1784ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1785ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Get the value type. 1786ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {String} the value type 1787ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1788ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.type = function() { 1789ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.value_.type; 17901b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1791ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1792ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1793ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 179425156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org * Get a metadata field from a protocol value. 1795e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org * @return {Object} the metadata field value 1796e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org */ 1797e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.orgProtocolValue.prototype.field = function(name) { 1798e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org return this.value_[name]; 17991b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1800e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org 1801e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org 1802e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org/** 1803ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Check is the value is a primitive value. 1804ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {boolean} true if the value is primitive 1805ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1806ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.isPrimitive = function() { 1807ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.isUndefined() || this.isNull() || this.isBoolean() || 1808ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org this.isNumber() || this.isString(); 18091b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1810ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1811ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1812ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1813ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Get the object handle. 1814ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {number} the value handle 1815ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1816ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.handle = function() { 1817ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.value_.handle; 18181b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1819ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1820ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1821ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1822ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Check is the value is undefined. 1823ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {boolean} true if the value is undefined 1824ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1825ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.isUndefined = function() { 1826ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.value_.type == 'undefined'; 18271b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1828ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1829ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1830ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1831ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Check is the value is null. 1832ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {boolean} true if the value is null 1833ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1834ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.isNull = function() { 1835ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.value_.type == 'null'; 18361b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1837ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1838ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1839ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1840ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Check is the value is a boolean. 1841ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {boolean} true if the value is a boolean 1842ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1843ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.isBoolean = function() { 1844ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.value_.type == 'boolean'; 18451b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1846ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1847ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1848ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1849ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Check is the value is a number. 1850ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {boolean} true if the value is a number 1851ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1852ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.isNumber = function() { 1853ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.value_.type == 'number'; 18541b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1855ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1856ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1857ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1858ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Check is the value is a string. 1859ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {boolean} true if the value is a string 1860ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1861ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.isString = function() { 1862ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.value_.type == 'string'; 18631b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1864ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1865ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1866ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1867ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Check is the value is an object. 1868ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {boolean} true if the value is an object 1869ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1870ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.isObject = function() { 1871ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.value_.type == 'object' || this.value_.type == 'function' || 1872ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org this.value_.type == 'error' || this.value_.type == 'regexp'; 18731b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1874ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1875ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1876ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1877ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Get the constructor function 1878ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {ProtocolValue} constructor function 1879ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1880ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.constructorFunctionValue = function() { 1881ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org var ctor = this.value_.constructorFunction; 1882ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.packet_.lookup(ctor.ref); 18831b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1884ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1885ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1886ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1887ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Get the __proto__ value 1888ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {ProtocolValue} __proto__ value 1889ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1890ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.protoObjectValue = function() { 1891ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org var proto = this.value_.protoObject; 1892ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.packet_.lookup(proto.ref); 18931b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1894ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1895ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1896ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1897ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Get the number og properties. 1898ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {number} the number of properties 1899ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1900ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.propertyCount = function() { 1901ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.value_.properties ? this.value_.properties.length : 0; 19021b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1903ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1904ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1905ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1906ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Get the specified property name. 1907ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {string} property name 1908ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1909ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.propertyName = function(index) { 1910ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org var property = this.value_.properties[index]; 1911ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return property.name; 19121b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1913ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1914ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1915ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1916ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Return index for the property name. 1917ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @param name The property name to look for 1918ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {number} index for the property name 1919ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1920ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.propertyIndex = function(name) { 1921ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org for (var i = 0; i < this.propertyCount(); i++) { 1922ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (this.value_.properties[i].name == name) { 1923ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return i; 1924ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 1925ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 1926ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return null; 19271b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1928ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1929ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1930ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1931ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Get the specified property value. 1932ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {ProtocolValue} property value 1933ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1934ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.propertyValue = function(index) { 1935ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org var property = this.value_.properties[index]; 1936ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.packet_.lookup(property.ref); 19371b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1938ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1939ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1940ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1941ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Check is the value is a string. 1942ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {boolean} true if the value is a string 1943ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1944ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.value = function() { 1945ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.value_.value; 19461b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1947ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1948ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1949d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgProtocolValue.prototype.valueString = function() { 1950d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return this.value_.text; 19511b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1952d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1953d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1954ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgfunction ProtocolReference(handle) { 1955ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org this.handle_ = handle; 1956ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org} 1957ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1958ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1959ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolReference.prototype.handle = function() { 1960ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.handle_; 19611b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1962ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1963ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1964876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org// A more universal stringify that supports more types than JSON. 1965876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org// Used by the d8 shell to output results. 1966876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.orgvar stringifyDepthLimit = 4; // To avoid crashing on cyclic objects 1967876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org 1968876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.orgfunction Stringify(x, depth) { 1969876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org if (depth === undefined) 1970876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org depth = stringifyDepthLimit; 1971876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org else if (depth === 0) 1972876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org return "*"; 1973876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org switch (typeof x) { 1974876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org case "undefined": 1975876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org return "undefined"; 1976876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org case "boolean": 1977876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org case "number": 1978876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org case "function": 1979876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org return x.toString(); 1980876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org case "string": 1981876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org return "\"" + x.toString() + "\""; 1982f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org case "symbol": 19839bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org return x.toString(); 1984876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org case "object": 1985690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org if (IS_NULL(x)) return "null"; 1986876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org if (x.constructor && x.constructor.name === "Array") { 1987876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org var elems = []; 1988876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org for (var i = 0; i < x.length; ++i) { 1989876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org elems.push( 1990876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org {}.hasOwnProperty.call(x, i) ? Stringify(x[i], depth - 1) : ""); 1991876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org } 1992876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org return "[" + elems.join(", ") + "]"; 1993876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org } 1994876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org try { 1995876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org var string = String(x); 1996876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org if (string && string !== "[object Object]") return string; 1997876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org } catch(e) {} 1998876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org var props = []; 19999bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org var names = Object.getOwnPropertyNames(x); 20003e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org names = names.concat(Object.getOwnPropertySymbols(x)); 20019bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org for (var i in names) { 20029bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org var name = names[i]; 2003876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org var desc = Object.getOwnPropertyDescriptor(x, name); 2004690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org if (IS_UNDEFINED(desc)) continue; 20059bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org if (IS_SYMBOL(name)) name = "[" + Stringify(name) + "]"; 2006876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org if ("value" in desc) { 2007876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org props.push(name + ": " + Stringify(desc.value, depth - 1)); 2008876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org } 20099bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org if (desc.get) { 20109bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org var getter = Stringify(desc.get); 2011876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org props.push("get " + name + getter.slice(getter.indexOf('('))); 2012876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org } 20139bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org if (desc.set) { 20149bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org var setter = Stringify(desc.set); 2015876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org props.push("set " + name + setter.slice(setter.indexOf('('))); 2016876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org } 2017876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org } 2018876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org return "{" + props.join(", ") + "}"; 2019876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org default: 2020876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org return "[crazy non-standard shit]"; 2021876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org } 2022876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org} 2023