This test makes sure we don't incorrectly cache virtual registers in system registers across VM branches

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


PASS (true ? function(){ return true; } : a.b)() is true
PASS (function(){ return true; } || a.b)() is true
PASS (function(){ return (true ? function(){return true;} : a.b)(); })() is true
PASS (function(){ return (function(){return true;} || a.b)(); })() is true
PASS (function(){ var i = 0; var result = false; var a = {c:true}.c; do { result = a; i++; } while (i < 2); return result; })() is true
PASS successfullyParsed is true

TEST COMPLETE

