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

Unified 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/runtime.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/mirror-delay.js
===================================================================
--- src/mirror-delay.js (revision 1052)
+++ src/mirror-delay.js (working copy)
@@ -135,8 +135,6 @@
// - RegExpMirror
// - ErrorMirror
// - PropertyMirror
-// - InterceptorPropertyMirror
-// - AccessorMirror
// - FrameMirror
// - ScriptMirror
@@ -274,25 +272,6 @@
/**
- * Check whether the mirror reflects a property from an interceptor.
- * @returns {boolean} True if the mirror reflects a property from an
- * interceptor
- */
-Mirror.prototype.isInterceptorProperty = function() {
- return this instanceof InterceptorPropertyMirror;
-}
-
-
-/**
- * Check whether the mirror reflects an accessor.
- * @returns {boolean} True if the mirror reflects an accessor
- */
-Mirror.prototype.isAccessor = function() {
- return this instanceof AccessorMirror;
-}
-
-
-/**
* Check whether the mirror reflects a stack frame.
* @returns {boolean} True if the mirror reflects a stack frame
*/
@@ -519,13 +498,39 @@
var propertyNames;
var elementNames;
var total = 0;
+
+ // Find all the named properties.
if (kind & PropertyKind.Named) {
+ // Get the local property names.
propertyNames = %DebugLocalPropertyNames(this.value_);
total += propertyNames.length;
+
+ // Get names for named interceptor properties if any.
+ if (this.hasNamedInterceptor() && (kind & PropertyKind.Named)) {
+ var namedInterceptorNames =
+ %DebugNamedInterceptorPropertyNames(this.value_);
+ if (namedInterceptorNames) {
+ propertyNames = propertyNames.concat(namedInterceptorNames);
+ total += namedInterceptorNames.length;
+ }
+ }
}
+
+ // Find all the indexed properties.
if (kind & PropertyKind.Indexed) {
- elementNames = %DebugLocalElementNames(this.value_)
+ // Get the local element names.
+ elementNames = %DebugLocalElementNames(this.value_);
total += elementNames.length;
+
+ // Get names for indexed interceptor properties.
+ if (this.hasIndexedInterceptor() && (kind & PropertyKind.Indexed)) {
+ var indexedInterceptorNames =
+ %DebugIndexedInterceptorElementNames(this.value_);
+ if (indexedInterceptorNames) {
+ elementNames = elementNames.concat(indexedInterceptorNames);
+ total += indexedInterceptorNames.length;
+ }
+ }
}
limit = Math.min(limit || total, total);
@@ -569,95 +574,10 @@
};
-/**
- * Return the interceptor property names for this object.
- * @param {number} kind Indicate whether named, indexed or both kinds of
- * interceptor properties are requested
- * @param {number} limit Limit the number of names returend to the specified
- value
- * @return {Array} interceptor property names for this object
- */
-ObjectMirror.prototype.interceptorPropertyNames = function(kind, limit) {
- // Find kind.
- kind = kind || PropertyKind.Named | PropertyKind.Indexed;
- var namedInterceptorNames;
- var indexedInterceptorNames;
-
- // Get names for named interceptor properties.
- if (this.hasNamedInterceptor() && kind & PropertyKind.Named) {
- namedInterceptorNames = %DebugNamedInterceptorPropertyNames(this.value_);
- }
-
- // Get names for indexed interceptor properties.
- if (this.hasIndexedInterceptor() && kind & PropertyKind.Indexed) {
- indexedInterceptorNames = %DebugIndexedInterceptorElementNames(this.value_);
- }
-
- // Return either retult or both concattenated.
- if (namedInterceptorNames && indexedInterceptorNames) {
- return namedInterceptorNames.concat(indexedInterceptorNames);
- } else if (namedInterceptorNames) {
- return namedInterceptorNames;
- } else if (indexedInterceptorNames) {
- return indexedInterceptorNames;
- } else {
- return new Array(0);
- }
-};
-
-
-/**
- * Return interceptor properties this object.
- * @param {number} opt_kind Indicate whether named, indexed or both kinds of
- * interceptor properties are requested
- * @param {Array} opt_names Limit the number of properties returned to the
- specified value
- * @return {Array} properties this object as an array of PropertyMirror objects
- */
-ObjectMirror.prototype.interceptorProperties = function(opt_kind, opt_names) {
- // Find kind.
- var kind = opt_kind || PropertyKind.Named | PropertyKind.Indexed;
- var namedInterceptorProperties;
- var indexedInterceptorProperties;
-
- // Get values for named interceptor properties.
- if (kind & PropertyKind.Named) {
- var names = opt_names || this.interceptorPropertyNames(PropertyKind.Named);
- namedInterceptorProperties = new Array(names.length);
- for (i = 0; i < names.length; i++) {
- var value = %DebugNamedInterceptorPropertyValue(this.value_, names[i]);
- namedInterceptorProperties[i] = new InterceptorPropertyMirror(this, names[i], value);
- }
- }
-
- // Get values for indexed interceptor properties.
- if (kind & PropertyKind.Indexed) {
- var names = opt_names || this.interceptorPropertyNames(PropertyKind.Indexed);
- indexedInterceptorProperties = new Array(names.length);
- for (i = 0; i < names.length; i++) {
- // Don't try to get the value if the name is not a number.
- if (IS_NUMBER(names[i])) {
- var value = %DebugIndexedInterceptorElementValue(this.value_, names[i]);
- indexedInterceptorProperties[i] = new InterceptorPropertyMirror(this, names[i], value);
- }
- }
- }
-
- // Return either result or both concattenated.
- if (namedInterceptorProperties && indexedInterceptorProperties) {
- return namedInterceptorProperties.concat(indexedInterceptorProperties);
- } else if (namedInterceptorProperties) {
- return namedInterceptorProperties;
- } else {
- return indexedInterceptorProperties;
- }
-};
-
-
ObjectMirror.prototype.property = function(name) {
var details = %DebugGetPropertyDetails(this.value_, %ToString(name));
if (details) {
- return new PropertyMirror(this, name, details[0], details[1]);
+ return new PropertyMirror(this, name, details);
}
// Nothing found.
@@ -893,7 +813,7 @@
var details = %DebugGetPropertyDetails(this.value_, %ToString(i));
var value;
if (details) {
- value = new PropertyMirror(this, i, details[0], details[1]);
+ value = new PropertyMirror(this, i, details);
} else {
value = new UndefinedMirror();
}
@@ -1011,16 +931,21 @@
* Base mirror object for properties.
* @param {ObjectMirror} mirror The mirror object having this property
* @param {string} name The name of the property
- * @param {Object} value The value of the property
+ * @param {Array} details Details about the property
* @constructor
* @extends Mirror
*/
-function PropertyMirror(mirror, name, value, details) {
+function PropertyMirror(mirror, name, details) {
Mirror.call(this, PROPERTY_TYPE);
this.mirror_ = mirror;
this.name_ = name;
- this.value_ = value;
- this.details_ = details;
+ this.value_ = details[0];
+ this.details_ = details[1];
+ if (details.length > 2) {
+ this.exception_ = details[2]
+ this.getter_ = details[3];
+ this.setter_ = details[4];
+ }
}
inherits(PropertyMirror, Mirror);
@@ -1056,17 +981,19 @@
PropertyMirror.prototype.value = function() {
- if (this.propertyType() == PropertyType.Callbacks) {
- // TODO(1242933): AccessorMirror should have getter/setter values.
- return new AccessorMirror();
- } else if (this.type() == PropertyType.Interceptor) {
- return new UndefinedMirror();
- } else {
- return MakeMirror(this.value_);
- }
+ return MakeMirror(this.value_);
}
+/**
+ * Returns whether this property value is an exception.
+ * @return {booolean} True if this property value is an exception
+ */
+PropertyMirror.prototype.isException = function() {
+ return this.exception_ ? true : false;
+}
+
+
PropertyMirror.prototype.attributes = function() {
return %DebugPropertyAttributesFromDetails(this.details_);
}
@@ -1083,62 +1010,61 @@
/**
- * Mirror object for interceptor named properties.
- * @param {ObjectMirror} mirror The mirror object having this property
- * @param {String} name The name of the property
- * @param {value} value The value of the property
- * @constructor
- * @extends PropertyMirror
+ * Returns whether this property has a getter defined through __defineGetter__.
+ * @return {booolean} True if this property has a getter
*/
-function InterceptorPropertyMirror(mirror, name, value) {
- PropertyMirror.call(this, mirror, name, value, PropertyType.Interceptor);
+PropertyMirror.prototype.hasGetter = function() {
+ return this.getter_ ? true : false;
}
-inherits(InterceptorPropertyMirror, PropertyMirror);
/**
- * Mirror object for property accessors.
- * @param {Function} getter The getter function for this accessor
- * @param {Function} setter The setter function for this accessor
- * @constructor
- * @extends Mirror
+ * Returns whether this property has a setter defined through __defineSetter__.
+ * @return {booolean} True if this property has a setter
*/
-function AccessorMirror(getter, setter) {
- Mirror.call(this, ACCESSOR_TYPE);
- this.getter_ = getter;
- this.setter_ = setter;
+PropertyMirror.prototype.hasSetter = function() {
+ return this.setter_ ? true : false;
}
-inherits(AccessorMirror, Mirror);
/**
- * Returns whether this accessor is native or not. A native accessor is either
- * a VM buildin or provided through the API. A non native accessor is defined
- * in JavaScript using the __defineGetter__ and/or __defineGetter__ functions.
- * @return {boolean} True is the accessor is native
+ * Returns the getter for this property defined through __defineGetter__.
+ * @return {Mirror} FunctionMirror reflecting the getter function or
+ * UndefinedMirror if there is no getter for this property
*/
-AccessorMirror.prototype.isNative = function() {
- return IS_UNDEFINED(this.getter_) && IS_UNDEFINED(this.setter_);
+PropertyMirror.prototype.getter = function() {
+ if (this.hasGetter()) {
+ return MakeMirror(this.getter_);
+ } else {
+ return new UndefinedMirror();
+ }
}
/**
- * Returns a mirror for the function of a non native getter.
- * @return {FunctionMirror} Function mirror for the getter set using
- * __defineGetter__.
+ * Returns the setter for this property defined through __defineSetter__.
+ * @return {Mirror} FunctionMirror reflecting the setter function or
+ * UndefinedMirror if there is no setter for this property
*/
-AccessorMirror.prototype.getter = function(details) {
- return MakeMirror(this.getter_);
+PropertyMirror.prototype.setter = function() {
+ if (this.hasSetter()) {
+ return MakeMirror(this.setter_);
+ } else {
+ return new UndefinedMirror();
+ }
}
/**
- * Returns a mirror for the function of a non native setter.
- * @return {FunctionMirror} Function mirror for the getter set using
- * __defineSetter__.
+ * Returns whether this property is natively implemented by the host or a set
+ * through JavaScript code.
+ * @return {boolean} True if the property is
+ * UndefinedMirror if there is no setter for this property
*/
-AccessorMirror.prototype.setter = function(details) {
- return MakeMirror(this.setter_);
+PropertyMirror.prototype.isNative = function() {
+ return (this.propertyType() == PropertyType.Interceptor) ||
+ ((this.propertyType() == PropertyType.Callbacks) &&
+ !this.hasGetter() && !this.hasSetter());
}
@@ -1732,14 +1658,6 @@
}
content.push(MakeJSONPair_('properties', ArrayToJSONArray_(x)));
- // Add interceptor properties.
- propertyNames = mirror.interceptorPropertyNames();
- var x = new Array(propertyNames.length);
- for (var i = 0; i < propertyNames.length; i++) {
- x[i] = properties[i].toJSONProtocol(details);
- }
- content.push(MakeJSONPair_('interceptorProperties', ArrayToJSONArray_(x)));
-
// For arrays the indexed properties are added separately and the length is
// added as well.
if (mirror.isArray()) {
« 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