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

Side by Side Diff: test/cctest/interpreter/test-interpreter-intrinsics.cc

Issue 1645763003: [Interpreter] TurboFan implementation of intrinsics. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Merged with oth@'s changes. Created 4 years, 9 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
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "src/v8.h"
6
7 #include "src/interpreter/interpreter-intrinsics.h"
8 #include "test/cctest/interpreter/interpreter-tester.h"
9
10 namespace v8 {
11 namespace internal {
12 namespace interpreter {
13
14 namespace {
15
16 class InvokeIntrinsicHelper {
17 public:
18 InvokeIntrinsicHelper(Isolate* isolate, Zone* zone,
19 Runtime::FunctionId function_id)
20 : isolate_(isolate),
21 zone_(zone),
22 factory_(isolate->factory()),
23 function_id_(function_id) {}
24
25 template <class... A>
26 Handle<Object> Invoke(A... args) {
27 CHECK(IntrinsicsHelper::IsSupported(function_id_));
28 BytecodeArrayBuilder builder(isolate_, zone_, sizeof...(args), 0, 0);
29 builder.CallRuntime(function_id_, builder.Parameter(0), sizeof...(args))
30 .Return();
31 InterpreterTester tester(isolate_, builder.ToBytecodeArray());
32 auto callable = tester.GetCallable<Handle<Object>>();
33 return callable(args...).ToHandleChecked();
34 }
35
36 Handle<Object> NewObject(const char* script) {
37 return v8::Utils::OpenHandle(*CompileRun(script));
38 }
39
40 Handle<Object> Undefined() { return factory_->undefined_value(); }
41 Handle<Object> Null() { return factory_->null_value(); }
42
43 private:
44 Isolate* isolate_;
45 Zone* zone_;
46 Factory* factory_;
47 Runtime::FunctionId function_id_;
48 };
49
50 } // namespace
51
52 TEST(IsJSReceiver) {
53 HandleAndZoneScope handles;
54
55 InvokeIntrinsicHelper helper(handles.main_isolate(), handles.main_zone(),
56 Runtime::kInlineIsJSReceiver);
57 Factory* factory = handles.main_isolate()->factory();
58
59 CHECK_EQ(*factory->true_value(),
60 *helper.Invoke(helper.NewObject("new Date()")));
61 CHECK_EQ(*factory->true_value(),
62 *helper.Invoke(helper.NewObject("(function() {})")));
63 CHECK_EQ(*factory->true_value(), *helper.Invoke(helper.NewObject("([1])")));
64 CHECK_EQ(*factory->true_value(), *helper.Invoke(helper.NewObject("({})")));
65 CHECK_EQ(*factory->true_value(), *helper.Invoke(helper.NewObject("(/x/)")));
66 CHECK_EQ(*factory->false_value(), *helper.Invoke(helper.Undefined()));
67 CHECK_EQ(*factory->false_value(), *helper.Invoke(helper.Null()));
68 CHECK_EQ(*factory->false_value(),
69 *helper.Invoke(helper.NewObject("'string'")));
70 CHECK_EQ(*factory->false_value(), *helper.Invoke(helper.NewObject("42")));
71 }
72
73 TEST(IsArray) {
74 HandleAndZoneScope handles;
75
76 InvokeIntrinsicHelper helper(handles.main_isolate(), handles.main_zone(),
77 Runtime::kInlineIsArray);
78 Factory* factory = handles.main_isolate()->factory();
79
80 CHECK_EQ(*factory->false_value(),
81 *helper.Invoke(helper.NewObject("new Date()")));
82 CHECK_EQ(*factory->false_value(),
83 *helper.Invoke(helper.NewObject("(function() {})")));
84 CHECK_EQ(*factory->true_value(), *helper.Invoke(helper.NewObject("([1])")));
85 CHECK_EQ(*factory->false_value(), *helper.Invoke(helper.NewObject("({})")));
86 CHECK_EQ(*factory->false_value(), *helper.Invoke(helper.NewObject("(/x/)")));
87 CHECK_EQ(*factory->false_value(), *helper.Invoke(helper.Undefined()));
88 CHECK_EQ(*factory->false_value(), *helper.Invoke(helper.Null()));
89 CHECK_EQ(*factory->false_value(),
90 *helper.Invoke(helper.NewObject("'string'")));
91 CHECK_EQ(*factory->false_value(), *helper.Invoke(helper.NewObject("42")));
92 }
93
94 } // namespace interpreter
95 } // namespace internal
96 } // namespace v8
OLDNEW
« no previous file with comments | « test/cctest/interpreter/test-interpreter.cc ('k') | test/unittests/interpreter/bytecode-array-builder-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698