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 #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 1544 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1555 UNREACHABLE(); | 1555 UNREACHABLE(); |
1556 } | 1556 } |
1557 } else if (obj->IsSmi()) { | 1557 } else if (obj->IsSmi()) { |
1558 builder->LoadLiteral(*Handle<Smi>::cast(obj)); | 1558 builder->LoadLiteral(*Handle<Smi>::cast(obj)); |
1559 } else { | 1559 } else { |
1560 builder->LoadLiteral(obj); | 1560 builder->LoadLiteral(obj); |
1561 } | 1561 } |
1562 } | 1562 } |
1563 | 1563 |
1564 | 1564 |
1565 TEST(InterpreterToBoolean) { | |
1566 HandleAndZoneScope handles; | |
1567 i::Factory* factory = handles.main_isolate()->factory(); | |
1568 | |
1569 std::pair<Handle<Object>, bool> object_type_tuples[] = { | |
1570 std::make_pair(factory->undefined_value(), false), | |
1571 std::make_pair(factory->null_value(), false), | |
1572 std::make_pair(factory->false_value(), false), | |
1573 std::make_pair(factory->true_value(), true), | |
1574 std::make_pair(factory->NewNumber(9.1), true), | |
1575 std::make_pair(factory->NewNumberFromInt(0), false), | |
1576 std::make_pair( | |
1577 Handle<Object>::cast(factory->NewStringFromStaticChars("hello")), | |
1578 true), | |
1579 std::make_pair( | |
1580 Handle<Object>::cast(factory->NewStringFromStaticChars("")), false), | |
1581 }; | |
1582 | |
1583 for (size_t i = 0; i < arraysize(object_type_tuples); i++) { | |
1584 BytecodeArrayBuilder builder(handles.main_isolate(), handles.main_zone()); | |
1585 Register r0(0); | |
1586 builder.set_locals_count(0); | |
1587 builder.set_context_count(0); | |
1588 builder.set_parameter_count(0); | |
1589 LoadAny(&builder, factory, object_type_tuples[i].first); | |
1590 builder.CastAccumulatorToBoolean(); | |
1591 builder.Return(); | |
1592 Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray(); | |
1593 InterpreterTester tester(handles.main_isolate(), bytecode_array); | |
1594 auto callable = tester.GetCallable<>(); | |
1595 Handle<Object> return_value = callable().ToHandleChecked(); | |
1596 CHECK(return_value->IsBoolean()); | |
1597 CHECK_EQ(return_value->BooleanValue(), object_type_tuples[i].second); | |
1598 } | |
1599 } | |
1600 | |
1601 | |
1602 TEST(InterpreterUnaryNotNonBoolean) { | 1565 TEST(InterpreterUnaryNotNonBoolean) { |
1603 HandleAndZoneScope handles; | 1566 HandleAndZoneScope handles; |
1604 i::Factory* factory = handles.main_isolate()->factory(); | 1567 i::Factory* factory = handles.main_isolate()->factory(); |
1605 | 1568 |
1606 std::pair<Handle<Object>, bool> object_type_tuples[] = { | 1569 std::pair<Handle<Object>, bool> object_type_tuples[] = { |
1607 std::make_pair(factory->undefined_value(), true), | 1570 std::make_pair(factory->undefined_value(), true), |
1608 std::make_pair(factory->null_value(), true), | 1571 std::make_pair(factory->null_value(), true), |
1609 std::make_pair(factory->false_value(), true), | 1572 std::make_pair(factory->false_value(), true), |
1610 std::make_pair(factory->true_value(), false), | 1573 std::make_pair(factory->true_value(), false), |
1611 std::make_pair(factory->NewNumber(9.1), false), | 1574 std::make_pair(factory->NewNumber(9.1), false), |
(...skipping 1472 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3084 callable(handle(Smi::FromInt(arg_value), handles.main_isolate())) | 3047 callable(handle(Smi::FromInt(arg_value), handles.main_isolate())) |
3085 .ToHandleChecked(); | 3048 .ToHandleChecked(); |
3086 CHECK_EQ(Handle<Smi>::cast(return_val)->value(), samples[i].second); | 3049 CHECK_EQ(Handle<Smi>::cast(return_val)->value(), samples[i].second); |
3087 } | 3050 } |
3088 } | 3051 } |
3089 | 3052 |
3090 | 3053 |
3091 } // namespace interpreter | 3054 } // namespace interpreter |
3092 } // namespace internal | 3055 } // namespace internal |
3093 } // namespace v8 | 3056 } // namespace v8 |
OLD | NEW |