| 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/object.h" | 5 #include "vm/object.h" |
| 6 | 6 |
| 7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
| 8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
| 9 #include "vm/assembler.h" | 9 #include "vm/assembler.h" |
| 10 #include "vm/cpu.h" | 10 #include "vm/cpu.h" |
| (...skipping 15223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15234 | 15234 |
| 15235 RawInteger* Integer::AsValidInteger() const { | 15235 RawInteger* Integer::AsValidInteger() const { |
| 15236 if (FLAG_throw_on_javascript_int_overflow && | 15236 if (FLAG_throw_on_javascript_int_overflow && |
| 15237 CheckJavascriptIntegerOverflow()) { | 15237 CheckJavascriptIntegerOverflow()) { |
| 15238 ThrowJavascriptIntegerOverflow(*this); | 15238 ThrowJavascriptIntegerOverflow(*this); |
| 15239 } | 15239 } |
| 15240 if (IsSmi()) return raw(); | 15240 if (IsSmi()) return raw(); |
| 15241 if (IsMint()) { | 15241 if (IsMint()) { |
| 15242 Mint& mint = Mint::Handle(); | 15242 Mint& mint = Mint::Handle(); |
| 15243 mint ^= raw(); | 15243 mint ^= raw(); |
| 15244 if (Smi::IsValid64(mint.value())) { | 15244 if (Smi::IsValid(mint.value())) { |
| 15245 return Smi::New(mint.value()); | 15245 return Smi::New(mint.value()); |
| 15246 } else { | 15246 } else { |
| 15247 return raw(); | 15247 return raw(); |
| 15248 } | 15248 } |
| 15249 } | 15249 } |
| 15250 ASSERT(IsBigint()); | 15250 ASSERT(IsBigint()); |
| 15251 Bigint& big_value = Bigint::Handle(); | 15251 Bigint& big_value = Bigint::Handle(); |
| 15252 big_value ^= raw(); | 15252 big_value ^= raw(); |
| 15253 if (BigintOperations::FitsIntoSmi(big_value)) { | 15253 if (BigintOperations::FitsIntoSmi(big_value)) { |
| 15254 return BigintOperations::ToSmi(big_value); | 15254 return BigintOperations::ToSmi(big_value); |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15476 return this->Value() & 0xFFFFFFFF; | 15476 return this->Value() & 0xFFFFFFFF; |
| 15477 } | 15477 } |
| 15478 | 15478 |
| 15479 | 15479 |
| 15480 static bool FitsIntoSmi(const Integer& integer) { | 15480 static bool FitsIntoSmi(const Integer& integer) { |
| 15481 if (integer.IsSmi()) { | 15481 if (integer.IsSmi()) { |
| 15482 return true; | 15482 return true; |
| 15483 } | 15483 } |
| 15484 if (integer.IsMint()) { | 15484 if (integer.IsMint()) { |
| 15485 int64_t mint_value = integer.AsInt64Value(); | 15485 int64_t mint_value = integer.AsInt64Value(); |
| 15486 return Smi::IsValid64(mint_value); | 15486 return Smi::IsValid(mint_value); |
| 15487 } | 15487 } |
| 15488 if (integer.IsBigint()) { | 15488 if (integer.IsBigint()) { |
| 15489 return BigintOperations::FitsIntoSmi(Bigint::Cast(integer)); | 15489 return BigintOperations::FitsIntoSmi(Bigint::Cast(integer)); |
| 15490 } | 15490 } |
| 15491 UNREACHABLE(); | 15491 UNREACHABLE(); |
| 15492 return false; | 15492 return false; |
| 15493 } | 15493 } |
| 15494 | 15494 |
| 15495 | 15495 |
| 15496 int Smi::CompareWith(const Integer& other) const { | 15496 int Smi::CompareWith(const Integer& other) const { |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15539 } | 15539 } |
| 15540 | 15540 |
| 15541 | 15541 |
| 15542 void Mint::set_value(int64_t value) const { | 15542 void Mint::set_value(int64_t value) const { |
| 15543 raw_ptr()->value_ = value; | 15543 raw_ptr()->value_ = value; |
| 15544 } | 15544 } |
| 15545 | 15545 |
| 15546 | 15546 |
| 15547 RawMint* Mint::New(int64_t val, Heap::Space space) { | 15547 RawMint* Mint::New(int64_t val, Heap::Space space) { |
| 15548 // Do not allocate a Mint if Smi would do. | 15548 // Do not allocate a Mint if Smi would do. |
| 15549 ASSERT(!Smi::IsValid64(val)); | 15549 ASSERT(!Smi::IsValid(val)); |
| 15550 ASSERT(Isolate::Current()->object_store()->mint_class() != Class::null()); | 15550 ASSERT(Isolate::Current()->object_store()->mint_class() != Class::null()); |
| 15551 Mint& result = Mint::Handle(); | 15551 Mint& result = Mint::Handle(); |
| 15552 { | 15552 { |
| 15553 RawObject* raw = Object::Allocate(Mint::kClassId, | 15553 RawObject* raw = Object::Allocate(Mint::kClassId, |
| 15554 Mint::InstanceSize(), | 15554 Mint::InstanceSize(), |
| 15555 space); | 15555 space); |
| 15556 NoGCScope no_gc; | 15556 NoGCScope no_gc; |
| 15557 result ^= raw; | 15557 result ^= raw; |
| 15558 } | 15558 } |
| 15559 result.set_value(val); | 15559 result.set_value(val); |
| 15560 return result.raw(); | 15560 return result.raw(); |
| 15561 } | 15561 } |
| 15562 | 15562 |
| 15563 | 15563 |
| 15564 RawMint* Mint::NewCanonical(int64_t value) { | 15564 RawMint* Mint::NewCanonical(int64_t value) { |
| 15565 // Do not allocate a Mint if Smi would do. | 15565 // Do not allocate a Mint if Smi would do. |
| 15566 ASSERT(!Smi::IsValid64(value)); | 15566 ASSERT(!Smi::IsValid(value)); |
| 15567 const Class& cls = | 15567 const Class& cls = |
| 15568 Class::Handle(Isolate::Current()->object_store()->mint_class()); | 15568 Class::Handle(Isolate::Current()->object_store()->mint_class()); |
| 15569 const Array& constants = Array::Handle(cls.constants()); | 15569 const Array& constants = Array::Handle(cls.constants()); |
| 15570 const intptr_t constants_len = constants.Length(); | 15570 const intptr_t constants_len = constants.Length(); |
| 15571 // Linear search to see whether this value is already present in the | 15571 // Linear search to see whether this value is already present in the |
| 15572 // list of canonicalized constants. | 15572 // list of canonicalized constants. |
| 15573 Mint& canonical_value = Mint::Handle(); | 15573 Mint& canonical_value = Mint::Handle(); |
| 15574 intptr_t index = 0; | 15574 intptr_t index = 0; |
| 15575 while (index < constants_len) { | 15575 while (index < constants_len) { |
| 15576 canonical_value ^= constants.At(index); | 15576 canonical_value ^= constants.At(index); |
| (...skipping 3478 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 19055 return tag_label.ToCString(); | 19055 return tag_label.ToCString(); |
| 19056 } | 19056 } |
| 19057 | 19057 |
| 19058 | 19058 |
| 19059 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { | 19059 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { |
| 19060 Instance::PrintJSONImpl(stream, ref); | 19060 Instance::PrintJSONImpl(stream, ref); |
| 19061 } | 19061 } |
| 19062 | 19062 |
| 19063 | 19063 |
| 19064 } // namespace dart | 19064 } // namespace dart |
| OLD | NEW |