OLD | NEW |
1 // Copyright 2012 Google Inc. All Rights Reserved. | 1 // Copyright 2012 Google Inc. All Rights Reserved. |
2 | 2 |
3 #include "vm/bigint_operations.h" | 3 #include "vm/bigint_operations.h" |
4 | 4 |
5 #include "platform/assert.h" | 5 #include "platform/assert.h" |
6 #include "platform/utils.h" | 6 #include "platform/utils.h" |
7 | 7 |
8 #include "vm/double_internals.h" | 8 #include "vm/double_internals.h" |
9 #include "vm/exceptions.h" | 9 #include "vm/exceptions.h" |
10 #include "vm/object_store.h" | 10 #include "vm/object_store.h" |
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 if ((-1.0 < d) && (d < 1.0)) { | 215 if ((-1.0 < d) && (d < 1.0)) { |
216 // Shortcut for small numbers. Also makes the right-shift below | 216 // Shortcut for small numbers. Also makes the right-shift below |
217 // well specified. | 217 // well specified. |
218 Smi& zero = Smi::Handle(Smi::New(0)); | 218 Smi& zero = Smi::Handle(Smi::New(0)); |
219 return NewFromSmi(zero, space); | 219 return NewFromSmi(zero, space); |
220 } | 220 } |
221 DoubleInternals internals = DoubleInternals(d); | 221 DoubleInternals internals = DoubleInternals(d); |
222 if (internals.IsSpecial()) { | 222 if (internals.IsSpecial()) { |
223 const Array& exception_arguments = Array::Handle(Array::New(1)); | 223 const Array& exception_arguments = Array::Handle(Array::New(1)); |
224 exception_arguments.SetAt( | 224 exception_arguments.SetAt( |
225 0, Object::Handle(String::New("BigintOperations::NewFromDouble"))); | 225 0, |
| 226 PassiveObject::Handle(String::New("BigintOperations::NewFromDouble"))); |
226 Exceptions::ThrowByType(Exceptions::kInternalError, exception_arguments); | 227 Exceptions::ThrowByType(Exceptions::kInternalError, exception_arguments); |
227 } | 228 } |
228 uint64_t significand = internals.Significand(); | 229 uint64_t significand = internals.Significand(); |
229 intptr_t exponent = internals.Exponent(); | 230 intptr_t exponent = internals.Exponent(); |
230 intptr_t sign = internals.Sign(); | 231 intptr_t sign = internals.Sign(); |
231 if (exponent <= 0) { | 232 if (exponent <= 0) { |
232 significand >>= -exponent; | 233 significand >>= -exponent; |
233 exponent = 0; | 234 exponent = 0; |
234 } else if (exponent <= 10) { | 235 } else if (exponent <= 10) { |
235 // A double significand has at most 53 bits. The following shift will | 236 // A double significand has at most 53 bits. The following shift will |
(...skipping 1622 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1858 intptr_t BigintOperations::CountBits(Chunk digit) { | 1859 intptr_t BigintOperations::CountBits(Chunk digit) { |
1859 intptr_t result = 0; | 1860 intptr_t result = 0; |
1860 while (digit != 0) { | 1861 while (digit != 0) { |
1861 digit >>= 1; | 1862 digit >>= 1; |
1862 result++; | 1863 result++; |
1863 } | 1864 } |
1864 return result; | 1865 return result; |
1865 } | 1866 } |
1866 | 1867 |
1867 } // namespace dart | 1868 } // namespace dart |
OLD | NEW |