mirror of https://github.com/svaarala/duktape.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.2 KiB
50 lines
1.2 KiB
/*===
|
|
{"quux":3,"foo":1}
|
|
0 quux
|
|
1 foo
|
|
2 baz
|
|
{"quux":3,"foo":1,"baz":4}
|
|
===*/
|
|
|
|
/* Should ancestor properties be enumerated when creating PropertyList?
|
|
* Specification is a bit unclear on this point. See E5.1 Section 15.12.3,
|
|
* main algorithm, step 4.b.ii.
|
|
*
|
|
* We currently iterate ancestor array indexed properties too.
|
|
*
|
|
* Creating an array instance with a chosen internal prototype is apparently
|
|
* not possible. However, Array.prototype is itself an array and we can add
|
|
* a value to it.
|
|
*/
|
|
|
|
function propertyListAncestorTest() {
|
|
var obj = { foo: 1, bar: 2, quux: 3, baz: 4 };
|
|
var k;
|
|
var plist;
|
|
|
|
// baseline
|
|
print(JSON.stringify(obj, [ 'quux', 'foo' ]));
|
|
|
|
// this is not very common
|
|
Array.prototype[2] = 'baz';
|
|
|
|
// plist will contain "0" and "1", and will inherit "2"
|
|
plist = [ 'quux', 'foo' ];
|
|
for (var k in plist) {
|
|
print(k, plist[k]);
|
|
}
|
|
|
|
// Now E5.1 Section 15.12.3, main algorithm, step 4.b.ii should presumably
|
|
// iterate indices "0" and "1" from the array and "2" from the ancestor.
|
|
// Note that 'length' plays no role in this.
|
|
//
|
|
// (Both Rhino and V8 fail this test.)
|
|
print(JSON.stringify(obj, plist));
|
|
}
|
|
|
|
try {
|
|
propertyListAncestorTest();
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
|
|
|