141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Copyright 2014 the V8 project authors. All rights reserved. 241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// Use of this source code is governed by a BSD-style license that can be 341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// found in the LICENSE file. 441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#include "src/v8.h" 641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#include "test/cctest/compiler/function-tester.h" 841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgusing namespace v8::internal; 1041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgusing namespace v8::internal::compiler; 1141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 1241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgTEST(Conditional) { 1341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org FunctionTester T("(function(a) { return a ? 23 : 42; })"); 1441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 1541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(23), T.true_value(), T.undefined()); 1641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(42), T.false_value(), T.undefined()); 1741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(42), T.undefined(), T.undefined()); 1841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(42), T.Val(0.0), T.undefined()); 1941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(23), T.Val(999), T.undefined()); 2041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(23), T.Val("x"), T.undefined()); 2141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} 2241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 2341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 2441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgTEST(LogicalAnd) { 2541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org FunctionTester T("(function(a,b) { return a && b; })"); 2641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 2741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.true_value(), T.true_value(), T.true_value()); 2841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.false_value(), T.false_value(), T.true_value()); 2941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.false_value(), T.true_value(), T.false_value()); 3041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.false_value(), T.false_value(), T.false_value()); 3141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 3241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(999), T.Val(777), T.Val(999)); 3341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(0.0), T.Val(0.0), T.Val(999)); 3441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val("b"), T.Val("a"), T.Val("b")); 3541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} 3641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 3741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 3841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgTEST(LogicalOr) { 3941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org FunctionTester T("(function(a,b) { return a || b; })"); 4041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 4141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.true_value(), T.true_value(), T.true_value()); 4241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.true_value(), T.false_value(), T.true_value()); 4341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.true_value(), T.true_value(), T.false_value()); 4441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.false_value(), T.false_value(), T.false_value()); 4541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 4641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(777), T.Val(777), T.Val(999)); 4741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(999), T.Val(0.0), T.Val(999)); 4841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val("a"), T.Val("a"), T.Val("b")); 4941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} 5041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 5141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 5241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgTEST(LogicalEffect) { 5341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org FunctionTester T("(function(a,b) { a && (b = a); return b; })"); 5441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 5541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.true_value(), T.true_value(), T.true_value()); 5641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.true_value(), T.false_value(), T.true_value()); 5741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.true_value(), T.true_value(), T.false_value()); 5841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.false_value(), T.false_value(), T.false_value()); 5941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 6041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(777), T.Val(777), T.Val(999)); 6141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(999), T.Val(0.0), T.Val(999)); 6241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val("a"), T.Val("a"), T.Val("b")); 6341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} 6441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 6541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 6641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgTEST(IfStatement) { 6741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org FunctionTester T("(function(a) { if (a) { return 1; } else { return 2; } })"); 6841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 6941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(1), T.true_value(), T.undefined()); 7041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(2), T.false_value(), T.undefined()); 7141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(2), T.undefined(), T.undefined()); 7241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(2), T.Val(0.0), T.undefined()); 7341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(1), T.Val(999), T.undefined()); 7441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(1), T.Val("x"), T.undefined()); 7541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} 7641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 7741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 7841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgTEST(DoWhileStatement) { 7941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org FunctionTester T("(function(a,b) { do { a+=23; } while(a < b) return a; })"); 8041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 8141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(24), T.Val(1), T.Val(1)); 8241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(24), T.Val(1), T.Val(23)); 8341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(47), T.Val(1), T.Val(25)); 8441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val("str23"), T.Val("str"), T.Val("str")); 8541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} 8641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 8741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 8841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgTEST(WhileStatement) { 8941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org FunctionTester T("(function(a,b) { while(a < b) { a+=23; } return a; })"); 9041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 9141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(1), T.Val(1), T.Val(1)); 9241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(24), T.Val(1), T.Val(23)); 9341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(47), T.Val(1), T.Val(25)); 9441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val("str"), T.Val("str"), T.Val("str")); 9541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} 9641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 9741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 9841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgTEST(ForStatement) { 9941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org FunctionTester T("(function(a,b) { for (; a < b; a+=23) {} return a; })"); 10041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 10141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(1), T.Val(1), T.Val(1)); 10241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(24), T.Val(1), T.Val(23)); 10341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(47), T.Val(1), T.Val(25)); 10441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val("str"), T.Val("str"), T.Val("str")); 10541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} 10641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 10741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 10841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgstatic void TestForIn(const char* code) { 10941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org FunctionTester T(code); 11041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.undefined(), T.undefined()); 11141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.undefined(), T.null()); 11241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.undefined(), T.NewObject("({})")); 11341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.undefined(), T.Val(1)); 11441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val("2"), T.Val("str")); 11541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val("a"), T.NewObject("({'a' : 1})")); 11641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val("2"), T.NewObject("([1, 2, 3])")); 11741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val("a"), T.NewObject("({'a' : 1, 'b' : 1})"), T.Val("b")); 11841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val("1"), T.NewObject("([1, 2, 3])"), T.Val("2")); 11941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} 12041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 12141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 12241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgTEST(ForInStatement) { 12341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org // Variable assignment. 12441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org TestForIn( 12541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "(function(a, b) {" 12641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "var last;" 12741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "for (var x in a) {" 12841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org " if (b) { delete a[b]; b = undefined; }" 12941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org " last = x;" 13041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "}" 13141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "return last;})"); 13241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org // Indexed assignment. 13341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org TestForIn( 13441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "(function(a, b) {" 13541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "var array = [0, 1, undefined];" 13641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "for (array[2] in a) {" 13741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org " if (b) { delete a[b]; b = undefined; }" 13841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "}" 13941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "return array[2];})"); 14041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org // Named assignment. 14141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org TestForIn( 14241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "(function(a, b) {" 14341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "var obj = {'a' : undefined};" 14441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "for (obj.a in a) {" 14541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org " if (b) { delete a[b]; b = undefined; }" 14641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "}" 14741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "return obj.a;})"); 14841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} 14941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 15041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 15141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgTEST(ForInContinueStatement) { 15241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const char* src = 15341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "(function(a,b) {" 15441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org " var r = '-';" 15541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org " for (var x in a) {" 15641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org " r += 'A-';" 15741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org " if (b) continue;" 15841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org " r += 'B-';" 15941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org " }" 16041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org " return r;" 16141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "})"; 16241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org FunctionTester T(src); 16341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 16441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val("-A-B-"), T.NewObject("({x:1})"), T.false_value()); 16541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val("-A-B-A-B-"), T.NewObject("({x:1,y:2})"), T.false_value()); 16641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val("-A-"), T.NewObject("({x:1})"), T.true_value()); 16741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val("-A-A-"), T.NewObject("({x:1,y:2})"), T.true_value()); 16841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} 16941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 17041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 17141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgTEST(SwitchStatement) { 17241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const char* src = 17341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "(function(a,b) {" 17441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org " var r = '-';" 17541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org " switch (a) {" 17641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org " case 'x' : r += 'X-';" 17741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org " case b + 'b': r += 'B-';" 17841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org " default : r += 'D-';" 17941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org " case 'y' : r += 'Y-';" 18041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org " }" 18141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org " return r;" 18241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "})"; 18341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org FunctionTester T(src); 18441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 18541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val("-X-B-D-Y-"), T.Val("x"), T.Val("B")); 18641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val("-B-D-Y-"), T.Val("Bb"), T.Val("B")); 18741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val("-D-Y-"), T.Val("z"), T.Val("B")); 18841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val("-Y-"), T.Val("y"), T.Val("B")); 18941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 19041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org CompileRun("var c = 0; var o = { toString:function(){return c++} };"); 19141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val("-D-Y-"), T.Val("1b"), T.NewObject("o")); 19241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val("-B-D-Y-"), T.Val("1b"), T.NewObject("o")); 19341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val("-D-Y-"), T.Val("1b"), T.NewObject("o")); 19441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} 19541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 19641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 19741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgTEST(BlockBreakStatement) { 19841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org FunctionTester T("(function(a,b) { L:{ if (a) break L; b=1; } return b; })"); 19941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 20041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(7), T.true_value(), T.Val(7)); 20141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(1), T.false_value(), T.Val(7)); 20241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} 20341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 20441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 20541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgTEST(BlockReturnStatement) { 20641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org FunctionTester T("(function(a,b) { L:{ if (a) b=1; return b; } })"); 20741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 20841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(1), T.true_value(), T.Val(7)); 20941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(7), T.false_value(), T.Val(7)); 21041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} 21141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 21241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 21341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgTEST(NestedIfConditional) { 21441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org FunctionTester T("(function(a,b) { if (a) { b = (b?b:7) + 1; } return b; })"); 21541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 21641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(4), T.false_value(), T.Val(4)); 21741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(6), T.true_value(), T.Val(5)); 21841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(8), T.true_value(), T.undefined()); 21941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} 22041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 22141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 22241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgTEST(NestedIfLogical) { 22341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const char* src = 22441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "(function(a,b) {" 22541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org " if (a || b) { return 1; } else { return 2; }" 22641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "})"; 22741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org FunctionTester T(src); 22841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 22941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(1), T.true_value(), T.true_value()); 23041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(1), T.false_value(), T.true_value()); 23141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(1), T.true_value(), T.false_value()); 23241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(2), T.false_value(), T.false_value()); 23341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(1), T.Val(1.0), T.Val(1.0)); 23441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(1), T.Val(0.0), T.Val(1.0)); 23541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(1), T.Val(1.0), T.Val(0.0)); 23641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(2), T.Val(0.0), T.Val(0.0)); 23741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} 23841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 23941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 24041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgTEST(NestedIfElseFor) { 24141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const char* src = 24241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "(function(a,b) {" 24341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org " if (!a) { return b - 3; } else { for (; a < b; a++); }" 24441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org " return a;" 24541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "})"; 24641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org FunctionTester T(src); 24741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 24841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(1), T.false_value(), T.Val(4)); 24941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(2), T.true_value(), T.Val(2)); 25041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(3), T.Val(3), T.Val(1)); 25141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} 25241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 25341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 25441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgTEST(NestedWhileWhile) { 25541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const char* src = 25641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "(function(a) {" 25741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org " var i = a; while (false) while(false) return i;" 25841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org " return i;" 25941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org "})"; 26041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org FunctionTester T(src); 26141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 26241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(2.0), T.Val(2.0), T.Val(-1.0)); 26341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(65.0), T.Val(65.0), T.Val(-1.0)); 26441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} 26541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 26641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 26741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgTEST(NestedForIf) { 26841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org FunctionTester T("(function(a,b) { for (; a > 1; a--) if (b) return 1; })"); 26941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 27041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(1), T.Val(3), T.true_value()); 27141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.undefined(), T.Val(2), T.false_value()); 27241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.undefined(), T.Val(1), T.null()); 27341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} 27441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 27541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 27641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgTEST(NestedForConditional) { 27741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org FunctionTester T("(function(a,b) { for (; a > 1; a--) return b ? 1 : 2; })"); 27841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 27941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(1), T.Val(3), T.true_value()); 28041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.Val(2), T.Val(2), T.false_value()); 28141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T.CheckCall(T.undefined(), T.Val(1), T.null()); 28241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} 28341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org