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

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

Issue 1605633003: [interpreter] First implementation of stack unwinding. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@local_int-5
Patch Set: Rebase and skip one more test. 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 | « test/cctest/cctest.status ('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 #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 4149 matching lines...) Expand 10 before | Expand all | Expand 10 after
4160 CheckBytecodeArrayEqual(snippets[i], bytecode_array); 4160 CheckBytecodeArrayEqual(snippets[i], bytecode_array);
4161 } 4161 }
4162 } 4162 }
4163 4163
4164 4164
4165 TEST(TryCatch) { 4165 TEST(TryCatch) {
4166 InitializedHandleScope handle_scope; 4166 InitializedHandleScope handle_scope;
4167 BytecodeGeneratorHelper helper; 4167 BytecodeGeneratorHelper helper;
4168 4168
4169 int closure = Register::function_closure().index(); 4169 int closure = Register::function_closure().index();
4170 int context = Register::function_context().index();
4170 4171
4171 ExpectedSnippet<const char*> snippets[] = { 4172 ExpectedSnippet<const char*> snippets[] = {
4172 {"try { return 1; } catch(e) { return 2; }", 4173 {"try { return 1; } catch(e) { return 2; }",
4173 5 * kPointerSize, 4174 5 * kPointerSize,
4174 1, 4175 1,
4175 23, 4176 25,
4176 { 4177 {
4177 B(LdaSmi8), U8(1), // 4178 B(LdaSmi8), U8(1), //
4178 B(Return), // 4179 B(Return), //
4179 B(Star), R(3), // 4180 B(Star), R(3), //
4180 B(LdaConstant), U8(0), // 4181 B(LdaConstant), U8(0), //
4181 B(Star), R(2), // 4182 B(Star), R(2), //
4182 B(Ldar), R(closure), // 4183 B(Ldar), R(closure), //
4183 B(Star), R(4), // 4184 B(Star), R(4), //
4184 B(CallRuntime), U16(Runtime::kPushCatchContext), R(2), U8(3), // 4185 B(CallRuntime), U16(Runtime::kPushCatchContext), R(2), U8(3), //
4186 B(PushContext), R(0), //
4185 B(LdaSmi8), U8(2), // 4187 B(LdaSmi8), U8(2), //
4186 B(Return), // 4188 B(Return), //
4187 // TODO(mstarzinger): Potential optimization, elide next bytes. 4189 // TODO(mstarzinger): Potential optimization, elide next bytes.
4188 B(LdaUndefined), // 4190 B(LdaUndefined), //
4189 B(Return), // 4191 B(Return), //
4190 }, 4192 },
4191 1, 4193 1,
4192 {"e"}, 4194 {"e"},
4193 1, 4195 1,
4194 {{0, 3, 3}}}, 4196 {{0, 3, 3}}},
4195 {"var a; try { a = 1 } catch(e1) {}; try { a = 2 } catch(e2) { a = 3 }", 4197 {"var a; try { a = 1 } catch(e1) {}; try { a = 2 } catch(e2) { a = 3 }",
4196 6 * kPointerSize, 4198 6 * kPointerSize,
4197 1, 4199 1,
4198 48, 4200 56,
4199 { 4201 {
4200 B(LdaSmi8), U8(1), // 4202 B(LdaSmi8), U8(1), //
4201 B(Star), R(0), // 4203 B(Star), R(0), //
4202 B(Jump), U8(17), // 4204 B(Jump), U8(21), //
4203 B(Star), R(4), // 4205 B(Star), R(4), //
4204 B(LdaConstant), U8(0), // 4206 B(LdaConstant), U8(0), //
4205 B(Star), R(3), // 4207 B(Star), R(3), //
4206 B(Ldar), R(closure), // 4208 B(Ldar), R(closure), //
4207 B(Star), R(5), // 4209 B(Star), R(5), //
4208 B(CallRuntime), U16(Runtime::kPushCatchContext), R(3), U8(3), // 4210 B(CallRuntime), U16(Runtime::kPushCatchContext), R(3), U8(3), //
4211 B(PushContext), R(1), //
4212 B(PopContext), R(context), //
4209 B(LdaSmi8), U8(2), // 4213 B(LdaSmi8), U8(2), //
4210 B(Star), R(0), // 4214 B(Star), R(0), //
4211 B(Jump), U8(21), // 4215 B(Jump), U8(25), //
4212 B(Star), R(4), // 4216 B(Star), R(4), //
4213 B(LdaConstant), U8(1), // 4217 B(LdaConstant), U8(1), //
4214 B(Star), R(3), // 4218 B(Star), R(3), //
4215 B(Ldar), R(closure), // 4219 B(Ldar), R(closure), //
4216 B(Star), R(5), // 4220 B(Star), R(5), //
4217 B(CallRuntime), U16(Runtime::kPushCatchContext), R(3), U8(3), // 4221 B(CallRuntime), U16(Runtime::kPushCatchContext), R(3), U8(3), //
4222 B(PushContext), R(1), //
4218 B(LdaSmi8), U8(3), // 4223 B(LdaSmi8), U8(3), //
4219 B(Star), R(0), // 4224 B(Star), R(0), //
4225 B(PopContext), R(context), //
4220 B(LdaUndefined), // 4226 B(LdaUndefined), //
4221 B(Return), // 4227 B(Return), //
4222 }, 4228 },
4223 2, 4229 2,
4224 {"e1", "e2"}, 4230 {"e1", "e2"},
4225 2, 4231 2,
4226 {{0, 4, 6}, {21, 25, 27}}}, 4232 {{0, 4, 6}, {25, 29, 31}}},
4227 }; 4233 };
4228 4234
4229 for (size_t i = 0; i < arraysize(snippets); i++) { 4235 for (size_t i = 0; i < arraysize(snippets); i++) {
4230 Handle<BytecodeArray> bytecode_array = 4236 Handle<BytecodeArray> bytecode_array =
4231 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); 4237 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet);
4232 CheckBytecodeArrayEqual(snippets[i], bytecode_array); 4238 CheckBytecodeArrayEqual(snippets[i], bytecode_array);
4233 } 4239 }
4234 } 4240 }
4235 4241
4236 4242
4237 TEST(TryFinally) { 4243 TEST(TryFinally) {
4238 InitializedHandleScope handle_scope; 4244 InitializedHandleScope handle_scope;
4239 BytecodeGeneratorHelper helper; 4245 BytecodeGeneratorHelper helper;
4240 4246
4241 int closure = Register::function_closure().index(); 4247 int closure = Register::function_closure().index();
4248 int context = Register::function_context().index();
4242 4249
4243 ExpectedSnippet<const char*> snippets[] = { 4250 ExpectedSnippet<const char*> snippets[] = {
4244 {"var a = 1; try { a = 2; } finally { a = 3; }", 4251 {"var a = 1; try { a = 2; } finally { a = 3; }",
4245 2 * kPointerSize, 4252 2 * kPointerSize,
4246 1, 4253 1,
4247 14, 4254 14,
4248 { 4255 {
4249 B(LdaSmi8), U8(1), // 4256 B(LdaSmi8), U8(1), //
4250 B(Star), R(0), // 4257 B(Star), R(0), //
4251 B(LdaSmi8), U8(2), // 4258 B(LdaSmi8), U8(2), //
4252 B(Star), R(0), // 4259 B(Star), R(0), //
4253 B(LdaSmi8), U8(3), // 4260 B(LdaSmi8), U8(3), //
4254 B(Star), R(0), // 4261 B(Star), R(0), //
4255 B(LdaUndefined), // 4262 B(LdaUndefined), //
4256 B(Return), // 4263 B(Return), //
4257 }, 4264 },
4258 0, 4265 0,
4259 {}, 4266 {},
4260 1, 4267 1,
4261 {{4, 8, 8}}}, 4268 {{4, 8, 8}}},
4262 {"var a = 1; try { a = 2; } catch(e) { a = 20 } finally { a = 3; }", 4269 {"var a = 1; try { a = 2; } catch(e) { a = 20 } finally { a = 3; }",
4263 7 * kPointerSize, 4270 7 * kPointerSize,
4264 1, 4271 1,
4265 35, 4272 39,
4266 { 4273 {
4267 B(LdaSmi8), U8(1), // 4274 B(LdaSmi8), U8(1), //
4268 B(Star), R(0), // 4275 B(Star), R(0), //
4269 B(LdaSmi8), U8(2), // 4276 B(LdaSmi8), U8(2), //
4270 B(Star), R(0), // 4277 B(Star), R(0), //
4271 B(Jump), U8(21), // 4278 B(Jump), U8(25), //
4272 B(Star), R(5), // 4279 B(Star), R(5), //
4273 B(LdaConstant), U8(0), // 4280 B(LdaConstant), U8(0), //
4274 B(Star), R(4), // 4281 B(Star), R(4), //
4275 B(Ldar), R(closure), // 4282 B(Ldar), R(closure), //
4276 B(Star), R(6), // 4283 B(Star), R(6), //
4277 B(CallRuntime), U16(Runtime::kPushCatchContext), R(4), U8(3), // 4284 B(CallRuntime), U16(Runtime::kPushCatchContext), R(4), U8(3), //
4285 B(PushContext), R(1), //
4278 B(LdaSmi8), U8(20), // 4286 B(LdaSmi8), U8(20), //
4279 B(Star), R(0), // 4287 B(Star), R(0), //
4288 B(PopContext), R(context), //
4280 B(LdaSmi8), U8(3), // 4289 B(LdaSmi8), U8(3), //
4281 B(Star), R(0), // 4290 B(Star), R(0), //
4282 B(LdaUndefined), // 4291 B(LdaUndefined), //
4283 B(Return), // 4292 B(Return), //
4284 }, 4293 },
4285 1, 4294 1,
4286 {"e"}, 4295 {"e"},
4287 2, 4296 2,
4288 {{4, 29, 29}, {4, 8, 10}}}, 4297 {{4, 33, 33}, {4, 8, 10}}},
4289 {"var a; try {" 4298 {"var a; try {"
4290 " try { a = 1 } catch(e) { a = 2 }" 4299 " try { a = 1 } catch(e) { a = 2 }"
4291 "} catch(e) { a = 20 } finally { a = 3; }", 4300 "} catch(e) { a = 20 } finally { a = 3; }",
4292 8 * kPointerSize, 4301 8 * kPointerSize,
4293 1, 4302 1,
4294 52, 4303 60,
4295 { 4304 {
4296 B(LdaSmi8), U8(1), // 4305 B(LdaSmi8), U8(1), //
4297 B(Star), R(0), // 4306 B(Star), R(0), //
4298 B(Jump), U8(21), // 4307 B(Jump), U8(25), //
4299 B(Star), R(6), // 4308 B(Star), R(6), //
4300 B(LdaConstant), U8(0), // 4309 B(LdaConstant), U8(0), //
4301 B(Star), R(5), // 4310 B(Star), R(5), //
4302 B(Ldar), R(closure), // 4311 B(Ldar), R(closure), //
4303 B(Star), R(7), // 4312 B(Star), R(7), //
4304 B(CallRuntime), U16(Runtime::kPushCatchContext), R(5), U8(3), // 4313 B(CallRuntime), U16(Runtime::kPushCatchContext), R(5), U8(3), //
4314 B(PushContext), R(1), //
4305 B(LdaSmi8), U8(2), // 4315 B(LdaSmi8), U8(2), //
4306 B(Star), R(0), // 4316 B(Star), R(0), //
4307 B(Jump), U8(21), // 4317 B(PopContext), R(context), //
4318 B(Jump), U8(25), //
4308 B(Star), R(5), // 4319 B(Star), R(5), //
4309 B(LdaConstant), U8(0), // 4320 B(LdaConstant), U8(0), //
4310 B(Star), R(4), // 4321 B(Star), R(4), //
4311 B(Ldar), R(closure), // 4322 B(Ldar), R(closure), //
4312 B(Star), R(6), // 4323 B(Star), R(6), //
4313 B(CallRuntime), U16(Runtime::kPushCatchContext), R(4), U8(3), // 4324 B(CallRuntime), U16(Runtime::kPushCatchContext), R(4), U8(3), //
4325 B(PushContext), R(1), //
4314 B(LdaSmi8), U8(20), // 4326 B(LdaSmi8), U8(20), //
4315 B(Star), R(0), // 4327 B(Star), R(0), //
4328 B(PopContext), R(context), //
4316 B(LdaSmi8), U8(3), // 4329 B(LdaSmi8), U8(3), //
4317 B(Star), R(0), // 4330 B(Star), R(0), //
4318 B(LdaUndefined), // 4331 B(LdaUndefined), //
4319 B(Return), // 4332 B(Return), //
4320 }, 4333 },
4321 1, 4334 1,
4322 {"e"}, 4335 {"e"},
4323 3, 4336 3,
4324 {{0, 46, 46}, {0, 25, 27}, {0, 4, 6}}}, 4337 {{0, 54, 54}, {0, 29, 31}, {0, 4, 6}}},
4325 }; 4338 };
4326 4339
4327 for (size_t i = 0; i < arraysize(snippets); i++) { 4340 for (size_t i = 0; i < arraysize(snippets); i++) {
4328 Handle<BytecodeArray> bytecode_array = 4341 Handle<BytecodeArray> bytecode_array =
4329 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); 4342 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet);
4330 CheckBytecodeArrayEqual(snippets[i], bytecode_array); 4343 CheckBytecodeArrayEqual(snippets[i], bytecode_array);
4331 } 4344 }
4332 } 4345 }
4333 4346
4334 4347
(...skipping 2548 matching lines...) Expand 10 before | Expand all | Expand 10 after
6883 std::string(function_epilogue); 6896 std::string(function_epilogue);
6884 Handle<BytecodeArray> bytecode_array = 6897 Handle<BytecodeArray> bytecode_array =
6885 helper.MakeBytecode(script.c_str(), "*", "f"); 6898 helper.MakeBytecode(script.c_str(), "*", "f");
6886 CheckBytecodeArrayEqual(snippets[i], bytecode_array); 6899 CheckBytecodeArrayEqual(snippets[i], bytecode_array);
6887 } 6900 }
6888 } 6901 }
6889 6902
6890 } // namespace interpreter 6903 } // namespace interpreter
6891 } // namespace internal 6904 } // namespace internal
6892 } // namespace v8 6905 } // namespace v8
OLDNEW
« no previous file with comments | « test/cctest/cctest.status ('k') | test/cctest/interpreter/test-interpreter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698