Commit 8da845df authored by Jakob Gruber's avatar Jakob Gruber Committed by V8 LUCI CQ

[objects] Modern style DCHECKs in ByteArray accessors

Change-Id: I4ed4d0c53a90af4a8d3a58fa3f418576aadd09c3
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3234195
Commit-Queue: Patrick Thier <pthier@chromium.org>
Auto-Submit: Jakob Gruber <jgruber@chromium.org>
Reviewed-by: 's avatarPatrick Thier <pthier@chromium.org>
Cr-Commit-Position: refs/heads/main@{#77464}
parent 8bbb44e5
...@@ -556,66 +556,80 @@ void ArrayList::Clear(int index, Object undefined) { ...@@ -556,66 +556,80 @@ void ArrayList::Clear(int index, Object undefined) {
int ByteArray::Size() { return RoundUp(length() + kHeaderSize, kTaggedSize); } int ByteArray::Size() { return RoundUp(length() + kHeaderSize, kTaggedSize); }
byte ByteArray::get(int index) const { byte ByteArray::get(int index) const {
DCHECK(index >= 0 && index < length()); DCHECK_GE(index, 0);
DCHECK_LT(index, length());
return ReadField<byte>(kHeaderSize + index * kCharSize); return ReadField<byte>(kHeaderSize + index * kCharSize);
} }
void ByteArray::set(int index, byte value) { void ByteArray::set(int index, byte value) {
DCHECK(index >= 0 && index < length()); DCHECK_GE(index, 0);
DCHECK_LT(index, length());
WriteField<byte>(kHeaderSize + index * kCharSize, value); WriteField<byte>(kHeaderSize + index * kCharSize, value);
} }
void ByteArray::copy_in(int index, const byte* buffer, int length) { void ByteArray::copy_in(int index, const byte* buffer, int slice_length) {
DCHECK(index >= 0 && length >= 0 && length <= kMaxInt - index && DCHECK_GE(index, 0);
index + length <= this->length()); DCHECK_GE(slice_length, 0);
DCHECK_LE(slice_length, kMaxInt - index);
DCHECK_LE(index + slice_length, length());
Address dst_addr = field_address(kHeaderSize + index * kCharSize); Address dst_addr = field_address(kHeaderSize + index * kCharSize);
memcpy(reinterpret_cast<void*>(dst_addr), buffer, length); memcpy(reinterpret_cast<void*>(dst_addr), buffer, slice_length);
} }
void ByteArray::copy_out(int index, byte* buffer, int length) { void ByteArray::copy_out(int index, byte* buffer, int slice_length) {
DCHECK(index >= 0 && length >= 0 && length <= kMaxInt - index && DCHECK_GE(index, 0);
index + length <= this->length()); DCHECK_GE(slice_length, 0);
DCHECK_LE(slice_length, kMaxInt - index);
DCHECK_LE(index + slice_length, length());
Address src_addr = field_address(kHeaderSize + index * kCharSize); Address src_addr = field_address(kHeaderSize + index * kCharSize);
memcpy(buffer, reinterpret_cast<void*>(src_addr), length); memcpy(buffer, reinterpret_cast<void*>(src_addr), slice_length);
} }
int ByteArray::get_int(int index) const { int ByteArray::get_int(int index) const {
DCHECK(index >= 0 && index < length() / kIntSize); DCHECK_GE(index, 0);
DCHECK_LT(index, length() / kIntSize);
return ReadField<int>(kHeaderSize + index * kIntSize); return ReadField<int>(kHeaderSize + index * kIntSize);
} }
void ByteArray::set_int(int index, int value) { void ByteArray::set_int(int index, int value) {
DCHECK(index >= 0 && index < length() / kIntSize); DCHECK_GE(index, 0);
DCHECK_LT(index, length() / kIntSize);
WriteField<int>(kHeaderSize + index * kIntSize, value); WriteField<int>(kHeaderSize + index * kIntSize, value);
} }
uint32_t ByteArray::get_uint32(int index) const { uint32_t ByteArray::get_uint32(int index) const {
DCHECK(index >= 0 && index < length() / kUInt32Size); DCHECK_GE(index, 0);
DCHECK_LT(index, length() / kUInt32Size);
return ReadField<uint32_t>(kHeaderSize + index * kUInt32Size); return ReadField<uint32_t>(kHeaderSize + index * kUInt32Size);
} }
void ByteArray::set_uint32(int index, uint32_t value) { void ByteArray::set_uint32(int index, uint32_t value) {
DCHECK(index >= 0 && index < length() / kUInt32Size); DCHECK_GE(index, 0);
DCHECK_LT(index, length() / kUInt32Size);
WriteField<uint32_t>(kHeaderSize + index * kUInt32Size, value); WriteField<uint32_t>(kHeaderSize + index * kUInt32Size, value);
} }
uint32_t ByteArray::get_uint32_relaxed(int index) const { uint32_t ByteArray::get_uint32_relaxed(int index) const {
DCHECK(index >= 0 && index < length() / kUInt32Size); DCHECK_GE(index, 0);
DCHECK_LT(index, length() / kUInt32Size);
return RELAXED_READ_UINT32_FIELD(*this, kHeaderSize + index * kUInt32Size); return RELAXED_READ_UINT32_FIELD(*this, kHeaderSize + index * kUInt32Size);
} }
void ByteArray::set_uint32_relaxed(int index, uint32_t value) { void ByteArray::set_uint32_relaxed(int index, uint32_t value) {
DCHECK(index >= 0 && index < length() / kUInt32Size); DCHECK_GE(index, 0);
DCHECK_LT(index, length() / kUInt32Size);
RELAXED_WRITE_UINT32_FIELD(*this, kHeaderSize + index * kUInt32Size, value); RELAXED_WRITE_UINT32_FIELD(*this, kHeaderSize + index * kUInt32Size, value);
} }
uint16_t ByteArray::get_uint16(int index) const { uint16_t ByteArray::get_uint16(int index) const {
DCHECK(index >= 0 && index < length() / kUInt16Size); DCHECK_GE(index, 0);
DCHECK_LT(index, length() / kUInt16Size);
return ReadField<uint16_t>(kHeaderSize + index * kUInt16Size); return ReadField<uint16_t>(kHeaderSize + index * kUInt16Size);
} }
void ByteArray::set_uint16(int index, uint16_t value) { void ByteArray::set_uint16(int index, uint16_t value) {
DCHECK(index >= 0 && index < length() / kUInt16Size); DCHECK_GE(index, 0);
DCHECK_LT(index, length() / kUInt16Size);
WriteField<uint16_t>(kHeaderSize + index * kUInt16Size, value); WriteField<uint16_t>(kHeaderSize + index * kUInt16Size, value);
} }
......
...@@ -508,8 +508,8 @@ class ByteArray : public TorqueGeneratedByteArray<ByteArray, FixedArrayBase> { ...@@ -508,8 +508,8 @@ class ByteArray : public TorqueGeneratedByteArray<ByteArray, FixedArrayBase> {
inline void set(int index, byte value); inline void set(int index, byte value);
// Copy in / copy out whole byte slices. // Copy in / copy out whole byte slices.
inline void copy_out(int index, byte* buffer, int length); inline void copy_out(int index, byte* buffer, int slice_length);
inline void copy_in(int index, const byte* buffer, int length); inline void copy_in(int index, const byte* buffer, int slice_length);
// Treat contents as an int array. // Treat contents as an int array.
inline int get_int(int index) const; inline int get_int(int index) const;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment