Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(162)

Unified Diff: runtime/vm/object.h

Issue 842033005: Make Bigint instances immutable by removing all setters. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/vm/object.h
===================================================================
--- runtime/vm/object.h (revision 43482)
+++ runtime/vm/object.h (working copy)
@@ -5579,36 +5579,34 @@
return RoundedAllocationSize(sizeof(RawBigint));
}
+ // Offsets of fields accessed directly by optimized code.
+ static intptr_t neg_offset() { return OFFSET_OF(RawBigint, neg_); }
+ static intptr_t used_offset() { return OFFSET_OF(RawBigint, used_); }
+ static intptr_t digits_offset() { return OFFSET_OF(RawBigint, digits_); }
+
// Accessors used by native calls from Dart.
RawBool* neg() const { return raw_ptr()->neg_; }
- void set_neg(const Bool& value) const;
- static intptr_t neg_offset() { return OFFSET_OF(RawBigint, neg_); }
RawSmi* used() const { return raw_ptr()->used_; }
- void set_used(const Smi& value) const;
- static intptr_t used_offset() { return OFFSET_OF(RawBigint, used_); }
RawTypedData* digits() const { return raw_ptr()->digits_; }
- void set_digits(const TypedData& value) const;
- static intptr_t digits_offset() { return OFFSET_OF(RawBigint, digits_); }
// Accessors used by runtime calls from C++.
bool Neg() const;
- void SetNeg(bool value) const;
intptr_t Used() const;
- void SetUsed(intptr_t value) const;
uint32_t DigitAt(intptr_t index) const;
- void SetDigitAt(intptr_t index, uint32_t value) const;
const char* ToDecCString(uword (*allocator)(intptr_t size)) const;
const char* ToHexCString(uword (*allocator)(intptr_t size)) const;
- static const intptr_t kExtraDigits = 4; // Same as _Bigint.EXTRA_DIGITS
- static const intptr_t kBitsPerDigit = 32; // Same as _Bigint.DIGIT_BITS
+ static const intptr_t kBitsPerDigit = 32; // Same as _Bigint._DIGIT_BITS
static const intptr_t kBytesPerDigit = 4;
static const int64_t kDigitBase = 1LL << kBitsPerDigit;
static const int64_t kDigitMask = kDigitBase - 1;
- static RawBigint* New(Heap::Space space = Heap::kNew);
+ static RawBigint* New(Heap::Space space = Heap::kNew); // For snapshots.
+ static RawBigint* New(bool neg, intptr_t used, const TypedData& digits,
+ Heap::Space space = Heap::kNew);
+
static RawBigint* NewFromInt64(int64_t value,
Heap::Space space = Heap::kNew);
@@ -5625,19 +5623,23 @@
static RawBigint* NewCanonical(const String& str);
private:
- static RawBigint* NewFromHexCString(const char* str,
- Heap::Space space = Heap::kNew);
- static RawBigint* NewFromDecCString(const char* str,
- Heap::Space space = Heap::kNew);
+ void SetNeg(bool value) const;
+ void SetUsed(intptr_t value) const;
+ void set_digits(const TypedData& value) const;
- // Make sure at least 'length' _digits are allocated.
- // Copy existing _digits if reallocation is necessary.
- void EnsureLength(intptr_t length, Heap::Space space = Heap::kNew) const;
+ // Convenience helpers.
+ static RawTypedData* NewDigits(intptr_t length,
+ Heap::Space space = Heap::kNew);
+ static uint32_t DigitAt(const TypedData& digits, intptr_t index);
+ static void SetDigitAt(const TypedData& digits,
+ intptr_t index,
+ uint32_t value);
- // Do not count zero high digits as used.
- void Clamp() const;
+ static RawTypedData* NewDigitsFromHexCString(const char* str, intptr_t* used,
+ Heap::Space space = Heap::kNew);
- bool IsClamped() const;
+ static RawTypedData* NewDigitsFromDecCString(const char* str, intptr_t* used,
+ Heap::Space space = Heap::kNew);
static RawBigint* Allocate(intptr_t length, Heap::Space space = Heap::kNew);

Powered by Google App Engine
This is Rietveld 408576698