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

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: Update 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 "test/cctest/interpreter/interpreter-tester.h"
8
9 namespace v8 {
10 namespace internal {
11 namespace interpreter {
12
13 namespace {
14
15 class InvokeIntrinsicHelper {
16 public:
17 InvokeIntrinsicHelper(Isolate* isolate, Zone* zone,
18 Runtime::FunctionId function_id)
19 : isolate_(isolate),
20 zone_(zone),
21 factory_(isolate->factory()),
22 function_id_(function_id) {}
23
24 template <class... A>
25 Handle<Object> Invoke(A... args) {
26 BytecodeArrayBuilder builder(isolate_, zone_, sizeof...(args), 0, 0);
rmcilroy 2016/03/10 17:09:35 Maybe add a DCHECK here that IntrinsicsHelper::IsS
epertoso 2016/03/14 09:58:40 I think CHECK makes more sense, especially for peo
rmcilroy 2016/03/14 10:14:42 Sure, SGTM, thanks.
27 builder.CallRuntime(function_id_, builder.Parameter(0), sizeof...(args))
28 .Return();
29 InterpreterTester tester(isolate_, builder.ToBytecodeArray());
30 auto callable = tester.GetCallable<Handle<Object>>();
31 return callable(args...).ToHandleChecked();
32 }
33
34 Handle<Object> NewObject(const char* script) {
35 return v8::Utils::OpenHandle(*CompileRun(script));
36 }
37
38 Handle<Object> Undefined() { return factory_->undefined_value(); }
39 Handle<Object> Null() { return factory_->null_value(); }
40
41 private:
42 Isolate* isolate_;
43 Zone* zone_;
44 Factory* factory_;
45 Runtime::FunctionId function_id_;
46 };
47
48 } // namespace
49
50 TEST(IsJSReceiver) {
51 HandleAndZoneScope handles;
52
53 InvokeIntrinsicHelper helper(handles.main_isolate(), handles.main_zone(),
54 Runtime::kInlineIsJSReceiver);
55 Factory* factory = handles.main_isolate()->factory();
56
57 CHECK_EQ(*factory->true_value(),
58 *helper.Invoke(helper.NewObject("new Date()")));
59 CHECK_EQ(*factory->true_value(),
60 *helper.Invoke(helper.NewObject("(function() {})")));
61 CHECK_EQ(*factory->true_value(), *helper.Invoke(helper.NewObject("([1])")));
62 CHECK_EQ(*factory->true_value(), *helper.Invoke(helper.NewObject("({})")));
63 CHECK_EQ(*factory->true_value(), *helper.Invoke(helper.NewObject("(/x/)")));
64 CHECK_EQ(*factory->false_value(), *helper.Invoke(helper.Undefined()));
65 CHECK_EQ(*factory->false_value(), *helper.Invoke(helper.Null()));
66 CHECK_EQ(*factory->false_value(),
67 *helper.Invoke(helper.NewObject("'string'")));
68 CHECK_EQ(*factory->false_value(), *helper.Invoke(helper.NewObject("42")));
69 }
70
71 TEST(IsArray) {
72 HandleAndZoneScope handles;
73
74 InvokeIntrinsicHelper helper(handles.main_isolate(), handles.main_zone(),
75 Runtime::kInlineIsArray);
76 Factory* factory = handles.main_isolate()->factory();
77
78 CHECK_EQ(*factory->false_value(),
79 *helper.Invoke(helper.NewObject("new Date()")));
80 CHECK_EQ(*factory->false_value(),
81 *helper.Invoke(helper.NewObject("(function() {})")));
82 CHECK_EQ(*factory->true_value(), *helper.Invoke(helper.NewObject("([1])")));
83 CHECK_EQ(*factory->false_value(), *helper.Invoke(helper.NewObject("({})")));
84 CHECK_EQ(*factory->false_value(), *helper.Invoke(helper.NewObject("(/x/)")));
85 CHECK_EQ(*factory->false_value(), *helper.Invoke(helper.Undefined()));
86 CHECK_EQ(*factory->false_value(), *helper.Invoke(helper.Null()));
87 CHECK_EQ(*factory->false_value(),
88 *helper.Invoke(helper.NewObject("'string'")));
89 CHECK_EQ(*factory->false_value(), *helper.Invoke(helper.NewObject("42")));
90 }
91
92 } // namespace interpreter
93 } // namespace internal
94 } // 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