Line data Source code
1 : // Copyright 2014 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/arguments.h"
6 : #include "src/isolate-inl.h"
7 : #include "src/runtime/runtime-utils.h"
8 :
9 : namespace v8 {
10 : namespace internal {
11 :
12 0 : RUNTIME_FUNCTION(Runtime_Multiply) {
13 0 : HandleScope scope(isolate);
14 : DCHECK_EQ(2, args.length());
15 0 : CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
16 0 : CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
17 0 : RETURN_RESULT_OR_FAILURE(isolate, Object::Multiply(isolate, lhs, rhs));
18 : }
19 :
20 :
21 0 : RUNTIME_FUNCTION(Runtime_Divide) {
22 0 : HandleScope scope(isolate);
23 : DCHECK_EQ(2, args.length());
24 0 : CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
25 0 : CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
26 0 : RETURN_RESULT_OR_FAILURE(isolate, Object::Divide(isolate, lhs, rhs));
27 : }
28 :
29 :
30 0 : RUNTIME_FUNCTION(Runtime_Modulus) {
31 0 : HandleScope scope(isolate);
32 : DCHECK_EQ(2, args.length());
33 0 : CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
34 0 : CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
35 0 : RETURN_RESULT_OR_FAILURE(isolate, Object::Modulus(isolate, lhs, rhs));
36 : }
37 :
38 :
39 112 : RUNTIME_FUNCTION(Runtime_Add) {
40 56 : HandleScope scope(isolate);
41 : DCHECK_EQ(2, args.length());
42 56 : CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
43 56 : CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
44 168 : RETURN_RESULT_OR_FAILURE(isolate, Object::Add(isolate, lhs, rhs));
45 : }
46 :
47 :
48 0 : RUNTIME_FUNCTION(Runtime_Subtract) {
49 0 : HandleScope scope(isolate);
50 : DCHECK_EQ(2, args.length());
51 0 : CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
52 0 : CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
53 0 : RETURN_RESULT_OR_FAILURE(isolate, Object::Subtract(isolate, lhs, rhs));
54 : }
55 :
56 :
57 0 : RUNTIME_FUNCTION(Runtime_ShiftLeft) {
58 0 : HandleScope scope(isolate);
59 : DCHECK_EQ(2, args.length());
60 0 : CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
61 0 : CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
62 0 : RETURN_RESULT_OR_FAILURE(isolate, Object::ShiftLeft(isolate, lhs, rhs));
63 : }
64 :
65 :
66 0 : RUNTIME_FUNCTION(Runtime_ShiftRight) {
67 0 : HandleScope scope(isolate);
68 : DCHECK_EQ(2, args.length());
69 0 : CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
70 0 : CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
71 0 : RETURN_RESULT_OR_FAILURE(isolate, Object::ShiftRight(isolate, lhs, rhs));
72 : }
73 :
74 :
75 0 : RUNTIME_FUNCTION(Runtime_ShiftRightLogical) {
76 0 : HandleScope scope(isolate);
77 : DCHECK_EQ(2, args.length());
78 0 : CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
79 0 : CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
80 0 : RETURN_RESULT_OR_FAILURE(isolate,
81 0 : Object::ShiftRightLogical(isolate, lhs, rhs));
82 : }
83 :
84 :
85 0 : RUNTIME_FUNCTION(Runtime_BitwiseAnd) {
86 0 : HandleScope scope(isolate);
87 : DCHECK_EQ(2, args.length());
88 0 : CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
89 0 : CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
90 0 : RETURN_RESULT_OR_FAILURE(isolate, Object::BitwiseAnd(isolate, lhs, rhs));
91 : }
92 :
93 :
94 0 : RUNTIME_FUNCTION(Runtime_BitwiseOr) {
95 0 : HandleScope scope(isolate);
96 : DCHECK_EQ(2, args.length());
97 0 : CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
98 0 : CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
99 0 : RETURN_RESULT_OR_FAILURE(isolate, Object::BitwiseOr(isolate, lhs, rhs));
100 : }
101 :
102 :
103 0 : RUNTIME_FUNCTION(Runtime_BitwiseXor) {
104 0 : HandleScope scope(isolate);
105 : DCHECK_EQ(2, args.length());
106 0 : CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
107 0 : CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
108 0 : RETURN_RESULT_OR_FAILURE(isolate, Object::BitwiseXor(isolate, lhs, rhs));
109 : }
110 :
111 0 : RUNTIME_FUNCTION(Runtime_Equal) {
112 0 : HandleScope scope(isolate);
113 : DCHECK_EQ(2, args.length());
114 0 : CONVERT_ARG_HANDLE_CHECKED(Object, x, 0);
115 0 : CONVERT_ARG_HANDLE_CHECKED(Object, y, 1);
116 0 : Maybe<bool> result = Object::Equals(x, y);
117 0 : if (!result.IsJust()) return isolate->heap()->exception();
118 0 : return isolate->heap()->ToBoolean(result.FromJust());
119 : }
120 :
121 0 : RUNTIME_FUNCTION(Runtime_NotEqual) {
122 0 : HandleScope scope(isolate);
123 : DCHECK_EQ(2, args.length());
124 0 : CONVERT_ARG_HANDLE_CHECKED(Object, x, 0);
125 0 : CONVERT_ARG_HANDLE_CHECKED(Object, y, 1);
126 0 : Maybe<bool> result = Object::Equals(x, y);
127 0 : if (!result.IsJust()) return isolate->heap()->exception();
128 0 : return isolate->heap()->ToBoolean(!result.FromJust());
129 : }
130 :
131 0 : RUNTIME_FUNCTION(Runtime_StrictEqual) {
132 : SealHandleScope scope(isolate);
133 : DCHECK_EQ(2, args.length());
134 0 : CONVERT_ARG_CHECKED(Object, x, 0);
135 0 : CONVERT_ARG_CHECKED(Object, y, 1);
136 0 : return isolate->heap()->ToBoolean(x->StrictEquals(y));
137 : }
138 :
139 0 : RUNTIME_FUNCTION(Runtime_StrictNotEqual) {
140 : SealHandleScope scope(isolate);
141 : DCHECK_EQ(2, args.length());
142 0 : CONVERT_ARG_CHECKED(Object, x, 0);
143 0 : CONVERT_ARG_CHECKED(Object, y, 1);
144 0 : return isolate->heap()->ToBoolean(!x->StrictEquals(y));
145 : }
146 :
147 0 : RUNTIME_FUNCTION(Runtime_LessThan) {
148 0 : HandleScope scope(isolate);
149 : DCHECK_EQ(2, args.length());
150 0 : CONVERT_ARG_HANDLE_CHECKED(Object, x, 0);
151 0 : CONVERT_ARG_HANDLE_CHECKED(Object, y, 1);
152 0 : Maybe<bool> result = Object::LessThan(x, y);
153 0 : if (!result.IsJust()) return isolate->heap()->exception();
154 0 : return isolate->heap()->ToBoolean(result.FromJust());
155 : }
156 :
157 0 : RUNTIME_FUNCTION(Runtime_GreaterThan) {
158 0 : HandleScope scope(isolate);
159 : DCHECK_EQ(2, args.length());
160 0 : CONVERT_ARG_HANDLE_CHECKED(Object, x, 0);
161 0 : CONVERT_ARG_HANDLE_CHECKED(Object, y, 1);
162 0 : Maybe<bool> result = Object::GreaterThan(x, y);
163 0 : if (!result.IsJust()) return isolate->heap()->exception();
164 0 : return isolate->heap()->ToBoolean(result.FromJust());
165 : }
166 :
167 0 : RUNTIME_FUNCTION(Runtime_LessThanOrEqual) {
168 0 : HandleScope scope(isolate);
169 : DCHECK_EQ(2, args.length());
170 0 : CONVERT_ARG_HANDLE_CHECKED(Object, x, 0);
171 0 : CONVERT_ARG_HANDLE_CHECKED(Object, y, 1);
172 0 : Maybe<bool> result = Object::LessThanOrEqual(x, y);
173 0 : if (!result.IsJust()) return isolate->heap()->exception();
174 0 : return isolate->heap()->ToBoolean(result.FromJust());
175 : }
176 :
177 0 : RUNTIME_FUNCTION(Runtime_GreaterThanOrEqual) {
178 0 : HandleScope scope(isolate);
179 : DCHECK_EQ(2, args.length());
180 0 : CONVERT_ARG_HANDLE_CHECKED(Object, x, 0);
181 0 : CONVERT_ARG_HANDLE_CHECKED(Object, y, 1);
182 0 : Maybe<bool> result = Object::GreaterThanOrEqual(x, y);
183 0 : if (!result.IsJust()) return isolate->heap()->exception();
184 0 : return isolate->heap()->ToBoolean(result.FromJust());
185 : }
186 :
187 0 : RUNTIME_FUNCTION(Runtime_InstanceOf) {
188 0 : HandleScope shs(isolate);
189 : DCHECK_EQ(2, args.length());
190 0 : CONVERT_ARG_HANDLE_CHECKED(Object, object, 0);
191 0 : CONVERT_ARG_HANDLE_CHECKED(Object, callable, 1);
192 0 : RETURN_RESULT_OR_FAILURE(isolate,
193 0 : Object::InstanceOf(isolate, object, callable));
194 : }
195 :
196 : } // namespace internal
197 : } // namespace v8
|