| Index: test/cctest/interpreter/test-bytecode-generator.cc | 
| diff --git a/test/cctest/interpreter/test-bytecode-generator.cc b/test/cctest/interpreter/test-bytecode-generator.cc | 
| index 2f547721abd82aa375d34d877eaa9655d642a8da..6289d91999edbe354ef84e28d0b1769a0bdfca9c 100644 | 
| --- a/test/cctest/interpreter/test-bytecode-generator.cc | 
| +++ b/test/cctest/interpreter/test-bytecode-generator.cc | 
| @@ -410,6 +410,18 @@ TEST(LogicalExpressions) { | 
| B(LdaSmi8), U8(3),              // | 
| B(Return)}, | 
| 0}, | 
| +      {"var x = 0; return (x == 1) || 3;", | 
| +       1 * kPointerSize, | 
| +       1, | 
| +       12, | 
| +       {B(LdaZero),            // | 
| +        B(Star), R(0),         // | 
| +        B(LdaSmi8), U8(1),     // | 
| +        B(TestEqual), R(0),    // | 
| +        B(JumpIfTrue), U8(4),  // | 
| +        B(LdaSmi8), U8(3),     // | 
| +        B(Return)}, | 
| +       0}, | 
| {"var x = 0; return x && 3;", | 
| 1 * kPointerSize, | 
| 1, | 
| @@ -421,6 +433,18 @@ TEST(LogicalExpressions) { | 
| B(LdaSmi8), U8(3),               // | 
| B(Return)}, | 
| 0}, | 
| +      {"var x = 0; return (x == 0) && 3;", | 
| +       1 * kPointerSize, | 
| +       1, | 
| +       11, | 
| +       {B(LdaZero),             // | 
| +        B(Star), R(0),          // | 
| +        B(LdaZero),             // | 
| +        B(TestEqual), R(0),     // | 
| +        B(JumpIfFalse), U8(4),  // | 
| +        B(LdaSmi8), U8(3),      // | 
| +        B(Return)}, | 
| +       0}, | 
| {"var x = 0; return x || (1, 2, 3);", | 
| 1 * kPointerSize, | 
| 1, | 
| @@ -495,6 +519,54 @@ TEST(LogicalExpressions) { | 
| B(Return)},                              // | 
| 1, | 
| {260, 0, 0, 0}}, | 
| +      {"var x = 1; var a = 2, b = 3; return (x > 3) || (" | 
| +        REPEAT_32(SPACE, "a = 1, b = 2, ") | 
| +       "3);", | 
| +       3 * kPointerSize, | 
| +       1, | 
| +       277, | 
| +       {B(LdaSmi8), U8(1),             // | 
| +        B(Star), R(0),                 // | 
| +        B(LdaSmi8), U8(2),             // | 
| +        B(Star), R(1),                 // | 
| +        B(LdaSmi8), U8(3),             // | 
| +        B(Star), R(2),                 // | 
| +        B(LdaSmi8), U8(3),             // | 
| +        B(TestGreaterThan), R(0),      // | 
| +        B(JumpIfTrueConstant), U8(0),  // | 
| +        REPEAT_32(COMMA,               // | 
| +          B(LdaSmi8), U8(1),           // | 
| +          B(Star), R(1),               // | 
| +          B(LdaSmi8), U8(2),           // | 
| +          B(Star), R(2)),              // | 
| +        B(LdaSmi8), U8(3),             // | 
| +        B(Return)}, | 
| +       1, | 
| +       {260, 0, 0, 0}}, | 
| +      {"var x = 0; var a = 2, b = 3; return (x < 5) && (" | 
| +        REPEAT_32(SPACE, "a = 1, b = 2, ") | 
| +       "3);", | 
| +       3 * kPointerSize, | 
| +       1, | 
| +       276, | 
| +       {B(LdaZero),                     // | 
| +        B(Star), R(0),                  // | 
| +        B(LdaSmi8), U8(2),              // | 
| +        B(Star), R(1),                  // | 
| +        B(LdaSmi8), U8(3),              // | 
| +        B(Star), R(2),                  // | 
| +        B(LdaSmi8), U8(5),              // | 
| +        B(TestLessThan), R(0),          // | 
| +        B(JumpIfFalseConstant), U8(0),  // | 
| +        REPEAT_32(COMMA,                // | 
| +          B(LdaSmi8), U8(1),            // | 
| +          B(Star), R(1),                // | 
| +          B(LdaSmi8), U8(2),            // | 
| +          B(Star), R(2)),               // | 
| +        B(LdaSmi8), U8(3),              // | 
| +        B(Return)}, | 
| +       1, | 
| +       {260, 0, 0, 0}}, | 
| {"return 0 && 3;", | 
| 0 * kPointerSize, | 
| 1, | 
| @@ -1528,33 +1600,31 @@ TEST(IfConditions) { | 
| {"function f() { if (0) { return 1; } else { return -1; } } f()", | 
| 0, | 
| 1, | 
| -       14, | 
| -       {B(LdaZero),             // | 
| -        B(ToBoolean),           // | 
| -        B(JumpIfFalse), U8(7),  // | 
| -        B(LdaSmi8), U8(1),      // | 
| -        B(Return),              // | 
| -        B(Jump), U8(5),         // | 
| -        B(LdaSmi8), U8(-1),     // | 
| -        B(Return),              // | 
| -        B(LdaUndefined),        // | 
| -        B(Return)},             // | 
| +       13, | 
| +       {B(LdaZero),                      // | 
| +        B(JumpIfToBooleanFalse), U8(7),  // | 
| +        B(LdaSmi8), U8(1),               // | 
| +        B(Return),                       // | 
| +        B(Jump), U8(5),                  // | 
| +        B(LdaSmi8), U8(-1),              // | 
| +        B(Return),                       // | 
| +        B(LdaUndefined),                 // | 
| +        B(Return)},                      // | 
| 0, | 
| {unused, unused, unused, unused, unused, unused}}, | 
| {"function f() { if ('lucky') { return 1; } else { return -1; } } f();", | 
| 0, | 
| 1, | 
| -       15, | 
| -       {B(LdaConstant), U8(0),  // | 
| -        B(ToBoolean),           // | 
| -        B(JumpIfFalse), U8(7),  // | 
| -        B(LdaSmi8), U8(1),      // | 
| -        B(Return),              // | 
| -        B(Jump), U8(5),         // | 
| -        B(LdaSmi8), U8(-1),     // | 
| -        B(Return),              // | 
| -        B(LdaUndefined),        // | 
| -        B(Return)},             // | 
| +       14, | 
| +       {B(LdaConstant), U8(0),           // | 
| +        B(JumpIfToBooleanFalse), U8(7),  // | 
| +        B(LdaSmi8), U8(1),               // | 
| +        B(Return),                       // | 
| +        B(Jump), U8(5),                  // | 
| +        B(LdaSmi8), U8(-1),              // | 
| +        B(Return),                       // | 
| +        B(LdaUndefined),                 // | 
| +        B(Return)},                      // | 
| 1, | 
| {helper.factory()->NewStringFromStaticChars("lucky"), unused, unused, | 
| unused, unused, unused}}, | 
| @@ -1638,6 +1708,36 @@ TEST(IfConditions) { | 
| helper.factory()->NewNumberFromInt(200), | 
| helper.factory()->NewNumberFromInt(263), | 
| helper.factory()->NewNumberFromInt(-200), unused, unused}}, | 
| +      {"function f() { var a = 0; var b = 0; if (a) { " | 
| +       REPEAT_32(SPACE, "b = a; a = b; ") | 
| +       " return 200; } else { return -200; } } f()", | 
| +       2 * kPointerSize, | 
| +       1, | 
| +       276, | 
| +       { | 
| +           B(LdaZero),                              // | 
| +           B(Star), R(0),                           // | 
| +           B(LdaZero),                              // | 
| +           B(Star), R(1),                           // | 
| +           B(Ldar), R(0),                           // | 
| +           B(JumpIfToBooleanFalseConstant), U8(1),  // | 
| +           REPEAT_32(COMMA,                         // | 
| +             B(Ldar), R(0),                         // | 
| +             B(Star), R(1),                         // | 
| +             B(Ldar), R(1),                         // | 
| +             B(Star), R(0)),                        // | 
| +           B(LdaConstant), U8(0),                   // | 
| +           B(Return),                               // | 
| +           B(Jump), U8(5),                          // | 
| +           B(LdaConstant), U8(2),                   // | 
| +           B(Return),                               // | 
| +           B(LdaUndefined),                         // | 
| +           B(Return)},                              // | 
| +       3, | 
| +       {helper.factory()->NewNumberFromInt(200), | 
| +        helper.factory()->NewNumberFromInt(263), | 
| +        helper.factory()->NewNumberFromInt(-200), unused, unused, unused}}, | 
| + | 
| {"function f(a, b) {\n" | 
| "  if (a == b) { return 1; }\n" | 
| "  if (a === b) { return 1; }\n" | 
| @@ -2007,7 +2107,88 @@ TEST(BasicLoops) { | 
| B(Return),               // | 
| }, | 
| 0}, | 
| -  }; | 
| +      {"var x = 10;" | 
| +       "var y = 1;" | 
| +       "while (x) {" | 
| +       "  y = y * 12;" | 
| +       "  x = x - 1;" | 
| +       "}" | 
| +       "return y;", | 
| +       2 * kPointerSize, | 
| +       1, | 
| +       29, | 
| +       { | 
| +           B(LdaSmi8), U8(10),               // | 
| +           B(Star), R(0),                    // | 
| +           B(LdaSmi8), U8(1),                // | 
| +           B(Star), R(1),                    // | 
| +           B(Jump), U8(14),                  // | 
| +           B(LdaSmi8), U8(12),               // | 
| +           B(Mul), R(1),                     // | 
| +           B(Star), R(1),                    // | 
| +           B(LdaSmi8), U8(1),                // | 
| +           B(Sub), R(0),                     // | 
| +           B(Star), R(0),                    // | 
| +           B(Ldar), R(0),                    // | 
| +           B(JumpIfToBooleanTrue), U8(-14),  // | 
| +           B(Ldar), R(1),                    // | 
| +           B(Return),                        // | 
| +        }, | 
| +        0}, | 
| +       {"var x = 10;" | 
| +        "var y = 1;" | 
| +        "do {" | 
| +        "  y = y * 12;" | 
| +        "  x = x - 1;" | 
| +        "} while(x);" | 
| +        "return y;", | 
| +        2 * kPointerSize, | 
| +        1, | 
| +        27, | 
| +        { | 
| +           B(LdaSmi8), U8(10),               // | 
| +           B(Star), R(0),                    // | 
| +           B(LdaSmi8), U8(1),                // | 
| +           B(Star), R(1),                    // | 
| +           B(LdaSmi8), U8(12),               // | 
| +           B(Mul), R(1),                     // | 
| +           B(Star), R(1),                    // | 
| +           B(LdaSmi8), U8(1),                // | 
| +           B(Sub), R(0),                     // | 
| +           B(Star), R(0),                    // | 
| +           B(Ldar), R(0),                    // | 
| +           B(JumpIfToBooleanTrue), U8(-14),  // | 
| +           B(Ldar), R(1),                    // | 
| +           B(Return),                        // | 
| +        }, | 
| +        0}, | 
| +       {"var y = 1;" | 
| +        "for (var x = 10; x; --x) {" | 
| +        "  y = y * 12;" | 
| +        "}" | 
| +        "return y;", | 
| +        2 * kPointerSize, | 
| +        1, | 
| +        29, | 
| +        { | 
| +           B(LdaSmi8), U8(1),                // | 
| +           B(Star), R(0),                    // | 
| +           B(LdaSmi8), U8(10),               // | 
| +           B(Star), R(1),                    // | 
| +           B(Jump), U8(14),                  // | 
| +           B(LdaSmi8), U8(12),               // | 
| +           B(Mul), R(0),                     // | 
| +           B(Star), R(0),                    // | 
| +           B(Ldar), R(1),                    // | 
| +           B(ToNumber),                      // | 
| +           B(Dec),                           // | 
| +           B(Star), R(1),                    // | 
| +           B(Ldar), R(1),                    // | 
| +           B(JumpIfToBooleanTrue), U8(-14),  // | 
| +           B(Ldar), R(0),                    // | 
| +           B(Return),                        // | 
| +         }, | 
| +         0}}; | 
|  | 
| for (size_t i = 0; i < arraysize(snippets); i++) { | 
| Handle<BytecodeArray> bytecode_array = | 
| @@ -3108,15 +3289,14 @@ TEST(Throw) { | 
| {"if ('test') { throw 'Error'; };", | 
| 0, | 
| 1, | 
| -       10, | 
| +       9, | 
| { | 
| -           B(LdaConstant), U8(0),  // | 
| -           B(ToBoolean),           // | 
| -           B(JumpIfFalse), U8(5),  // | 
| -           B(LdaConstant), U8(1),  // | 
| -           B(Throw),               // | 
| -           B(LdaUndefined),        // | 
| -           B(Return),              // | 
| +           B(LdaConstant), U8(0),           // | 
| +           B(JumpIfToBooleanFalse), U8(5),  // | 
| +           B(LdaConstant), U8(1),           // | 
| +           B(Throw),                        // | 
| +           B(LdaUndefined),                 // | 
| +           B(Return),                       // | 
| }, | 
| 2, | 
| {"test", "Error"}}, | 
| @@ -4304,33 +4484,30 @@ TEST(Conditional) { | 
| {"return 1 ? 2 : 3;", | 
| 0, | 
| 1, | 
| -       12, | 
| +       11, | 
| { | 
| -           B(LdaSmi8), U8(1),      // | 
| -           B(ToBoolean),           // | 
| -           B(JumpIfFalse), U8(6),  // | 
| -           B(LdaSmi8), U8(2),      // | 
| -           B(Jump), U8(4),         // | 
| -           B(LdaSmi8), U8(3),      // | 
| -           B(Return),              // | 
| +           B(LdaSmi8), U8(1),               // | 
| +           B(JumpIfToBooleanFalse), U8(6),  // | 
| +           B(LdaSmi8), U8(2),               // | 
| +           B(Jump), U8(4),                  // | 
| +           B(LdaSmi8), U8(3),               // | 
| +           B(Return),                       // | 
| }}, | 
| {"return 1 ? 2 ? 3 : 4 : 5;", | 
| 0, | 
| 1, | 
| -       21, | 
| -       { | 
| -           B(LdaSmi8), U8(1),       // | 
| -           B(ToBoolean),            // | 
| -           B(JumpIfFalse), U8(15),  // | 
| -           B(LdaSmi8), U8(2),       // | 
| -           B(ToBoolean),            // | 
| -           B(JumpIfFalse), U8(6),   // | 
| -           B(LdaSmi8), U8(3),       // | 
| -           B(Jump), U8(4),          // | 
| -           B(LdaSmi8), U8(4),       // | 
| -           B(Jump), U8(4),          // | 
| -           B(LdaSmi8), U8(5),       // | 
| -           B(Return),               // | 
| +       19, | 
| +       { | 
| +           B(LdaSmi8), U8(1),                // | 
| +           B(JumpIfToBooleanFalse), U8(14),  // | 
| +           B(LdaSmi8), U8(2),                // | 
| +           B(JumpIfToBooleanFalse), U8(6),   // | 
| +           B(LdaSmi8), U8(3),                // | 
| +           B(Jump), U8(4),                   // | 
| +           B(LdaSmi8), U8(4),                // | 
| +           B(Jump), U8(4),                   // | 
| +           B(LdaSmi8), U8(5),                // | 
| +           B(Return),                        // | 
| }}, | 
| }; | 
|  | 
|  |