Index: src/debug/mirrors.js |
diff --git a/src/debug/mirrors.js b/src/debug/mirrors.js |
index dbdc68e68f88e282a88737c26dd68ea6d631ce06..85ff2b2a90e3cae5eb10ee852cd8ef6f870f451f 100644 |
--- a/src/debug/mirrors.js |
+++ b/src/debug/mirrors.js |
@@ -1,8 +1,73 @@ |
// Copyright 2006-2012 the V8 project authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+ |
+(function(global, utils) { |
"use strict"; |
+// ---------------------------------------------------------------------------- |
+// Imports |
+ |
+var GlobalArray = global.Array; |
+var IsNaN = global.isNaN; |
+var JSONStringify = global.JSON.stringify; |
+var MathMin = global.Math.min; |
+ |
+// ---------------------------------------------------------------------------- |
+ |
+// Mirror hierarchy: |
+// - Mirror |
+// - ValueMirror |
+// - UndefinedMirror |
+// - NullMirror |
+// - BooleanMirror |
+// - NumberMirror |
+// - StringMirror |
+// - SymbolMirror |
+// - ObjectMirror |
+// - FunctionMirror |
+// - UnresolvedFunctionMirror |
+// - ArrayMirror |
+// - DateMirror |
+// - RegExpMirror |
+// - ErrorMirror |
+// - PromiseMirror |
+// - MapMirror |
+// - SetMirror |
+// - IteratorMirror |
+// - GeneratorMirror |
+// - PropertyMirror |
+// - InternalPropertyMirror |
+// - FrameMirror |
+// - ScriptMirror |
+// - ScopeMirror |
+ |
+// Type names of the different mirrors. |
+var MirrorType = { |
+ UNDEFINED_TYPE : 'undefined', |
+ NULL_TYPE : 'null', |
+ BOOLEAN_TYPE : 'boolean', |
+ NUMBER_TYPE : 'number', |
+ STRING_TYPE : 'string', |
+ SYMBOL_TYPE : 'symbol', |
+ OBJECT_TYPE : 'object', |
+ FUNCTION_TYPE : 'function', |
+ REGEXP_TYPE : 'regexp', |
+ ERROR_TYPE : 'error', |
+ PROPERTY_TYPE : 'property', |
+ INTERNAL_PROPERTY_TYPE : 'internalProperty', |
+ FRAME_TYPE : 'frame', |
+ SCRIPT_TYPE : 'script', |
+ CONTEXT_TYPE : 'context', |
+ SCOPE_TYPE : 'scope', |
+ PROMISE_TYPE : 'promise', |
+ MAP_TYPE : 'map', |
+ SET_TYPE : 'set', |
+ ITERATOR_TYPE : 'iterator', |
+ GENERATOR_TYPE : 'generator', |
+} |
+ |
+ |
// Handle id counters. |
var next_handle_ = 0; |
var next_transient_handle_ = -1; |
@@ -12,8 +77,18 @@ var mirror_cache_ = []; |
var mirror_cache_enabled_ = true; |
+function MirrorCacheIsEmpty() { |
+ return next_handle_ == 0 && mirror_cache_.length == 0; |
+} |
+ |
+ |
function ToggleMirrorCache(value) { |
mirror_cache_enabled_ = value; |
+ ClearMirrorCache(); |
+} |
+ |
+ |
+function ClearMirrorCache(value) { |
next_handle_ = 0; |
mirror_cache_ = []; |
} |
@@ -51,8 +126,8 @@ function MakeMirror(value, opt_transient) { |
return mirror; |
} |
// Special check for NaN as NaN == NaN is false. |
- if (mirror.isNumber() && isNaN(mirror.value()) && |
- typeof value == 'number' && isNaN(value)) { |
+ if (mirror.isNumber() && IsNaN(mirror.value()) && |
+ typeof value == 'number' && IsNaN(value)) { |
return mirror; |
} |
} |
@@ -93,7 +168,7 @@ function MakeMirror(value, opt_transient) { |
} else if (IS_GENERATOR(value)) { |
mirror = new GeneratorMirror(value); |
} else { |
- mirror = new ObjectMirror(value, OBJECT_TYPE, opt_transient); |
+ mirror = new ObjectMirror(value, MirrorType.OBJECT_TYPE, opt_transient); |
} |
if (mirror_cache_enabled_) mirror_cache_[mirror.handle()] = mirror; |
@@ -109,7 +184,9 @@ function MakeMirror(value, opt_transient) { |
* undefined if no mirror with the requested handle was found |
*/ |
function LookupMirror(handle) { |
- if (!mirror_cache_enabled_) throw new Error("Mirror cache is disabled"); |
+ if (!mirror_cache_enabled_) { |
+ throw MakeError(kDebugger, "Mirror cache is disabled"); |
+ } |
return mirror_cache_[handle]; |
} |
@@ -145,30 +222,6 @@ function inherits(ctor, superCtor) { |
ctor.prototype.constructor = ctor; |
} |
- |
-// Type names of the different mirrors. |
-var UNDEFINED_TYPE = 'undefined'; |
-var NULL_TYPE = 'null'; |
-var BOOLEAN_TYPE = 'boolean'; |
-var NUMBER_TYPE = 'number'; |
-var STRING_TYPE = 'string'; |
-var SYMBOL_TYPE = 'symbol'; |
-var OBJECT_TYPE = 'object'; |
-var FUNCTION_TYPE = 'function'; |
-var REGEXP_TYPE = 'regexp'; |
-var ERROR_TYPE = 'error'; |
-var PROPERTY_TYPE = 'property'; |
-var INTERNAL_PROPERTY_TYPE = 'internalProperty'; |
-var FRAME_TYPE = 'frame'; |
-var SCRIPT_TYPE = 'script'; |
-var CONTEXT_TYPE = 'context'; |
-var SCOPE_TYPE = 'scope'; |
-var PROMISE_TYPE = 'promise'; |
-var MAP_TYPE = 'map'; |
-var SET_TYPE = 'set'; |
-var ITERATOR_TYPE = 'iterator'; |
-var GENERATOR_TYPE = 'generator'; |
- |
// Maximum length when sending strings through the JSON protocol. |
var kMaxProtocolStringLength = 80; |
@@ -204,33 +257,6 @@ var ScopeType = { Global: 0, |
Block: 5, |
Script: 6 }; |
- |
-// Mirror hierarchy: |
-// - Mirror |
-// - ValueMirror |
-// - UndefinedMirror |
-// - NullMirror |
-// - NumberMirror |
-// - StringMirror |
-// - SymbolMirror |
-// - ObjectMirror |
-// - FunctionMirror |
-// - UnresolvedFunctionMirror |
-// - ArrayMirror |
-// - DateMirror |
-// - RegExpMirror |
-// - ErrorMirror |
-// - PromiseMirror |
-// - MapMirror |
-// - SetMirror |
-// - IteratorMirror |
-// - GeneratorMirror |
-// - PropertyMirror |
-// - InternalPropertyMirror |
-// - FrameMirror |
-// - ScriptMirror |
- |
- |
/** |
* Base class for all mirror objects. |
* @param {string} type The type of the mirror |
@@ -550,7 +576,7 @@ ValueMirror.prototype.value = function() { |
* @extends ValueMirror |
*/ |
function UndefinedMirror() { |
- %_CallFunction(this, UNDEFINED_TYPE, UNDEFINED, ValueMirror); |
+ %_CallFunction(this, MirrorType.UNDEFINED_TYPE, UNDEFINED, ValueMirror); |
} |
inherits(UndefinedMirror, ValueMirror); |
@@ -566,7 +592,7 @@ UndefinedMirror.prototype.toText = function() { |
* @extends ValueMirror |
*/ |
function NullMirror() { |
- %_CallFunction(this, NULL_TYPE, null, ValueMirror); |
+ %_CallFunction(this, MirrorType.NULL_TYPE, null, ValueMirror); |
} |
inherits(NullMirror, ValueMirror); |
@@ -583,7 +609,7 @@ NullMirror.prototype.toText = function() { |
* @extends ValueMirror |
*/ |
function BooleanMirror(value) { |
- %_CallFunction(this, BOOLEAN_TYPE, value, ValueMirror); |
+ %_CallFunction(this, MirrorType.BOOLEAN_TYPE, value, ValueMirror); |
} |
inherits(BooleanMirror, ValueMirror); |
@@ -600,7 +626,7 @@ BooleanMirror.prototype.toText = function() { |
* @extends ValueMirror |
*/ |
function NumberMirror(value) { |
- %_CallFunction(this, NUMBER_TYPE, value, ValueMirror); |
+ %_CallFunction(this, MirrorType.NUMBER_TYPE, value, ValueMirror); |
} |
inherits(NumberMirror, ValueMirror); |
@@ -617,7 +643,7 @@ NumberMirror.prototype.toText = function() { |
* @extends ValueMirror |
*/ |
function StringMirror(value) { |
- %_CallFunction(this, STRING_TYPE, value, ValueMirror); |
+ %_CallFunction(this, MirrorType.STRING_TYPE, value, ValueMirror); |
} |
inherits(StringMirror, ValueMirror); |
@@ -646,7 +672,7 @@ StringMirror.prototype.toText = function() { |
* @extends Mirror |
*/ |
function SymbolMirror(value) { |
- %_CallFunction(this, SYMBOL_TYPE, value, ValueMirror); |
+ %_CallFunction(this, MirrorType.SYMBOL_TYPE, value, ValueMirror); |
} |
inherits(SymbolMirror, ValueMirror); |
@@ -670,7 +696,8 @@ SymbolMirror.prototype.toText = function() { |
* @extends ValueMirror |
*/ |
function ObjectMirror(value, type, transient) { |
- %_CallFunction(this, type || OBJECT_TYPE, value, transient, ValueMirror); |
+ type = type || MirrorType.OBJECT_TYPE; |
+ %_CallFunction(this, type, value, transient, ValueMirror); |
} |
inherits(ObjectMirror, ValueMirror); |
@@ -770,9 +797,9 @@ ObjectMirror.prototype.propertyNames = function(kind, limit) { |
} |
} |
} |
- limit = Math.min(limit || total, total); |
+ limit = MathMin(limit || total, total); |
- var names = new Array(limit); |
+ var names = new GlobalArray(limit); |
var index = 0; |
// Copy names for named properties. |
@@ -803,7 +830,7 @@ ObjectMirror.prototype.propertyNames = function(kind, limit) { |
*/ |
ObjectMirror.prototype.properties = function(kind, limit) { |
var names = this.propertyNames(kind, limit); |
- var properties = new Array(names.length); |
+ var properties = new GlobalArray(names.length); |
for (var i = 0; i < names.length; i++) { |
properties[i] = this.property(names[i]); |
} |
@@ -920,7 +947,7 @@ ObjectMirror.GetInternalProperties = function(value) { |
* @extends ObjectMirror |
*/ |
function FunctionMirror(value) { |
- %_CallFunction(this, value, FUNCTION_TYPE, ObjectMirror); |
+ %_CallFunction(this, value, MirrorType.FUNCTION_TYPE, ObjectMirror); |
this.resolved_ = true; |
} |
inherits(FunctionMirror, ObjectMirror); |
@@ -1074,7 +1101,7 @@ FunctionMirror.prototype.toText = function() { |
function UnresolvedFunctionMirror(value) { |
// Construct this using the ValueMirror as an unresolved function is not a |
// real object but just a string. |
- %_CallFunction(this, FUNCTION_TYPE, value, ValueMirror); |
+ %_CallFunction(this, MirrorType.FUNCTION_TYPE, value, ValueMirror); |
this.propertyCount_ = 0; |
this.elementCount_ = 0; |
this.resolved_ = false; |
@@ -1108,7 +1135,7 @@ UnresolvedFunctionMirror.prototype.name = function() { |
UnresolvedFunctionMirror.prototype.inferredName = function() { |
- return undefined; |
+ return UNDEFINED; |
}; |
@@ -1138,8 +1165,8 @@ ArrayMirror.prototype.indexedPropertiesFromRange = function(opt_from_index, |
opt_to_index) { |
var from_index = opt_from_index || 0; |
var to_index = opt_to_index || this.length() - 1; |
- if (from_index > to_index) return new Array(); |
- var values = new Array(to_index - from_index + 1); |
+ if (from_index > to_index) return new GlobalArray(); |
+ var values = new GlobalArray(to_index - from_index + 1); |
for (var i = from_index; i <= to_index; i++) { |
var details = %DebugGetPropertyDetails(this.value_, builtins.$toString(i)); |
var value; |
@@ -1167,7 +1194,7 @@ inherits(DateMirror, ObjectMirror); |
DateMirror.prototype.toText = function() { |
- var s = JSON.stringify(this.value_); |
+ var s = JSONStringify(this.value_); |
return s.substring(1, s.length - 1); // cut quotes |
}; |
@@ -1179,7 +1206,7 @@ DateMirror.prototype.toText = function() { |
* @extends ObjectMirror |
*/ |
function RegExpMirror(value) { |
- %_CallFunction(this, value, REGEXP_TYPE, ObjectMirror); |
+ %_CallFunction(this, value, MirrorType.REGEXP_TYPE, ObjectMirror); |
} |
inherits(RegExpMirror, ObjectMirror); |
@@ -1251,7 +1278,7 @@ RegExpMirror.prototype.toText = function() { |
* @extends ObjectMirror |
*/ |
function ErrorMirror(value) { |
- %_CallFunction(this, value, ERROR_TYPE, ObjectMirror); |
+ %_CallFunction(this, value, MirrorType.ERROR_TYPE, ObjectMirror); |
} |
inherits(ErrorMirror, ObjectMirror); |
@@ -1284,7 +1311,7 @@ ErrorMirror.prototype.toText = function() { |
* @extends ObjectMirror |
*/ |
function PromiseMirror(value) { |
- %_CallFunction(this, value, PROMISE_TYPE, ObjectMirror); |
+ %_CallFunction(this, value, MirrorType.PROMISE_TYPE, ObjectMirror); |
} |
inherits(PromiseMirror, ObjectMirror); |
@@ -1313,7 +1340,7 @@ PromiseMirror.prototype.promiseValue = function() { |
function MapMirror(value) { |
- %_CallFunction(this, value, MAP_TYPE, ObjectMirror); |
+ %_CallFunction(this, value, MirrorType.MAP_TYPE, ObjectMirror); |
} |
inherits(MapMirror, ObjectMirror); |
@@ -1353,7 +1380,7 @@ MapMirror.prototype.entries = function(opt_limit) { |
function SetMirror(value) { |
- %_CallFunction(this, value, SET_TYPE, ObjectMirror); |
+ %_CallFunction(this, value, MirrorType.SET_TYPE, ObjectMirror); |
} |
inherits(SetMirror, ObjectMirror); |
@@ -1387,7 +1414,7 @@ SetMirror.prototype.values = function(opt_limit) { |
function IteratorMirror(value) { |
- %_CallFunction(this, value, ITERATOR_TYPE, ObjectMirror); |
+ %_CallFunction(this, value, MirrorType.ITERATOR_TYPE, ObjectMirror); |
} |
inherits(IteratorMirror, ObjectMirror); |
@@ -1419,7 +1446,7 @@ IteratorMirror.prototype.preview = function(opt_limit) { |
* @extends Mirror |
*/ |
function GeneratorMirror(value) { |
- %_CallFunction(this, value, GENERATOR_TYPE, ObjectMirror); |
+ %_CallFunction(this, value, MirrorType.GENERATOR_TYPE, ObjectMirror); |
} |
inherits(GeneratorMirror, ObjectMirror); |
@@ -1486,7 +1513,7 @@ GeneratorMirror.prototype.receiver = function() { |
* @extends Mirror |
*/ |
function PropertyMirror(mirror, name, details) { |
- %_CallFunction(this, PROPERTY_TYPE, Mirror); |
+ %_CallFunction(this, MirrorType.PROPERTY_TYPE, Mirror); |
this.mirror_ = mirror; |
this.name_ = name; |
this.value_ = details[0]; |
@@ -1629,7 +1656,7 @@ PropertyMirror.prototype.isNative = function() { |
* @extends Mirror |
*/ |
function InternalPropertyMirror(name, value) { |
- %_CallFunction(this, INTERNAL_PROPERTY_TYPE, Mirror); |
+ %_CallFunction(this, MirrorType.INTERNAL_PROPERTY_TYPE, Mirror); |
this.name_ = name; |
this.value_ = value; |
} |
@@ -1842,7 +1869,7 @@ FrameDetails.prototype.stepInPositionsImpl = function() { |
* @extends Mirror |
*/ |
function FrameMirror(break_id, index) { |
- %_CallFunction(this, FRAME_TYPE, Mirror); |
+ %_CallFunction(this, MirrorType.FRAME_TYPE, Mirror); |
this.break_id_ = break_id; |
this.index_ = index; |
this.details_ = new FrameDetails(break_id, index); |
@@ -2041,7 +2068,7 @@ FrameMirror.prototype.evaluate = function(source, disable_break, |
this.details_.frameId(), |
this.details_.inlinedFrameIndex(), |
source, |
- Boolean(disable_break), |
+ $toBoolean(disable_break), |
opt_context_object)); |
}; |
@@ -2216,7 +2243,7 @@ function ScopeDetails(frame, fun, index, opt_details) { |
} else { |
this.details_ = opt_details || %GetFunctionScopeDetails(fun.value(), index); |
this.fun_value_ = fun.value(); |
- this.break_id_ = undefined; |
+ this.break_id_ = UNDEFINED; |
} |
this.index_ = index; |
} |
@@ -2248,9 +2275,7 @@ ScopeDetails.prototype.setVariableValueImpl = function(name, new_value) { |
raw_res = %SetScopeVariableValue(this.fun_value_, null, null, this.index_, |
name, new_value); |
} |
- if (!raw_res) { |
- throw new Error("Failed to set variable value"); |
- } |
+ if (!raw_res) throw MakeError(kDebugger, "Failed to set variable value"); |
}; |
@@ -2264,15 +2289,15 @@ ScopeDetails.prototype.setVariableValueImpl = function(name, new_value) { |
* @constructor |
* @extends Mirror |
*/ |
-function ScopeMirror(frame, function, index, opt_details) { |
- %_CallFunction(this, SCOPE_TYPE, Mirror); |
+function ScopeMirror(frame, fun, index, opt_details) { |
+ %_CallFunction(this, MirrorType.SCOPE_TYPE, Mirror); |
if (frame) { |
this.frame_index_ = frame.index_; |
} else { |
- this.frame_index_ = undefined; |
+ this.frame_index_ = UNDEFINED; |
} |
this.scope_index_ = index; |
- this.details_ = new ScopeDetails(frame, function, index, opt_details); |
+ this.details_ = new ScopeDetails(frame, fun, index, opt_details); |
} |
inherits(ScopeMirror, Mirror); |
@@ -2320,7 +2345,7 @@ ScopeMirror.prototype.setVariableValue = function(name, new_value) { |
* @extends Mirror |
*/ |
function ScriptMirror(script) { |
- %_CallFunction(this, SCRIPT_TYPE, Mirror); |
+ %_CallFunction(this, MirrorType.SCRIPT_TYPE, Mirror); |
this.script_ = script; |
this.context_ = new ContextMirror(script.context_data); |
this.allocateHandle_(); |
@@ -2441,7 +2466,7 @@ ScriptMirror.prototype.toText = function() { |
* @extends Mirror |
*/ |
function ContextMirror(data) { |
- %_CallFunction(this, CONTEXT_TYPE, Mirror); |
+ %_CallFunction(this, MirrorType.CONTEXT_TYPE, Mirror); |
this.data_ = data; |
this.allocateHandle_(); |
} |
@@ -2571,30 +2596,30 @@ JSONProtocolSerializer.prototype.serializeReferenceWithDisplayData_ = |
o.ref = mirror.handle(); |
o.type = mirror.type(); |
switch (mirror.type()) { |
- case UNDEFINED_TYPE: |
- case NULL_TYPE: |
- case BOOLEAN_TYPE: |
- case NUMBER_TYPE: |
+ case MirrorType.UNDEFINED_TYPE: |
+ case MirrorType.NULL_TYPE: |
+ case MirrorType.BOOLEAN_TYPE: |
+ case MirrorType.NUMBER_TYPE: |
o.value = mirror.value(); |
break; |
- case STRING_TYPE: |
+ case MirrorType.STRING_TYPE: |
o.value = mirror.getTruncatedValue(this.maxStringLength_()); |
break; |
- case SYMBOL_TYPE: |
+ case MirrorType.SYMBOL_TYPE: |
o.description = mirror.description(); |
break; |
- case FUNCTION_TYPE: |
+ case MirrorType.FUNCTION_TYPE: |
o.name = mirror.name(); |
o.inferredName = mirror.inferredName(); |
if (mirror.script()) { |
o.scriptId = mirror.script().id(); |
} |
break; |
- case ERROR_TYPE: |
- case REGEXP_TYPE: |
+ case MirrorType.ERROR_TYPE: |
+ case MirrorType.REGEXP_TYPE: |
o.value = mirror.toText(); |
break; |
- case OBJECT_TYPE: |
+ case MirrorType.OBJECT_TYPE: |
o.className = mirror.className(); |
break; |
} |
@@ -2628,22 +2653,22 @@ JSONProtocolSerializer.prototype.serialize_ = function(mirror, reference, |
content.type = mirror.type(); |
switch (mirror.type()) { |
- case UNDEFINED_TYPE: |
- case NULL_TYPE: |
+ case MirrorType.UNDEFINED_TYPE: |
+ case MirrorType.NULL_TYPE: |
// Undefined and null are represented just by their type. |
break; |
- case BOOLEAN_TYPE: |
+ case MirrorType.BOOLEAN_TYPE: |
// Boolean values are simply represented by their value. |
content.value = mirror.value(); |
break; |
- case NUMBER_TYPE: |
+ case MirrorType.NUMBER_TYPE: |
// Number values are simply represented by their value. |
content.value = NumberToJSON_(mirror.value()); |
break; |
- case STRING_TYPE: |
+ case MirrorType.STRING_TYPE: |
// String values might have their value cropped to keep down size. |
if (this.maxStringLength_() != -1 && |
mirror.length() > this.maxStringLength_()) { |
@@ -2657,36 +2682,37 @@ JSONProtocolSerializer.prototype.serialize_ = function(mirror, reference, |
content.length = mirror.length(); |
break; |
- case SYMBOL_TYPE: |
+ case MirrorType.SYMBOL_TYPE: |
content.description = mirror.description(); |
break; |
- case OBJECT_TYPE: |
- case FUNCTION_TYPE: |
- case ERROR_TYPE: |
- case REGEXP_TYPE: |
- case PROMISE_TYPE: |
- case GENERATOR_TYPE: |
+ case MirrorType.OBJECT_TYPE: |
+ case MirrorType.FUNCTION_TYPE: |
+ case MirrorType.ERROR_TYPE: |
+ case MirrorType.REGEXP_TYPE: |
+ case MirrorType.PROMISE_TYPE: |
+ case MirrorType.GENERATOR_TYPE: |
// Add object representation. |
this.serializeObject_(mirror, content, details); |
break; |
- case PROPERTY_TYPE: |
- case INTERNAL_PROPERTY_TYPE: |
- throw new Error('PropertyMirror cannot be serialized independently'); |
+ case MirrorType.PROPERTY_TYPE: |
+ case MirrorType.INTERNAL_PROPERTY_TYPE: |
+ throw MakeError(kDebugger, |
+ 'PropertyMirror cannot be serialized independently'); |
break; |
- case FRAME_TYPE: |
+ case MirrorType.FRAME_TYPE: |
// Add object representation. |
this.serializeFrame_(mirror, content); |
break; |
- case SCOPE_TYPE: |
+ case MirrorType.SCOPE_TYPE: |
// Add object representation. |
this.serializeScope_(mirror, content); |
break; |
- case SCRIPT_TYPE: |
+ case MirrorType.SCRIPT_TYPE: |
// Script is represented by id, name and source attributes. |
if (mirror.name()) { |
content.name = mirror.name(); |
@@ -2727,7 +2753,7 @@ JSONProtocolSerializer.prototype.serialize_ = function(mirror, reference, |
} |
break; |
- case CONTEXT_TYPE: |
+ case MirrorType.CONTEXT_TYPE: |
content.data = mirror.data(); |
break; |
} |
@@ -2825,7 +2851,7 @@ JSONProtocolSerializer.prototype.serializeObject_ = function(mirror, content, |
// Add actual properties - named properties followed by indexed properties. |
var propertyNames = mirror.propertyNames(PropertyKind.Named); |
var propertyIndexes = mirror.propertyNames(PropertyKind.Indexed); |
- var p = new Array(propertyNames.length + propertyIndexes.length); |
+ var p = new GlobalArray(propertyNames.length + propertyIndexes.length); |
for (var i = 0; i < propertyNames.length; i++) { |
var propertyMirror = mirror.property(propertyNames[i]); |
p[i] = this.serializeProperty_(propertyMirror); |
@@ -2956,7 +2982,7 @@ JSONProtocolSerializer.prototype.serializeFrame_ = function(mirror, content) { |
content.returnValue = this.serializeReference(mirror.returnValue()); |
} |
content.debuggerFrame = mirror.isDebuggerFrame(); |
- var x = new Array(mirror.argumentCount()); |
+ var x = new GlobalArray(mirror.argumentCount()); |
for (var i = 0; i < mirror.argumentCount(); i++) { |
var arg = {}; |
var argument_name = mirror.argumentName(i); |
@@ -2967,7 +2993,7 @@ JSONProtocolSerializer.prototype.serializeFrame_ = function(mirror, content) { |
x[i] = arg; |
} |
content.arguments = x; |
- var x = new Array(mirror.localCount()); |
+ var x = new GlobalArray(mirror.localCount()); |
for (var i = 0; i < mirror.localCount(); i++) { |
var local = {}; |
local.name = mirror.localName(i); |
@@ -3012,7 +3038,7 @@ JSONProtocolSerializer.prototype.serializeScope_ = function(mirror, content) { |
* @returns {number|string} Protocol value. |
*/ |
function NumberToJSON_(value) { |
- if (isNaN(value)) { |
+ if (IsNaN(value)) { |
return 'NaN'; |
} |
if (!NUMBER_IS_FINITE(value)) { |
@@ -3024,3 +3050,58 @@ function NumberToJSON_(value) { |
} |
return value; |
} |
+ |
+// ---------------------------------------------------------------------------- |
+// Exports |
+ |
+utils.InstallFunctions(global, DONT_ENUM, [ |
+ "MakeMirror", MakeMirror, |
+ "MakeMirrorSerializer", MakeMirrorSerializer, |
+ "LookupMirror", LookupMirror, |
+ "ToggleMirrorCache", ToggleMirrorCache, |
+ "MirrorCacheIsEmpty", MirrorCacheIsEmpty, |
+]); |
+ |
+utils.InstallConstants(global, [ |
+ "ScopeType", ScopeType, |
+ "PropertyKind", PropertyKind, |
+ "PropertyType", PropertyType, |
+ "PropertyAttribute", PropertyAttribute, |
+ "Mirror", Mirror, |
+ "ValueMirror", ValueMirror, |
+ "UndefinedMirror", UndefinedMirror, |
+ "NullMirror", NullMirror, |
+ "BooleanMirror", BooleanMirror, |
+ "NumberMirror", NumberMirror, |
+ "StringMirror", StringMirror, |
+ "SymbolMirror", SymbolMirror, |
+ "ObjectMirror", ObjectMirror, |
+ "FunctionMirror", FunctionMirror, |
+ "UnresolvedFunctionMirror", UnresolvedFunctionMirror, |
+ "ArrayMirror", ArrayMirror, |
+ "DateMirror", DateMirror, |
+ "RegExpMirror", RegExpMirror, |
+ "ErrorMirror", ErrorMirror, |
+ "PromiseMirror", PromiseMirror, |
+ "MapMirror", MapMirror, |
+ "SetMirror", SetMirror, |
+ "IteratorMirror", IteratorMirror, |
+ "GeneratorMirror", GeneratorMirror, |
+ "PropertyMirror", PropertyMirror, |
+ "InternalPropertyMirror", InternalPropertyMirror, |
+ "FrameMirror", FrameMirror, |
+ "ScriptMirror", ScriptMirror, |
+ "ScopeMirror", ScopeMirror, |
+ "FrameDetails", FrameDetails, |
+]); |
+ |
+// Functions needed by the debugger runtime. |
+utils.InstallFunctions(utils, DONT_ENUM, [ |
+ "ClearMirrorCache", ClearMirrorCache |
+]); |
+ |
+// Export to debug.js |
+utils.Export(function(to) { |
+ to.MirrorType = MirrorType; |
+}); |
+}) |