15a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// Copyright 2008 the V8 project authors. All rights reserved. 25a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// Redistribution and use in source and binary forms, with or without 35a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// modification, are permitted provided that the following conditions are 45a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// met: 55a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// 65a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// * Redistributions of source code must retain the above copyright 75a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// notice, this list of conditions and the following disclaimer. 85a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// * Redistributions in binary form must reproduce the above 95a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// copyright notice, this list of conditions and the following 105a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// disclaimer in the documentation and/or other materials provided 115a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// with the distribution. 125a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// * Neither the name of Google Inc. nor the names of its 135a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// contributors may be used to endorse or promote products derived 145a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// from this software without specific prior written permission. 155a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// 165a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 175a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 185a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 195a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 205a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 215a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 225a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 235a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 245a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 255a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 265a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 275a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 28f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org"use strict"; 29f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org 305a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgString.prototype.startsWith = function (str) { 311b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org if (str.length > this.length) { 325a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org return false; 331b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org } 345a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org return this.substr(0, str.length) == str; 351b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 3637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 3737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comfunction log10(num) { 3837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return Math.log(num)/Math.log(10); 3937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com} 405a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 415a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgfunction ToInspectableObject(obj) { 425a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org if (!obj && typeof obj === 'object') { 435a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org return void 0; 445a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org } else { 455a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org return Object(obj); 465a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org } 475a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org} 485a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 495a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgfunction GetCompletions(global, last, full) { 505a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org var full_tokens = full.split(); 515a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org full = full_tokens.pop(); 525a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org var parts = full.split('.'); 535a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org parts.pop(); 545a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org var current = global; 555a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org for (var i = 0; i < parts.length; i++) { 565a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org var part = parts[i]; 575a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org var next = current[part]; 581b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org if (!next) { 595a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org return []; 601b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org } 615a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org current = next; 625a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org } 635a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org var result = []; 645a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org current = ToInspectableObject(current); 655a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org while (typeof current !== 'undefined') { 665a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org var mirror = new $debug.ObjectMirror(current); 675a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org var properties = mirror.properties(); 685a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org for (var i = 0; i < properties.length; i++) { 695a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org var name = properties[i].name(); 701b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org if (typeof name === 'string' && name.startsWith(last)) { 715a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org result.push(name); 721b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org } 735a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org } 74750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org current = ToInspectableObject(Object.getPrototypeOf(current)); 755a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org } 765a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org return result; 775a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org} 7837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 7937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 8037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Global object holding debugger related constants and state. 81f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgvar Debug = {}; 8237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 8337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 8437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Debug events which can occour in the V8 JavaScript engine. These originate 85245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org// from the API include file v8-debug.h. 8637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebug.DebugEvent = { Break: 1, 8737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com Exception: 2, 8837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com NewFunction: 3, 8937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com BeforeCompile: 4, 9037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com AfterCompile: 5 }; 9137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 9237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 9337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// The different types of scripts matching enum ScriptType in objects.h. 9437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebug.ScriptType = { Native: 0, 9537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com Extension: 1, 9637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com Normal: 2 }; 9737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 9837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 99e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org// The different types of script compilations matching enum 100e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org// Script::CompilationType in objects.h. 101e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.orgDebug.ScriptCompilationType = { Host: 0, 102e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org Eval: 1, 103e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org JSON: 2 }; 104e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org 105e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org 106eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org// The different types of scopes matching constants runtime.cc. 107eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.orgDebug.ScopeType = { Global: 0, 108eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org Local: 1, 109eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org With: 2, 110a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org Closure: 3, 1114acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org Catch: 4, 1124acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org Block: 5 }; 113eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 114eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 11537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Current debug state. 116f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgvar kNoFrame = -1; 11737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebug.State = { 11837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com currentFrame: kNoFrame, 119d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org displaySourceStartLine: -1, 120d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org displaySourceEndLine: -1, 12137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com currentSourceLine: -1 1221b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 123245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgvar trace_compile = false; // Tracing all compile events? 124d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgvar trace_debug_json = false; // Tracing all debug json packets? 125ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.orgvar last_cmd = ''; 126d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgvar repeat_cmd_line = ''; 127d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgvar is_running = true; 128ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.org// Global variable used to store whether a handle was requested. 129ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.orgvar lookup_handle = null; 130d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 131d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org// Copied from debug-delay.js. This is needed below: 132d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgfunction ScriptTypeFlag(type) { 133d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return (1 << type); 134d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org} 13537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 13637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 1377be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// Process a debugger JSON message into a display text and a running status. 1387be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// This function returns an object with properties "text" and "running" holding 1397be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// this information. 1407be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgfunction DebugMessageDetails(message) { 141d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (trace_debug_json) { 142d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print("received: '" + message + "'"); 143d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 144061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org // Convert the JSON string to an object. 1457be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org var response = new ProtocolPackage(message); 146d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org is_running = response.running(); 1477be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 1487be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org if (response.type() == 'event') { 1497be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org return DebugEventDetails(response); 1507be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org } else { 1517be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org return DebugResponseDetails(response); 1527be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org } 1537be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org} 1547be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 1557be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgfunction DebugEventDetails(response) { 156ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.org var details = {text:'', running:false}; 1577be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 1587be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org // Get the running state. 1597be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org details.running = response.running(); 160061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org 161061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org var body = response.body(); 1627be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org var result = ''; 163061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org switch (response.event()) { 164061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org case 'break': 165061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org if (body.breakpoints) { 1667be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += 'breakpoint'; 167061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org if (body.breakpoints.length > 1) { 1687be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += 's'; 16937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 1707be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += ' #'; 171061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org for (var i = 0; i < body.breakpoints.length; i++) { 172245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (i > 0) { 1737be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += ', #'; 174245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 1757be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += body.breakpoints[i]; 17637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 177245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } else { 1787be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += 'break'; 17937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 1807be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += ' in '; 1817be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += body.invocationText; 1827be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += ', '; 1837be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += SourceInfo(body); 1847be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += '\n'; 1857be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += SourceUnderline(body.sourceLineText, body.sourceColumn); 186061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org Debug.State.currentSourceLine = body.sourceLine; 187d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.displaySourceStartLine = -1; 188d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.displaySourceEndLine = -1; 18937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com Debug.State.currentFrame = 0; 1907be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org details.text = result; 1917be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org break; 19225156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 193061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org case 'exception': 194061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org if (body.uncaught) { 1957be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += 'Uncaught: '; 196245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } else { 1977be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += 'Exception: '; 198245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 1997be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += '"'; 2007be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += body.exception.text; 2017be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += '"'; 202061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org if (body.sourceLine >= 0) { 2037be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += ', '; 2047be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += SourceInfo(body); 2057be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += '\n'; 2067be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += SourceUnderline(body.sourceLineText, body.sourceColumn); 207061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org Debug.State.currentSourceLine = body.sourceLine; 208d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.displaySourceStartLine = -1; 209d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.displaySourceEndLine = -1; 210245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org Debug.State.currentFrame = 0; 211245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } else { 2127be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += ' (empty stack)'; 213245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org Debug.State.currentSourceLine = -1; 214d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.displaySourceStartLine = -1; 215d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.displaySourceEndLine = -1; 216245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org Debug.State.currentFrame = kNoFrame; 217245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 2187be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org details.text = result; 2197be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org break; 220061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org 221061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org case 'afterCompile': 222245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (trace_compile) { 2231b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org result = 'Source ' + body.script.name + ' compiled:\n'; 224061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org var source = body.script.source; 225245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (!(source[source.length - 1] == '\n')) { 2267be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += source; 227245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } else { 2287be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += source.substring(0, source.length - 1); 229245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 230245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 2317be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org details.text = result; 2327be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org break; 2337be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 234d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'scriptCollected': 235d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org details.text = result; 236d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 237d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 2387be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org default: 2397be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org details.text = 'Unknown debug event ' + response.event(); 24037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 2417be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 2427be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org return details; 2431b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org} 24437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 24537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 246061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.orgfunction SourceInfo(body) { 247061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org var result = ''; 24825156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 249061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org if (body.script) { 250061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org if (body.script.name) { 251061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org result += body.script.name; 252061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org } else { 253061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org result += '[unnamed]'; 254061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org } 255061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org } 256061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org result += ' line '; 257061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org result += body.sourceLine + 1; 258061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org result += ' column '; 259061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org result += body.sourceColumn + 1; 26025156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 261061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org return result; 262061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org} 263061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org 264061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org 26537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comfunction SourceUnderline(source_text, position) { 26637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (!source_text) { 26737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return; 26837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 26937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 27037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Create an underline with a caret pointing to the source position. If the 27137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // source contains a tab character the underline will have a tab character in 27237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // the same place otherwise the underline will have a space character. 27337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var underline = ''; 27437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com for (var i = 0; i < position; i++) { 27537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (source_text[i] == '\t') { 27637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com underline += '\t'; 27737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else { 27837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com underline += ' '; 27937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 28037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 28137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com underline += '^'; 28237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 28337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Return the source line text with the underline beneath. 28437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return source_text + '\n' + underline; 2851b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org} 28637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 28737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 28837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Converts a text command to a JSON request. 28937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comfunction DebugCommandToJSONRequest(cmd_line) { 290d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var result = new DebugRequest(cmd_line).JSONRequest(); 291d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (trace_debug_json && result) { 292d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print("sending: '" + result + "'"); 293d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 294d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return result; 2951b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org} 29637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 29737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 29837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comfunction DebugRequest(cmd_line) { 29937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // If the very first character is a { assume that a JSON request have been 30037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // entered as a command. Converting that to a JSON request is trivial. 30137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (cmd_line && cmd_line.length > 0 && cmd_line.charAt(0) == '{') { 30237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.request_ = cmd_line; 30337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return; 30437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 30537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 306d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Check for a simple carriage return to repeat the last command: 307d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var is_repeating = false; 308d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (cmd_line == '\n') { 309d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (is_running) { 310d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org cmd_line = 'break'; // Not in debugger mode, break with a frame request. 311d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else { 312d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org cmd_line = repeat_cmd_line; // use command to repeat. 313d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org is_repeating = true; 314d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 315d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 316d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (!is_running) { // Only save the command if in debugger mode. 317d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org repeat_cmd_line = cmd_line; // save last command. 318d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 319d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 32037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Trim string for leading and trailing whitespace. 32137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com cmd_line = cmd_line.replace(/^\s+|\s+$/g, ''); 32237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 32337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Find the command. 32437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var pos = cmd_line.indexOf(' '); 32537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var cmd; 32637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var args; 32737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (pos == -1) { 32837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com cmd = cmd_line; 32937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com args = ''; 33037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else { 33137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com cmd = cmd_line.slice(0, pos); 33237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com args = cmd_line.slice(pos).replace(/^\s+|\s+$/g, ''); 33337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 33437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 335d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if ((cmd === undefined) || !cmd) { 336d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = void 0; 337d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return; 338d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 339d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 340d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org last_cmd = cmd; 341d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 34237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Switch on command. 34337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com switch (cmd) { 34437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'continue': 34537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'c': 34637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.request_ = this.continueCommandToJSONRequest_(args); 34737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 34837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 34937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'step': 35037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 's': 351d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = this.stepCommandToJSONRequest_(args, 'in'); 352d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 353d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 354d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'stepi': 355d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'si': 356d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = this.stepCommandToJSONRequest_(args, 'min'); 357d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 358d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 359d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'next': 360d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'n': 361d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = this.stepCommandToJSONRequest_(args, 'next'); 362d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 363d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 364d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'finish': 365d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'fin': 366d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = this.stepCommandToJSONRequest_(args, 'out'); 36737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 36837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 36937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'backtrace': 37037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'bt': 37137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.request_ = this.backtraceCommandToJSONRequest_(args); 37237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 37325156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 37437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'frame': 37537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'f': 37637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.request_ = this.frameCommandToJSONRequest_(args); 37737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 37825156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 379eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org case 'scopes': 380eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org this.request_ = this.scopesCommandToJSONRequest_(args); 381eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org break; 38225156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 383eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org case 'scope': 384eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org this.request_ = this.scopeCommandToJSONRequest_(args); 385eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org break; 38625156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 387d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'disconnect': 388d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'exit': 389d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'quit': 390d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = this.disconnectCommandToJSONRequest_(args); 391d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 392d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 393d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'up': 394d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = 395d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.frameCommandToJSONRequest_('' + 396d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org (Debug.State.currentFrame + 1)); 397d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 39828a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org 399d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'down': 400d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'do': 401d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = 402d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.frameCommandToJSONRequest_('' + 403d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org (Debug.State.currentFrame - 1)); 404d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 40528a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org 406d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'set': 40737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'print': 40837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'p': 40937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.request_ = this.printCommandToJSONRequest_(args); 41037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 41137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 412ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org case 'dir': 413ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org this.request_ = this.dirCommandToJSONRequest_(args); 414ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org break; 415ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 416245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org case 'references': 417245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org this.request_ = this.referencesCommandToJSONRequest_(args); 418245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org break; 419245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 420245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org case 'instances': 421245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org this.request_ = this.instancesCommandToJSONRequest_(args); 422245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org break; 423245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 424d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'list': 425d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'l': 426d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = this.listCommandToJSONRequest_(args); 427d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 42837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'source': 42937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.request_ = this.sourceCommandToJSONRequest_(args); 43037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 43125156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 43237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'scripts': 433d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'script': 434d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'scr': 43537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.request_ = this.scriptsCommandToJSONRequest_(args); 43637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 43725156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 43837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'break': 43937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'b': 44037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.request_ = this.breakCommandToJSONRequest_(args); 44137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 44225156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 443dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org case 'breakpoints': 444dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org case 'bb': 445dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org this.request_ = this.breakpointsCommandToJSONRequest_(args); 446dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org break; 447dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org 44837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'clear': 449d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'delete': 450d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'd': 45137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.request_ = this.clearCommandToJSONRequest_(args); 45237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 45337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 454bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org case 'threads': 455bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org this.request_ = this.threadsCommandToJSONRequest_(args); 456bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org break; 457bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 458d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'cond': 459d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = this.changeBreakpointCommandToJSONRequest_(args, 'cond'); 460d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 461d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 462d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'enable': 463d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'en': 464d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = 465d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.changeBreakpointCommandToJSONRequest_(args, 'enable'); 466d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 467d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 468d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'disable': 469d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'dis': 470d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = 471d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.changeBreakpointCommandToJSONRequest_(args, 'disable'); 472d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 473d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 474d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'ignore': 475d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = 476d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.changeBreakpointCommandToJSONRequest_(args, 'ignore'); 477d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 478d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 479d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'info': 480d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'inf': 481d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = this.infoCommandToJSONRequest_(args); 482d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 483d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 484d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'flags': 485d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = this.v8FlagsToJSONRequest_(args); 486d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 487d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 488d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'gc': 489d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org this.request_ = this.gcToJSONRequest_(args); 490d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 491d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 492245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org case 'trace': 493d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'tr': 494245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org // Return undefined to indicate command handled internally (no JSON). 495245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org this.request_ = void 0; 496245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org this.traceCommand_(args); 497245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org break; 498245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 49937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'help': 50037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case '?': 50137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.helpCommand_(args); 502245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org // Return undefined to indicate command handled internally (no JSON). 503245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org this.request_ = void 0; 50437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 50537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 50637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com default: 50737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com throw new Error('Unknown command "' + cmd + '"'); 50837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 50937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com} 51037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 51137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebugRequest.prototype.JSONRequest = function() { 51237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return this.request_; 5131b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 51437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 51537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 51637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comfunction RequestPacket(command) { 51737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.seq = 0; 51837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.type = 'request'; 51937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com this.command = command; 52037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com} 52137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 52237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 52337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comRequestPacket.prototype.toJSONProtocol = function() { 52437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Encode the protocol header. 52537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var json = '{'; 52637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com json += '"seq":' + this.seq; 52737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com json += ',"type":"' + this.type + '"'; 52837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (this.command) { 52937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com json += ',"command":' + StringToJSON_(this.command); 53037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 53137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (this.arguments) { 53237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com json += ',"arguments":'; 53337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Encode the arguments part. 53437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (this.arguments.toJSONProtocol) { 5351b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org json += this.arguments.toJSONProtocol(); 53637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else { 53737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com json += SimpleObjectToJSON_(this.arguments); 53837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 53937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 54037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com json += '}'; 54137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return json; 5421b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 54337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 54437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 54537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebugRequest.prototype.createRequest = function(command) { 54637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return new RequestPacket(command); 54737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com}; 54837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 54937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 550ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org// Create a JSON request for the evaluation command. 551ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgDebugRequest.prototype.makeEvaluateJSONRequest_ = function(expression) { 552eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org lookup_handle = null; 5539ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org 554ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org // Check if the expression is a handle id in the form #<handle>#. 555ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org var handle_match = expression.match(/^#([0-9]*)#$/); 556ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (handle_match) { 557eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org // Remember the handle requested in a global variable. 558eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org lookup_handle = parseInt(handle_match[1]); 559245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org // Build a lookup request. 560ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org var request = this.createRequest('lookup'); 561ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org request.arguments = {}; 562eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org request.arguments.handles = [ lookup_handle ]; 563ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return request.toJSONProtocol(); 564ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } else { 565ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org // Build an evaluate request. 566ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org var request = this.createRequest('evaluate'); 567ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org request.arguments = {}; 568ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org request.arguments.expression = expression; 569381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org // Request a global evaluation if there is no current frame. 570381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org if (Debug.State.currentFrame == kNoFrame) { 571381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org request.arguments.global = true; 572381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org } 573ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return request.toJSONProtocol(); 574ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 575ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org}; 576ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 577ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 578245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org// Create a JSON request for the references/instances command. 579245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgDebugRequest.prototype.makeReferencesJSONRequest_ = function(handle, type) { 580245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org // Build a references request. 581245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org var handle_match = handle.match(/^#([0-9]*)#$/); 582245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (handle_match) { 583245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org var request = this.createRequest('references'); 584245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org request.arguments = {}; 585245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org request.arguments.type = type; 586245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org request.arguments.handle = parseInt(handle_match[1]); 587245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return request.toJSONProtocol(); 588245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } else { 589245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org throw new Error('Invalid object id.'); 590245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 591245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org}; 592245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 593ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 59437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Create a JSON request for the continue command. 59537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebugRequest.prototype.continueCommandToJSONRequest_ = function(args) { 59637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var request = this.createRequest('continue'); 59737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return request.toJSONProtocol(); 59837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com}; 59937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 60037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 60137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Create a JSON request for the step command. 602d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDebugRequest.prototype.stepCommandToJSONRequest_ = function(args, type) { 60337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Requesting a step is through the continue command with additional 60437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // arguments. 60537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var request = this.createRequest('continue'); 60637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments = {}; 60737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 60837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Process arguments if any. 609d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 610d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Only process args if the command is 'step' which is indicated by type being 611d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // set to 'in'. For all other commands, ignore the args. 61237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (args && args.length > 0) { 613d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org args = args.split(/\s+/g); 61437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 61537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (args.length > 2) { 61637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com throw new Error('Invalid step arguments.'); 61737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 61837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 61937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (args.length > 0) { 620d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Check if we have a gdb stype step command. If so, the 1st arg would 621d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // be the step count. If it's not a number, then assume that we're 622d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // parsing for the legacy v8 step command. 623d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var stepcount = Number(args[0]); 624d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (stepcount == Number.NaN) { 625d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // No step count at arg 1. Process as legacy d8 step command: 626d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (args.length == 2) { 627d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var stepcount = parseInt(args[1]); 628d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (isNaN(stepcount) || stepcount <= 0) { 629d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org throw new Error('Invalid step count argument "' + args[0] + '".'); 630d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 631d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.stepcount = stepcount; 63237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 63337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 634d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Get the step action. 635d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org switch (args[0]) { 636d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'in': 637d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'i': 638d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.stepaction = 'in'; 639d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 64025156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 641d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'min': 642d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'm': 643d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.stepaction = 'min'; 644d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 64525156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 646d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'next': 647d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'n': 648d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.stepaction = 'next'; 649d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 65025156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 651d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'out': 652d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'o': 653d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.stepaction = 'out'; 654d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 65525156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 656d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org default: 657d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org throw new Error('Invalid step argument "' + args[0] + '".'); 658d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 659d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 660d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else { 661d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // gdb style step commands: 662d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.stepaction = type; 663d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.stepcount = stepcount; 66437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 66537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 66637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else { 667d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Default is step of the specified type. 668d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.stepaction = type; 66937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 67037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 67137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return request.toJSONProtocol(); 67237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com}; 67337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 67437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 67537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Create a JSON request for the backtrace command. 67637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebugRequest.prototype.backtraceCommandToJSONRequest_ = function(args) { 67737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Build a backtrace request from the text command. 67837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var request = this.createRequest('backtrace'); 67925156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 680b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org // Default is to show top 10 frames. 681b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org request.arguments = {}; 682b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org request.arguments.fromFrame = 0; 683b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org request.arguments.toFrame = 10; 684b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 68537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com args = args.split(/\s*[ ]+\s*/g); 686b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org if (args.length == 1 && args[0].length > 0) { 687b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org var frameCount = parseInt(args[0]); 688b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org if (frameCount > 0) { 689b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org // Show top frames. 690b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org request.arguments.fromFrame = 0; 691b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org request.arguments.toFrame = frameCount; 692b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } else { 693b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org // Show bottom frames. 694b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org request.arguments.fromFrame = 0; 695b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org request.arguments.toFrame = -frameCount; 696b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org request.arguments.bottom = true; 697b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } 698b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } else if (args.length == 2) { 69937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var fromFrame = parseInt(args[0]); 70037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var toFrame = parseInt(args[1]); 70137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (isNaN(fromFrame) || fromFrame < 0) { 70237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com throw new Error('Invalid start frame argument "' + args[0] + '".'); 70337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 70437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (isNaN(toFrame) || toFrame < 0) { 70537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com throw new Error('Invalid end frame argument "' + args[1] + '".'); 70637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 70737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (fromFrame > toFrame) { 70837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com throw new Error('Invalid arguments start frame cannot be larger ' + 70937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 'than end frame.'); 71037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 711b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org // Show frame range. 71237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments.fromFrame = fromFrame; 71337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments.toFrame = toFrame + 1; 714b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org } else if (args.length > 2) { 715b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org throw new Error('Invalid backtrace arguments.'); 71637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 717b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 71837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return request.toJSONProtocol(); 71937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com}; 72037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 72137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 72237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Create a JSON request for the frame command. 72337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebugRequest.prototype.frameCommandToJSONRequest_ = function(args) { 72437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Build a frame request from the text command. 72537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var request = this.createRequest('frame'); 72637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com args = args.split(/\s*[ ]+\s*/g); 72737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (args.length > 0 && args[0].length > 0) { 72837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments = {}; 72937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments.number = args[0]; 73037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 73137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return request.toJSONProtocol(); 73237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com}; 73337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 73437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 735eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org// Create a JSON request for the scopes command. 736eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.orgDebugRequest.prototype.scopesCommandToJSONRequest_ = function(args) { 737eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org // Build a scopes request from the text command. 738eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org var request = this.createRequest('scopes'); 739eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org return request.toJSONProtocol(); 740eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org}; 741eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 742eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 743eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org// Create a JSON request for the scope command. 744eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.orgDebugRequest.prototype.scopeCommandToJSONRequest_ = function(args) { 745eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org // Build a scope request from the text command. 746eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org var request = this.createRequest('scope'); 747eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org args = args.split(/\s*[ ]+\s*/g); 748eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org if (args.length > 0 && args[0].length > 0) { 749eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org request.arguments = {}; 750eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org request.arguments.number = args[0]; 751eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 752eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org return request.toJSONProtocol(); 753eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org}; 754eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 755eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 75637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Create a JSON request for the print command. 75737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebugRequest.prototype.printCommandToJSONRequest_ = function(args) { 758ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org // Build an evaluate request from the text command. 75937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (args.length == 0) { 76037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com throw new Error('Missing expression.'); 76137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 762ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.makeEvaluateJSONRequest_(args); 763ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org}; 76437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 76537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 766ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org// Create a JSON request for the dir command. 767ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgDebugRequest.prototype.dirCommandToJSONRequest_ = function(args) { 768ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org // Build an evaluate request from the text command. 769ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (args.length == 0) { 770ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org throw new Error('Missing expression.'); 771ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 772ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.makeEvaluateJSONRequest_(args); 77337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com}; 77437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 77537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 776245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org// Create a JSON request for the references command. 777245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgDebugRequest.prototype.referencesCommandToJSONRequest_ = function(args) { 778245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org // Build an evaluate request from the text command. 779245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (args.length == 0) { 780245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org throw new Error('Missing object id.'); 781245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 78225156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 783245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return this.makeReferencesJSONRequest_(args, 'referencedBy'); 784245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org}; 785245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 786245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 787245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org// Create a JSON request for the instances command. 788245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgDebugRequest.prototype.instancesCommandToJSONRequest_ = function(args) { 789245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org // Build an evaluate request from the text command. 790245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (args.length == 0) { 791245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org throw new Error('Missing object id.'); 792245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 79325156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 794245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org // Build a references request. 795245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return this.makeReferencesJSONRequest_(args, 'constructedBy'); 796245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org}; 797245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 798245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 799d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org// Create a JSON request for the list command. 800d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDebugRequest.prototype.listCommandToJSONRequest_ = function(args) { 801d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 802d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Default is ten lines starting five lines before the current location. 803d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (Debug.State.displaySourceEndLine == -1) { 804d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // If we list forwards, we will start listing after the last source end 805d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // line. Set it to start from 5 lines before the current location. 806d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.displaySourceEndLine = Debug.State.currentSourceLine - 5; 807d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // If we list backwards, we will start listing backwards from the last 808d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // source start line. Set it to start from 1 lines before the current 809d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // location. 810d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.displaySourceStartLine = Debug.State.currentSourceLine + 1; 811d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 812d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 813d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var from = Debug.State.displaySourceEndLine + 1; 814d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var lines = 10; 815d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 816d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Parse the arguments. 817d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org args = args.split(/\s*,\s*/g); 818d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (args == '') { 819d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if ((args.length == 1) && (args[0] == '-')) { 820d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org from = Debug.State.displaySourceStartLine - lines; 821d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (args.length == 2) { 822d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org from = parseInt(args[0]); 823d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org lines = parseInt(args[1]) - from + 1; // inclusive of the ending line. 824d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else { 825d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org throw new Error('Invalid list arguments.'); 826d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 827d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.displaySourceStartLine = from; 828d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.displaySourceEndLine = from + lines - 1; 829d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var sourceArgs = '' + from + ' ' + lines; 830d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return this.sourceCommandToJSONRequest_(sourceArgs); 831d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org}; 832d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 833d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 83437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Create a JSON request for the source command. 83537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebugRequest.prototype.sourceCommandToJSONRequest_ = function(args) { 83637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Build a evaluate request from the text command. 83737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var request = this.createRequest('source'); 83837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 83937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Default is ten lines starting five lines before the current location. 84037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var from = Debug.State.currentSourceLine - 5; 84137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var lines = 10; 84237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 84337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Parse the arguments. 84437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com args = args.split(/\s*[ ]+\s*/g); 84537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (args.length > 1 && args[0].length > 0 && args[1].length > 0) { 84637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com from = parseInt(args[0]) - 1; 84737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com lines = parseInt(args[1]); 84837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else if (args.length > 0 && args[0].length > 0) { 84937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com from = parseInt(args[0]) - 1; 85037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 85137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 85237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (from < 0) from = 0; 85337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (lines < 0) lines = 10; 85437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 85537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Request source arround current source location. 85637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments = {}; 85737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments.fromLine = from; 85837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments.toLine = from + lines; 85937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 86037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return request.toJSONProtocol(); 86137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com}; 86237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 86337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 86437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Create a JSON request for the scripts command. 86537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebugRequest.prototype.scriptsCommandToJSONRequest_ = function(args) { 86637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Build a evaluate request from the text command. 86737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var request = this.createRequest('scripts'); 86837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 86937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Process arguments if any. 87037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (args && args.length > 0) { 87137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com args = args.split(/\s*[ ]+\s*/g); 87237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 87337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (args.length > 1) { 87437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com throw new Error('Invalid scripts arguments.'); 87537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 87637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 87737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments = {}; 87837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com switch (args[0]) { 87937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'natives': 88037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments.types = ScriptTypeFlag(Debug.ScriptType.Native); 88137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 88225156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 88337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'extensions': 88437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments.types = ScriptTypeFlag(Debug.ScriptType.Extension); 88537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 88625156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 88737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'all': 88837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments.types = 88937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com ScriptTypeFlag(Debug.ScriptType.Normal) | 89037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com ScriptTypeFlag(Debug.ScriptType.Native) | 89137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com ScriptTypeFlag(Debug.ScriptType.Extension); 89237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 89325156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 89437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com default: 895d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // If the arg is not one of the know one aboves, then it must be a 896d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // filter used for filtering the results: 897d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.filter = args[0]; 898d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 89937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 90037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 90137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 90237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return request.toJSONProtocol(); 90337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com}; 90437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 90537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 90637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Create a JSON request for the break command. 90737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebugRequest.prototype.breakCommandToJSONRequest_ = function(args) { 90837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Build a evaluate request from the text command. 90937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Process arguments if any. 91037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (args && args.length > 0) { 91137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var target = args; 91265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org var type = 'function'; 91365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org var line; 91465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org var column; 91537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var condition; 91665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org var pos; 91737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 918c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org var request = this.createRequest('setbreakpoint'); 919c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org 920d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Break the args into target spec and condition if appropriate. 921d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 92265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // Check for breakpoint condition. 92365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org pos = args.indexOf(' '); 92437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (pos > 0) { 92537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com target = args.substring(0, pos); 92637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com condition = args.substring(pos + 1, args.length); 92737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 92837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 92965dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // Check for script breakpoint (name:line[:column]). If no ':' in break 93065dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // specification it is considered a function break point. 93165dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org pos = target.indexOf(':'); 93265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org if (pos > 0) { 93365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org var tmp = target.substring(pos + 1, target.length); 93465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org target = target.substring(0, pos); 935ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org if (target[0] == '/' && target[target.length - 1] == '/') { 936ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org type = 'scriptRegExp'; 937ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org target = target.substring(1, target.length - 1); 938ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } else { 939ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org type = 'script'; 940ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } 94125156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 94265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org // Check for both line and column. 94365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org pos = tmp.indexOf(':'); 94465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org if (pos > 0) { 94565dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org column = parseInt(tmp.substring(pos + 1, tmp.length)) - 1; 94665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org line = parseInt(tmp.substring(0, pos)) - 1; 94765dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org } else { 94865dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org line = parseInt(tmp) - 1; 94965dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org } 95065dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org } else if (target[0] == '#' && target[target.length - 1] == '#') { 95165dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org type = 'handle'; 95265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org target = target.substring(1, target.length - 1); 95365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org } else { 95465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org type = 'function'; 95565dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org } 95625156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 95737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments = {}; 95865dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org request.arguments.type = type; 95937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments.target = target; 96065dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org request.arguments.line = line; 96165dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org request.arguments.column = column; 96237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments.condition = condition; 96337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else { 964c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org var request = this.createRequest('suspend'); 96537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 96637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 96737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return request.toJSONProtocol(); 96837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com}; 96937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 97037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 971dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.orgDebugRequest.prototype.breakpointsCommandToJSONRequest_ = function(args) { 972dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org if (args && args.length > 0) { 973dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org throw new Error('Unexpected arguments.'); 974dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org } 975dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org var request = this.createRequest('listbreakpoints'); 976dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org return request.toJSONProtocol(); 977dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org}; 978dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org 979dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org 98037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Create a JSON request for the clear command. 98137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebugRequest.prototype.clearCommandToJSONRequest_ = function(args) { 98237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Build a evaluate request from the text command. 98337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var request = this.createRequest('clearbreakpoint'); 98437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 98537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Process arguments if any. 98637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (args && args.length > 0) { 98737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments = {}; 98837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com request.arguments.breakpoint = parseInt(args); 98937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else { 99037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com throw new Error('Invalid break arguments.'); 99137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 99237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 99337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return request.toJSONProtocol(); 99437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com}; 99537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 99637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 997d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org// Create a JSON request for the change breakpoint command. 998d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDebugRequest.prototype.changeBreakpointCommandToJSONRequest_ = 999d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org function(args, command) { 1000d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1001d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var request; 1002d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1003d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Check for exception breaks first: 1004d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // en[able] exc[eptions] [all|unc[aught]] 1005d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // en[able] [all|unc[aught]] exc[eptions] 1006d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // dis[able] exc[eptions] [all|unc[aught]] 1007d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // dis[able] [all|unc[aught]] exc[eptions] 1008d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if ((command == 'enable' || command == 'disable') && 1009d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org args && args.length > 1) { 1010d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var nextPos = args.indexOf(' '); 1011d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var arg1 = (nextPos > 0) ? args.substring(0, nextPos) : args; 1012d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var excType = null; 1013d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1014d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Check for: 1015d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // en[able] exc[eptions] [all|unc[aught]] 1016d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // dis[able] exc[eptions] [all|unc[aught]] 1017d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (arg1 == 'exc' || arg1 == 'exception' || arg1 == 'exceptions') { 1018d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1019d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var arg2 = (nextPos > 0) ? 1020d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org args.substring(nextPos + 1, args.length) : 'all'; 1021d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (!arg2) { 1022d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org arg2 = 'all'; // if unspecified, set for all. 1023c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org } else if (arg2 == 'unc') { // check for short cut. 1024d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org arg2 = 'uncaught'; 1025d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1026d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org excType = arg2; 102728a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org 1028d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Check for: 1029d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // en[able] [all|unc[aught]] exc[eptions] 1030d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // dis[able] [all|unc[aught]] exc[eptions] 1031d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (arg1 == 'all' || arg1 == 'unc' || arg1 == 'uncaught') { 1032d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1033d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var arg2 = (nextPos > 0) ? 1034d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org args.substring(nextPos + 1, args.length) : null; 1035d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (arg2 == 'exc' || arg1 == 'exception' || arg1 == 'exceptions') { 1036d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org excType = arg1; 1037d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (excType == 'unc') { 1038d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org excType = 'uncaught'; 1039d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1040d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1041d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1042d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1043d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // If we matched one of the command formats, then excType will be non-null: 1044d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (excType) { 1045d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Build a evaluate request from the text command. 1046d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request = this.createRequest('setexceptionbreak'); 1047d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1048d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments = {}; 1049d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.type = excType; 1050d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.enabled = (command == 'enable'); 1051d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1052d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return request.toJSONProtocol(); 1053d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1054d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1055d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1056d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Build a evaluate request from the text command. 1057d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request = this.createRequest('changebreakpoint'); 1058d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1059d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Process arguments if any. 1060d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (args && args.length > 0) { 1061d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments = {}; 1062d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var pos = args.indexOf(' '); 1063d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var breakpointArg = args; 1064d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var otherArgs; 1065d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (pos > 0) { 1066d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org breakpointArg = args.substring(0, pos); 1067d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org otherArgs = args.substring(pos + 1, args.length); 1068d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1069d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1070d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.breakpoint = parseInt(breakpointArg); 1071d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1072d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org switch(command) { 1073d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'cond': 1074d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.condition = otherArgs ? otherArgs : null; 1075d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 1076d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'enable': 1077d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.enabled = true; 1078d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 1079d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'disable': 1080d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.enabled = false; 1081d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 1082d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'ignore': 1083d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.ignoreCount = parseInt(otherArgs); 1084d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 1085d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org default: 108628a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org throw new Error('Invalid arguments.'); 1087d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1088d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else { 1089d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org throw new Error('Invalid arguments.'); 1090d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1091d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1092d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return request.toJSONProtocol(); 1093d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org}; 1094d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1095d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1096d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org// Create a JSON request for the disconnect command. 1097d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDebugRequest.prototype.disconnectCommandToJSONRequest_ = function(args) { 1098d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var request; 1099d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request = this.createRequest('disconnect'); 1100d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return request.toJSONProtocol(); 1101d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org}; 1102d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1103d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1104d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org// Create a JSON request for the info command. 1105d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDebugRequest.prototype.infoCommandToJSONRequest_ = function(args) { 1106d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var request; 1107d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (args && (args == 'break' || args == 'br')) { 1108d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Build a evaluate request from the text command. 1109d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request = this.createRequest('listbreakpoints'); 1110d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org last_cmd = 'info break'; 1111d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (args && (args == 'locals' || args == 'lo')) { 1112d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Build a evaluate request from the text command. 1113d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request = this.createRequest('frame'); 1114d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org last_cmd = 'info locals'; 1115d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (args && (args == 'args' || args == 'ar')) { 1116d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Build a evaluate request from the text command. 1117d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request = this.createRequest('frame'); 1118d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org last_cmd = 'info args'; 1119d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else { 1120d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org throw new Error('Invalid info arguments.'); 1121d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1122d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1123d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return request.toJSONProtocol(); 1124d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org}; 1125d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1126d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1127d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDebugRequest.prototype.v8FlagsToJSONRequest_ = function(args) { 1128d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var request; 1129d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request = this.createRequest('v8flags'); 1130d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments = {}; 1131d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.flags = args; 1132d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return request.toJSONProtocol(); 1133d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org}; 1134d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1135d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1136d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDebugRequest.prototype.gcToJSONRequest_ = function(args) { 1137d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var request; 1138d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (!args) { 1139d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org args = 'all'; 1140d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1141d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var args = args.split(/\s+/g); 1142d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var cmd = args[0]; 1143d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1144d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org switch(cmd) { 1145d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'all': 1146d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'quick': 1147d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'full': 1148d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'young': 1149d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'old': 1150d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'compact': 1151d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'sweep': 1152d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'scavenge': { 1153d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (cmd == 'young') { cmd = 'quick'; } 1154d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org else if (cmd == 'old') { cmd = 'full'; } 1155d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1156d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request = this.createRequest('gc'); 1157d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments = {}; 1158d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org request.arguments.type = cmd; 1159d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 1160d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1161d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Else fall thru to the default case below to report the error. 1162d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org default: 1163d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org throw new Error('Missing arguments after ' + cmd + '.'); 1164d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1165d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return request.toJSONProtocol(); 1166d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org}; 1167d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1168d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1169bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org// Create a JSON request for the threads command. 1170bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgDebugRequest.prototype.threadsCommandToJSONRequest_ = function(args) { 1171bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org // Build a threads request from the text command. 1172bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org var request = this.createRequest('threads'); 1173bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org return request.toJSONProtocol(); 1174bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org}; 1175bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 1176bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 1177245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org// Handle the trace command. 1178245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgDebugRequest.prototype.traceCommand_ = function(args) { 1179245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org // Process arguments. 1180245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (args && args.length > 0) { 1181245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (args == 'compile') { 1182245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org trace_compile = !trace_compile; 1183245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org print('Tracing of compiled scripts ' + (trace_compile ? 'on' : 'off')); 1184d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (args === 'debug json' || args === 'json' || args === 'packets') { 1185d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org trace_debug_json = !trace_debug_json; 1186d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('Tracing of debug json packets ' + 1187d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org (trace_debug_json ? 'on' : 'off')); 1188245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } else { 1189245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org throw new Error('Invalid trace arguments.'); 1190245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 1191245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } else { 1192245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org throw new Error('Invalid trace arguments.'); 1193245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 11941b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1195245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 1196245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org// Handle the help command. 119737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comDebugRequest.prototype.helpCommand_ = function(args) { 119837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Help os quite simple. 119937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (args && args.length > 0) { 120037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com print('warning: arguments to \'help\' are ignored'); 120137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 120237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 1203d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('Note: <> denotes symbollic values to be replaced with real values.'); 1204d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('Note: [] denotes optional parts of commands, or optional options / arguments.'); 1205d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(' e.g. d[elete] - you get the same command if you type d or delete.'); 1206d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(''); 1207d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('[break] - break as soon as possible'); 1208d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('b[reak] location [condition]'); 1209d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(' - break on named function: location is a function name'); 1210d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(' - break on function: location is #<id>#'); 1211d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(' - break on script position: location is name:line[:column]'); 1212d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(''); 1213d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('clear <breakpoint #> - deletes the specified user defined breakpoint'); 1214d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('d[elete] <breakpoint #> - deletes the specified user defined breakpoint'); 1215d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('dis[able] <breakpoint #> - disables the specified user defined breakpoint'); 1216d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('dis[able] exc[eptions] [[all] | unc[aught]]'); 1217d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(' - disables breaking on exceptions'); 1218d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('en[able] <breakpoint #> - enables the specified user defined breakpoint'); 1219d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('en[able] exc[eptions] [[all] | unc[aught]]'); 1220d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(' - enables breaking on exceptions'); 1221d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(''); 1222d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('b[ack]t[race] [n] | [-n] | [from to]'); 1223d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(' - prints the stack back trace'); 1224d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('f[rame] - prints info about the current frame context'); 1225d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('f[rame] <frame #> - set context to specified frame #'); 1226eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org print('scopes'); 1227eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org print('scope <scope #>'); 1228d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(''); 1229d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('up - set context to caller of current frame'); 1230d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('do[wn] - set context to callee of current frame'); 1231d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('inf[o] br[eak] - prints info about breakpoints in use'); 1232d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('inf[o] ar[gs] - prints info about arguments of the current function'); 1233d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('inf[o] lo[cals] - prints info about locals in the current function'); 1234d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(''); 123537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com print('step [in | next | out| min [step count]]'); 1236d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('c[ontinue] - continue executing after a breakpoint'); 1237d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('s[tep] [<N>] - step into the next N callees (default N is 1)'); 1238d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('s[tep]i [<N>] - step into the next N callees (default N is 1)'); 1239d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('n[ext] [<N>] - step over the next N callees (default N is 1)'); 1240d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('fin[ish] [<N>] - step out of N frames (default N is 1)'); 1241d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(''); 1242d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('p[rint] <expression> - prints the result of the specified expression'); 1243d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('dir <expression> - prints the object structure of the result'); 1244d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('set <var> = <expression> - executes the specified statement'); 1245d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(''); 1246d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('l[ist] - list the source code around for the current pc'); 1247d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('l[ist] [- | <start>,<end>] - list the specified range of source code'); 124837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com print('source [from line [num lines]]'); 1249d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('scr[ipts] [native|extensions|all]'); 1250d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('scr[ipts] [<filter text>] - list scripts with the specified text in its description'); 1251d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(''); 1252d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('gc - runs the garbage collector'); 1253d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(''); 1254245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org print('trace compile'); 1255d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // hidden command: trace debug json - toggles tracing of debug json packets 1256d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print(''); 1257d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('disconnect|exit|quit - disconnects and quits the debugger'); 1258d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org print('help - prints this help information'); 12591b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 126037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 126137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 1262ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgfunction formatHandleReference_(value) { 1263eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org if (value.handle() >= 0) { 1264eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org return '#' + value.handle() + '#'; 1265eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } else { 1266eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org return '#Transient#'; 1267eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 1268ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org} 1269ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1270ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1271245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgfunction formatObject_(value, include_properties) { 1272245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org var result = ''; 1273245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += formatHandleReference_(value); 12741b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org result += ', type: object'; 1275245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += ', constructor '; 1276245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org var ctor = value.constructorFunctionValue(); 1277245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += formatHandleReference_(ctor); 1278245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += ', __proto__ '; 1279245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org var proto = value.protoObjectValue(); 1280245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += formatHandleReference_(proto); 1281245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += ', '; 1282245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += value.propertyCount(); 1283245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += ' properties.'; 1284245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org if (include_properties) { 1285245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += '\n'; 1286245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org for (var i = 0; i < value.propertyCount(); i++) { 1287245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += ' '; 1288245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += value.propertyName(i); 1289245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += ': '; 1290245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org var property_value = value.propertyValue(i); 1291eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org if (property_value instanceof ProtocolReference) { 1292245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += '<no type>'; 1293eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } else { 1294eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org if (property_value && property_value.type()) { 1295eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += property_value.type(); 1296eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } else { 1297eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += '<no type>'; 1298eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 1299245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 1300245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += ' '; 1301245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += formatHandleReference_(property_value); 1302245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += '\n'; 1303245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 1304245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 1305245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return result; 1306245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org} 1307245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 1308245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 1309eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.orgfunction formatScope_(scope) { 1310eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org var result = ''; 1311eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org var index = scope.index; 1312eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += '#' + (index <= 9 ? '0' : '') + index; 1313eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += ' '; 1314eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org switch (scope.type) { 1315eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org case Debug.ScopeType.Global: 1316eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += 'Global, '; 1317eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += '#' + scope.object.ref + '#'; 1318eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org break; 1319eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org case Debug.ScopeType.Local: 1320eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += 'Local'; 1321eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org break; 1322eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org case Debug.ScopeType.With: 1323eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += 'With, '; 1324eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += '#' + scope.object.ref + '#'; 1325eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org break; 1326a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org case Debug.ScopeType.Catch: 1327a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org result += 'Catch, '; 1328a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org result += '#' + scope.object.ref + '#'; 1329a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org break; 1330eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org case Debug.ScopeType.Closure: 1331eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += 'Closure'; 1332eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org break; 1333eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org default: 1334eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += 'UNKNOWN'; 1335eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 1336eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org return result; 1337eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org} 1338eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 1339eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 1340d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgfunction refObjectToString_(protocolPackage, handle) { 1341d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var value = protocolPackage.lookup(handle); 1342d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var result = ''; 1343d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (value.isString()) { 1344d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result = '"' + value.value() + '"'; 1345d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (value.isPrimitive()) { 1346d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result = value.valueString(); 1347d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (value.isObject()) { 1348d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += formatObject_(value, true); 1349d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1350d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return result; 1351d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org} 1352d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1353d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1354d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org// Rounds number 'num' to 'length' decimal places. 1355d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgfunction roundNumber(num, length) { 1356d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var factor = Math.pow(10, length); 1357d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return Math.round(num * factor) / factor; 1358d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org} 1359d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1360d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 136137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Convert a JSON response to text for display in a text based debugger. 13627be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgfunction DebugResponseDetails(response) { 1363ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.org var details = { text: '', running: false }; 136437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 136537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com try { 1366ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (!response.success()) { 1367ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org details.text = response.message(); 136837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return details; 136937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 137037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 137137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Get the running state. 1372ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org details.running = response.running(); 137337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 1374ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org var body = response.body(); 1375ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org var result = ''; 1376ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org switch (response.command()) { 1377c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org case 'suspend': 1378c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org details.text = 'stopped'; 1379c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org break; 138042841968c3c92e3b07bcd67e79eb6ba3f83032c1vegorov@chromium.org 138137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'setbreakpoint': 138237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result = 'set breakpoint #'; 138337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += body.breakpoint; 138437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com details.text = result; 138537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 138625156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 138737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'clearbreakpoint': 138837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result = 'cleared breakpoint #'; 138937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += body.breakpoint; 139037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com details.text = result; 139137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 139242841968c3c92e3b07bcd67e79eb6ba3f83032c1vegorov@chromium.org 1393d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'changebreakpoint': 1394d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result = 'successfully changed breakpoint'; 1395d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org details.text = result; 1396d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 1397d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1398dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org case 'listbreakpoints': 1399dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org result = 'breakpoints: (' + body.breakpoints.length + ')'; 1400dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org for (var i = 0; i < body.breakpoints.length; i++) { 1401dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org var breakpoint = body.breakpoints[i]; 1402dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org result += '\n id=' + breakpoint.number; 1403dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org result += ' type=' + breakpoint.type; 1404dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org if (breakpoint.script_id) { 1405dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org result += ' script_id=' + breakpoint.script_id; 1406dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org } 1407dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org if (breakpoint.script_name) { 1408dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org result += ' script_name=' + breakpoint.script_name; 1409dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org } 1410ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org if (breakpoint.script_regexp) { 1411ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org result += ' script_regexp=' + breakpoint.script_regexp; 1412ac2828d8d201b0631783404187688fbb786458a3lrn@chromium.org } 1413d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += ' line=' + (breakpoint.line + 1); 1414dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org if (breakpoint.column != null) { 1415d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += ' column=' + (breakpoint.column + 1); 1416dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org } 1417dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org if (breakpoint.groupId) { 1418dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org result += ' groupId=' + breakpoint.groupId; 1419dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org } 1420dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org if (breakpoint.ignoreCount) { 1421dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org result += ' ignoreCount=' + breakpoint.ignoreCount; 1422dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org } 1423dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org if (breakpoint.active === false) { 1424dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org result += ' inactive'; 1425dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org } 1426dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org if (breakpoint.condition) { 1427dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org result += ' condition=' + breakpoint.condition; 1428dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org } 1429dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org result += ' hit_count=' + breakpoint.hit_count; 1430dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org } 1431d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (body.breakpoints.length === 0) { 1432d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result = "No user defined breakpoints\n"; 1433d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else { 1434d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += '\n'; 1435d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1436d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (body.breakOnExceptions) { 1437d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += '* breaking on ALL exceptions is enabled\n'; 1438d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (body.breakOnUncaughtExceptions) { 1439d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += '* breaking on UNCAUGHT exceptions is enabled\n'; 1440d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else { 144128a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org result += '* all exception breakpoints are disabled\n'; 1442d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1443d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org details.text = result; 1444d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 1445d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1446d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'setexceptionbreak': 1447d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result = 'Break on ' + body.type + ' exceptions: '; 1448d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += body.enabled ? 'enabled' : 'disabled'; 1449dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org details.text = result; 1450dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org break; 145125156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 145237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'backtrace': 145337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (body.totalFrames == 0) { 145437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result = '(empty stack)'; 145537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else { 145637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var result = 'Frames #' + body.fromFrame + ' to #' + 145737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com (body.toFrame - 1) + ' of ' + body.totalFrames + '\n'; 145837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com for (i = 0; i < body.frames.length; i++) { 145937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (i != 0) result += '\n'; 146037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += body.frames[i].text; 146137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 146237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 146337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com details.text = result; 146437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 146525156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 146637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'frame': 1467d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (last_cmd === 'info locals') { 1468d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var locals = body.locals; 1469d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (locals.length === 0) { 1470d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result = 'No locals'; 1471d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else { 1472d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org for (var i = 0; i < locals.length; i++) { 1473d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var local = locals[i]; 1474d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += local.name + ' = '; 1475d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += refObjectToString_(response, local.value.ref); 1476d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += '\n'; 1477d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1478d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1479d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (last_cmd === 'info args') { 1480d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var args = body.arguments; 1481d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (args.length === 0) { 1482d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result = 'No arguments'; 1483d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else { 1484d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org for (var i = 0; i < args.length; i++) { 1485d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org var arg = args[i]; 1486d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += arg.name + ' = '; 1487d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += refObjectToString_(response, arg.value.ref); 1488d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result += '\n'; 1489d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1490d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1491d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else { 1492d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result = SourceUnderline(body.sourceLineText, 1493d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org body.column); 1494d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.currentSourceLine = body.line; 1495d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.currentFrame = body.index; 1496d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.displaySourceStartLine = -1; 1497d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org Debug.State.displaySourceEndLine = -1; 1498d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1499d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org details.text = result; 150037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 150125156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 1502eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org case 'scopes': 1503eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org if (body.totalScopes == 0) { 1504eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result = '(no scopes)'; 1505eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } else { 1506eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result = 'Scopes #' + body.fromScope + ' to #' + 1507eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org (body.toScope - 1) + ' of ' + body.totalScopes + '\n'; 1508eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org for (i = 0; i < body.scopes.length; i++) { 1509eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org if (i != 0) { 1510eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += '\n'; 1511eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 1512eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += formatScope_(body.scopes[i]); 1513eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 1514eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 1515eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org details.text = result; 1516eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org break; 1517eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org 1518eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org case 'scope': 1519eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += formatScope_(body); 1520eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += '\n'; 1521eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org var scope_object_value = response.lookup(body.object.ref); 1522eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org result += formatObject_(scope_object_value, true); 1523eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org details.text = result; 1524eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org break; 152525156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 152637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'evaluate': 1527ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org case 'lookup': 15289ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.org case 'getobj': 1529ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (last_cmd == 'p' || last_cmd == 'print') { 1530381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org result = body.text; 1531ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } else { 1532eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org var value; 1533eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org if (lookup_handle) { 1534eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org value = response.bodyValue(lookup_handle); 1535eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } else { 1536eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org value = response.bodyValue(); 1537eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org } 1538ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (value.isObject()) { 1539245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += formatObject_(value, true); 1540ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } else { 1541ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org result += 'type: '; 1542ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org result += value.type(); 1543ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (!value.isUndefined() && !value.isNull()) { 1544ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org result += ', '; 1545ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (value.isString()) { 1546ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org result += '"'; 1547ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 1548ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org result += value.value(); 1549ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (value.isString()) { 1550ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org result += '"'; 1551ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 1552ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 1553ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org result += '\n'; 1554ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 1555ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 1556ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org details.text = result; 155737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 1558245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org 1559245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org case 'references': 1560245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org var count = body.length; 1561245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += 'found ' + count + ' objects'; 1562245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += '\n'; 1563245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org for (var i = 0; i < count; i++) { 1564245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org var value = response.bodyValue(i); 1565245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += formatObject_(value, false); 1566245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org result += '\n'; 1567245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 1568245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org details.text = result; 1569245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org break; 157025156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 157137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'source': 157237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Get the source from the response. 1573ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org var source = body.source; 1574ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org var from_line = body.fromLine + 1; 157537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var lines = source.split('\n'); 157637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var maxdigits = 1 + Math.floor(log10(from_line + lines.length)); 157737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (maxdigits < 3) { 157837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com maxdigits = 3; 157937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 158037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var result = ''; 158137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com for (var num = 0; num < lines.length; num++) { 158237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Check if there's an extra newline at the end. 158337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (num == (lines.length - 1) && lines[num].length == 0) { 158437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 158537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 158637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 158737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var current_line = from_line + num; 15881456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org var spacer = maxdigits - (1 + Math.floor(log10(current_line))); 158937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (current_line == Debug.State.currentSourceLine + 1) { 159037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com for (var i = 0; i < maxdigits; i++) { 159137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += '>'; 159237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 159337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += ' '; 159437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else { 159537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com for (var i = 0; i < spacer; i++) { 159637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += ' '; 159737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 159837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += current_line + ': '; 159937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 160037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += lines[num]; 160137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += '\n'; 160237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 160337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com details.text = result; 160437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 160525156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 160637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'scripts': 160737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var result = ''; 1608ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org for (i = 0; i < body.length; i++) { 160937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (i != 0) result += '\n'; 16107be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org if (body[i].id) { 16117be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += body[i].id; 16127be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org } else { 16137be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += '[no id]'; 16147be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org } 16157be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += ', '; 1616ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (body[i].name) { 1617ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org result += body[i].name; 161837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else { 1619d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (body[i].compilationType == Debug.ScriptCompilationType.Eval 1620d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org && body[i].evalFromScript 1621d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org ) { 1622e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org result += 'eval from '; 1623e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org var script_value = response.lookup(body[i].evalFromScript.ref); 1624e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org result += ' ' + script_value.field('name'); 1625e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org result += ':' + (body[i].evalFromLocation.line + 1); 1626e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org result += ':' + body[i].evalFromLocation.column; 1627e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org } else if (body[i].compilationType == 1628e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org Debug.ScriptCompilationType.JSON) { 1629e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org result += 'JSON '; 1630e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org } else { // body[i].compilation == Debug.ScriptCompilationType.Host 1631e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org result += '[unnamed] '; 1632e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org } 163337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 163437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += ' (lines: '; 16357be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += body[i].lineCount; 163637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += ', length: '; 1637ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org result += body[i].sourceLength; 1638ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (body[i].type == Debug.ScriptType.Native) { 163937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += ', native'; 1640ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } else if (body[i].type == Debug.ScriptType.Extension) { 164137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com result += ', extension'; 164237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 16437be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += '), ['; 16447be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org var sourceStart = body[i].sourceStart; 16457be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org if (sourceStart.length > 40) { 16467be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org sourceStart = sourceStart.substring(0, 37) + '...'; 16477be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org } 16487be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += sourceStart; 16497be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org result += ']'; 165037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 1651d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (body.length == 0) { 1652d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org result = "no matching scripts found"; 1653d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 165437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com details.text = result; 165537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 165637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 1657bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org case 'threads': 1658bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org var result = 'Active V8 threads: ' + body.totalThreads + '\n'; 1659bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org body.threads.sort(function(a, b) { return a.id - b.id; }); 1660bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org for (i = 0; i < body.threads.length; i++) { 1661bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org result += body.threads[i].current ? '*' : ' '; 1662bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org result += ' '; 1663bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org result += body.threads[i].id; 1664bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org result += '\n'; 1665bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org } 1666bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org details.text = result; 1667bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org break; 1668bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 166937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'continue': 167037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com details.text = "(running)"; 167137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 167225156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 1673d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'v8flags': 1674d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org details.text = "flags set"; 1675d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 1676d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1677d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org case 'gc': 1678d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org details.text = "GC " + body.before + " => " + body.after; 1679d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (body.after > (1024*1024)) { 1680d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org details.text += 1681d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org " (" + roundNumber(body.before/(1024*1024), 1) + "M => " + 1682d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org roundNumber(body.after/(1024*1024), 1) + "M)"; 1683d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (body.after > 1024) { 1684d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org details.text += 1685d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org " (" + roundNumber(body.before/1024, 1) + "K => " + 1686d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org roundNumber(body.after/1024, 1) + "K)"; 1687d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } 1688d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org break; 1689d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 169037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com default: 169137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com details.text = 1692dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org 'Response for unknown command \'' + response.command() + '\'' + 1693dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org ' (' + response.raw_json() + ')'; 169437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 169537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } catch (e) { 169637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com details.text = 'Error: "' + e + '" formatting response'; 169737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 169825156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org 169937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return details; 17001b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org} 170137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 170237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 1703ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1704ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Protocol packages send from the debugger. 1705ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @param {string} json - raw protocol packet as JSON string. 1706ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @constructor 1707ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1708ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgfunction ProtocolPackage(json) { 1709dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org this.raw_json_ = json; 171018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org this.packet_ = JSON.parse(json); 1711ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org this.refs_ = []; 1712ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (this.packet_.refs) { 1713ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org for (var i = 0; i < this.packet_.refs.length; i++) { 1714ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org this.refs_[this.packet_.refs[i].handle] = this.packet_.refs[i]; 1715ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 1716ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 1717ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org} 1718ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1719ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1720ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1721ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Get the packet type. 1722ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {String} the packet type 1723ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1724ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolPackage.prototype.type = function() { 1725ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.packet_.type; 17261b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1727ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1728ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1729ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1730ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Get the packet event. 1731ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {Object} the packet event 1732ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1733ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolPackage.prototype.event = function() { 1734ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.packet_.event; 17351b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1736ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1737ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1738ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1739ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Get the packet request sequence. 1740ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {number} the packet request sequence 1741ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1742ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolPackage.prototype.requestSeq = function() { 1743ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.packet_.request_seq; 17441b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1745ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1746ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1747ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1748ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Get the packet request sequence. 1749ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {number} the packet request sequence 1750ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1751ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolPackage.prototype.running = function() { 1752ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.packet_.running ? true : false; 17531b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1754ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1755ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1756ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolPackage.prototype.success = function() { 1757ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.packet_.success ? true : false; 17581b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1759ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1760ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1761ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolPackage.prototype.message = function() { 1762ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.packet_.message; 17631b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1764ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1765ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1766ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolPackage.prototype.command = function() { 1767ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.packet_.command; 17681b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1769ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1770ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1771ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolPackage.prototype.body = function() { 1772ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.packet_.body; 17731b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1774ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1775ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1776245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgProtocolPackage.prototype.bodyValue = function(index) { 1777eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org if (index != null) { 1778245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org return new ProtocolValue(this.packet_.body[index], this); 1779381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org } else { 1780381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org return new ProtocolValue(this.packet_.body, this); 1781245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.org } 17821b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1783ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1784ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1785ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolPackage.prototype.body = function() { 1786ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.packet_.body; 17871b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1788ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1789ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1790ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolPackage.prototype.lookup = function(handle) { 1791ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org var value = this.refs_[handle]; 1792ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (value) { 1793ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return new ProtocolValue(value, this); 1794ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } else { 1795ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return new ProtocolReference(handle); 1796ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 17971b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1798ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1799ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1800dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.orgProtocolPackage.prototype.raw_json = function() { 1801dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org return this.raw_json_; 18021b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1803dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org 1804dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org 1805ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgfunction ProtocolValue(value, packet) { 1806ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org this.value_ = value; 1807ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org this.packet_ = packet; 1808ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org} 1809ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1810ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1811ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1812ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Get the value type. 1813ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {String} the value type 1814ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1815ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.type = function() { 1816ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.value_.type; 18171b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1818ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1819ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1820ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 182125156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org * Get a metadata field from a protocol value. 1822e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org * @return {Object} the metadata field value 1823e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org */ 1824e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.orgProtocolValue.prototype.field = function(name) { 1825e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org return this.value_[name]; 18261b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1827e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org 1828e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org 1829e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org/** 1830ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Check is the value is a primitive value. 1831ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {boolean} true if the value is primitive 1832ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1833ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.isPrimitive = function() { 1834ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.isUndefined() || this.isNull() || this.isBoolean() || 1835ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org this.isNumber() || this.isString(); 18361b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1837ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1838ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1839ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1840ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Get the object handle. 1841ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {number} the value handle 1842ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1843ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.handle = function() { 1844ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.value_.handle; 18451b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1846ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1847ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1848ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1849ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Check is the value is undefined. 1850ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {boolean} true if the value is undefined 1851ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1852ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.isUndefined = function() { 1853ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.value_.type == 'undefined'; 18541b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1855ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1856ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1857ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1858ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Check is the value is null. 1859ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {boolean} true if the value is null 1860ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1861ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.isNull = function() { 1862ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.value_.type == 'null'; 18631b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1864ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1865ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1866ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1867ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Check is the value is a boolean. 1868ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {boolean} true if the value is a boolean 1869ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1870ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.isBoolean = function() { 1871ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.value_.type == 'boolean'; 18721b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1873ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1874ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1875ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1876ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Check is the value is a number. 1877ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {boolean} true if the value is a number 1878ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1879ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.isNumber = function() { 1880ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.value_.type == 'number'; 18811b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1882ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1883ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1884ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1885ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Check is the value is a string. 1886ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {boolean} true if the value is a string 1887ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1888ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.isString = function() { 1889ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.value_.type == 'string'; 18901b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1891ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1892ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1893ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1894ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Check is the value is an object. 1895ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {boolean} true if the value is an object 1896ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1897ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.isObject = function() { 1898ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.value_.type == 'object' || this.value_.type == 'function' || 1899ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org this.value_.type == 'error' || this.value_.type == 'regexp'; 19001b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1901ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1902ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1903ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1904ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Get the constructor function 1905ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {ProtocolValue} constructor function 1906ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1907ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.constructorFunctionValue = function() { 1908ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org var ctor = this.value_.constructorFunction; 1909ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.packet_.lookup(ctor.ref); 19101b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1911ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1912ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1913ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1914ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Get the __proto__ value 1915ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {ProtocolValue} __proto__ value 1916ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1917ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.protoObjectValue = function() { 1918ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org var proto = this.value_.protoObject; 1919ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.packet_.lookup(proto.ref); 19201b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1921ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1922ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1923ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1924ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Get the number og properties. 1925ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {number} the number of properties 1926ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1927ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.propertyCount = function() { 1928ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.value_.properties ? this.value_.properties.length : 0; 19291b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1930ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1931ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1932ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1933ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Get the specified property name. 1934ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {string} property name 1935ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1936ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.propertyName = function(index) { 1937ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org var property = this.value_.properties[index]; 1938ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return property.name; 19391b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1940ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1941ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1942ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1943ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Return index for the property name. 1944ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @param name The property name to look for 1945ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {number} index for the property name 1946ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1947ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.propertyIndex = function(name) { 1948ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org for (var i = 0; i < this.propertyCount(); i++) { 1949ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org if (this.value_.properties[i].name == name) { 1950ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return i; 1951ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 1952ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 1953ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return null; 19541b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1955ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1956ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1957ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1958ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Get the specified property value. 1959ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {ProtocolValue} property value 1960ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1961ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.propertyValue = function(index) { 1962ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org var property = this.value_.properties[index]; 1963ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.packet_.lookup(property.ref); 19641b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1965ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1966ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1967ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/** 1968ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Check is the value is a string. 1969ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * @return {boolean} true if the value is a string 1970ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 1971ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolValue.prototype.value = function() { 1972ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.value_.value; 19731b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1974ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1975ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1976d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgProtocolValue.prototype.valueString = function() { 1977d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org return this.value_.text; 19781b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1979d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1980d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1981ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgfunction ProtocolReference(handle) { 1982ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org this.handle_ = handle; 1983ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org} 1984ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1985ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1986ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgProtocolReference.prototype.handle = function() { 1987ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return this.handle_; 19881b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org}; 1989ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 1990ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 199137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comfunction MakeJSONPair_(name, value) { 199237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return '"' + name + '":' + value; 199337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com} 199437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 199537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 199637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comfunction ArrayToJSONObject_(content) { 199737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return '{' + content.join(',') + '}'; 199837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com} 199937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 200037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 200137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comfunction ArrayToJSONArray_(content) { 200237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return '[' + content.join(',') + ']'; 200337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com} 200437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 200537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 200637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comfunction BooleanToJSON_(value) { 200725156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org return String(value); 200837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com} 200937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 201037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 201137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comfunction NumberToJSON_(value) { 201225156ded31ef771a2d799ed902483d83b3ebcbdclrn@chromium.org return String(value); 201337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com} 201437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 201537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 201637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Mapping of some control characters to avoid the \uXXXX syntax for most 201737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// commonly used control cahracters. 2018f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgvar ctrlCharMap_ = { 201937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com '\b': '\\b', 202037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com '\t': '\\t', 202137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com '\n': '\\n', 202237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com '\f': '\\f', 202337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com '\r': '\\r', 202437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com '"' : '\\"', 202537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com '\\': '\\\\' 202637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com}; 202737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 202837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 202937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Regular expression testing for ", \ and control characters (0x00 - 0x1F). 2030f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgvar ctrlCharTest_ = new RegExp('["\\\\\x00-\x1F]'); 203137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 203237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 203337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// Regular expression matching ", \ and control characters (0x00 - 0x1F) 203437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com// globally. 2035f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgvar ctrlCharMatch_ = new RegExp('["\\\\\x00-\x1F]', 'g'); 203637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 203737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 203837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com/** 203937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * Convert a String to its JSON representation (see http://www.json.org/). To 204037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * avoid depending on the String object this method calls the functions in 204137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * string.js directly and not through the value. 204237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * @param {String} value The String value to format as JSON 204337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * @return {string} JSON formatted String value 204437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com */ 204537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comfunction StringToJSON_(value) { 204637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Check for" , \ and control characters (0x00 - 0x1F). No need to call 204737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // RegExpTest as ctrlchar is constructed using RegExp. 204837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (ctrlCharTest_.test(value)) { 204937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Replace ", \ and control characters (0x00 - 0x1F). 205037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return '"' + 205137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com value.replace(ctrlCharMatch_, function (char) { 205237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Use charmap if possible. 205337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var mapped = ctrlCharMap_[char]; 205437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (mapped) return mapped; 205537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com mapped = char.charCodeAt(); 205637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Convert control character to unicode escape sequence. 205737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return '\\u00' + 205837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com '0' + // TODO %NumberToRadixString(Math.floor(mapped / 16), 16) + 20591b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org '0'; // TODO %NumberToRadixString(mapped % 16, 16) 206037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com }) 206137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com + '"'; 206237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 206337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 206437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Simple string with no special characters. 206537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return '"' + value + '"'; 206637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com} 206737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 206837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 206937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com/** 207037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * Convert a Date to ISO 8601 format. To avoid depending on the Date object 207137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * this method calls the functions in date.js directly and not through the 207237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * value. 207337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * @param {Date} value The Date value to format as JSON 207437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * @return {string} JSON formatted Date value 207537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com */ 207637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comfunction DateToISO8601_(value) { 2077f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org var f = function(n) { 207837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return n < 10 ? '0' + n : n; 2079f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org }; 2080f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org var g = function(n) { 208137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return n < 10 ? '00' + n : n < 100 ? '0' + n : n; 2082f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org }; 208337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return builtins.GetUTCFullYearFrom(value) + '-' + 208437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com f(builtins.GetUTCMonthFrom(value) + 1) + '-' + 208537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com f(builtins.GetUTCDateFrom(value)) + 'T' + 208637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com f(builtins.GetUTCHoursFrom(value)) + ':' + 208737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com f(builtins.GetUTCMinutesFrom(value)) + ':' + 208837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com f(builtins.GetUTCSecondsFrom(value)) + '.' + 208937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com g(builtins.GetUTCMillisecondsFrom(value)) + 'Z'; 209037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com} 209137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 209237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 209337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com/** 209437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * Convert a Date to ISO 8601 format. To avoid depending on the Date object 209537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * this method calls the functions in date.js directly and not through the 209637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * value. 209737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * @param {Date} value The Date value to format as JSON 209837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * @return {string} JSON formatted Date value 209937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com */ 210037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comfunction DateToJSON_(value) { 210137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return '"' + DateToISO8601_(value) + '"'; 210237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com} 210337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 210437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 210537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com/** 210637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * Convert an Object to its JSON representation (see http://www.json.org/). 210737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * This implementation simply runs through all string property names and adds 210837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * each property to the JSON representation for some predefined types. For type 210937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * "object" the function calls itself recursively unless the object has the 211037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * function property "toJSONProtocol" in which case that is used. This is not 211137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * a general implementation but sufficient for the debugger. Note that circular 211237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * structures will cause infinite recursion. 211337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * @param {Object} object The object to format as JSON 211437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * @return {string} JSON formatted object value 211537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com */ 211637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comfunction SimpleObjectToJSON_(object) { 211737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var content = []; 211837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com for (var key in object) { 211937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Only consider string keys. 212037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (typeof key == 'string') { 212137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var property_value = object[key]; 212237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 212337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Format the value based on its type. 212437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var property_value_json; 212537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com switch (typeof property_value) { 212637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'object': 2127d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org if (property_value === null) { 2128d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org property_value_json = 'null'; 2129d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org } else if (typeof property_value.toJSONProtocol == 'function') { 21301b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org property_value_json = property_value.toJSONProtocol(true); 213137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else if (property_value.constructor.name == 'Array'){ 213237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com property_value_json = SimpleArrayToJSON_(property_value); 213337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else { 213437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com property_value_json = SimpleObjectToJSON_(property_value); 213537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 213637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 213737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 213837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'boolean': 213937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com property_value_json = BooleanToJSON_(property_value); 214037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 214137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 214237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'number': 214337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com property_value_json = NumberToJSON_(property_value); 214437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 214537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 214637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com case 'string': 214737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com property_value_json = StringToJSON_(property_value); 214837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com break; 214937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 215037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com default: 215137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com property_value_json = null; 215237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 215337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 215437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Add the property if relevant. 215537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (property_value_json) { 215637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com content.push(StringToJSON_(key) + ':' + property_value_json); 215737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 215837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 215937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 216037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 216137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Make JSON object representation. 216237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return '{' + content.join(',') + '}'; 216337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com} 216437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 216537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 216637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com/** 216737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * Convert an array to its JSON representation. This is a VERY simple 216837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * implementation just to support what is needed for the debugger. 216937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * @param {Array} arrya The array to format as JSON 217037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com * @return {string} JSON formatted array value 217137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com */ 217237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comfunction SimpleArrayToJSON_(array) { 217337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com // Make JSON array representation. 217437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var json = '['; 217537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com for (var i = 0; i < array.length; i++) { 217637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (i != 0) { 217737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com json += ','; 217837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 217937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com var elem = array[i]; 218037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com if (elem.toJSONProtocol) { 21811b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org json += elem.toJSONProtocol(true); 218237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else if (typeof(elem) === 'object') { 218337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com json += SimpleObjectToJSON_(elem); 218437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else if (typeof(elem) === 'boolean') { 218537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com json += BooleanToJSON_(elem); 218637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else if (typeof(elem) === 'number') { 218737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com json += NumberToJSON_(elem); 218837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else if (typeof(elem) === 'string') { 218937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com json += StringToJSON_(elem); 219037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } else { 219137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com json += elem; 219237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 219337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com } 219437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com json += ']'; 219537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com return json; 219637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com} 2197876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org 2198876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org 2199876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org// A more universal stringify that supports more types than JSON. 2200876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org// Used by the d8 shell to output results. 2201876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.orgvar stringifyDepthLimit = 4; // To avoid crashing on cyclic objects 2202876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org 2203876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.orgfunction Stringify(x, depth) { 2204876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org if (depth === undefined) 2205876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org depth = stringifyDepthLimit; 2206876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org else if (depth === 0) 2207876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org return "*"; 2208876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org switch (typeof x) { 2209876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org case "undefined": 2210876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org return "undefined"; 2211876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org case "boolean": 2212876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org case "number": 2213876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org case "function": 2214876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org return x.toString(); 2215876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org case "string": 2216876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org return "\"" + x.toString() + "\""; 2217f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org case "symbol": 2218f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org return "Symbol(" + (x.name ? Stringify(x.name, depth) : "") + ")" 2219876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org case "object": 2220876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org if (x === null) return "null"; 2221876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org if (x.constructor && x.constructor.name === "Array") { 2222876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org var elems = []; 2223876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org for (var i = 0; i < x.length; ++i) { 2224876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org elems.push( 2225876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org {}.hasOwnProperty.call(x, i) ? Stringify(x[i], depth - 1) : ""); 2226876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org } 2227876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org return "[" + elems.join(", ") + "]"; 2228876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org } 2229876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org try { 2230876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org var string = String(x); 2231876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org if (string && string !== "[object Object]") return string; 2232876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org } catch(e) {} 2233876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org var props = []; 2234876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org for (var name in x) { 2235876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org var desc = Object.getOwnPropertyDescriptor(x, name); 2236876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org if (desc === void 0) continue; 2237876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org if ("value" in desc) { 2238876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org props.push(name + ": " + Stringify(desc.value, depth - 1)); 2239876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org } 2240876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org if ("get" in desc) { 2241876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org var getter = desc.get.toString(); 2242876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org props.push("get " + name + getter.slice(getter.indexOf('('))); 2243876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org } 2244876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org if ("set" in desc) { 2245876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org var setter = desc.set.toString(); 2246876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org props.push("set " + name + setter.slice(setter.indexOf('('))); 2247876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org } 2248876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org } 2249876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org return "{" + props.join(", ") + "}"; 2250876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org default: 2251876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org return "[crazy non-standard shit]"; 2252876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org } 2253876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org} 2254