vendor/v8/src/v8natives.js in mustang-0.0.1 vs vendor/v8/src/v8natives.js in mustang-0.1.0

- old
+ new

@@ -141,20 +141,20 @@ } var f = %CompileString(x); if (!IS_FUNCTION(f)) return f; - return f.call(this); + return %_CallFunction(this, f); } // execScript for IE compatibility. function GlobalExecScript(expr, lang) { // NOTE: We don't care about the character casing. if (!lang || /javascript/i.test(lang)) { var f = %CompileString(ToString(expr)); - f.call(%GlobalReceiver(global)); + %_CallFunction(%GlobalReceiver(global), f); } return null; } @@ -249,11 +249,15 @@ throw new $TypeError('Object.prototype.__defineGetter__: this is Null'); } if (!IS_FUNCTION(fun)) { throw new $TypeError('Object.prototype.__defineGetter__: Expecting function'); } - return %DefineAccessor(ToObject(this), ToString(name), GETTER, fun); + var desc = new PropertyDescriptor(); + desc.setGet(fun); + desc.setEnumerable(true); + desc.setConfigurable(true); + DefineOwnProperty(ToObject(this), ToString(name), desc, false); } function ObjectLookupGetter(name) { if (this == null && !IS_UNDETECTABLE(this)) { @@ -269,11 +273,15 @@ } if (!IS_FUNCTION(fun)) { throw new $TypeError( 'Object.prototype.__defineSetter__: Expecting function'); } - return %DefineAccessor(ToObject(this), ToString(name), SETTER, fun); + var desc = new PropertyDescriptor(); + desc.setSet(fun); + desc.setEnumerable(true); + desc.setConfigurable(true); + DefineOwnProperty(ToObject(this), ToString(name), desc, false); } function ObjectLookupSetter(name) { if (this == null && !IS_UNDETECTABLE(this)) { @@ -392,10 +400,14 @@ this.hasGetter_ = false; this.set_ = void 0; this.hasSetter_ = false; } +PropertyDescriptor.prototype.__proto__ = null; +PropertyDescriptor.prototype.toString = function() { + return "[object PropertyDescriptor]"; +}; PropertyDescriptor.prototype.setValue = function(value) { this.value_ = value; this.hasValue_ = true; } @@ -493,11 +505,11 @@ // Converts an array returned from Runtime_GetOwnProperty to an actual // property descriptor. For a description of the array layout please // see the runtime.cc file. function ConvertDescriptorArrayToDescriptor(desc_array) { - if (desc_array == false) { + if (desc_array === false) { throw 'Internal error: invalid desc_array'; } if (IS_UNDEFINED(desc_array)) { return void 0; @@ -542,29 +554,34 @@ // defined in macros.py. // If p is not a property on obj undefined is returned. var props = %GetOwnProperty(ToObject(obj), ToString(p)); // A false value here means that access checks failed. - if (props == false) return void 0; + if (props === false) return void 0; return ConvertDescriptorArrayToDescriptor(props); } // ES5 8.12.9. function DefineOwnProperty(obj, p, desc, should_throw) { var current_or_access = %GetOwnProperty(ToObject(obj), ToString(p)); // A false value here means that access checks failed. - if (current_or_access == false) return void 0; + if (current_or_access === false) return void 0; var current = ConvertDescriptorArrayToDescriptor(current_or_access); var extensible = %IsExtensible(ToObject(obj)); // Error handling according to spec. // Step 3 - if (IS_UNDEFINED(current) && !extensible) - throw MakeTypeError("define_disallowed", ["defineProperty"]); + if (IS_UNDEFINED(current) && !extensible) { + if (should_throw) { + throw MakeTypeError("define_disallowed", ["defineProperty"]); + } else { + return; + } + } if (!IS_UNDEFINED(current)) { // Step 5 and 6 if ((IsGenericDescriptor(desc) || IsDataDescriptor(desc) == IsDataDescriptor(current)) && @@ -585,35 +602,59 @@ if (!current.isConfigurable()) { // Step 7 if (desc.isConfigurable() || (desc.hasEnumerable() && desc.isEnumerable() != current.isEnumerable())) { - throw MakeTypeError("redefine_disallowed", ["defineProperty"]); + if (should_throw) { + throw MakeTypeError("redefine_disallowed", ["defineProperty"]); + } else { + return; + } } // Step 8 if (!IsGenericDescriptor(desc)) { // Step 9a if (IsDataDescriptor(current) != IsDataDescriptor(desc)) { - throw MakeTypeError("redefine_disallowed", ["defineProperty"]); + if (should_throw) { + throw MakeTypeError("redefine_disallowed", ["defineProperty"]); + } else { + return; + } } // Step 10a if (IsDataDescriptor(current) && IsDataDescriptor(desc)) { if (!current.isWritable() && desc.isWritable()) { - throw MakeTypeError("redefine_disallowed", ["defineProperty"]); + if (should_throw) { + throw MakeTypeError("redefine_disallowed", ["defineProperty"]); + } else { + return; + } } if (!current.isWritable() && desc.hasValue() && !SameValue(desc.getValue(), current.getValue())) { - throw MakeTypeError("redefine_disallowed", ["defineProperty"]); + if (should_throw) { + throw MakeTypeError("redefine_disallowed", ["defineProperty"]); + } else { + return; + } } } // Step 11 if (IsAccessorDescriptor(desc) && IsAccessorDescriptor(current)) { if (desc.hasSetter() && !SameValue(desc.getSet(), current.getSet())) { - throw MakeTypeError("redefine_disallowed", ["defineProperty"]); + if (should_throw) { + throw MakeTypeError("redefine_disallowed", ["defineProperty"]); + } else { + return; + } } if (desc.hasGetter() && !SameValue(desc.getGet(),current.getGet())) { - throw MakeTypeError("redefine_disallowed", ["defineProperty"]); + if (should_throw) { + throw MakeTypeError("redefine_disallowed", ["defineProperty"]); + } else { + return; + } } } } } } @@ -1168,11 +1209,11 @@ } return fn.apply(this_arg, arguments); }; } else { - var bound_args = new $Array(argc_bound); + var bound_args = new InternalArray(argc_bound); for(var i = 0; i < argc_bound; i++) { bound_args[i] = %_Arguments(i+1); } var result = function() { @@ -1186,11 +1227,11 @@ } // Combine the args we got from the bind call with the args // given as argument to the invocation. var argc = %_ArgumentsLength(); - var args = new $Array(argc + argc_bound); + var args = new InternalArray(argc + argc_bound); // Add bound arguments. for (var i = 0; i < argc_bound; i++) { args[i] = bound_args[i]; } // Add arguments from call. @@ -1218,10 +1259,10 @@ function NewFunction(arg1) { // length == 1 var n = %_ArgumentsLength(); var p = ''; if (n > 1) { - p = new $Array(n - 1); + p = new InternalArray(n - 1); for (var i = 0; i < n - 1; i++) p[i] = %_Arguments(i); p = Join(p, n - 1, ',', NonStringToString); // If the formal parameters string include ) - an illegal // character - it may make the combined function expression // compile. We avoid this problem by checking for this early on.