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

Side by Side Diff: test/cctest/interpreter/test-interpreter.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/interpreter/test-bytecode-generator.cc ('k') | test/mjsunit/mjsunit.status » ('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/execution.h" 7 #include "src/execution.h"
8 #include "src/handles.h" 8 #include "src/handles.h"
9 #include "src/interpreter/bytecode-array-builder.h" 9 #include "src/interpreter/bytecode-array-builder.h"
10 #include "src/interpreter/interpreter.h" 10 #include "src/interpreter/interpreter.h"
(...skipping 2003 matching lines...) Expand 10 before | Expand all | Expand 10 after
2014 auto callable = tester.GetCallable<>(); 2014 auto callable = tester.GetCallable<>();
2015 2015
2016 Handle<i::Object> return_value = callable().ToHandleChecked(); 2016 Handle<i::Object> return_value = callable().ToHandleChecked();
2017 CHECK(return_value->SameValue(*literals[i].second)); 2017 CHECK(return_value->SameValue(*literals[i].second));
2018 } 2018 }
2019 } 2019 }
2020 2020
2021 2021
2022 TEST(InterpreterTryCatch) { 2022 TEST(InterpreterTryCatch) {
2023 HandleAndZoneScope handles; 2023 HandleAndZoneScope handles;
2024 i::Isolate* isolate = handles.main_isolate();
2024 2025
2025 // TODO(rmcilroy): modify tests when we have real try catch support. 2026 std::pair<const char*, Handle<Object>> catches[] = {
2026 std::string source(InterpreterTester::SourceForBody( 2027 std::make_pair("var a = 1; try { a = 2 } catch(e) { a = 3 }; return a;",
2027 "var a = 1; try { a = a + 1; } catch(e) { a = a + 2; }; return a;")); 2028 handle(Smi::FromInt(2), isolate)),
2028 InterpreterTester tester(handles.main_isolate(), source.c_str()); 2029 std::make_pair("var a; try { undef.x } catch(e) { a = 2 }; return a;",
2029 auto callable = tester.GetCallable<>(); 2030 handle(Smi::FromInt(2), isolate)),
2031 std::make_pair("var a; try { throw 1 } catch(e) { a = e + 2 }; return a;",
2032 handle(Smi::FromInt(3), isolate)),
2033 };
2030 2034
2031 Handle<Object> return_val = callable().ToHandleChecked(); 2035 for (size_t i = 0; i < arraysize(catches); i++) {
2032 CHECK_EQ(Smi::cast(*return_val), Smi::FromInt(2)); 2036 std::string source(InterpreterTester::SourceForBody(catches[i].first));
2037 InterpreterTester tester(handles.main_isolate(), source.c_str());
2038 auto callable = tester.GetCallable<>();
2039
2040 Handle<i::Object> return_value = callable().ToHandleChecked();
2041 CHECK(return_value->SameValue(*catches[i].second));
2042 }
2033 } 2043 }
2034 2044
2035 2045
2036 TEST(InterpreterTryFinally) { 2046 TEST(InterpreterTryFinally) {
2037 HandleAndZoneScope handles; 2047 HandleAndZoneScope handles;
2038 2048
2039 // TODO(rmcilroy): modify tests when we have real try finally support. 2049 // TODO(rmcilroy): modify tests when we have real try finally support.
2040 std::string source(InterpreterTester::SourceForBody( 2050 std::string source(InterpreterTester::SourceForBody(
2041 "var a = 1; try { a = a + 1; } finally { a = a + 2; }; return a;")); 2051 "var a = 1; try { a = a + 1; } finally { a = a + 2; }; return a;"));
2042 InterpreterTester tester(handles.main_isolate(), source.c_str()); 2052 InterpreterTester tester(handles.main_isolate(), source.c_str());
2043 auto callable = tester.GetCallable<>(); 2053 auto callable = tester.GetCallable<>();
2044 2054
2045 Handle<Object> return_val = callable().ToHandleChecked(); 2055 Handle<Object> return_val = callable().ToHandleChecked();
2046 CHECK_EQ(Smi::cast(*return_val), Smi::FromInt(4)); 2056 CHECK_EQ(Smi::cast(*return_val), Smi::FromInt(4));
2047 } 2057 }
2048 2058
2049 2059
2050 TEST(InterpreterThrow) { 2060 TEST(InterpreterThrow) {
2051 HandleAndZoneScope handles; 2061 HandleAndZoneScope handles;
2052 i::Isolate* isolate = handles.main_isolate(); 2062 i::Isolate* isolate = handles.main_isolate();
2053 i::Factory* factory = isolate->factory(); 2063 i::Factory* factory = isolate->factory();
2054 2064
2055 // TODO(rmcilroy): modify tests when we have real try catch support.
2056 std::pair<const char*, Handle<Object>> throws[] = { 2065 std::pair<const char*, Handle<Object>> throws[] = {
2057 std::make_pair("throw undefined;\n", 2066 std::make_pair("throw undefined;\n",
2058 factory->undefined_value()), 2067 factory->undefined_value()),
2059 std::make_pair("throw 1;\n", 2068 std::make_pair("throw 1;\n",
2060 handle(Smi::FromInt(1), isolate)), 2069 handle(Smi::FromInt(1), isolate)),
2061 std::make_pair("throw 'Error';\n", 2070 std::make_pair("throw 'Error';\n",
2062 factory->NewStringFromStaticChars("Error")), 2071 factory->NewStringFromStaticChars("Error")),
2063 std::make_pair("var a = true; if (a) { throw 'Error'; }\n", 2072 std::make_pair("var a = true; if (a) { throw 'Error'; }\n",
2064 factory->NewStringFromStaticChars("Error")), 2073 factory->NewStringFromStaticChars("Error")),
2065 std::make_pair("var a = false; if (a) { throw 'Error'; }\n", 2074 std::make_pair("var a = false; if (a) { throw 'Error'; }\n",
(...skipping 1455 matching lines...) Expand 10 before | Expand all | Expand 10 after
3521 auto callable = tester.GetCallable<>(); 3530 auto callable = tester.GetCallable<>();
3522 3531
3523 Handle<i::Object> return_value = callable().ToHandleChecked(); 3532 Handle<i::Object> return_value = callable().ToHandleChecked();
3524 CHECK(return_value->SameValue(*eval_func_decl[i].second)); 3533 CHECK(return_value->SameValue(*eval_func_decl[i].second));
3525 } 3534 }
3526 } 3535 }
3527 3536
3528 } // namespace interpreter 3537 } // namespace interpreter
3529 } // namespace internal 3538 } // namespace internal
3530 } // namespace v8 3539 } // namespace v8
OLDNEW
« no previous file with comments | « test/cctest/interpreter/test-bytecode-generator.cc ('k') | test/mjsunit/mjsunit.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698