Make sure that we correctly identify parse errors in object literals

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


PASS ({a:1, get a(){}}) threw exception SyntaxError: Parse error.
PASS ({a:1, set a(){}}) threw exception SyntaxError: Parse error.
PASS ({get a(){}, a:1}) threw exception SyntaxError: Parse error.
PASS ({set a(){}, a:1}) threw exception SyntaxError: Parse error.
PASS ({get a(){}, get a(){}}) threw exception SyntaxError: Parse error.
PASS ({set a(){}, set a(){}}) threw exception SyntaxError: Parse error.
PASS ({set a(){}, get a(){}, set a(){}}) threw exception SyntaxError: Parse error.
PASS (function(){({a:1, get a(){}})}) threw exception SyntaxError: Parse error.
PASS (function(){({a:1, set a(){}})}) threw exception SyntaxError: Parse error.
PASS (function(){({get a(){}, a:1})}) threw exception SyntaxError: Parse error.
PASS (function(){({set a(){}, a:1})}) threw exception SyntaxError: Parse error.
PASS (function(){({get a(){}, get a(){}})}) threw exception SyntaxError: Parse error.
PASS (function(){({set a(){}, set a(){}})}) threw exception SyntaxError: Parse error.
PASS (function(){({set a(){}, get a(){}, set a(){}})}) threw exception SyntaxError: Parse error.
PASS ({a:1, a:1, a:1}), true is true
PASS ({get a(){}, set a(){}}), true is true
PASS ({set a(){}, get a(){}}), true is true
PASS (function(){({a:1, a:1, a:1})}), true is true
PASS (function(){({get a(){}, set a(){}})}), true is true
PASS (function(){({set a(){}, get a(){}})}), true is true
PASS successfullyParsed is true

TEST COMPLETE

