| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent b5c51fd commit 8dfdee3
4 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -3,6 +3,7 @@ | |||
| 3 | 3 | const uv = process.binding('uv'); | |
| 4 | 4 | const Buffer = require('buffer').Buffer; | |
| 5 | 5 | const internalUtil = require('internal/util'); | |
| 6 | + const binding = process.binding('util'); | ||
| 6 | 7 | ||
| 7 | 8 | var Debug; | |
| 8 | 9 | var ObjectIsPromise; | |
@@ -323,11 +324,23 @@ function formatValue(ctx, value, recurseTimes) { | |||
| 323 | 324 | braces = ['{', '}']; | |
| 324 | 325 | formatter = formatPromise; | |
| 325 | 326 | } else { | |
| 326 | - if (constructor === Object) | ||
| 327 | - constructor = null; | ||
| 328 | - braces = ['{', '}']; | ||
| 329 | - empty = true; // No other data than keys. | ||
| 330 | - formatter = formatObject; | ||
| 327 | + if (binding.isMapIterator(value)) { | ||
| 328 | + constructor = { name: 'MapIterator' }; | ||
| 329 | + braces = ['{', '}']; | ||
| 330 | + empty = false; | ||
| 331 | + formatter = formatCollectionIterator; | ||
| 332 | + } else if (binding.isSetIterator(value)) { | ||
| 333 | + constructor = { name: 'SetIterator' }; | ||
| 334 | + braces = ['{', '}']; | ||
| 335 | + empty = false; | ||
| 336 | + formatter = formatCollectionIterator; | ||
| 337 | + } else { | ||
| 338 | + if (constructor === Object) | ||
| 339 | + constructor = null; | ||
| 340 | + braces = ['{', '}']; | ||
| 341 | + empty = true; // No other data than keys. | ||
| 342 | + formatter = formatObject; | ||
| 343 | + } | ||
| 331 | 344 | } | |
| 332 | 345 | } | |
| 333 | 346 | ||
@@ -501,6 +514,18 @@ function formatMap(ctx, value, recurseTimes, visibleKeys, keys) { | |||
| 501 | 514 | return output; | |
| 502 | 515 | } | |
| 503 | 516 | ||
| 517 | + function formatCollectionIterator(ctx, value, recurseTimes, visibleKeys, keys) { | ||
| 518 | + ensureDebugIsInitialized(); | ||
| 519 | + const mirror = Debug.MakeMirror(value, true); | ||
| 520 | + var nextRecurseTimes = recurseTimes === null ? null : recurseTimes - 1; | ||
| 521 | + var vals = mirror.preview(); | ||
| 522 | + var output = []; | ||
| 523 | + for (let o of vals) { | ||
| 524 | + output.push(formatValue(ctx, o, nextRecurseTimes)); | ||
| 525 | + } | ||
| 526 | + return output; | ||
| 527 | + } | ||
| 528 | + | ||
| 504 | 529 | function formatPromise(ctx, value, recurseTimes, visibleKeys, keys) { | |
| 505 | 530 | var output = []; | |
| 506 | 531 | var internals = inspectPromise(value); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -115,6 +115,7 @@ | |||
| 115 | 115 | 'src/node_javascript.cc', | |
| 116 | 116 | 'src/node_main.cc', | |
| 117 | 117 | 'src/node_os.cc', | |
| 118 | + 'src/node_util.cc', | ||
| 118 | 119 | 'src/node_v8.cc', | |
| 119 | 120 | 'src/node_stat_watcher.cc', | |
| 120 | 121 | 'src/node_watchdog.cc', | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,38 @@ | |||
| 1 | + #include "node.h" | ||
| 2 | + #include "v8.h" | ||
| 3 | + #include "env.h" | ||
| 4 | + #include "env-inl.h" | ||
| 5 | + | ||
| 6 | + namespace node { | ||
| 7 | + namespace util { | ||
| 8 | + | ||
| 9 | + using v8::Context; | ||
| 10 | + using v8::FunctionCallbackInfo; | ||
| 11 | + using v8::Local; | ||
| 12 | + using v8::Object; | ||
| 13 | + using v8::Value; | ||
| 14 | + | ||
| 15 | + static void IsMapIterator(const FunctionCallbackInfo<Value>& args) { | ||
| 16 | + CHECK_EQ(1, args.Length()); | ||
| 17 | + args.GetReturnValue().Set(args[0]->IsMapIterator()); | ||
| 18 | + } | ||
| 19 | + | ||
| 20 | + | ||
| 21 | + static void IsSetIterator(const FunctionCallbackInfo<Value>& args) { | ||
| 22 | + CHECK_EQ(1, args.Length()); | ||
| 23 | + args.GetReturnValue().Set(args[0]->IsSetIterator()); | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | + | ||
| 27 | + void Initialize(Local<Object> target, | ||
| 28 | + Local<Value> unused, | ||
| 29 | + Local<Context> context) { | ||
| 30 | + Environment* env = Environment::GetCurrent(context); | ||
| 31 | + env->SetMethod(target, "isMapIterator", IsMapIterator); | ||
| 32 | + env->SetMethod(target, "isSetIterator", IsSetIterator); | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | + } // namespace util | ||
| 36 | + } // namespace node | ||
| 37 | + | ||
| 38 | + NODE_MODULE_CONTEXT_AWARE_BUILTIN(util, node::util::Initialize) | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -287,6 +287,26 @@ global.Promise = function() { this.bar = 42; }; | |||
| 287 | 287 | assert.equal(util.inspect(new Promise()), '{ bar: 42 }'); | |
| 288 | 288 | global.Promise = oldPromise; | |
| 289 | 289 | ||
| 290 | + // Map/Set Iterators | ||
| 291 | + var m = new Map([['foo', 'bar']]); | ||
| 292 | + assert.strictEqual(util.inspect(m.keys()), 'MapIterator { \'foo\' }'); | ||
| 293 | + assert.strictEqual(util.inspect(m.values()), 'MapIterator { \'bar\' }'); | ||
| 294 | + assert.strictEqual(util.inspect(m.entries()), | ||
| 295 | + 'MapIterator { [ \'foo\', \'bar\' ] }'); | ||
| 296 | + // make sure the iterator doesn't get consumed | ||
| 297 | + var keys = m.keys(); | ||
| 298 | + assert.strictEqual(util.inspect(keys), 'MapIterator { \'foo\' }'); | ||
| 299 | + assert.strictEqual(util.inspect(keys), 'MapIterator { \'foo\' }'); | ||
| 300 | + | ||
| 301 | + var s = new Set([1, 3]); | ||
| 302 | + assert.strictEqual(util.inspect(s.keys()), 'SetIterator { 1, 3 }'); | ||
| 303 | + assert.strictEqual(util.inspect(s.values()), 'SetIterator { 1, 3 }'); | ||
| 304 | + assert.strictEqual(util.inspect(s.entries()), | ||
| 305 | + 'SetIterator { [ 1, 1 ], [ 3, 3 ] }'); | ||
| 306 | + // make sure the iterator doesn't get consumed | ||
| 307 | + keys = s.keys(); | ||
| 308 | + assert.strictEqual(util.inspect(keys), 'SetIterator { 1, 3 }'); | ||
| 309 | + assert.strictEqual(util.inspect(keys), 'SetIterator { 1, 3 }'); | ||
| 290 | 310 | ||
| 291 | 311 | // Test alignment of items in container | |
| 292 | 312 | // Assumes that the first numeric character is the start of an item. | |
| Back | FazBrowse Home | New Git URL |
0 commit comments