| Index: src/mirror-debugger.js
|
| diff --git a/src/mirror-debugger.js b/src/mirror-debugger.js
|
| index 897413cfda535284fefe7b5fc2361108c20fb958..e717f6e0706fc232a2c252deb848b51243871b6e 100644
|
| --- a/src/mirror-debugger.js
|
| +++ b/src/mirror-debugger.js
|
| @@ -81,6 +81,8 @@ function MakeMirror(value, opt_transient) {
|
| mirror = new ErrorMirror(value);
|
| } else if (IS_SCRIPT(value)) {
|
| mirror = new ScriptMirror(value);
|
| + } else if (IS_MAP(value) || IS_WEAKMAP(value)) {
|
| + mirror = new MapMirror(value);
|
| } else if (ObjectIsPromise(value)) {
|
| mirror = new PromiseMirror(value);
|
| } else {
|
| @@ -155,6 +157,7 @@ var SCRIPT_TYPE = 'script';
|
| var CONTEXT_TYPE = 'context';
|
| var SCOPE_TYPE = 'scope';
|
| var PROMISE_TYPE = 'promise';
|
| +var MAP_TYPE = 'map';
|
|
|
| // Maximum length when sending strings through the JSON protocol.
|
| var kMaxProtocolStringLength = 80;
|
| @@ -210,6 +213,7 @@ var ScopeType = { Global: 0,
|
| // - RegExpMirror
|
| // - ErrorMirror
|
| // - PromiseMirror
|
| +// - MapMirror
|
| // - PropertyMirror
|
| // - InternalPropertyMirror
|
| // - FrameMirror
|
| @@ -421,6 +425,15 @@ Mirror.prototype.isScope = function() {
|
|
|
|
|
| /**
|
| + * Check whether the mirror reflects a map.
|
| + * @returns {boolean} True if the mirror reflects a map
|
| + */
|
| +Mirror.prototype.isMap = function() {
|
| + return this instanceof MapMirror;
|
| +};
|
| +
|
| +
|
| +/**
|
| * Allocate a handle id for this object.
|
| */
|
| Mirror.prototype.allocateHandle_ = function() {
|
| @@ -1253,6 +1266,44 @@ PromiseMirror.prototype.promiseValue = function() {
|
| };
|
|
|
|
|
| +function MapMirror(value) {
|
| + %_CallFunction(this, value, MAP_TYPE, ObjectMirror);
|
| +}
|
| +inherits(MapMirror, ObjectMirror);
|
| +
|
| +
|
| +/**
|
| + * Returns an array of key/value pairs of a map.
|
| + * This will keep keys alive for WeakMaps.
|
| + *
|
| + * @returns {Array.<Object>} Array of key/value pairs of a map.
|
| + */
|
| +MapMirror.prototype.entries = function() {
|
| + var result = [];
|
| +
|
| + if (IS_WEAKMAP(this.value_)) {
|
| + var entries = %GetWeakMapEntries(this.value_);
|
| + for (var i = 0; i < entries.length; i += 2) {
|
| + result.push({
|
| + key: entries[i],
|
| + value: entries[i + 1]
|
| + });
|
| + }
|
| + return result;
|
| + }
|
| +
|
| + var iter = %_CallFunction(this.value_, builtins.MapEntries);
|
| + var next;
|
| + while (!(next = iter.next()).done) {
|
| + result.push({
|
| + key: next.value[0],
|
| + value: next.value[1]
|
| + });
|
| + }
|
| + return result;
|
| +};
|
| +
|
| +
|
| /**
|
| * Base mirror object for properties.
|
| * @param {ObjectMirror} mirror The mirror object having this property
|
|
|