OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 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 | 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 <stdlib.h> | 5 #include <stdlib.h> |
6 #include <limits> | 6 #include <limits> |
7 | 7 |
8 #include "src/v8.h" | 8 #include "src/v8.h" |
9 | 9 |
10 #include "src/isolate-inl.h" | 10 #include "src/isolate-inl.h" |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 handle(Smi::FromInt(end_position), isolate), STRICT)); | 146 handle(Smi::FromInt(end_position), isolate), STRICT)); |
147 | 147 |
148 return *constructor; | 148 return *constructor; |
149 } | 149 } |
150 | 150 |
151 | 151 |
152 RUNTIME_FUNCTION(Runtime_DefineClassMethod) { | 152 RUNTIME_FUNCTION(Runtime_DefineClassMethod) { |
153 HandleScope scope(isolate); | 153 HandleScope scope(isolate); |
154 DCHECK(args.length() == 3); | 154 DCHECK(args.length() == 3); |
155 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); | 155 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); |
156 CONVERT_ARG_HANDLE_CHECKED(Name, name, 1); | 156 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); |
157 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 2); | 157 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 2); |
158 | 158 |
159 uint32_t index; | 159 uint32_t index; |
| 160 if (key->ToArrayIndex(&index)) { |
| 161 RETURN_FAILURE_ON_EXCEPTION( |
| 162 isolate, JSObject::SetOwnElement(object, index, function, STRICT)); |
| 163 } |
| 164 |
| 165 Handle<Name> name; |
| 166 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, name, |
| 167 Runtime::ToName(isolate, key)); |
160 if (name->AsArrayIndex(&index)) { | 168 if (name->AsArrayIndex(&index)) { |
161 RETURN_FAILURE_ON_EXCEPTION( | 169 RETURN_FAILURE_ON_EXCEPTION( |
162 isolate, JSObject::SetOwnElement(object, index, function, STRICT)); | 170 isolate, JSObject::SetOwnElement(object, index, function, STRICT)); |
163 } else { | 171 } else { |
164 RETURN_FAILURE_ON_EXCEPTION( | 172 RETURN_FAILURE_ON_EXCEPTION( |
165 isolate, | 173 isolate, |
166 JSObject::SetOwnPropertyIgnoreAttributes(object, name, function, NONE)); | 174 JSObject::SetOwnPropertyIgnoreAttributes(object, name, function, NONE)); |
167 } | 175 } |
168 return isolate->heap()->undefined_value(); | 176 return isolate->heap()->undefined_value(); |
169 } | 177 } |
170 | 178 |
| 179 |
| 180 RUNTIME_FUNCTION(Runtime_DefineClassGetter) { |
| 181 HandleScope scope(isolate); |
| 182 DCHECK(args.length() == 3); |
| 183 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); |
| 184 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); |
| 185 CONVERT_ARG_HANDLE_CHECKED(JSFunction, getter, 2); |
| 186 |
| 187 Handle<Name> name; |
| 188 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, name, |
| 189 Runtime::ToName(isolate, key)); |
| 190 RETURN_FAILURE_ON_EXCEPTION( |
| 191 isolate, |
| 192 JSObject::DefineAccessor(object, name, getter, |
| 193 isolate->factory()->null_value(), NONE)); |
| 194 return isolate->heap()->undefined_value(); |
| 195 } |
| 196 |
| 197 |
| 198 RUNTIME_FUNCTION(Runtime_DefineClassSetter) { |
| 199 HandleScope scope(isolate); |
| 200 DCHECK(args.length() == 3); |
| 201 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); |
| 202 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); |
| 203 CONVERT_ARG_HANDLE_CHECKED(JSFunction, setter, 2); |
| 204 |
| 205 Handle<Name> name; |
| 206 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, name, |
| 207 Runtime::ToName(isolate, key)); |
| 208 RETURN_FAILURE_ON_EXCEPTION( |
| 209 isolate, |
| 210 JSObject::DefineAccessor(object, name, isolate->factory()->null_value(), |
| 211 setter, NONE)); |
| 212 return isolate->heap()->undefined_value(); |
| 213 } |
| 214 |
171 | 215 |
172 RUNTIME_FUNCTION(Runtime_ClassGetSourceCode) { | 216 RUNTIME_FUNCTION(Runtime_ClassGetSourceCode) { |
173 HandleScope shs(isolate); | 217 HandleScope shs(isolate); |
174 DCHECK(args.length() == 1); | 218 DCHECK(args.length() == 1); |
175 CONVERT_ARG_HANDLE_CHECKED(JSFunction, fun, 0); | 219 CONVERT_ARG_HANDLE_CHECKED(JSFunction, fun, 0); |
176 | 220 |
177 Handle<Object> script; | 221 Handle<Object> script; |
178 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 222 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
179 isolate, script, | 223 isolate, script, |
180 Object::GetProperty(fun, isolate->factory()->class_script_symbol())); | 224 Object::GetProperty(fun, isolate->factory()->class_script_symbol())); |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
435 } | 479 } |
436 | 480 |
437 Handle<Object> result; | 481 Handle<Object> result; |
438 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 482 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
439 isolate, result, | 483 isolate, result, |
440 Execution::Call(isolate, proto_function, receiver, argc, argv, false)); | 484 Execution::Call(isolate, proto_function, receiver, argc, argv, false)); |
441 return *result; | 485 return *result; |
442 } | 486 } |
443 } | 487 } |
444 } // namespace v8::internal | 488 } // namespace v8::internal |
OLD | NEW |