OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 24 matching lines...) Expand all Loading... | |
35 | 35 |
36 /** @type {!Map<!ScopeType, string>} */ | 36 /** @type {!Map<!ScopeType, string>} */ |
37 DebuggerScript._scopeTypeNames = new Map(); | 37 DebuggerScript._scopeTypeNames = new Map(); |
38 DebuggerScript._scopeTypeNames.set(ScopeType.Global, "global"); | 38 DebuggerScript._scopeTypeNames.set(ScopeType.Global, "global"); |
39 DebuggerScript._scopeTypeNames.set(ScopeType.Local, "local"); | 39 DebuggerScript._scopeTypeNames.set(ScopeType.Local, "local"); |
40 DebuggerScript._scopeTypeNames.set(ScopeType.With, "with"); | 40 DebuggerScript._scopeTypeNames.set(ScopeType.With, "with"); |
41 DebuggerScript._scopeTypeNames.set(ScopeType.Closure, "closure"); | 41 DebuggerScript._scopeTypeNames.set(ScopeType.Closure, "closure"); |
42 DebuggerScript._scopeTypeNames.set(ScopeType.Catch, "catch"); | 42 DebuggerScript._scopeTypeNames.set(ScopeType.Catch, "catch"); |
43 DebuggerScript._scopeTypeNames.set(ScopeType.Block, "block"); | 43 DebuggerScript._scopeTypeNames.set(ScopeType.Block, "block"); |
44 DebuggerScript._scopeTypeNames.set(ScopeType.Script, "script"); | 44 DebuggerScript._scopeTypeNames.set(ScopeType.Script, "script"); |
45 DebuggerScript._scopeTypeNames.set(ScopeType.Eval, "eval"); | |
45 | 46 |
46 /** | 47 /** |
47 * @param {function()} fun | 48 * @param {function()} fun |
48 * @return {?Array<!Scope>} | 49 * @return {?Array<!Scope>} |
49 */ | 50 */ |
50 DebuggerScript.getFunctionScopes = function(fun) | 51 DebuggerScript.getFunctionScopes = function(fun) |
51 { | 52 { |
52 var mirror = MakeMirror(fun); | 53 var mirror = MakeMirror(fun); |
53 if (!mirror.isFunction()) | 54 if (!mirror.isFunction()) |
54 return null; | 55 return null; |
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
523 */ | 524 */ |
524 DebuggerScript._buildScopeObject = function(scopeType, scopeObject) | 525 DebuggerScript._buildScopeObject = function(scopeType, scopeObject) |
525 { | 526 { |
526 var result; | 527 var result; |
527 switch (scopeType) { | 528 switch (scopeType) { |
528 case ScopeType.Local: | 529 case ScopeType.Local: |
529 case ScopeType.Closure: | 530 case ScopeType.Closure: |
530 case ScopeType.Catch: | 531 case ScopeType.Catch: |
531 case ScopeType.Block: | 532 case ScopeType.Block: |
532 case ScopeType.Script: | 533 case ScopeType.Script: |
534 case ScopeType.Eval: | |
533 // For transient objects we create a "persistent" copy that contains | 535 // For transient objects we create a "persistent" copy that contains |
534 // the same properties. | 536 // the same properties. |
535 // Reset scope object prototype to null so that the proto properties | 537 // Reset scope object prototype to null so that the proto properties |
536 // don't appear in the local scope section. | 538 // don't appear in the local scope section. |
537 var properties = /** @type {!ObjectMirror} */(MakeMirror(scopeObject, tr ue /* transient */)).properties(); | 539 var properties = /** @type {!ObjectMirror} */(MakeMirror(scopeObject, tr ue /* transient */)).properties(); |
538 // Almost always Script scope will be empty, so just filter out that noi se. | 540 // Almost always Script scope will be empty, so just filter out that noi se. |
539 // Also drop empty Block scopes, should we get any. | 541 // Also drop empty Block scopes, should we get any. |
540 if (!properties.length && (scopeType === ScopeType.Script || scopeType = == ScopeType.Block)) | 542 if (!properties.length && (scopeType === ScopeType.Script || scopeType = == ScopeType.Block)) |
kozy
2016/11/21 17:52:09
Dmitry, good catch! Jakob, please filter empty eva
jgruber
2016/11/22 13:55:21
Done.
| |
541 break; | 543 break; |
542 result = { __proto__: null }; | 544 result = { __proto__: null }; |
543 for (var j = 0; j < properties.length; j++) { | 545 for (var j = 0; j < properties.length; j++) { |
544 var name = properties[j].name(); | 546 var name = properties[j].name(); |
545 if (name.length === 0 || name.charAt(0) === ".") | 547 if (name.length === 0 || name.charAt(0) === ".") |
546 continue; // Skip internal variables like ".arguments" and varia bles with empty name | 548 continue; // Skip internal variables like ".arguments" and varia bles with empty name |
547 result[name] = properties[j].value_; | 549 result[name] = properties[j].value_; |
548 } | 550 } |
549 break; | 551 break; |
550 case ScopeType.Global: | 552 case ScopeType.Global: |
551 case ScopeType.With: | 553 case ScopeType.With: |
552 result = scopeObject; | 554 result = scopeObject; |
553 break; | 555 break; |
554 } | 556 } |
555 return result; | 557 return result; |
556 } | 558 } |
557 | 559 |
558 // We never resolve Mirror by its handle so to avoid memory leaks caused by Mirr ors in the cache we disable it. | 560 // We never resolve Mirror by its handle so to avoid memory leaks caused by Mirr ors in the cache we disable it. |
559 ToggleMirrorCache(false); | 561 ToggleMirrorCache(false); |
560 | 562 |
561 return DebuggerScript; | 563 return DebuggerScript; |
562 })(); | 564 })(); |
OLD | NEW |