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

Unified Diff: runtime/vm/object.h

Issue 343803002: Finishes removing intptr_t from raw object fields. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 3 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
« no previous file with comments | « runtime/vm/debugger.cc ('k') | runtime/vm/object.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/object.h
===================================================================
--- runtime/vm/object.h (revision 40039)
+++ runtime/vm/object.h (working copy)
@@ -3012,7 +3012,7 @@
return reinterpret_cast<uword>(raw_ptr()) + HeaderSize();
}
- static const intptr_t kMaxElements = (kIntptrMax -
+ static const intptr_t kMaxElements = (kMaxInt32 -
(sizeof(RawInstructions) +
sizeof(RawObject) +
(2 * OS::kMaxPreferredCodeAlignment)));
@@ -3078,7 +3078,7 @@
static const intptr_t kBytesPerElement =
sizeof(RawLocalVarDescriptors::VarInfo);
- static const intptr_t kMaxElements = kSmiMax / kBytesPerElement;
+ static const intptr_t kMaxElements = RawLocalVarDescriptors::kMaxIndex;
static intptr_t InstanceSize() {
ASSERT(sizeof(RawLocalVarDescriptors) ==
@@ -3125,7 +3125,7 @@
static const intptr_t kMaxBytesPerElement =
sizeof(RawPcDescriptors::PcDescriptorRec);
- static const intptr_t kMaxElements = kSmiMax / kMaxBytesPerElement;
+ static const intptr_t kMaxElements = kMaxInt32 / kMaxBytesPerElement;
static intptr_t InstanceSize() {
ASSERT(sizeof(RawPcDescriptors) ==
@@ -3253,11 +3253,15 @@
intptr_t Length() const { return raw_ptr()->length_; }
- uword PC() const { return raw_ptr()->pc_; }
- void SetPC(uword value) const { raw_ptr()->pc_ = value; }
+ uint32_t PcOffset() const { return raw_ptr()->pc_offset_; }
+ void SetPcOffset(uint32_t value) const {
+ ASSERT(value <= kMaxUint32);
+ raw_ptr()->pc_offset_ = value;
+ }
intptr_t RegisterBitCount() const { return raw_ptr()->register_bit_count_; }
void SetRegisterBitCount(intptr_t register_bit_count) const {
+ ASSERT(register_bit_count < kMaxInt32);
raw_ptr()->register_bit_count_ = register_bit_count;
}
@@ -3661,7 +3665,7 @@
return OFFSET_OF(RawCode, instructions_);
}
intptr_t pointer_offsets_length() const {
- return raw_ptr()->pointer_offsets_length_;
+ return PtrOffBits::decode(raw_ptr()->state_bits_);
}
bool is_optimized() const {
@@ -3717,7 +3721,8 @@
return raw_ptr()->stackmaps_;
}
void set_stackmaps(const Array& maps) const;
- RawStackmap* GetStackmap(uword pc, Array* stackmaps, Stackmap* map) const;
+ RawStackmap* GetStackmap(
+ uint32_t pc_offset, Array* stackmaps, Stackmap* map) const;
enum {
kSCallTableOffsetEntry = 0,
@@ -3891,14 +3896,18 @@
private:
void set_state_bits(intptr_t bits) const;
+ friend class RawObject; // For RawObject::SizeFromClass().
friend class RawCode;
enum {
kOptimizedBit = 0,
kAliveBit = 1,
+ kPtrOffBit = 2,
+ kPtrOffSize = 30,
};
class OptimizedBit : public BitField<bool, kOptimizedBit, 1> {};
class AliveBit : public BitField<bool, kAliveBit, 1> {};
+ class PtrOffBits : public BitField<intptr_t, kPtrOffBit, kPtrOffSize> {};
// An object finder visitor interface.
class FindRawCodeVisitor : public FindObjectVisitor {
@@ -3929,9 +3938,11 @@
// store buffer update is not needed here.
raw_ptr()->instructions_ = instructions;
}
+
void set_pointer_offsets_length(intptr_t value) {
- ASSERT(value >= 0);
- raw_ptr()->pointer_offsets_length_ = value;
+ // The number of fixups is limited to 1-billion.
+ ASSERT(Utils::IsUint(30, value));
+ set_state_bits(PtrOffBits::update(value, raw_ptr()->state_bits_));
}
int32_t* PointerOffsetAddrAt(int index) const {
ASSERT(index >= 0);
@@ -7103,8 +7114,8 @@
// kComplex: A complex pattern to match.
enum RegExType {
kUnitialized = 0,
- kSimple,
- kComplex,
+ kSimple = 1,
+ kComplex = 2,
};
// Flags are passed to a regex object as follows:
@@ -7116,14 +7127,24 @@
kMultiLine = 4,
};
- bool is_initialized() const { return (raw_ptr()->type_ != kUnitialized); }
- bool is_simple() const { return (raw_ptr()->type_ == kSimple); }
- bool is_complex() const { return (raw_ptr()->type_ == kComplex); }
+ enum {
+ kTypePos = 0,
+ kTypeSize = 2,
+ kFlagsPos = 2,
+ kFlagsSize = 4,
+ };
- bool is_global() const { return (raw_ptr()->flags_ & kGlobal); }
- bool is_ignore_case() const { return (raw_ptr()->flags_ & kIgnoreCase); }
- bool is_multi_line() const { return (raw_ptr()->flags_ & kMultiLine); }
+ class TypeBits : public BitField<RegExType, kTypePos, kTypeSize> {};
+ class FlagsBits : public BitField<intptr_t, kFlagsPos, kFlagsSize> {};
+ bool is_initialized() const { return (type() != kUnitialized); }
+ bool is_simple() const { return (type() == kSimple); }
+ bool is_complex() const { return (type() == kComplex); }
+
+ bool is_global() const { return (flags() & kGlobal); }
+ bool is_ignore_case() const { return (flags() & kIgnoreCase); }
+ bool is_multi_line() const { return (flags() & kMultiLine); }
+
RawString* pattern() const { return raw_ptr()->pattern_; }
RawSmi* num_bracket_expressions() const {
return raw_ptr()->num_bracket_expressions_;
@@ -7131,11 +7152,11 @@
void set_pattern(const String& pattern) const;
void set_num_bracket_expressions(intptr_t value) const;
- void set_is_global() const { raw_ptr()->flags_ |= kGlobal; }
- void set_is_ignore_case() const { raw_ptr()->flags_ |= kIgnoreCase; }
- void set_is_multi_line() const { raw_ptr()->flags_ |= kMultiLine; }
- void set_is_simple() const { raw_ptr()->type_ = kSimple; }
- void set_is_complex() const { raw_ptr()->type_ = kComplex; }
+ void set_is_global() const { set_flags(flags() | kGlobal); }
+ void set_is_ignore_case() const { set_flags(flags() | kIgnoreCase); }
+ void set_is_multi_line() const { set_flags(flags() | kMultiLine); }
+ void set_is_simple() const { set_type(kSimple); }
+ void set_is_complex() const { set_type(kComplex); }
void* GetDataStartAddress() const;
static RawJSRegExp* FromDataStartAddress(void* data);
@@ -7160,9 +7181,20 @@
static RawJSRegExp* New(intptr_t length, Heap::Space space = Heap::kNew);
private:
- void set_type(RegExType type) const { raw_ptr()->type_ = type; }
- void set_flags(intptr_t value) const { raw_ptr()->flags_ = value; }
+ void set_type(RegExType type) const {
+ raw_ptr()->type_flags_ = TypeBits::update(type, raw_ptr()->type_flags_);
+ }
+ void set_flags(intptr_t value) const {
+ raw_ptr()->type_flags_ = FlagsBits::update(value, raw_ptr()->type_flags_);
+ }
+ RegExType type() const {
+ return TypeBits::decode(raw_ptr()->type_flags_);
+ }
+ intptr_t flags() const {
+ return FlagsBits::decode(raw_ptr()->type_flags_);
+ }
+
void SetLength(intptr_t value) const {
// This is only safe because we create a new Smi, which does not cause
// heap allocation.
« no previous file with comments | « runtime/vm/debugger.cc ('k') | runtime/vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698