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

Unified Diff: src/objects-inl.h

Issue 11438046: Cleanup StringCharacterStream and add initial test cases. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Cleanup Created 8 years 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 | « src/objects.cc ('k') | test/cctest/test-strings.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/objects-inl.h
diff --git a/src/objects-inl.h b/src/objects-inl.h
index 9ff35efbcf90aac117d2f1001fed87d705a8741e..638e62b289df6d829aaefe62521cdc96ba2acd92 100644
--- a/src/objects-inl.h
+++ b/src/objects-inl.h
@@ -2517,14 +2517,12 @@ void String::Visit(
String* string,
unsigned offset,
Visitor& visitor,
- ConsOp& consOp,
+ ConsOp& cons_op,
int32_t type,
unsigned length) {
-
ASSERT(length == static_cast<unsigned>(string->length()));
ASSERT(offset <= length);
-
- unsigned sliceOffset = offset;
+ unsigned slice_offset = offset;
while (true) {
ASSERT(type == string->map()->instance_type());
@@ -2532,35 +2530,36 @@ void String::Visit(
case kSeqStringTag | kOneByteStringTag:
visitor.VisitOneByteString(
reinterpret_cast<const uint8_t*>(
- SeqOneByteString::cast(string)->GetChars()) + sliceOffset,
+ SeqOneByteString::cast(string)->GetChars()) + slice_offset,
length - offset);
return;
case kSeqStringTag | kTwoByteStringTag:
visitor.VisitTwoByteString(
reinterpret_cast<const uint16_t*>(
- SeqTwoByteString::cast(string)->GetChars()) + sliceOffset,
+ SeqTwoByteString::cast(string)->GetChars()) + slice_offset,
length - offset);
return;
case kExternalStringTag | kOneByteStringTag:
visitor.VisitOneByteString(
reinterpret_cast<const uint8_t*>(
- ExternalAsciiString::cast(string)->GetChars()) + sliceOffset,
+ ExternalAsciiString::cast(string)->GetChars()) + slice_offset,
length - offset);
return;
case kExternalStringTag | kTwoByteStringTag:
visitor.VisitTwoByteString(
reinterpret_cast<const uint16_t*>(
- ExternalTwoByteString::cast(string)->GetChars()) + sliceOffset,
+ ExternalTwoByteString::cast(string)->GetChars())
+ + slice_offset,
length - offset);
return;
case kSlicedStringTag | kOneByteStringTag:
case kSlicedStringTag | kTwoByteStringTag: {
SlicedString* slicedString = SlicedString::cast(string);
- sliceOffset += slicedString->offset();
+ slice_offset += slicedString->offset();
string = slicedString->parent();
type = string->map()->instance_type();
continue;
@@ -2568,10 +2567,10 @@ void String::Visit(
case kConsStringTag | kOneByteStringTag:
case kConsStringTag | kTwoByteStringTag:
- string = consOp.Operate(ConsString::cast(string), &offset, &type,
+ string = cons_op.Operate(ConsString::cast(string), &offset, &type,
&length);
if (string == NULL) return;
- sliceOffset = offset;
+ slice_offset = offset;
ASSERT(length == static_cast<unsigned>(string->length()));
continue;
@@ -2766,34 +2765,14 @@ unsigned ConsStringIteratorOp::OffsetForDepth(unsigned depth) {
}
-uint32_t ConsStringIteratorOp::MaskForDepth(unsigned depth) {
- return 1 << OffsetForDepth(depth);
-}
-
-
-void ConsStringIteratorOp::SetRightDescent() {
- trace_ |= MaskForDepth(depth_ - 1);
-}
-
-
-void ConsStringIteratorOp::ClearRightDescent() {
- trace_ &= ~MaskForDepth(depth_ - 1);
-}
-
-
void ConsStringIteratorOp::PushLeft(ConsString* string) {
frames_[depth_++ & kDepthMask] = string;
}
-void ConsStringIteratorOp::PushRight(ConsString* string, int32_t type) {
- // Inplace update
+void ConsStringIteratorOp::PushRight(ConsString* string) {
+ // Inplace update.
frames_[(depth_-1) & kDepthMask] = string;
- if (depth_ != 1) return;
- // Optimization: can replace root in this case.
- root_ = string;
- root_type_ = type;
- root_length_ = string->length();
}
@@ -2810,8 +2789,8 @@ void ConsStringIteratorOp::Pop() {
void ConsStringIteratorOp::Reset() {
- consumed_ = 0;
- ResetStack();
+ depth_ = 0;
+ maximum_depth_ = 0;
}
@@ -2820,19 +2799,13 @@ bool ConsStringIteratorOp::HasMore() {
}
-void ConsStringIteratorOp::ResetStack() {
- depth_ = 0;
- maximum_depth_ = 0;
-}
-
-
bool ConsStringIteratorOp::ContinueOperation(ContinueResponse* response) {
- bool blewStack;
+ bool blew_stack;
int32_t type;
- String* string = NextLeaf(&blewStack, &type);
+ unsigned length;
+ String* string = NextLeaf(&blew_stack, &type, &length);
// String found.
if (string != NULL) {
- unsigned length = string->length();
consumed_ += length;
response->string_ = string;
response->offset_ = 0;
@@ -2841,9 +2814,11 @@ bool ConsStringIteratorOp::ContinueOperation(ContinueResponse* response) {
return true;
}
// Traversal complete.
- if (!blewStack) return false;
+ if (!blew_stack) return false;
// Restart search.
- ResetStack();
+ Reset();
+ // TODO(dcarney) This is unnecessary.
+ // After a reset, we don't need a String::Visit
response->string_ = root_;
response->offset_ = consumed_;
response->length_ = root_length_;
@@ -2853,14 +2828,14 @@ bool ConsStringIteratorOp::ContinueOperation(ContinueResponse* response) {
uint16_t StringCharacterStream::GetNext() {
- ASSERT(buffer8_ != NULL);
+ ASSERT((buffer8_ == NULL && end_ == NULL) || buffer8_ < end_);
return is_one_byte_ ? *buffer8_++ : *buffer16_++;
}
StringCharacterStream::StringCharacterStream(
String* string, unsigned offset, ConsStringIteratorOp* op)
- : is_one_byte_(true),
+ : is_one_byte_(false),
buffer8_(NULL),
end_(NULL),
op_(op) {
@@ -2874,11 +2849,7 @@ bool StringCharacterStream::HasMore() {
if (buffer8_ != end_) return true;
if (!op_->HasMore()) return false;
ConsStringIteratorOp::ContinueResponse response;
- // This has been checked above
- if (!op_->ContinueOperation(&response)) {
- UNREACHABLE();
- return false;
- }
+ if (!op_->ContinueOperation(&response)) return false;
String::Visit(response.string_,
response.offset_, *this, *op_, response.type_, response.length_);
return true;
« no previous file with comments | « src/objects.cc ('k') | test/cctest/test-strings.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698