rem: var ancestor = this.superclass && this.superclass.prototype;  for (var property in source) { var value = source[property]; 
add: var ancestor   = this.superclass && this.superclass.prototype; var properties = Object.keys(source);  if (!Object.keys({ toString: true }).length) properties.push("toString", "valueOf");  for (var i = 0, length = properties.length; i < length; i++) { var property = properties[i], value = source[property]; 
context:   addMethods: function(source) {    var ancestor = this.superclass && this.superclass.prototype;    for (var property in source) {      var value = source[property];      if (ancestor && Object.isFunction(value) &&          value.argumentNames().first() == "$super") {        var method = value, value = Object.extend((function(m) {           return function() { return ancestor[m].apply(this, arguments) };        })(property).wrap(method), {          valueOf:  function() { return method },          toString: function() { return method.toString() }          });      }      this.prototype[property] = value;    }        return this;  }
meta: 3332	/local1/tlutelli/issta_data/temp/all_js/javascript/2007_temp/2007/3332/9b78edb9deb8e0fa2476afdf55e68ea8ca3a2edc/base.js/buggy/src/base.js