| Index: test/cctest/interpreter/test-interpreter.cc
|
| diff --git a/test/cctest/interpreter/test-interpreter.cc b/test/cctest/interpreter/test-interpreter.cc
|
| index d46672aca52073321c28c08539f17a73eda50858..2302fdc9acb165a359c70f37cbd4e716ce1c4b0b 100644
|
| --- a/test/cctest/interpreter/test-interpreter.cc
|
| +++ b/test/cctest/interpreter/test-interpreter.cc
|
| @@ -12,6 +12,7 @@
|
|
|
| namespace v8 {
|
| namespace internal {
|
| +namespace interpreter {
|
|
|
| class InterpreterCallable {
|
| public:
|
| @@ -60,10 +61,14 @@ class InterpreterTester {
|
| DISALLOW_COPY_AND_ASSIGN(InterpreterTester);
|
| };
|
|
|
| +} // namespace interpreter
|
| } // namespace internal
|
| } // namespace v8
|
|
|
| -using namespace v8::internal;
|
| +using v8::internal::BytecodeArray;
|
| +using v8::internal::Handle;
|
| +using v8::internal::Object;
|
| +using v8::internal::Smi;
|
| using namespace v8::internal::interpreter;
|
|
|
| TEST(TestInterpreterReturn) {
|
| @@ -81,3 +86,123 @@ TEST(TestInterpreterReturn) {
|
| Handle<Object> return_val = callable().ToHandleChecked();
|
| CHECK(return_val.is_identical_to(undefined_value));
|
| }
|
| +
|
| +
|
| +TEST(TestInterpreterLoadUndefined) {
|
| + InitializedHandleScope handles;
|
| + Handle<Object> undefined_value =
|
| + handles.main_isolate()->factory()->undefined_value();
|
| +
|
| + BytecodeArrayBuilder builder(handles.main_isolate());
|
| + builder.set_locals_count(0);
|
| + builder.LoadUndefined().Return();
|
| + Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray();
|
| +
|
| + InterpreterTester tester(handles.main_isolate(), bytecode_array);
|
| + InterpreterCallable callable(tester.GetCallable());
|
| + Handle<Object> return_val = callable().ToHandleChecked();
|
| + CHECK(return_val.is_identical_to(undefined_value));
|
| +}
|
| +
|
| +
|
| +TEST(TestInterpreterLoadNull) {
|
| + InitializedHandleScope handles;
|
| + Handle<Object> null_value = handles.main_isolate()->factory()->null_value();
|
| +
|
| + BytecodeArrayBuilder builder(handles.main_isolate());
|
| + builder.set_locals_count(0);
|
| + builder.LoadNull().Return();
|
| + Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray();
|
| +
|
| + InterpreterTester tester(handles.main_isolate(), bytecode_array);
|
| + InterpreterCallable callable(tester.GetCallable());
|
| + Handle<Object> return_val = callable().ToHandleChecked();
|
| + CHECK(return_val.is_identical_to(null_value));
|
| +}
|
| +
|
| +
|
| +TEST(TestInterpreterLoadTheHole) {
|
| + InitializedHandleScope handles;
|
| + Handle<Object> the_hole_value =
|
| + handles.main_isolate()->factory()->the_hole_value();
|
| +
|
| + BytecodeArrayBuilder builder(handles.main_isolate());
|
| + builder.set_locals_count(0);
|
| + builder.LoadTheHole().Return();
|
| + Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray();
|
| +
|
| + InterpreterTester tester(handles.main_isolate(), bytecode_array);
|
| + InterpreterCallable callable(tester.GetCallable());
|
| + Handle<Object> return_val = callable().ToHandleChecked();
|
| + CHECK(return_val.is_identical_to(the_hole_value));
|
| +}
|
| +
|
| +
|
| +TEST(TestInterpreterLoadTrue) {
|
| + InitializedHandleScope handles;
|
| + Handle<Object> true_value = handles.main_isolate()->factory()->true_value();
|
| +
|
| + BytecodeArrayBuilder builder(handles.main_isolate());
|
| + builder.set_locals_count(0);
|
| + builder.LoadTrue().Return();
|
| + Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray();
|
| +
|
| + InterpreterTester tester(handles.main_isolate(), bytecode_array);
|
| + InterpreterCallable callable(tester.GetCallable());
|
| + Handle<Object> return_val = callable().ToHandleChecked();
|
| + CHECK(return_val.is_identical_to(true_value));
|
| +}
|
| +
|
| +
|
| +TEST(TestInterpreterLoadFalse) {
|
| + InitializedHandleScope handles;
|
| + Handle<Object> false_value = handles.main_isolate()->factory()->false_value();
|
| +
|
| + BytecodeArrayBuilder builder(handles.main_isolate());
|
| + builder.set_locals_count(0);
|
| + builder.LoadFalse().Return();
|
| + Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray();
|
| +
|
| + InterpreterTester tester(handles.main_isolate(), bytecode_array);
|
| + InterpreterCallable callable(tester.GetCallable());
|
| + Handle<Object> return_val = callable().ToHandleChecked();
|
| + CHECK(return_val.is_identical_to(false_value));
|
| +}
|
| +
|
| +
|
| +TEST(TestInterpreterLoadLiteral) {
|
| + InitializedHandleScope handles;
|
| + for (int i = -128; i < 128; i++) {
|
| + BytecodeArrayBuilder builder(handles.main_isolate());
|
| + builder.set_locals_count(0);
|
| + builder.LoadLiteral(Smi::FromInt(i)).Return();
|
| + Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray();
|
| +
|
| + InterpreterTester tester(handles.main_isolate(), bytecode_array);
|
| + InterpreterCallable callable(tester.GetCallable());
|
| + Handle<Object> return_val = callable().ToHandleChecked();
|
| + CHECK_EQ(Smi::cast(*return_val), Smi::FromInt(i));
|
| + }
|
| +}
|
| +
|
| +
|
| +TEST(TestInterpreterLoadStoreRegisters) {
|
| + InitializedHandleScope handles;
|
| + Handle<Object> true_value = handles.main_isolate()->factory()->true_value();
|
| + for (int i = 0; i <= Register::kMaxRegisterIndex; i++) {
|
| + BytecodeArrayBuilder builder(handles.main_isolate());
|
| + builder.set_locals_count(i + 1);
|
| + Register reg(i);
|
| + builder.LoadTrue()
|
| + .StoreAccumulatorInRegister(reg)
|
| + .LoadFalse()
|
| + .LoadAccumulatorWithRegister(reg)
|
| + .Return();
|
| + Handle<BytecodeArray> bytecode_array = builder.ToBytecodeArray();
|
| +
|
| + InterpreterTester tester(handles.main_isolate(), bytecode_array);
|
| + InterpreterCallable callable(tester.GetCallable());
|
| + Handle<Object> return_val = callable().ToHandleChecked();
|
| + CHECK(return_val.is_identical_to(true_value));
|
| + }
|
| +}
|
|
|