OLD | NEW |
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/execution.h" | 10 #include "src/execution.h" |
(...skipping 1622 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1633 Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(); | 1633 Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(); |
1634 InterpreterTester tester(handles.main_isolate(), bytecode_array); | 1634 InterpreterTester tester(handles.main_isolate(), bytecode_array); |
1635 auto callable = tester.GetCallable<>(); | 1635 auto callable = tester.GetCallable<>(); |
1636 Handle<Object> return_value = callable().ToHandleChecked(); | 1636 Handle<Object> return_value = callable().ToHandleChecked(); |
1637 CHECK(return_value->IsBoolean()); | 1637 CHECK(return_value->IsBoolean()); |
1638 CHECK_EQ(return_value->BooleanValue(), object_type_tuples[i].second); | 1638 CHECK_EQ(return_value->BooleanValue(), object_type_tuples[i].second); |
1639 } | 1639 } |
1640 } | 1640 } |
1641 | 1641 |
1642 | 1642 |
1643 TEST(InterpreterTypeOf) { | 1643 TEST(InterpreterTypeof) { |
1644 HandleAndZoneScope handles; | 1644 HandleAndZoneScope handles; |
1645 i::Factory* factory = handles.main_isolate()->factory(); | |
1646 | 1645 |
1647 std::pair<Handle<Object>, const char*> object_type_tuples[] = { | 1646 std::pair<const char*, const char*> typeof_vals[] = { |
1648 std::make_pair(factory->undefined_value(), "undefined"), | 1647 std::make_pair("return typeof undefined;", "undefined"), |
1649 std::make_pair(factory->null_value(), "object"), | 1648 std::make_pair("return typeof null;", "object"), |
1650 std::make_pair(factory->true_value(), "boolean"), | 1649 std::make_pair("return typeof true;", "boolean"), |
1651 std::make_pair(factory->false_value(), "boolean"), | 1650 std::make_pair("return typeof false;", "boolean"), |
1652 std::make_pair(factory->NewNumber(9.1), "number"), | 1651 std::make_pair("return typeof 9.1;", "number"), |
1653 std::make_pair(factory->NewNumberFromInt(7771), "number"), | 1652 std::make_pair("return typeof 7771;", "number"), |
1654 std::make_pair( | 1653 std::make_pair("return typeof 'hello';", "string"), |
1655 Handle<Object>::cast(factory->NewStringFromStaticChars("hello")), | 1654 std::make_pair("return typeof global_unallocated;", "undefined"), |
1656 "string"), | |
1657 }; | 1655 }; |
1658 | 1656 |
1659 for (size_t i = 0; i < arraysize(object_type_tuples); i++) { | 1657 for (size_t i = 0; i < arraysize(typeof_vals); i++) { |
1660 BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone()); | 1658 std::string source(InterpreterTester::SourceForBody(typeof_vals[i].first)); |
1661 Register r0(0); | 1659 InterpreterTester tester(handles.main_isolate(), source.c_str()); |
1662 builder.set_locals_count(0); | 1660 |
1663 builder.set_context_count(0); | |
1664 builder.set_parameter_count(0); | |
1665 LoadAny(&builder, factory, object_type_tuples[i].first); | |
1666 builder.TypeOf(); | |
1667 builder.Return(); | |
1668 Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(); | |
1669 InterpreterTester tester(handles.main_isolate(), bytecode_array); | |
1670 auto callable = tester.GetCallable<>(); | 1661 auto callable = tester.GetCallable<>(); |
1671 Handle<v8::internal::String> return_value = | 1662 Handle<v8::internal::String> return_value = |
1672 Handle<v8::internal::String>::cast(callable().ToHandleChecked()); | 1663 Handle<v8::internal::String>::cast(callable().ToHandleChecked()); |
1673 auto actual = return_value->ToCString(); | 1664 auto actual = return_value->ToCString(); |
1674 CHECK_EQ(strcmp(&actual[0], object_type_tuples[i].second), 0); | 1665 CHECK_EQ(strcmp(&actual[0], typeof_vals[i].second), 0); |
1675 } | 1666 } |
1676 } | 1667 } |
1677 | 1668 |
1678 | 1669 |
1679 TEST(InterpreterCallRuntime) { | 1670 TEST(InterpreterCallRuntime) { |
1680 HandleAndZoneScope handles; | 1671 HandleAndZoneScope handles; |
1681 | 1672 |
1682 BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone()); | 1673 BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone()); |
1683 builder.set_locals_count(2); | 1674 builder.set_locals_count(2); |
1684 builder.set_context_count(0); | 1675 builder.set_context_count(0); |
(...skipping 1205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2890 auto callable = tester.GetCallable<>(); | 2881 auto callable = tester.GetCallable<>(); |
2891 | 2882 |
2892 Handle<i::Object> return_value = callable().ToHandleChecked(); | 2883 Handle<i::Object> return_value = callable().ToHandleChecked(); |
2893 CHECK(return_value->SameValue(*switch_ops[i].second)); | 2884 CHECK(return_value->SameValue(*switch_ops[i].second)); |
2894 } | 2885 } |
2895 } | 2886 } |
2896 | 2887 |
2897 } // namespace interpreter | 2888 } // namespace interpreter |
2898 } // namespace internal | 2889 } // namespace internal |
2899 } // namespace v8 | 2890 } // namespace v8 |
OLD | NEW |