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

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
Index: runtime/vm/object.h
===================================================================
--- runtime/vm/object.h (revision 39823)
+++ 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) ==
@@ -3123,7 +3123,7 @@
static const intptr_t kMaxBytesPerElement =
sizeof(RawPcDescriptors::PcDescriptorRec);
- static const intptr_t kMaxElements = kSmiMax / kMaxBytesPerElement;
+ static const intptr_t kMaxElements = kSmi32Max / kMaxBytesPerElement;
siva 2014/09/09 16:47:24 Does this need to be kSmi32Max why not just kMaxIn
zra 2014/09/09 17:42:38 Done.
static intptr_t InstanceSize() {
ASSERT(sizeof(RawPcDescriptors) ==
@@ -3251,11 +3251,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;
}
@@ -3664,7 +3668,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 {
@@ -3720,7 +3724,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,
@@ -3894,14 +3899,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 {
@@ -3932,9 +3941,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);
@@ -7102,8 +7113,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:
@@ -7115,14 +7126,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_;
@@ -7130,11 +7151,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);
@@ -7159,9 +7180,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.
« runtime/vm/globals.h ('K') | « runtime/vm/globals.h ('k') | runtime/vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698