X64: Fix bug in boolean conversion of empty string.
Review URL: http://codereview.chromium.org/165043 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@2632 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
3abd9bfa93
commit
6f21761ea8
@ -1669,7 +1669,7 @@ Object* Heap::AllocateSlicedString(String* buffer,
|
||||
int length = end - start;
|
||||
|
||||
// If the resulting string is small make a sub string.
|
||||
if (end - start <= String::kMinNonFlatLength) {
|
||||
if (length <= String::kMinNonFlatLength) {
|
||||
return Heap::AllocateSubString(buffer, start, end);
|
||||
}
|
||||
|
||||
|
@ -4038,8 +4038,8 @@ class SlicedString: public String {
|
||||
// Layout description
|
||||
#if V8_HOST_ARCH_64_BIT
|
||||
// Optimizations expect buffer to be located at same offset as a ConsString's
|
||||
// first substring. In 64 bit mode we have room for the size before the
|
||||
// buffer.
|
||||
// first substring. In 64 bit mode we have room for the start offset before
|
||||
// the buffer.
|
||||
static const int kStartOffset = String::kSize;
|
||||
static const int kBufferOffset = kStartOffset + kIntSize;
|
||||
static const int kSize = kBufferOffset + kPointerSize;
|
||||
|
@ -5695,7 +5695,7 @@ void ToBooleanStub::Generate(MacroAssembler* masm) {
|
||||
__ and_(rcx, Immediate(kStringSizeMask));
|
||||
__ cmpq(rcx, Immediate(kShortStringTag));
|
||||
__ j(not_equal, &true_result); // Empty string is always short.
|
||||
__ movq(rdx, FieldOperand(rax, String::kLengthOffset));
|
||||
__ movl(rdx, FieldOperand(rax, String::kLengthOffset));
|
||||
__ shr(rdx, Immediate(String::kShortLengthShift));
|
||||
__ j(zero, &false_result);
|
||||
__ jmp(&true_result);
|
||||
|
Loading…
Reference in New Issue
Block a user