Login
040-000-objects.s2 at [c5b01a0b83]
Login

File s2/unit/040-000-objects.s2 artifact d16f5411f2 part of check-in c5b01a0b83


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, };
//  {,};