Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(64)

Side by Side Diff: test/cctest/interpreter/test-bytecode-generator.cc

Issue 1414193006: [Interpreter] Removes unnecessary jumps and dead code from If and loops. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Adds a test for generating JumpIfToBoolean for If statement. The earlier tests were optimized out b… Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/interpreter/bytecode-generator.cc ('k') | test/cctest/interpreter/test-interpreter.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // TODO(rmcilroy): Remove this define after this flag is turned on globally 5 // TODO(rmcilroy): Remove this define after this flag is turned on globally
6 #define V8_IMMINENT_DEPRECATION_WARNINGS 6 #define V8_IMMINENT_DEPRECATION_WARNINGS
7 7
8 #include "src/v8.h" 8 #include "src/v8.h"
9 9
10 #include "src/compiler.h" 10 #include "src/compiler.h"
(...skipping 1587 matching lines...) Expand 10 before | Expand all | Expand 10 after
1598 TEST(IfConditions) { 1598 TEST(IfConditions) {
1599 InitializedHandleScope handle_scope; 1599 InitializedHandleScope handle_scope;
1600 BytecodeGeneratorHelper helper; 1600 BytecodeGeneratorHelper helper;
1601 1601
1602 Handle<Object> unused = helper.factory()->undefined_value(); 1602 Handle<Object> unused = helper.factory()->undefined_value();
1603 1603
1604 ExpectedSnippet<Handle<Object>> snippets[] = { 1604 ExpectedSnippet<Handle<Object>> snippets[] = {
1605 {"function f() { if (0) { return 1; } else { return -1; } } f()", 1605 {"function f() { if (0) { return 1; } else { return -1; } } f()",
1606 0, 1606 0,
1607 1, 1607 1,
1608 13, 1608 5,
1609 {B(LdaZero), // 1609 {B(LdaSmi8), U8(-1), //
1610 B(JumpIfToBooleanFalse), U8(7), // 1610 B(Return), //
1611 B(LdaSmi8), U8(1), // 1611 B(LdaUndefined), // TODO(mythria) redundant return statement
1612 B(Return), // 1612 B(Return)}, // could be eliminated.
1613 B(Jump), U8(5), //
1614 B(LdaSmi8), U8(-1), //
1615 B(Return), //
1616 B(LdaUndefined), //
1617 B(Return)}, //
1618 0, 1613 0,
1619 {unused, unused, unused, unused, unused, unused}}, 1614 {unused, unused, unused, unused, unused, unused}},
1620 {"function f() { if ('lucky') { return 1; } else { return -1; } } f();", 1615 {"function f() { if ('lucky') { return 1; } else { return -1; } } f();",
1621 0, 1616 0,
1622 1, 1617 1,
1623 14, 1618 5,
1624 {B(LdaConstant), U8(0), // 1619 {B(LdaSmi8), U8(1), //
1625 B(JumpIfToBooleanFalse), U8(7), // 1620 B(Return), //
1626 B(LdaSmi8), U8(1), // 1621 B(LdaUndefined), // TODO(mythria) redundant return statement
1627 B(Return), // 1622 B(Return)}, // could be eliminated.
1628 B(Jump), U8(5), // 1623 0,
1629 B(LdaSmi8), U8(-1), // 1624 {unused, unused, unused, unused, unused, unused}},
1630 B(Return), //
1631 B(LdaUndefined), //
1632 B(Return)}, //
1633 1,
1634 {helper.factory()->NewStringFromStaticChars("lucky"), unused, unused,
1635 unused, unused, unused}},
1636 {"function f() { if (false) { return 1; } else { return -1; } } f();", 1625 {"function f() { if (false) { return 1; } else { return -1; } } f();",
1637 0, 1626 0,
1638 1, 1627 1,
1639 13, 1628 5,
1640 {B(LdaFalse), // 1629 {B(LdaSmi8), U8(-1), //
1641 B(JumpIfFalse), U8(7), // 1630 B(Return), //
1642 B(LdaSmi8), U8(1), // 1631 B(LdaUndefined), // TODO(mythria) redundant return statement
1643 B(Return), // 1632 B(Return)}, // could be eliminated.
1644 B(Jump), U8(5), // 1633 0,
1645 B(LdaSmi8), U8(-1), // 1634 {unused, unused, unused, unused, unused, unused}},
1646 B(Return), // 1635 {"function f() { if (false) { return 1; } } f();",
1647 B(LdaUndefined), // 1636 0,
1648 B(Return)}, // 1637 1,
1638 2,
1639 {B(LdaUndefined), //
1640 B(Return)},
1649 0, 1641 0,
1650 {unused, unused, unused, unused, unused, unused}}, 1642 {unused, unused, unused, unused, unused, unused}},
1651 {"function f(a) { if (a <= 0) { return 200; } else { return -200; } }" 1643 {"function f(a) { if (a <= 0) { return 200; } else { return -200; } }"
1652 "f(99);", 1644 "f(99);",
1653 0, 1645 0,
1654 2, 1646 2,
1655 15, 1647 15,
1656 {B(LdaZero), // 1648 {B(LdaZero), //
1657 B(TestLessThanOrEqual), A(1, 2), // 1649 B(TestLessThanOrEqual), A(1, 2), //
1658 B(JumpIfFalse), U8(7), // 1650 B(JumpIfFalse), U8(7), //
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
1770 IF_CONDITION_RETURN(TestGreaterThan) // 1762 IF_CONDITION_RETURN(TestGreaterThan) //
1771 IF_CONDITION_RETURN(TestLessThanOrEqual) // 1763 IF_CONDITION_RETURN(TestLessThanOrEqual) //
1772 IF_CONDITION_RETURN(TestGreaterThanOrEqual) // 1764 IF_CONDITION_RETURN(TestGreaterThanOrEqual) //
1773 IF_CONDITION_RETURN(TestIn) // 1765 IF_CONDITION_RETURN(TestIn) //
1774 IF_CONDITION_RETURN(TestInstanceOf) // 1766 IF_CONDITION_RETURN(TestInstanceOf) //
1775 B(LdaZero), // 1767 B(LdaZero), //
1776 B(Return)}, // 1768 B(Return)}, //
1777 #undef IF_CONDITION_RETURN 1769 #undef IF_CONDITION_RETURN
1778 0, 1770 0,
1779 {unused, unused, unused, unused, unused, unused}}, 1771 {unused, unused, unused, unused, unused, unused}},
1772 {"function f() {"
1773 " var a = 0;"
1774 " if (a) {"
1775 " return 20;"
1776 "} else {"
1777 " return -20;}"
1778 "};"
1779 "f();",
1780 1 * kPointerSize,
1781 1,
1782 17,
1783 {
1784 B(LdaZero), //
1785 B(Star), R(0), //
1786 B(Ldar), R(0), //
1787 B(JumpIfToBooleanFalse), U8(7), //
1788 B(LdaSmi8), U8(20), //
1789 B(Return), //
1790 B(Jump), U8(5), //
1791 B(LdaSmi8), U8(-20), //
1792 B(Return), //
1793 B(LdaUndefined), //
1794 B(Return)
1795 },
1796 0,
1797 {unused, unused, unused, unused, unused, unused}}
1780 }; 1798 };
1781 1799
1782 for (size_t i = 0; i < arraysize(snippets); i++) { 1800 for (size_t i = 0; i < arraysize(snippets); i++) {
1783 Handle<BytecodeArray> bytecode_array = 1801 Handle<BytecodeArray> bytecode_array =
1784 helper.MakeBytecode(snippets[i].code_snippet, helper.kFunctionName); 1802 helper.MakeBytecode(snippets[i].code_snippet, helper.kFunctionName);
1785 CheckBytecodeArrayEqual(snippets[i], bytecode_array); 1803 CheckBytecodeArrayEqual(snippets[i], bytecode_array);
1786 } 1804 }
1787 } 1805 }
1788 1806
1789 1807
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
1945 " if (i < 0) continue;" 1963 " if (i < 0) continue;"
1946 " if (i == 3) break;" 1964 " if (i == 3) break;"
1947 " if (i == 4) break;" 1965 " if (i == 4) break;"
1948 " if (i == 10) continue;" 1966 " if (i == 10) continue;"
1949 " if (i == 5) break;" 1967 " if (i == 5) break;"
1950 " i = i + 1;" 1968 " i = i + 1;"
1951 "}" 1969 "}"
1952 "return i;", 1970 "return i;",
1953 1 * kPointerSize, 1971 1 * kPointerSize,
1954 1, 1972 1,
1955 56, 1973 53,
1956 { 1974 {
1957 B(LdaZero), // 1975 B(LdaZero), //
1958 B(Star), R(0), // 1976 B(Star), R(0), //
1959 B(Jump), U8(47), // 1977 B(LdaZero), //
1960 B(LdaZero), // 1978 B(TestLessThan), R(0), //
1961 B(TestLessThan), R(0), // 1979 B(JumpIfFalse), U8(4), //
1962 B(JumpIfFalse), U8(4), // 1980 B(Jump), U8(40), //
1963 B(Jump), U8(40), // 1981 B(LdaSmi8), U8(3), //
1964 B(LdaSmi8), U8(3), // 1982 B(TestEqual), R(0), //
1965 B(TestEqual), R(0), // 1983 B(JumpIfFalse), U8(4), //
1966 B(JumpIfFalse), U8(4), // 1984 B(Jump), U8(34), //
1967 B(Jump), U8(35), // 1985 B(LdaSmi8), U8(4), //
1968 B(LdaSmi8), U8(4), // 1986 B(TestEqual), R(0), //
1969 B(TestEqual), R(0), // 1987 B(JumpIfFalse), U8(4), //
1970 B(JumpIfFalse), U8(4), // 1988 B(Jump), U8(26), //
1971 B(Jump), U8(27), // 1989 B(LdaSmi8), U8(10), //
1972 B(LdaSmi8), U8(10), // 1990 B(TestEqual), R(0), //
1973 B(TestEqual), R(0), // 1991 B(JumpIfFalse), U8(4), //
1974 B(JumpIfFalse), U8(4), // 1992 B(Jump), U8(16), //
1975 B(Jump), U8(16), // 1993 B(LdaSmi8), U8(5), //
1976 B(LdaSmi8), U8(5), // 1994 B(TestEqual), R(0), //
1977 B(TestEqual), R(0), // 1995 B(JumpIfFalse), U8(4), //
1978 B(JumpIfFalse), U8(4), // 1996 B(Jump), U8(10), //
1979 B(Jump), U8(11), // 1997 B(LdaSmi8), U8(1), //
1980 B(LdaSmi8), U8(1), // 1998 B(Add), R(0), //
1981 B(Add), R(0), // 1999 B(Star), R(0), //
1982 B(Star), R(0), // 2000 B(Jump), U8(-45), //
1983 B(LdaTrue), // 2001 B(Ldar), R(0), //
1984 B(JumpIfTrue), U8(-46), // 2002 B(Return), //
1985 B(Ldar), R(0), //
1986 B(Return), //
1987 }, 2003 },
1988 0}, 2004 0},
1989 {"var x = 0; var y = 1;" 2005 {"var x = 0; var y = 1;"
1990 "do {" 2006 "do {"
1991 " y = y * 10;" 2007 " y = y * 10;"
1992 " if (x == 5) break;" 2008 " if (x == 5) break;"
1993 " if (x == 6) continue;" 2009 " if (x == 6) continue;"
1994 " x = x + 1;" 2010 " x = x + 1;"
1995 "} while (x < 10);" 2011 "} while (x < 10);"
1996 "return y;", 2012 "return y;",
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
2079 " while (i < 3) {" 2095 " while (i < 3) {"
2080 " if (i == 2) break;" 2096 " if (i == 2) break;"
2081 " i = i + 1;" 2097 " i = i + 1;"
2082 " }" 2098 " }"
2083 " i = i + 1;" 2099 " i = i + 1;"
2084 " break;" 2100 " break;"
2085 "}" 2101 "}"
2086 "return i;", 2102 "return i;",
2087 1 * kPointerSize, 2103 1 * kPointerSize,
2088 1, 2104 1,
2089 41, 2105 38,
2090 { 2106 {
2091 B(LdaZero), // 2107 B(LdaZero), //
2092 B(Star), R(0), // 2108 B(Star), R(0), //
2093 B(Jump), U8(32), //
2094 B(Jump), U8(16), // 2109 B(Jump), U8(16), //
2095 B(LdaSmi8), U8(2), // 2110 B(LdaSmi8), U8(2), //
2096 B(TestEqual), R(0), // 2111 B(TestEqual), R(0), //
2097 B(JumpIfFalse), U8(4), // 2112 B(JumpIfFalse), U8(4), //
2098 B(Jump), U8(14), // 2113 B(Jump), U8(14), //
2099 B(LdaSmi8), U8(1), // 2114 B(LdaSmi8), U8(1), //
2100 B(Add), R(0), // 2115 B(Add), R(0), //
2101 B(Star), R(0), // 2116 B(Star), R(0), //
2102 B(LdaSmi8), U8(3), // 2117 B(LdaSmi8), U8(3), //
2103 B(TestLessThan), R(0), // 2118 B(TestLessThan), R(0), //
2104 B(JumpIfTrue), U8(-18), // 2119 B(JumpIfTrue), U8(-18), //
2105 B(LdaSmi8), U8(1), // 2120 B(LdaSmi8), U8(1), //
2106 B(Add), R(0), // 2121 B(Add), R(0), //
2107 B(Star), R(0), // 2122 B(Star), R(0), //
2108 B(Jump), U8(5), // 2123 B(Jump), U8(4), //
2109 B(LdaTrue), // 2124 B(Jump), U8(-30), //
2110 B(JumpIfTrue), U8(-31), //
2111 B(Ldar), R(0), // 2125 B(Ldar), R(0), //
2112 B(Return), // 2126 B(Return), //
2113 }, 2127 },
2114 0}, 2128 0},
2115 {"var x = 10;" 2129 {"var x = 10;"
2116 "var y = 1;" 2130 "var y = 1;"
2117 "while (x) {" 2131 "while (x) {"
2118 " y = y * 12;" 2132 " y = y * 12;"
2119 " x = x - 1;" 2133 " x = x - 1;"
2120 "}" 2134 "}"
(...skipping 11 matching lines...) Expand all
2132 B(Mul), R(1), // 2146 B(Mul), R(1), //
2133 B(Star), R(1), // 2147 B(Star), R(1), //
2134 B(LdaSmi8), U8(1), // 2148 B(LdaSmi8), U8(1), //
2135 B(Sub), R(0), // 2149 B(Sub), R(0), //
2136 B(Star), R(0), // 2150 B(Star), R(0), //
2137 B(Ldar), R(0), // 2151 B(Ldar), R(0), //
2138 B(JumpIfToBooleanTrue), U8(-14), // 2152 B(JumpIfToBooleanTrue), U8(-14), //
2139 B(Ldar), R(1), // 2153 B(Ldar), R(1), //
2140 B(Return), // 2154 B(Return), //
2141 }, 2155 },
2142 0}, 2156 0},
2143 {"var x = 10;" 2157 {"var x = 10;"
2144 "var y = 1;" 2158 "var y = 1;"
2145 "do {" 2159 "do {"
2146 " y = y * 12;" 2160 " y = y * 12;"
2147 " x = x - 1;" 2161 " x = x - 1;"
2148 "} while(x);" 2162 "} while(x);"
2149 "return y;", 2163 "return y;",
2150 2 * kPointerSize, 2164 2 * kPointerSize,
2151 1, 2165 1,
2152 27, 2166 27,
2153 { 2167 {
2154 B(LdaSmi8), U8(10), // 2168 B(LdaSmi8), U8(10), //
2155 B(Star), R(0), // 2169 B(Star), R(0), //
2156 B(LdaSmi8), U8(1), // 2170 B(LdaSmi8), U8(1), //
2157 B(Star), R(1), // 2171 B(Star), R(1), //
2158 B(LdaSmi8), U8(12), // 2172 B(LdaSmi8), U8(12), //
2159 B(Mul), R(1), // 2173 B(Mul), R(1), //
2160 B(Star), R(1), // 2174 B(Star), R(1), //
2161 B(LdaSmi8), U8(1), // 2175 B(LdaSmi8), U8(1), //
2162 B(Sub), R(0), // 2176 B(Sub), R(0), //
2163 B(Star), R(0), // 2177 B(Star), R(0), //
2164 B(Ldar), R(0), // 2178 B(Ldar), R(0), //
2165 B(JumpIfToBooleanTrue), U8(-14), // 2179 B(JumpIfToBooleanTrue), U8(-14), //
2166 B(Ldar), R(1), // 2180 B(Ldar), R(1), //
2167 B(Return), // 2181 B(Return), //
2168 }, 2182 },
2169 0}, 2183 0},
2170 {"var y = 1;" 2184 {"var y = 1;"
2171 "for (var x = 10; x; --x) {" 2185 "for (var x = 10; x; --x) {"
2172 " y = y * 12;" 2186 " y = y * 12;"
2173 "}" 2187 "}"
2174 "return y;", 2188 "return y;",
2175 2 * kPointerSize, 2189 2 * kPointerSize,
2176 1, 2190 1,
2177 29, 2191 29,
2178 { 2192 {
2179 B(LdaSmi8), U8(1), // 2193 B(LdaSmi8), U8(1), //
2180 B(Star), R(0), // 2194 B(Star), R(0), //
2181 B(LdaSmi8), U8(10), // 2195 B(LdaSmi8), U8(10), //
2182 B(Star), R(1), // 2196 B(Star), R(1), //
2183 B(Jump), U8(14), // 2197 B(Jump), U8(14), //
2184 B(LdaSmi8), U8(12), // 2198 B(LdaSmi8), U8(12), //
2185 B(Mul), R(0), // 2199 B(Mul), R(0), //
2186 B(Star), R(0), // 2200 B(Star), R(0), //
2187 B(Ldar), R(1), // 2201 B(Ldar), R(1), //
2188 B(ToNumber), // 2202 B(ToNumber), //
2189 B(Dec), // 2203 B(Dec), //
2190 B(Star), R(1), // 2204 B(Star), R(1), //
2191 B(Ldar), R(1), // 2205 B(Ldar), R(1), //
2192 B(JumpIfToBooleanTrue), U8(-14), // 2206 B(JumpIfToBooleanTrue), U8(-14), //
2193 B(Ldar), R(0), // 2207 B(Ldar), R(0), //
2194 B(Return), // 2208 B(Return), //
2195 }, 2209 },
2196 0}}; 2210 0},
2211 {"var x = 0; var y = 1;"
2212 "do {"
2213 " y = y * 10;"
2214 " if (x == 5) break;"
2215 " x = x + 1;"
2216 " if (x == 6) continue;"
2217 "} while (false);"
2218 "return y;",
2219 2 * kPointerSize,
2220 1,
2221 38,
2222 {
2223 B(LdaZero), //
2224 B(Star), R(0), //
2225 B(LdaSmi8), U8(1), //
2226 B(Star), R(1), //
2227 B(LdaSmi8), U8(10), //
2228 B(Mul), R(1), //
2229 B(Star), R(1), //
2230 B(LdaSmi8), U8(5), //
2231 B(TestEqual), R(0), //
2232 B(JumpIfFalse), U8(4), //
2233 B(Jump), U8(16), //
2234 B(LdaSmi8), U8(1), //
2235 B(Add), R(0), //
2236 B(Star), R(0), //
2237 B(LdaSmi8), U8(6), //
2238 B(TestEqual), R(0), //
2239 B(JumpIfFalse), U8(4), //
2240 B(Jump), U8(2), //
2241 B(Ldar), R(1), //
2242 B(Return), //
2243 },
2244 0},
2245 {"var x = 0; var y = 1;"
2246 "do {"
2247 " y = y * 10;"
2248 " if (x == 5) break;"
2249 " x = x + 1;"
2250 " if (x == 6) continue;"
2251 "} while (true);"
2252 "return y;",
2253 2 * kPointerSize,
2254 1,
2255 40,
2256 {
2257 B(LdaZero), //
2258 B(Star), R(0), //
2259 B(LdaSmi8), U8(1), //
2260 B(Star), R(1), //
2261 B(LdaSmi8), U8(10), //
2262 B(Mul), R(1), //
2263 B(Star), R(1), //
2264 B(LdaSmi8), U8(5), //
2265 B(TestEqual), R(0), //
2266 B(JumpIfFalse), U8(4), //
2267 B(Jump), U8(18), //
2268 B(LdaSmi8), U8(1), //
2269 B(Add), R(0), //
2270 B(Star), R(0), //
2271 B(LdaSmi8), U8(6), //
2272 B(TestEqual), R(0), //
2273 B(JumpIfFalse), U8(4), //
2274 B(Jump), U8(2), //
2275 B(Jump), U8(-28), //
2276 B(Ldar), R(1), //
2277 B(Return), //
2278 },
2279 0},
2280 {"var x = 0;"
2281 "while(false) {"
2282 " x = x + 1;"
2283 "};"
2284 "return x;",
2285 1 * kPointerSize,
2286 1,
2287 6,
2288 {
2289 B(LdaZero), //
2290 B(Star), R(0), //
2291 B(Ldar), R(0), //
2292 B(Return), //
2293 },
2294 0},
2295 {"var x = 0;"
2296 "for( var i = 0; false; i++) {"
2297 " x = x + 1;"
2298 "};"
2299 "return x;",
2300 2 * kPointerSize,
2301 1,
2302 9,
2303 {
2304 B(LdaZero), //
2305 B(Star), R(0), //
2306 B(LdaZero), //
2307 B(Star), R(1), //
2308 B(Ldar), R(0), //
2309 B(Return), //
2310 },
2311 0},
2312 {"var x = 0;"
2313 "for( var i = 0; true; ++i) {"
2314 " x = x + 1;"
2315 " if (x == 20) break;"
2316 "};"
2317 "return x;",
2318 2 * kPointerSize,
2319 1,
2320 31,
2321 {
2322 B(LdaZero), //
2323 B(Star), R(0), //
2324 B(LdaZero), //
2325 B(Star), R(1), //
2326 B(LdaSmi8), U8(1), //
2327 B(Add), R(0), //
2328 B(Star), R(0), //
2329 B(LdaSmi8), U8(20), //
2330 B(TestEqual), R(0), //
2331 B(JumpIfFalse), U8(4), //
2332 B(Jump), U8(10), //
2333 B(Ldar), R(1), //
2334 B(ToNumber), //
2335 B(Inc), //
2336 B(Star), R(1), //
2337 B(Jump), U8(-20), //
2338 B(Ldar), R(0), //
2339 B(Return), //
2340 },
2341 0},
2342 };
2197 2343
2198 for (size_t i = 0; i < arraysize(snippets); i++) { 2344 for (size_t i = 0; i < arraysize(snippets); i++) {
2199 Handle<BytecodeArray> bytecode_array = 2345 Handle<BytecodeArray> bytecode_array =
2200 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); 2346 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet);
2201 CheckBytecodeArrayEqual(snippets[i], bytecode_array); 2347 CheckBytecodeArrayEqual(snippets[i], bytecode_array);
2202 } 2348 }
2203 } 2349 }
2204 2350
2205 2351
2206 TEST(UnaryOperators) { 2352 TEST(UnaryOperators) {
(...skipping 1080 matching lines...) Expand 10 before | Expand all | Expand 10 after
3287 3, 3433 3,
3288 { 3434 {
3289 B(LdaConstant), U8(0), // 3435 B(LdaConstant), U8(0), //
3290 B(Throw), // 3436 B(Throw), //
3291 }, 3437 },
3292 1, 3438 1,
3293 {"Error"}}, 3439 {"Error"}},
3294 {"if ('test') { throw 'Error'; };", 3440 {"if ('test') { throw 'Error'; };",
3295 0, 3441 0,
3296 1, 3442 1,
3297 9, 3443 5,
3298 { 3444 {
3299 B(LdaConstant), U8(0), // 3445 B(LdaConstant), U8(0), //
3300 B(JumpIfToBooleanFalse), U8(5), // 3446 B(Throw), //
3301 B(LdaConstant), U8(1), // 3447 B(LdaUndefined), //
3302 B(Throw), // 3448 B(Return), //
3303 B(LdaUndefined), //
3304 B(Return), //
3305 }, 3449 },
3306 2, 3450 1,
3307 {"test", "Error"}}, 3451 {"Error"}},
3308 }; 3452 };
3309 3453
3310 for (size_t i = 0; i < arraysize(snippets); i++) { 3454 for (size_t i = 0; i < arraysize(snippets); i++) {
3311 Handle<BytecodeArray> bytecode_array = 3455 Handle<BytecodeArray> bytecode_array =
3312 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); 3456 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet);
3313 CheckBytecodeArrayEqual(snippets[i], bytecode_array); 3457 CheckBytecodeArrayEqual(snippets[i], bytecode_array);
3314 } 3458 }
3315 } 3459 }
3316 3460
3317 3461
(...skipping 1465 matching lines...) Expand 10 before | Expand all | Expand 10 after
4783 for (size_t i = 0; i < arraysize(snippets); i++) { 4927 for (size_t i = 0; i < arraysize(snippets); i++) {
4784 Handle<BytecodeArray> bytecode_array = 4928 Handle<BytecodeArray> bytecode_array =
4785 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); 4929 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet);
4786 CheckBytecodeArrayEqual(snippets[i], bytecode_array); 4930 CheckBytecodeArrayEqual(snippets[i], bytecode_array);
4787 } 4931 }
4788 } 4932 }
4789 4933
4790 } // namespace interpreter 4934 } // namespace interpreter
4791 } // namespace internal 4935 } // namespace internal
4792 } // namespace v8 4936 } // namespace v8
OLDNEW
« no previous file with comments | « src/interpreter/bytecode-generator.cc ('k') | test/cctest/interpreter/test-interpreter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698