Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Side by Side Diff: src/mirror-delay.js

Issue 17377: Refactored the mirror representation of properties. Removed the AssessorMirro... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 11 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | src/runtime.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 // - NumberMirror 128 // - NumberMirror
129 // - StringMirror 129 // - StringMirror
130 // - ObjectMirror 130 // - ObjectMirror
131 // - FunctionMirror 131 // - FunctionMirror
132 // - UnresolvedFunctionMirror 132 // - UnresolvedFunctionMirror
133 // - ArrayMirror 133 // - ArrayMirror
134 // - DateMirror 134 // - DateMirror
135 // - RegExpMirror 135 // - RegExpMirror
136 // - ErrorMirror 136 // - ErrorMirror
137 // - PropertyMirror 137 // - PropertyMirror
138 // - InterceptorPropertyMirror
139 // - AccessorMirror
140 // - FrameMirror 138 // - FrameMirror
141 // - ScriptMirror 139 // - ScriptMirror
142 140
143 141
144 /** 142 /**
145 * Base class for all mirror objects. 143 * Base class for all mirror objects.
146 * @param {string} type The type of the mirror 144 * @param {string} type The type of the mirror
147 * @constructor 145 * @constructor
148 */ 146 */
149 function Mirror(type) { 147 function Mirror(type) {
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 /** 265 /**
268 * Check whether the mirror reflects a property. 266 * Check whether the mirror reflects a property.
269 * @returns {boolean} True if the mirror reflects a property 267 * @returns {boolean} True if the mirror reflects a property
270 */ 268 */
271 Mirror.prototype.isProperty = function() { 269 Mirror.prototype.isProperty = function() {
272 return this instanceof PropertyMirror; 270 return this instanceof PropertyMirror;
273 } 271 }
274 272
275 273
276 /** 274 /**
277 * Check whether the mirror reflects a property from an interceptor.
278 * @returns {boolean} True if the mirror reflects a property from an
279 * interceptor
280 */
281 Mirror.prototype.isInterceptorProperty = function() {
282 return this instanceof InterceptorPropertyMirror;
283 }
284
285
286 /**
287 * Check whether the mirror reflects an accessor.
288 * @returns {boolean} True if the mirror reflects an accessor
289 */
290 Mirror.prototype.isAccessor = function() {
291 return this instanceof AccessorMirror;
292 }
293
294
295 /**
296 * Check whether the mirror reflects a stack frame. 275 * Check whether the mirror reflects a stack frame.
297 * @returns {boolean} True if the mirror reflects a stack frame 276 * @returns {boolean} True if the mirror reflects a stack frame
298 */ 277 */
299 Mirror.prototype.isFrame = function() { 278 Mirror.prototype.isFrame = function() {
300 return this instanceof FrameMirror; 279 return this instanceof FrameMirror;
301 } 280 }
302 281
303 282
304 /** 283 /**
305 * Check whether the mirror reflects a script. 284 * Check whether the mirror reflects a script.
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 value 491 value
513 * @return {Array} Property names for this object 492 * @return {Array} Property names for this object
514 */ 493 */
515 ObjectMirror.prototype.propertyNames = function(kind, limit) { 494 ObjectMirror.prototype.propertyNames = function(kind, limit) {
516 // Find kind and limit and allocate array for the result 495 // Find kind and limit and allocate array for the result
517 kind = kind || PropertyKind.Named | PropertyKind.Indexed; 496 kind = kind || PropertyKind.Named | PropertyKind.Indexed;
518 497
519 var propertyNames; 498 var propertyNames;
520 var elementNames; 499 var elementNames;
521 var total = 0; 500 var total = 0;
501
502 // Find all the named properties.
522 if (kind & PropertyKind.Named) { 503 if (kind & PropertyKind.Named) {
504 // Get the local property names.
523 propertyNames = %DebugLocalPropertyNames(this.value_); 505 propertyNames = %DebugLocalPropertyNames(this.value_);
524 total += propertyNames.length; 506 total += propertyNames.length;
507
508 // Get names for named interceptor properties if any.
509 if (this.hasNamedInterceptor() && (kind & PropertyKind.Named)) {
510 var namedInterceptorNames =
511 %DebugNamedInterceptorPropertyNames(this.value_);
512 if (namedInterceptorNames) {
513 propertyNames = propertyNames.concat(namedInterceptorNames);
514 total += namedInterceptorNames.length;
515 }
516 }
525 } 517 }
518
519 // Find all the indexed properties.
526 if (kind & PropertyKind.Indexed) { 520 if (kind & PropertyKind.Indexed) {
527 elementNames = %DebugLocalElementNames(this.value_) 521 // Get the local element names.
522 elementNames = %DebugLocalElementNames(this.value_);
528 total += elementNames.length; 523 total += elementNames.length;
524
525 // Get names for indexed interceptor properties.
526 if (this.hasIndexedInterceptor() && (kind & PropertyKind.Indexed)) {
527 var indexedInterceptorNames =
528 %DebugIndexedInterceptorElementNames(this.value_);
529 if (indexedInterceptorNames) {
530 elementNames = elementNames.concat(indexedInterceptorNames);
531 total += indexedInterceptorNames.length;
532 }
533 }
529 } 534 }
530 limit = Math.min(limit || total, total); 535 limit = Math.min(limit || total, total);
531 536
532 var names = new Array(limit); 537 var names = new Array(limit);
533 var index = 0; 538 var index = 0;
534 539
535 // Copy names for named properties. 540 // Copy names for named properties.
536 if (kind & PropertyKind.Named) { 541 if (kind & PropertyKind.Named) {
537 for (var i = 0; index < limit && i < propertyNames.length; i++) { 542 for (var i = 0; index < limit && i < propertyNames.length; i++) {
538 names[index++] = propertyNames[i]; 543 names[index++] = propertyNames[i];
(...skipping 23 matching lines...) Expand all
562 var names = this.propertyNames(kind, limit); 567 var names = this.propertyNames(kind, limit);
563 var properties = new Array(names.length); 568 var properties = new Array(names.length);
564 for (var i = 0; i < names.length; i++) { 569 for (var i = 0; i < names.length; i++) {
565 properties[i] = this.property(names[i]); 570 properties[i] = this.property(names[i]);
566 } 571 }
567 572
568 return properties; 573 return properties;
569 }; 574 };
570 575
571 576
572 /**
573 * Return the interceptor property names for this object.
574 * @param {number} kind Indicate whether named, indexed or both kinds of
575 * interceptor properties are requested
576 * @param {number} limit Limit the number of names returend to the specified
577 value
578 * @return {Array} interceptor property names for this object
579 */
580 ObjectMirror.prototype.interceptorPropertyNames = function(kind, limit) {
581 // Find kind.
582 kind = kind || PropertyKind.Named | PropertyKind.Indexed;
583 var namedInterceptorNames;
584 var indexedInterceptorNames;
585
586 // Get names for named interceptor properties.
587 if (this.hasNamedInterceptor() && kind & PropertyKind.Named) {
588 namedInterceptorNames = %DebugNamedInterceptorPropertyNames(this.value_);
589 }
590
591 // Get names for indexed interceptor properties.
592 if (this.hasIndexedInterceptor() && kind & PropertyKind.Indexed) {
593 indexedInterceptorNames = %DebugIndexedInterceptorElementNames(this.value_);
594 }
595
596 // Return either retult or both concattenated.
597 if (namedInterceptorNames && indexedInterceptorNames) {
598 return namedInterceptorNames.concat(indexedInterceptorNames);
599 } else if (namedInterceptorNames) {
600 return namedInterceptorNames;
601 } else if (indexedInterceptorNames) {
602 return indexedInterceptorNames;
603 } else {
604 return new Array(0);
605 }
606 };
607
608
609 /**
610 * Return interceptor properties this object.
611 * @param {number} opt_kind Indicate whether named, indexed or both kinds of
612 * interceptor properties are requested
613 * @param {Array} opt_names Limit the number of properties returned to the
614 specified value
615 * @return {Array} properties this object as an array of PropertyMirror objects
616 */
617 ObjectMirror.prototype.interceptorProperties = function(opt_kind, opt_names) {
618 // Find kind.
619 var kind = opt_kind || PropertyKind.Named | PropertyKind.Indexed;
620 var namedInterceptorProperties;
621 var indexedInterceptorProperties;
622
623 // Get values for named interceptor properties.
624 if (kind & PropertyKind.Named) {
625 var names = opt_names || this.interceptorPropertyNames(PropertyKind.Named);
626 namedInterceptorProperties = new Array(names.length);
627 for (i = 0; i < names.length; i++) {
628 var value = %DebugNamedInterceptorPropertyValue(this.value_, names[i]);
629 namedInterceptorProperties[i] = new InterceptorPropertyMirror(this, names[ i], value);
630 }
631 }
632
633 // Get values for indexed interceptor properties.
634 if (kind & PropertyKind.Indexed) {
635 var names = opt_names || this.interceptorPropertyNames(PropertyKind.Indexed) ;
636 indexedInterceptorProperties = new Array(names.length);
637 for (i = 0; i < names.length; i++) {
638 // Don't try to get the value if the name is not a number.
639 if (IS_NUMBER(names[i])) {
640 var value = %DebugIndexedInterceptorElementValue(this.value_, names[i]);
641 indexedInterceptorProperties[i] = new InterceptorPropertyMirror(this, na mes[i], value);
642 }
643 }
644 }
645
646 // Return either result or both concattenated.
647 if (namedInterceptorProperties && indexedInterceptorProperties) {
648 return namedInterceptorProperties.concat(indexedInterceptorProperties);
649 } else if (namedInterceptorProperties) {
650 return namedInterceptorProperties;
651 } else {
652 return indexedInterceptorProperties;
653 }
654 };
655
656
657 ObjectMirror.prototype.property = function(name) { 577 ObjectMirror.prototype.property = function(name) {
658 var details = %DebugGetPropertyDetails(this.value_, %ToString(name)); 578 var details = %DebugGetPropertyDetails(this.value_, %ToString(name));
659 if (details) { 579 if (details) {
660 return new PropertyMirror(this, name, details[0], details[1]); 580 return new PropertyMirror(this, name, details);
661 } 581 }
662 582
663 // Nothing found. 583 // Nothing found.
664 return new UndefinedMirror(); 584 return new UndefinedMirror();
665 }; 585 };
666 586
667 587
668 588
669 /** 589 /**
670 * Try to find a property from its value. 590 * Try to find a property from its value.
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
886 806
887 ArrayMirror.prototype.indexedPropertiesFromRange = function(opt_from_index, opt_ to_index) { 807 ArrayMirror.prototype.indexedPropertiesFromRange = function(opt_from_index, opt_ to_index) {
888 var from_index = opt_from_index || 0; 808 var from_index = opt_from_index || 0;
889 var to_index = opt_to_index || this.length() - 1; 809 var to_index = opt_to_index || this.length() - 1;
890 if (from_index > to_index) return new Array(); 810 if (from_index > to_index) return new Array();
891 var values = new Array(to_index - from_index + 1); 811 var values = new Array(to_index - from_index + 1);
892 for (var i = from_index; i <= to_index; i++) { 812 for (var i = from_index; i <= to_index; i++) {
893 var details = %DebugGetPropertyDetails(this.value_, %ToString(i)); 813 var details = %DebugGetPropertyDetails(this.value_, %ToString(i));
894 var value; 814 var value;
895 if (details) { 815 if (details) {
896 value = new PropertyMirror(this, i, details[0], details[1]); 816 value = new PropertyMirror(this, i, details);
897 } else { 817 } else {
898 value = new UndefinedMirror(); 818 value = new UndefinedMirror();
899 } 819 }
900 values[i - from_index] = value; 820 values[i - from_index] = value;
901 } 821 }
902 return values; 822 return values;
903 } 823 }
904 824
905 825
906 /** 826 /**
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
1004 str = '#<an Error>'; 924 str = '#<an Error>';
1005 } 925 }
1006 return str; 926 return str;
1007 } 927 }
1008 928
1009 929
1010 /** 930 /**
1011 * Base mirror object for properties. 931 * Base mirror object for properties.
1012 * @param {ObjectMirror} mirror The mirror object having this property 932 * @param {ObjectMirror} mirror The mirror object having this property
1013 * @param {string} name The name of the property 933 * @param {string} name The name of the property
1014 * @param {Object} value The value of the property 934 * @param {Array} details Details about the property
1015 * @constructor 935 * @constructor
1016 * @extends Mirror 936 * @extends Mirror
1017 */ 937 */
1018 function PropertyMirror(mirror, name, value, details) { 938 function PropertyMirror(mirror, name, details) {
1019 Mirror.call(this, PROPERTY_TYPE); 939 Mirror.call(this, PROPERTY_TYPE);
1020 this.mirror_ = mirror; 940 this.mirror_ = mirror;
1021 this.name_ = name; 941 this.name_ = name;
1022 this.value_ = value; 942 this.value_ = details[0];
1023 this.details_ = details; 943 this.details_ = details[1];
944 if (details.length > 2) {
945 this.exception_ = details[2]
946 this.getter_ = details[3];
947 this.setter_ = details[4];
948 }
1024 } 949 }
1025 inherits(PropertyMirror, Mirror); 950 inherits(PropertyMirror, Mirror);
1026 951
1027 952
1028 PropertyMirror.prototype.isReadOnly = function() { 953 PropertyMirror.prototype.isReadOnly = function() {
1029 return (this.attributes() & PropertyAttribute.ReadOnly) != 0; 954 return (this.attributes() & PropertyAttribute.ReadOnly) != 0;
1030 } 955 }
1031 956
1032 957
1033 PropertyMirror.prototype.isEnum = function() { 958 PropertyMirror.prototype.isEnum = function() {
(...skipping 15 matching lines...) Expand all
1049 for (var i = 0; i < this.name_.length; i++) { 974 for (var i = 0; i < this.name_.length; i++) {
1050 if (this.name_[i] < '0' || '9' < this.name_[i]) { 975 if (this.name_[i] < '0' || '9' < this.name_[i]) {
1051 return false; 976 return false;
1052 } 977 }
1053 } 978 }
1054 return true; 979 return true;
1055 } 980 }
1056 981
1057 982
1058 PropertyMirror.prototype.value = function() { 983 PropertyMirror.prototype.value = function() {
1059 if (this.propertyType() == PropertyType.Callbacks) { 984 return MakeMirror(this.value_);
1060 // TODO(1242933): AccessorMirror should have getter/setter values. 985 }
1061 return new AccessorMirror(); 986
1062 } else if (this.type() == PropertyType.Interceptor) { 987
1063 return new UndefinedMirror(); 988 /**
1064 } else { 989 * Returns whether this property value is an exception.
1065 return MakeMirror(this.value_); 990 * @return {booolean} True if this property value is an exception
1066 } 991 */
992 PropertyMirror.prototype.isException = function() {
993 return this.exception_ ? true : false;
1067 } 994 }
1068 995
1069 996
1070 PropertyMirror.prototype.attributes = function() { 997 PropertyMirror.prototype.attributes = function() {
1071 return %DebugPropertyAttributesFromDetails(this.details_); 998 return %DebugPropertyAttributesFromDetails(this.details_);
1072 } 999 }
1073 1000
1074 1001
1075 PropertyMirror.prototype.propertyType = function() { 1002 PropertyMirror.prototype.propertyType = function() {
1076 return %DebugPropertyTypeFromDetails(this.details_); 1003 return %DebugPropertyTypeFromDetails(this.details_);
1077 } 1004 }
1078 1005
1079 1006
1080 PropertyMirror.prototype.insertionIndex = function() { 1007 PropertyMirror.prototype.insertionIndex = function() {
1081 return %DebugPropertyIndexFromDetails(this.details_); 1008 return %DebugPropertyIndexFromDetails(this.details_);
1082 } 1009 }
1083 1010
1084 1011
1085 /** 1012 /**
1086 * Mirror object for interceptor named properties. 1013 * Returns whether this property has a getter defined through __defineGetter__.
1087 * @param {ObjectMirror} mirror The mirror object having this property 1014 * @return {booolean} True if this property has a getter
1088 * @param {String} name The name of the property
1089 * @param {value} value The value of the property
1090 * @constructor
1091 * @extends PropertyMirror
1092 */ 1015 */
1093 function InterceptorPropertyMirror(mirror, name, value) { 1016 PropertyMirror.prototype.hasGetter = function() {
1094 PropertyMirror.call(this, mirror, name, value, PropertyType.Interceptor); 1017 return this.getter_ ? true : false;
1095 }
1096 inherits(InterceptorPropertyMirror, PropertyMirror);
1097
1098
1099 /**
1100 * Mirror object for property accessors.
1101 * @param {Function} getter The getter function for this accessor
1102 * @param {Function} setter The setter function for this accessor
1103 * @constructor
1104 * @extends Mirror
1105 */
1106 function AccessorMirror(getter, setter) {
1107 Mirror.call(this, ACCESSOR_TYPE);
1108 this.getter_ = getter;
1109 this.setter_ = setter;
1110 }
1111 inherits(AccessorMirror, Mirror);
1112
1113
1114 /**
1115 * Returns whether this accessor is native or not. A native accessor is either
1116 * a VM buildin or provided through the API. A non native accessor is defined
1117 * in JavaScript using the __defineGetter__ and/or __defineGetter__ functions.
1118 * @return {boolean} True is the accessor is native
1119 */
1120 AccessorMirror.prototype.isNative = function() {
1121 return IS_UNDEFINED(this.getter_) && IS_UNDEFINED(this.setter_);
1122 } 1018 }
1123 1019
1124 1020
1125 /** 1021 /**
1126 * Returns a mirror for the function of a non native getter. 1022 * Returns whether this property has a setter defined through __defineSetter__.
1127 * @return {FunctionMirror} Function mirror for the getter set using 1023 * @return {booolean} True if this property has a setter
1128 * __defineGetter__.
1129 */ 1024 */
1130 AccessorMirror.prototype.getter = function(details) { 1025 PropertyMirror.prototype.hasSetter = function() {
1131 return MakeMirror(this.getter_); 1026 return this.setter_ ? true : false;
1132 } 1027 }
1133 1028
1134 1029
1135 /** 1030 /**
1136 * Returns a mirror for the function of a non native setter. 1031 * Returns the getter for this property defined through __defineGetter__.
1137 * @return {FunctionMirror} Function mirror for the getter set using 1032 * @return {Mirror} FunctionMirror reflecting the getter function or
1138 * __defineSetter__. 1033 * UndefinedMirror if there is no getter for this property
1139 */ 1034 */
1140 AccessorMirror.prototype.setter = function(details) { 1035 PropertyMirror.prototype.getter = function() {
1141 return MakeMirror(this.setter_); 1036 if (this.hasGetter()) {
1037 return MakeMirror(this.getter_);
1038 } else {
1039 return new UndefinedMirror();
1040 }
1142 } 1041 }
1143 1042
1144 1043
1044 /**
1045 * Returns the setter for this property defined through __defineSetter__.
1046 * @return {Mirror} FunctionMirror reflecting the setter function or
1047 * UndefinedMirror if there is no setter for this property
1048 */
1049 PropertyMirror.prototype.setter = function() {
1050 if (this.hasSetter()) {
1051 return MakeMirror(this.setter_);
1052 } else {
1053 return new UndefinedMirror();
1054 }
1055 }
1056
1057
1058 /**
1059 * Returns whether this property is natively implemented by the host or a set
1060 * through JavaScript code.
1061 * @return {boolean} True if the property is
1062 * UndefinedMirror if there is no setter for this property
1063 */
1064 PropertyMirror.prototype.isNative = function() {
1065 return (this.propertyType() == PropertyType.Interceptor) ||
1066 ((this.propertyType() == PropertyType.Callbacks) &&
1067 !this.hasGetter() && !this.hasSetter());
1068 }
1069
1070
1145 const kFrameDetailsFrameIdIndex = 0; 1071 const kFrameDetailsFrameIdIndex = 0;
1146 const kFrameDetailsReceiverIndex = 1; 1072 const kFrameDetailsReceiverIndex = 1;
1147 const kFrameDetailsFunctionIndex = 2; 1073 const kFrameDetailsFunctionIndex = 2;
1148 const kFrameDetailsArgumentCountIndex = 3; 1074 const kFrameDetailsArgumentCountIndex = 3;
1149 const kFrameDetailsLocalCountIndex = 4; 1075 const kFrameDetailsLocalCountIndex = 4;
1150 const kFrameDetailsSourcePositionIndex = 5; 1076 const kFrameDetailsSourcePositionIndex = 5;
1151 const kFrameDetailsConstructCallIndex = 6; 1077 const kFrameDetailsConstructCallIndex = 6;
1152 const kFrameDetailsDebuggerFrameIndex = 7; 1078 const kFrameDetailsDebuggerFrameIndex = 7;
1153 const kFrameDetailsFirstDynamicIndex = 8; 1079 const kFrameDetailsFirstDynamicIndex = 8;
1154 1080
(...skipping 570 matching lines...) Expand 10 before | Expand all | Expand 10 after
1725 if (!mirror.isArray()) { 1651 if (!mirror.isArray()) {
1726 kind |= PropertyKind.Indexed 1652 kind |= PropertyKind.Indexed
1727 } 1653 }
1728 var propertyNames = mirror.propertyNames(kind); 1654 var propertyNames = mirror.propertyNames(kind);
1729 var x = new Array(propertyNames.length); 1655 var x = new Array(propertyNames.length);
1730 for (var i = 0; i < propertyNames.length; i++) { 1656 for (var i = 0; i < propertyNames.length; i++) {
1731 x[i] = mirror.property(propertyNames[i]).toJSONProtocol(false); 1657 x[i] = mirror.property(propertyNames[i]).toJSONProtocol(false);
1732 } 1658 }
1733 content.push(MakeJSONPair_('properties', ArrayToJSONArray_(x))); 1659 content.push(MakeJSONPair_('properties', ArrayToJSONArray_(x)));
1734 1660
1735 // Add interceptor properties.
1736 propertyNames = mirror.interceptorPropertyNames();
1737 var x = new Array(propertyNames.length);
1738 for (var i = 0; i < propertyNames.length; i++) {
1739 x[i] = properties[i].toJSONProtocol(details);
1740 }
1741 content.push(MakeJSONPair_('interceptorProperties', ArrayToJSONArray_(x)));
1742
1743 // For arrays the indexed properties are added separately and the length is 1661 // For arrays the indexed properties are added separately and the length is
1744 // added as well. 1662 // added as well.
1745 if (mirror.isArray()) { 1663 if (mirror.isArray()) {
1746 var propertyNames = mirror.propertyNames(PropertyKind.Indexed); 1664 var propertyNames = mirror.propertyNames(PropertyKind.Indexed);
1747 var x = new Array(propertyNames.length); 1665 var x = new Array(propertyNames.length);
1748 for (var i = 0; i < propertyNames.length; i++) { 1666 for (var i = 0; i < propertyNames.length; i++) {
1749 x[i] = mirror.property(propertyNames[i]).toJSONProtocol(false); 1667 x[i] = mirror.property(propertyNames[i]).toJSONProtocol(false);
1750 } 1668 }
1751 content.push(MakeJSONPair_('indexedProperties', ArrayToJSONArray_(x))); 1669 content.push(MakeJSONPair_('indexedProperties', ArrayToJSONArray_(x)));
1752 1670
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
1942 /** 1860 /**
1943 * Convert a Date to ISO 8601 format. To avoid depending on the Date object 1861 * Convert a Date to ISO 8601 format. To avoid depending on the Date object
1944 * this method calls the functions in date.js directly and not through the 1862 * this method calls the functions in date.js directly and not through the
1945 * value. 1863 * value.
1946 * @param {Date} value The Date value to format as JSON 1864 * @param {Date} value The Date value to format as JSON
1947 * @return {string} JSON formatted Date value 1865 * @return {string} JSON formatted Date value
1948 */ 1866 */
1949 function DateToJSON_(value) { 1867 function DateToJSON_(value) {
1950 return '"' + DateToISO8601_(value) + '"'; 1868 return '"' + DateToISO8601_(value) + '"';
1951 } 1869 }
OLDNEW
« no previous file with comments | « no previous file | src/runtime.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698