Skip to content

Commit 70bfa44

Browse files
committed
some fixes based on HtmlUnit#9
1 parent 8518a8f commit 70bfa44

File tree

2 files changed

+27
-17
lines changed

2 files changed

+27
-17
lines changed

src/org/mozilla/javascript/NativeReflect.java

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ private static Scriptable construct(
181181
if (result != null) {
182182
result.setPrototype((Scriptable) newTargetPrototype);
183183

184-
Object val = ctorBaseFunction.call(cx, scope, result, args);
184+
Object val = ctorBaseFunction.call(cx, scope, result, callArgs);
185185
if (val instanceof Scriptable) {
186186
return (Scriptable) val;
187187
}
@@ -325,21 +325,35 @@ private static Object preventExtensions(
325325

326326
private static Object set(Context cx, Scriptable scope, Scriptable thisObj, Object[] args) {
327327
ScriptableObject target = checkTarget(args);
328+
if (args.length < 2) {
329+
return true;
330+
}
328331

329-
if (args.length > 1) {
330-
if (ScriptRuntime.isSymbol(args[1])) {
331-
target.put((Symbol) args[1], target, args[2]);
332-
return true;
333-
}
334-
if (args[1] instanceof Double) {
335-
target.put(ScriptRuntime.toIndex(args[1]), target, args[2]);
336-
return true;
332+
ScriptableObject receiver = args.length > 3 ? ScriptableObject.ensureScriptableObject(args[3]) : target;
333+
if (receiver != target) {
334+
ScriptableObject descriptor = target.getOwnPropertyDescriptor(cx, args[1]);
335+
if (descriptor != null) {
336+
Object setter = descriptor.get("set");
337+
if (setter != null && setter != NOT_FOUND) {
338+
((Function) setter).call(cx, scope, receiver, new Object[] {args[2]});
339+
return true;
340+
}
341+
342+
if (descriptor.get("configurable") == Boolean.FALSE) {
343+
return false;
344+
}
337345
}
346+
}
338347

339-
target.put(ScriptRuntime.toString(args[1]), target, args[2]);
340-
return true;
348+
if (ScriptRuntime.isSymbol(args[1])) {
349+
receiver.put((Symbol) args[1], receiver, args[2]);
350+
} else if (args[1] instanceof Double) {
351+
receiver.put(ScriptRuntime.toIndex(args[1]), receiver, args[2]);
352+
} else {
353+
receiver.put(ScriptRuntime.toString(args[1]), receiver, args[2]);
341354
}
342-
return false;
355+
356+
return true;
343357
}
344358

345359
private static Object setPrototypeOf(

testsrc/test262.properties

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1324,7 +1324,7 @@ built-ins/Proxy 74/306 (24.18%)
13241324
get-fn-realm.js
13251325
get-fn-realm-recursive.js
13261326

1327-
built-ins/Reflect 17/139 (12.23%)
1327+
built-ins/Reflect 13/139 (9.35%)
13281328
construct/newtarget-is-not-constructor-throws.js
13291329
defineProperty/return-abrupt-from-property-key.js
13301330
deleteProperty/return-abrupt-from-result.js
@@ -1333,15 +1333,11 @@ built-ins/Reflect 17/139 (12.23%)
13331333
ownKeys/order-after-define-property.js
13341334
ownKeys/return-on-corresponding-order-large-index.js {unsupported: [computed-property-names]}
13351335
set/call-prototype-property-set.js
1336-
set/creates-a-data-descriptor.js
13371336
set/different-property-descriptors.js
13381337
set/receiver-is-not-object.js
13391338
set/return-abrupt-from-result.js
13401339
set/return-false-if-receiver-is-not-writable.js
13411340
set/return-false-if-target-is-not-writable.js
1342-
set/set-value-on-accessor-descriptor-with-receiver.js
1343-
set/set-value-on-data-descriptor.js
1344-
set/symbol-property.js
13451341

13461342
built-ins/RegExp 897/1464 (61.27%)
13471343
CharacterClassEscapes 24/24 (100.0%)

0 commit comments

Comments
 (0)