OLD | NEW |
1 // Copyright 2006-2012 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 (function(global, utils) { | 5 (function(global, utils) { |
6 "use strict"; | 6 "use strict"; |
7 | 7 |
8 // ---------------------------------------------------------------------------- | 8 // ---------------------------------------------------------------------------- |
9 // Imports | 9 // Imports |
10 | 10 |
(...skipping 2445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2456 this.data_ = data; | 2456 this.data_ = data; |
2457 this.allocateHandle_(); | 2457 this.allocateHandle_(); |
2458 } | 2458 } |
2459 inherits(ContextMirror, Mirror); | 2459 inherits(ContextMirror, Mirror); |
2460 | 2460 |
2461 | 2461 |
2462 ContextMirror.prototype.data = function() { | 2462 ContextMirror.prototype.data = function() { |
2463 return this.data_; | 2463 return this.data_; |
2464 }; | 2464 }; |
2465 | 2465 |
2466 | |
2467 /** | |
2468 * Returns a mirror serializer | |
2469 * | |
2470 * @param {boolean} details Set to true to include details | |
2471 * @param {Object} options Options comtrolling the serialization | |
2472 * The following options can be set: | |
2473 * includeSource: include ths full source of scripts | |
2474 * @returns {MirrorSerializer} mirror serializer | |
2475 */ | |
2476 function MakeMirrorSerializer(details, options) { | |
2477 return new JSONProtocolSerializer(details, options); | |
2478 } | |
2479 | |
2480 | |
2481 /** | |
2482 * Object for serializing a mirror objects and its direct references. | |
2483 * @param {boolean} details Indicates whether to include details for the mirror | |
2484 * serialized | |
2485 * @constructor | |
2486 */ | |
2487 function JSONProtocolSerializer(details, options) { | |
2488 this.details_ = details; | |
2489 this.options_ = options; | |
2490 this.mirrors_ = [ ]; | |
2491 } | |
2492 | |
2493 | |
2494 /** | |
2495 * Returns a serialization of an object reference. The referenced object are | |
2496 * added to the serialization state. | |
2497 * | |
2498 * @param {Mirror} mirror The mirror to serialize | |
2499 * @returns {String} JSON serialization | |
2500 */ | |
2501 JSONProtocolSerializer.prototype.serializeReference = function(mirror) { | |
2502 return this.serialize_(mirror, true, true); | |
2503 }; | |
2504 | |
2505 | |
2506 /** | |
2507 * Returns a serialization of an object value. The referenced objects are | |
2508 * added to the serialization state. | |
2509 * | |
2510 * @param {Mirror} mirror The mirror to serialize | |
2511 * @returns {String} JSON serialization | |
2512 */ | |
2513 JSONProtocolSerializer.prototype.serializeValue = function(mirror) { | |
2514 var json = this.serialize_(mirror, false, true); | |
2515 return json; | |
2516 }; | |
2517 | |
2518 | |
2519 /** | |
2520 * Returns a serialization of all the objects referenced. | |
2521 * | |
2522 * @param {Mirror} mirror The mirror to serialize. | |
2523 * @returns {Array.<Object>} Array of the referenced objects converted to | |
2524 * protcol objects. | |
2525 */ | |
2526 JSONProtocolSerializer.prototype.serializeReferencedObjects = function() { | |
2527 // Collect the protocol representation of the referenced objects in an array. | |
2528 var content = []; | |
2529 | |
2530 // Get the number of referenced objects. | |
2531 var count = this.mirrors_.length; | |
2532 | |
2533 for (var i = 0; i < count; i++) { | |
2534 content.push(this.serialize_(this.mirrors_[i], false, false)); | |
2535 } | |
2536 | |
2537 return content; | |
2538 }; | |
2539 | |
2540 | |
2541 JSONProtocolSerializer.prototype.includeSource_ = function() { | |
2542 return this.options_ && this.options_.includeSource; | |
2543 }; | |
2544 | |
2545 | |
2546 JSONProtocolSerializer.prototype.inlineRefs_ = function() { | |
2547 return this.options_ && this.options_.inlineRefs; | |
2548 }; | |
2549 | |
2550 | |
2551 JSONProtocolSerializer.prototype.maxStringLength_ = function() { | |
2552 if (IS_UNDEFINED(this.options_) || | |
2553 IS_UNDEFINED(this.options_.maxStringLength)) { | |
2554 return kMaxProtocolStringLength; | |
2555 } | |
2556 return this.options_.maxStringLength; | |
2557 }; | |
2558 | |
2559 | |
2560 JSONProtocolSerializer.prototype.add_ = function(mirror) { | |
2561 // If this mirror is already in the list just return. | |
2562 for (var i = 0; i < this.mirrors_.length; i++) { | |
2563 if (this.mirrors_[i] === mirror) { | |
2564 return; | |
2565 } | |
2566 } | |
2567 | |
2568 // Add the mirror to the list of mirrors to be serialized. | |
2569 this.mirrors_.push(mirror); | |
2570 }; | |
2571 | |
2572 | |
2573 /** | |
2574 * Formats mirror object to protocol reference object with some data that can | |
2575 * be used to display the value in debugger. | |
2576 * @param {Mirror} mirror Mirror to serialize. | |
2577 * @return {Object} Protocol reference object. | |
2578 */ | |
2579 JSONProtocolSerializer.prototype.serializeReferenceWithDisplayData_ = | |
2580 function(mirror) { | |
2581 var o = {}; | |
2582 o.ref = mirror.handle(); | |
2583 o.type = mirror.type(); | |
2584 switch (mirror.type()) { | |
2585 case MirrorType.UNDEFINED_TYPE: | |
2586 case MirrorType.NULL_TYPE: | |
2587 case MirrorType.BOOLEAN_TYPE: | |
2588 case MirrorType.NUMBER_TYPE: | |
2589 o.value = mirror.value(); | |
2590 break; | |
2591 case MirrorType.STRING_TYPE: | |
2592 o.value = mirror.getTruncatedValue(this.maxStringLength_()); | |
2593 break; | |
2594 case MirrorType.SYMBOL_TYPE: | |
2595 o.description = mirror.description(); | |
2596 break; | |
2597 case MirrorType.FUNCTION_TYPE: | |
2598 o.name = mirror.name(); | |
2599 o.inferredName = mirror.inferredName(); | |
2600 if (mirror.script()) { | |
2601 o.scriptId = mirror.script().id(); | |
2602 } | |
2603 break; | |
2604 case MirrorType.ERROR_TYPE: | |
2605 case MirrorType.REGEXP_TYPE: | |
2606 o.value = mirror.toText(); | |
2607 break; | |
2608 case MirrorType.OBJECT_TYPE: | |
2609 o.className = mirror.className(); | |
2610 break; | |
2611 } | |
2612 return o; | |
2613 }; | |
2614 | |
2615 | |
2616 JSONProtocolSerializer.prototype.serialize_ = function(mirror, reference, | |
2617 details) { | |
2618 // If serializing a reference to a mirror just return the reference and add | |
2619 // the mirror to the referenced mirrors. | |
2620 if (reference && | |
2621 (mirror.isValue() || mirror.isScript() || mirror.isContext())) { | |
2622 if (this.inlineRefs_() && mirror.isValue()) { | |
2623 return this.serializeReferenceWithDisplayData_(mirror); | |
2624 } else { | |
2625 this.add_(mirror); | |
2626 return {'ref' : mirror.handle()}; | |
2627 } | |
2628 } | |
2629 | |
2630 // Collect the JSON property/value pairs. | |
2631 var content = {}; | |
2632 | |
2633 // Add the mirror handle. | |
2634 if (mirror.isValue() || mirror.isScript() || mirror.isContext()) { | |
2635 content.handle = mirror.handle(); | |
2636 } | |
2637 | |
2638 // Always add the type. | |
2639 content.type = mirror.type(); | |
2640 | |
2641 switch (mirror.type()) { | |
2642 case MirrorType.UNDEFINED_TYPE: | |
2643 case MirrorType.NULL_TYPE: | |
2644 // Undefined and null are represented just by their type. | |
2645 break; | |
2646 | |
2647 case MirrorType.BOOLEAN_TYPE: | |
2648 // Boolean values are simply represented by their value. | |
2649 content.value = mirror.value(); | |
2650 break; | |
2651 | |
2652 case MirrorType.NUMBER_TYPE: | |
2653 // Number values are simply represented by their value. | |
2654 content.value = NumberToJSON_(mirror.value()); | |
2655 break; | |
2656 | |
2657 case MirrorType.STRING_TYPE: | |
2658 // String values might have their value cropped to keep down size. | |
2659 if (this.maxStringLength_() != -1 && | |
2660 mirror.length() > this.maxStringLength_()) { | |
2661 var str = mirror.getTruncatedValue(this.maxStringLength_()); | |
2662 content.value = str; | |
2663 content.fromIndex = 0; | |
2664 content.toIndex = this.maxStringLength_(); | |
2665 } else { | |
2666 content.value = mirror.value(); | |
2667 } | |
2668 content.length = mirror.length(); | |
2669 break; | |
2670 | |
2671 case MirrorType.SYMBOL_TYPE: | |
2672 content.description = mirror.description(); | |
2673 break; | |
2674 | |
2675 case MirrorType.OBJECT_TYPE: | |
2676 case MirrorType.FUNCTION_TYPE: | |
2677 case MirrorType.ERROR_TYPE: | |
2678 case MirrorType.REGEXP_TYPE: | |
2679 case MirrorType.PROMISE_TYPE: | |
2680 case MirrorType.GENERATOR_TYPE: | |
2681 // Add object representation. | |
2682 this.serializeObject_(mirror, content, details); | |
2683 break; | |
2684 | |
2685 case MirrorType.PROPERTY_TYPE: | |
2686 case MirrorType.INTERNAL_PROPERTY_TYPE: | |
2687 throw %make_error(kDebugger, | |
2688 'PropertyMirror cannot be serialized independently'); | |
2689 break; | |
2690 | |
2691 case MirrorType.FRAME_TYPE: | |
2692 // Add object representation. | |
2693 this.serializeFrame_(mirror, content); | |
2694 break; | |
2695 | |
2696 case MirrorType.SCOPE_TYPE: | |
2697 // Add object representation. | |
2698 this.serializeScope_(mirror, content); | |
2699 break; | |
2700 | |
2701 case MirrorType.SCRIPT_TYPE: | |
2702 // Script is represented by id, name and source attributes. | |
2703 if (mirror.name()) { | |
2704 content.name = mirror.name(); | |
2705 } | |
2706 content.id = mirror.id(); | |
2707 content.lineOffset = mirror.lineOffset(); | |
2708 content.columnOffset = mirror.columnOffset(); | |
2709 content.lineCount = mirror.lineCount(); | |
2710 if (mirror.data()) { | |
2711 content.data = mirror.data(); | |
2712 } | |
2713 if (this.includeSource_()) { | |
2714 content.source = mirror.source(); | |
2715 } else { | |
2716 var sourceStart = mirror.source().substring(0, 80); | |
2717 content.sourceStart = sourceStart; | |
2718 } | |
2719 content.sourceLength = mirror.source().length; | |
2720 content.scriptType = mirror.scriptType(); | |
2721 content.compilationType = mirror.compilationType(); | |
2722 // For compilation type eval emit information on the script from which | |
2723 // eval was called if a script is present. | |
2724 if (mirror.compilationType() == 1 && | |
2725 mirror.evalFromScript()) { | |
2726 content.evalFromScript = | |
2727 this.serializeReference(mirror.evalFromScript()); | |
2728 var evalFromLocation = mirror.evalFromLocation(); | |
2729 if (evalFromLocation) { | |
2730 content.evalFromLocation = { line: evalFromLocation.line, | |
2731 column: evalFromLocation.column }; | |
2732 } | |
2733 if (mirror.evalFromFunctionName()) { | |
2734 content.evalFromFunctionName = mirror.evalFromFunctionName(); | |
2735 } | |
2736 } | |
2737 if (mirror.context()) { | |
2738 content.context = this.serializeReference(mirror.context()); | |
2739 } | |
2740 break; | |
2741 | |
2742 case MirrorType.CONTEXT_TYPE: | |
2743 content.data = mirror.data(); | |
2744 break; | |
2745 } | |
2746 | |
2747 // Always add the text representation. | |
2748 content.text = mirror.toText(); | |
2749 | |
2750 // Create and return the JSON string. | |
2751 return content; | |
2752 }; | |
2753 | |
2754 | |
2755 /** | |
2756 * Serialize object information to the following JSON format. | |
2757 * | |
2758 * {"className":"<class name>", | |
2759 * "constructorFunction":{"ref":<number>}, | |
2760 * "protoObject":{"ref":<number>}, | |
2761 * "prototypeObject":{"ref":<number>}, | |
2762 * "namedInterceptor":<boolean>, | |
2763 * "indexedInterceptor":<boolean>, | |
2764 * "properties":[<properties>], | |
2765 * "internalProperties":[<internal properties>]} | |
2766 */ | |
2767 JSONProtocolSerializer.prototype.serializeObject_ = function(mirror, content, | |
2768 details) { | |
2769 // Add general object properties. | |
2770 content.className = mirror.className(); | |
2771 content.constructorFunction = | |
2772 this.serializeReference(mirror.constructorFunction()); | |
2773 content.protoObject = this.serializeReference(mirror.protoObject()); | |
2774 content.prototypeObject = this.serializeReference(mirror.prototypeObject()); | |
2775 | |
2776 // Add flags to indicate whether there are interceptors. | |
2777 if (mirror.hasNamedInterceptor()) { | |
2778 content.namedInterceptor = true; | |
2779 } | |
2780 if (mirror.hasIndexedInterceptor()) { | |
2781 content.indexedInterceptor = true; | |
2782 } | |
2783 | |
2784 if (mirror.isFunction()) { | |
2785 // Add function specific properties. | |
2786 content.name = mirror.name(); | |
2787 if (!IS_UNDEFINED(mirror.inferredName())) { | |
2788 content.inferredName = mirror.inferredName(); | |
2789 } | |
2790 content.resolved = mirror.resolved(); | |
2791 if (mirror.resolved()) { | |
2792 content.source = mirror.source(); | |
2793 } | |
2794 if (mirror.script()) { | |
2795 content.script = this.serializeReference(mirror.script()); | |
2796 content.scriptId = mirror.script().id(); | |
2797 | |
2798 serializeLocationFields(mirror.sourceLocation(), content); | |
2799 } | |
2800 | |
2801 content.scopes = []; | |
2802 for (var i = 0; i < mirror.scopeCount(); i++) { | |
2803 var scope = mirror.scope(i); | |
2804 content.scopes.push({ | |
2805 type: scope.scopeType(), | |
2806 index: i | |
2807 }); | |
2808 } | |
2809 } | |
2810 | |
2811 if (mirror.isGenerator()) { | |
2812 // Add generator specific properties. | |
2813 | |
2814 // Either 'running', 'closed', or 'suspended'. | |
2815 content.status = mirror.status(); | |
2816 | |
2817 content.func = this.serializeReference(mirror.func()) | |
2818 content.receiver = this.serializeReference(mirror.receiver()) | |
2819 | |
2820 // If the generator is suspended, the content add line/column properties. | |
2821 serializeLocationFields(mirror.sourceLocation(), content); | |
2822 | |
2823 // TODO(wingo): Also serialize a reference to the context (scope chain). | |
2824 } | |
2825 | |
2826 if (mirror.isDate()) { | |
2827 // Add date specific properties. | |
2828 content.value = mirror.value(); | |
2829 } | |
2830 | |
2831 if (mirror.isPromise()) { | |
2832 // Add promise specific properties. | |
2833 content.status = mirror.status(); | |
2834 content.promiseValue = this.serializeReference(mirror.promiseValue()); | |
2835 } | |
2836 | |
2837 // Add actual properties - named properties followed by indexed properties. | |
2838 var properties = mirror.propertyNames(); | |
2839 for (var i = 0; i < properties.length; i++) { | |
2840 var propertyMirror = mirror.property(properties[i]); | |
2841 properties[i] = this.serializeProperty_(propertyMirror); | |
2842 if (details) { | |
2843 this.add_(propertyMirror.value()); | |
2844 } | |
2845 } | |
2846 content.properties = properties; | |
2847 | |
2848 var internalProperties = mirror.internalProperties(); | |
2849 if (internalProperties.length > 0) { | |
2850 var ip = []; | |
2851 for (var i = 0; i < internalProperties.length; i++) { | |
2852 ip.push(this.serializeInternalProperty_(internalProperties[i])); | |
2853 } | |
2854 content.internalProperties = ip; | |
2855 } | |
2856 }; | |
2857 | |
2858 | |
2859 /** | |
2860 * Serialize location information to the following JSON format: | |
2861 * | |
2862 * "position":"<position>", | |
2863 * "line":"<line>", | |
2864 * "column":"<column>", | |
2865 * | |
2866 * @param {SourceLocation} location The location to serialize, may be undefined. | |
2867 */ | |
2868 function serializeLocationFields (location, content) { | |
2869 if (!location) { | |
2870 return; | |
2871 } | |
2872 content.position = location.position; | |
2873 var line = location.line; | |
2874 if (!IS_UNDEFINED(line)) { | |
2875 content.line = line; | |
2876 } | |
2877 var column = location.column; | |
2878 if (!IS_UNDEFINED(column)) { | |
2879 content.column = column; | |
2880 } | |
2881 } | |
2882 | |
2883 | |
2884 /** | |
2885 * Serialize property information to the following JSON format for building the | |
2886 * array of properties. | |
2887 * | |
2888 * {"name":"<property name>", | |
2889 * "attributes":<number>, | |
2890 * "propertyType":<number>, | |
2891 * "ref":<number>} | |
2892 * | |
2893 * If the attribute for the property is PropertyAttribute.None it is not added. | |
2894 * Here are a couple of examples. | |
2895 * | |
2896 * {"name":"hello","propertyType":0,"ref":1} | |
2897 * {"name":"length","attributes":7,"propertyType":3,"ref":2} | |
2898 * | |
2899 * @param {PropertyMirror} propertyMirror The property to serialize. | |
2900 * @returns {Object} Protocol object representing the property. | |
2901 */ | |
2902 JSONProtocolSerializer.prototype.serializeProperty_ = function(propertyMirror) { | |
2903 var result = {}; | |
2904 | |
2905 result.name = propertyMirror.name(); | |
2906 var propertyValue = propertyMirror.value(); | |
2907 if (this.inlineRefs_() && propertyValue.isValue()) { | |
2908 result.value = this.serializeReferenceWithDisplayData_(propertyValue); | |
2909 } else { | |
2910 if (propertyMirror.attributes() != PropertyAttribute.None) { | |
2911 result.attributes = propertyMirror.attributes(); | |
2912 } | |
2913 result.propertyType = propertyMirror.propertyType(); | |
2914 result.ref = propertyValue.handle(); | |
2915 } | |
2916 return result; | |
2917 }; | |
2918 | |
2919 | |
2920 /** | |
2921 * Serialize internal property information to the following JSON format for | |
2922 * building the array of properties. | |
2923 * | |
2924 * {"name":"<property name>", | |
2925 * "ref":<number>} | |
2926 * | |
2927 * {"name":"[[BoundThis]]","ref":117} | |
2928 * | |
2929 * @param {InternalPropertyMirror} propertyMirror The property to serialize. | |
2930 * @returns {Object} Protocol object representing the property. | |
2931 */ | |
2932 JSONProtocolSerializer.prototype.serializeInternalProperty_ = | |
2933 function(propertyMirror) { | |
2934 var result = {}; | |
2935 | |
2936 result.name = propertyMirror.name(); | |
2937 var propertyValue = propertyMirror.value(); | |
2938 if (this.inlineRefs_() && propertyValue.isValue()) { | |
2939 result.value = this.serializeReferenceWithDisplayData_(propertyValue); | |
2940 } else { | |
2941 result.ref = propertyValue.handle(); | |
2942 } | |
2943 return result; | |
2944 }; | |
2945 | |
2946 | |
2947 JSONProtocolSerializer.prototype.serializeFrame_ = function(mirror, content) { | |
2948 content.index = mirror.index(); | |
2949 content.receiver = this.serializeReference(mirror.receiver()); | |
2950 var func = mirror.func(); | |
2951 content.func = this.serializeReference(func); | |
2952 var script = func.script(); | |
2953 if (script) { | |
2954 content.script = this.serializeReference(script); | |
2955 } | |
2956 content.constructCall = mirror.isConstructCall(); | |
2957 content.atReturn = mirror.isAtReturn(); | |
2958 if (mirror.isAtReturn()) { | |
2959 content.returnValue = this.serializeReference(mirror.returnValue()); | |
2960 } | |
2961 content.debuggerFrame = mirror.isDebuggerFrame(); | |
2962 var x = new GlobalArray(mirror.argumentCount()); | |
2963 for (var i = 0; i < mirror.argumentCount(); i++) { | |
2964 var arg = {}; | |
2965 var argument_name = mirror.argumentName(i); | |
2966 if (argument_name) { | |
2967 arg.name = argument_name; | |
2968 } | |
2969 arg.value = this.serializeReference(mirror.argumentValue(i)); | |
2970 x[i] = arg; | |
2971 } | |
2972 content.arguments = x; | |
2973 var x = new GlobalArray(mirror.localCount()); | |
2974 for (var i = 0; i < mirror.localCount(); i++) { | |
2975 var local = {}; | |
2976 local.name = mirror.localName(i); | |
2977 local.value = this.serializeReference(mirror.localValue(i)); | |
2978 x[i] = local; | |
2979 } | |
2980 content.locals = x; | |
2981 serializeLocationFields(mirror.sourceLocation(), content); | |
2982 var source_line_text = mirror.sourceLineText(); | |
2983 if (!IS_UNDEFINED(source_line_text)) { | |
2984 content.sourceLineText = source_line_text; | |
2985 } | |
2986 | |
2987 content.scopes = []; | |
2988 for (var i = 0; i < mirror.scopeCount(); i++) { | |
2989 var scope = mirror.scope(i); | |
2990 content.scopes.push({ | |
2991 type: scope.scopeType(), | |
2992 index: i | |
2993 }); | |
2994 } | |
2995 }; | |
2996 | |
2997 | |
2998 JSONProtocolSerializer.prototype.serializeScope_ = function(mirror, content) { | |
2999 content.index = mirror.scopeIndex(); | |
3000 content.frameIndex = mirror.frameIndex(); | |
3001 content.type = mirror.scopeType(); | |
3002 content.object = this.inlineRefs_() ? | |
3003 this.serializeValue(mirror.scopeObject()) : | |
3004 this.serializeReference(mirror.scopeObject()); | |
3005 }; | |
3006 | |
3007 | |
3008 /** | |
3009 * Convert a number to a protocol value. For all finite numbers the number | |
3010 * itself is returned. For non finite numbers NaN, Infinite and | |
3011 * -Infinite the string representation "NaN", "Infinite" or "-Infinite" | |
3012 * (not including the quotes) is returned. | |
3013 * | |
3014 * @param {number} value The number value to convert to a protocol value. | |
3015 * @returns {number|string} Protocol value. | |
3016 */ | |
3017 function NumberToJSON_(value) { | |
3018 if (IsNaN(value)) { | |
3019 return 'NaN'; | |
3020 } | |
3021 if (!NUMBER_IS_FINITE(value)) { | |
3022 if (value > 0) { | |
3023 return 'Infinity'; | |
3024 } else { | |
3025 return '-Infinity'; | |
3026 } | |
3027 } | |
3028 return value; | |
3029 } | |
3030 | |
3031 // ---------------------------------------------------------------------------- | 2466 // ---------------------------------------------------------------------------- |
3032 // Exports | 2467 // Exports |
3033 | 2468 |
3034 utils.InstallFunctions(global, DONT_ENUM, [ | 2469 utils.InstallFunctions(global, DONT_ENUM, [ |
3035 "MakeMirror", MakeMirror, | 2470 "MakeMirror", MakeMirror, |
3036 "MakeMirrorSerializer", MakeMirrorSerializer, | |
3037 "LookupMirror", LookupMirror, | 2471 "LookupMirror", LookupMirror, |
3038 "ToggleMirrorCache", ToggleMirrorCache, | 2472 "ToggleMirrorCache", ToggleMirrorCache, |
3039 "MirrorCacheIsEmpty", MirrorCacheIsEmpty, | 2473 "MirrorCacheIsEmpty", MirrorCacheIsEmpty, |
3040 ]); | 2474 ]); |
3041 | 2475 |
3042 utils.InstallConstants(global, [ | 2476 utils.InstallConstants(global, [ |
3043 "ScopeType", ScopeType, | 2477 "ScopeType", ScopeType, |
3044 "PropertyType", PropertyType, | 2478 "PropertyType", PropertyType, |
3045 "PropertyAttribute", PropertyAttribute, | 2479 "PropertyAttribute", PropertyAttribute, |
3046 "Mirror", Mirror, | 2480 "Mirror", Mirror, |
(...skipping 27 matching lines...) Expand all Loading... |
3074 // Functions needed by the debugger runtime. | 2508 // Functions needed by the debugger runtime. |
3075 utils.InstallFunctions(utils, DONT_ENUM, [ | 2509 utils.InstallFunctions(utils, DONT_ENUM, [ |
3076 "ClearMirrorCache", ClearMirrorCache | 2510 "ClearMirrorCache", ClearMirrorCache |
3077 ]); | 2511 ]); |
3078 | 2512 |
3079 // Export to debug.js | 2513 // Export to debug.js |
3080 utils.Export(function(to) { | 2514 utils.Export(function(to) { |
3081 to.MirrorType = MirrorType; | 2515 to.MirrorType = MirrorType; |
3082 }); | 2516 }); |
3083 }) | 2517 }) |
OLD | NEW |