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

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

Issue 1601153002: [Interpreter] Ensure that block breaks are within the correct context scope. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 11 months 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') | no next file » | 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 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/compiler.h" 7 #include "src/compiler.h"
8 #include "src/interpreter/bytecode-array-iterator.h" 8 #include "src/interpreter/bytecode-array-iterator.h"
9 #include "src/interpreter/bytecode-generator.h" 9 #include "src/interpreter/bytecode-generator.h"
10 #include "src/interpreter/interpreter.h" 10 #include "src/interpreter/interpreter.h"
(...skipping 2170 matching lines...) Expand 10 before | Expand all | Expand 10 after
2181 helper.MakeTopLevelBytecode(snippets[i].code_snippet); 2181 helper.MakeTopLevelBytecode(snippets[i].code_snippet);
2182 CheckBytecodeArrayEqual(snippets[i], bytecode_array); 2182 CheckBytecodeArrayEqual(snippets[i], bytecode_array);
2183 } 2183 }
2184 } 2184 }
2185 2185
2186 2186
2187 TEST(BreakableBlocks) { 2187 TEST(BreakableBlocks) {
2188 InitializedHandleScope handle_scope; 2188 InitializedHandleScope handle_scope;
2189 BytecodeGeneratorHelper helper; 2189 BytecodeGeneratorHelper helper;
2190 2190
2191 ExpectedSnippet<int> snippets[] = { 2191 int closure = Register::function_closure().index();
2192 int context = Register::function_context().index();
2193
2194 ExpectedSnippet<InstanceType> snippets[] = {
2192 {"var x = 0;\n" 2195 {"var x = 0;\n"
2193 "label: {\n" 2196 "label: {\n"
2194 " x = x + 1;\n" 2197 " x = x + 1;\n"
2195 " break label;\n" 2198 " break label;\n"
2196 " x = x + 1;\n" 2199 " x = x + 1;\n"
2197 "}\n" 2200 "}\n"
2198 "return x;", 2201 "return x;",
2199 2 * kPointerSize, 2202 2 * kPointerSize,
2200 1, 2203 1,
2201 16, 2204 16,
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
2259 B(Star), R(2), // 2262 B(Star), R(2), //
2260 B(Jump), U8(-40), // 2263 B(Jump), U8(-40), //
2261 B(Ldar), R(1), // 2264 B(Ldar), R(1), //
2262 B(ToNumber), // 2265 B(ToNumber), //
2263 B(Inc), // 2266 B(Inc), //
2264 B(Star), R(1), // 2267 B(Star), R(1), //
2265 B(Jump), U8(-61), // 2268 B(Jump), U8(-61), //
2266 B(Ldar), R(0), // 2269 B(Ldar), R(0), //
2267 B(Return), // 2270 B(Return), //
2268 }}, 2271 }},
2272 {"outer: {\n"
2273 " let y = 10;"
2274 " function f() { return y; }\n"
2275 " break outer;\n"
2276 "}\n",
2277 5 * kPointerSize,
2278 1,
2279 39,
2280 {
2281 B(LdaConstant), U8(0), //
2282 B(Star), R(3), //
2283 B(Ldar), R(closure), //
2284 B(Star), R(4), //
2285 B(CallRuntime), U16(Runtime::kPushBlockContext), R(3), U8(2), //
2286 B(PushContext), R(2), //
2287 B(LdaTheHole), //
2288 B(StaContextSlot), R(2), U8(4), //
2289 B(CreateClosure), U8(1), U8(0), //
2290 B(Star), R(0), //
2291 B(LdaSmi8), U8(10), //
2292 B(StaContextSlot), R(2), U8(4), //
2293 B(Ldar), R(0), //
2294 B(Star), R(1), //
2295 B(Jump), U8(2), //
2296 B(PopContext), R(context), //
2297 B(LdaUndefined), //
2298 B(Return), //
2299 },
2300 2,
2301 {InstanceType::FIXED_ARRAY_TYPE,
2302 InstanceType::SHARED_FUNCTION_INFO_TYPE}},
2269 }; 2303 };
2270 2304
2271 for (size_t i = 0; i < arraysize(snippets); i++) { 2305 for (size_t i = 0; i < arraysize(snippets); i++) {
2272 Handle<BytecodeArray> bytecode_array = 2306 Handle<BytecodeArray> bytecode_array =
2273 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); 2307 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet);
2274 CheckBytecodeArrayEqual(snippets[i], bytecode_array); 2308 CheckBytecodeArrayEqual(snippets[i], bytecode_array);
2275 } 2309 }
2276 } 2310 }
2277 2311
2278 2312
(...skipping 4448 matching lines...) Expand 10 before | Expand all | Expand 10 after
6727 std::string(function_epilogue); 6761 std::string(function_epilogue);
6728 Handle<BytecodeArray> bytecode_array = 6762 Handle<BytecodeArray> bytecode_array =
6729 helper.MakeBytecode(script.c_str(), "*", "f"); 6763 helper.MakeBytecode(script.c_str(), "*", "f");
6730 CheckBytecodeArrayEqual(snippets[i], bytecode_array); 6764 CheckBytecodeArrayEqual(snippets[i], bytecode_array);
6731 } 6765 }
6732 } 6766 }
6733 6767
6734 } // namespace interpreter 6768 } // namespace interpreter
6735 } // namespace internal 6769 } // namespace internal
6736 } // namespace v8 6770 } // namespace v8
OLDNEW
« no previous file with comments | « src/interpreter/bytecode-generator.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698