OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/bootstrap_natives.h" | 5 #include "vm/bootstrap_natives.h" |
6 | 6 |
7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
8 #include "vm/dart_entry.h" | 8 #include "vm/dart_entry.h" |
9 #include "vm/dart_api_impl.h" | 9 #include "vm/dart_api_impl.h" |
10 #include "vm/exceptions.h" | 10 #include "vm/exceptions.h" |
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
294 const Integer& value = Integer::CheckedHandle(arguments->NativeArgAt(0)); | 294 const Integer& value = Integer::CheckedHandle(arguments->NativeArgAt(0)); |
295 GET_NON_NULL_NATIVE_ARGUMENT(Integer, shift_count, arguments->NativeArgAt(1)); | 295 GET_NON_NULL_NATIVE_ARGUMENT(Integer, shift_count, arguments->NativeArgAt(1)); |
296 GET_NON_NULL_NATIVE_ARGUMENT(Integer, mask, arguments->NativeArgAt(2)); | 296 GET_NON_NULL_NATIVE_ARGUMENT(Integer, mask, arguments->NativeArgAt(2)); |
297 ASSERT(CheckInteger(value)); | 297 ASSERT(CheckInteger(value)); |
298 ASSERT(CheckInteger(shift_count)); | 298 ASSERT(CheckInteger(shift_count)); |
299 ASSERT(CheckInteger(mask)); | 299 ASSERT(CheckInteger(mask)); |
300 if (!shift_count.IsSmi()) { | 300 if (!shift_count.IsSmi()) { |
301 // Shift count is too large.. | 301 // Shift count is too large.. |
302 const Instance& exception = | 302 const Instance& exception = |
303 Instance::Handle(isolate->object_store()->out_of_memory()); | 303 Instance::Handle(isolate->object_store()->out_of_memory()); |
304 Exceptions::Throw(isolate, exception); | 304 Exceptions::Throw(thread, exception); |
305 } | 305 } |
306 const Smi& smi_shift_count = Smi::Cast(shift_count); | 306 const Smi& smi_shift_count = Smi::Cast(shift_count); |
307 const Integer& shift_result = Integer::Handle( | 307 const Integer& shift_result = Integer::Handle( |
308 ShiftOperationHelper(Token::kSHL, value, smi_shift_count, true)); | 308 ShiftOperationHelper(Token::kSHL, value, smi_shift_count, true)); |
309 const Integer& result = | 309 const Integer& result = |
310 Integer::Handle(shift_result.BitOp(Token::kBIT_AND, mask)); | 310 Integer::Handle(shift_result.BitOp(Token::kBIT_AND, mask)); |
311 return result.AsValidInteger(); | 311 return result.AsValidInteger(); |
312 } | 312 } |
313 | 313 |
314 | 314 |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
388 ASSERT(Smi::IsValid(result)); | 388 ASSERT(Smi::IsValid(result)); |
389 return Smi::New(result); | 389 return Smi::New(result); |
390 } | 390 } |
391 | 391 |
392 | 392 |
393 DEFINE_NATIVE_ENTRY(Mint_shlFromInt, 2) { | 393 DEFINE_NATIVE_ENTRY(Mint_shlFromInt, 2) { |
394 // Use the preallocated out of memory exception to avoid calling | 394 // Use the preallocated out of memory exception to avoid calling |
395 // into dart code or allocating any code. | 395 // into dart code or allocating any code. |
396 const Instance& exception = | 396 const Instance& exception = |
397 Instance::Handle(isolate->object_store()->out_of_memory()); | 397 Instance::Handle(isolate->object_store()->out_of_memory()); |
398 Exceptions::Throw(isolate, exception); | 398 Exceptions::Throw(thread, exception); |
399 UNREACHABLE(); | 399 UNREACHABLE(); |
400 return 0; | 400 return 0; |
401 } | 401 } |
402 | 402 |
403 | 403 |
404 // Bigint natives. | 404 // Bigint natives. |
405 | 405 |
406 DEFINE_NATIVE_ENTRY(Bigint_getNeg, 1) { | 406 DEFINE_NATIVE_ENTRY(Bigint_getNeg, 1) { |
407 const Bigint& bigint = Bigint::CheckedHandle(arguments->NativeArgAt(0)); | 407 const Bigint& bigint = Bigint::CheckedHandle(arguments->NativeArgAt(0)); |
408 return bigint.neg(); | 408 return bigint.neg(); |
(...skipping 15 matching lines...) Expand all Loading... |
424 DEFINE_NATIVE_ENTRY(Bigint_allocate, 4) { | 424 DEFINE_NATIVE_ENTRY(Bigint_allocate, 4) { |
425 // First arg is null type arguments, since class Bigint is not parameterized. | 425 // First arg is null type arguments, since class Bigint is not parameterized. |
426 const Bool& neg = Bool::CheckedHandle(arguments->NativeArgAt(1)); | 426 const Bool& neg = Bool::CheckedHandle(arguments->NativeArgAt(1)); |
427 const Smi& used = Smi::CheckedHandle(arguments->NativeArgAt(2)); | 427 const Smi& used = Smi::CheckedHandle(arguments->NativeArgAt(2)); |
428 const TypedData& digits = TypedData::CheckedHandle(arguments->NativeArgAt(3)); | 428 const TypedData& digits = TypedData::CheckedHandle(arguments->NativeArgAt(3)); |
429 ASSERT(!digits.IsNull()); | 429 ASSERT(!digits.IsNull()); |
430 return Bigint::New(neg.value(), used.Value(), digits); | 430 return Bigint::New(neg.value(), used.Value(), digits); |
431 } | 431 } |
432 | 432 |
433 } // namespace dart | 433 } // namespace dart |
OLD | NEW |