assert true /* Basic object literal tests */;
var o = {
a: 1, b: 2,
c
:
3,
4:'four',
5: 5,
array: [2,4,6],
"removed": true
};
o.self = o;
o[((('d')))] = 42;
assert o === o.self;
assert 'array' === typename o.array;
assert 1 === o.a;
assert 2 === o['b'];
assert 3 === o.self['self'].self.c;
assert 'four' === o.4;
assert 5 === o[3+2];
//assert 5 === o.(3+2);
assert o.removed;
assert undefined === unset o.self.removed, o.removed /*does not fail on missing properties*/;
assert 'undefined' === typename o.removed;
//unset o.self /* cannot JSON-output cyclical objects */;
scope {
var o = { a:1 };
o.prototype = { a:0 };
assert 1 === o.a;
unset o.a;
assert 0 === o.a;
unset o.a;
assert 0 === o.a;
o.a = 1;
++o.a;
assert 2 === o.a;
o.a += -1;
assert 1 === o.a;
o.prototype = null /* 'null' or 'undefined' assignment removes a prototype... */;
assert undefined === o.prototype /* ... which looks like this afterwards */;
assert 'CWAL_RC_TYPE' === catch{o.prototype = 1}.codeString();
}
o;
// Must cause syntax errors:
// {a:1, b:2, };
// {a:1,, b:2, };
// {,a:1, b:2, };
// {,};