Revision: 22406
Author: [email protected]
Date: Tue Jul 15 10:51:12 2014 UTC
Log: Allow embedding of ConsString objects into code.
[email protected]
BUG=v8:2803
LOG=N
Review URL: https://codereview.chromium.org/395713002
http://code.google.com/p/v8/source/detail?r=22406
Modified:
/branches/bleeding_edge/src/arm/assembler-arm-inl.h
/branches/bleeding_edge/src/arm64/assembler-arm64-inl.h
/branches/bleeding_edge/src/factory.cc
/branches/bleeding_edge/src/factory.h
/branches/bleeding_edge/src/hydrogen-instructions.cc
/branches/bleeding_edge/src/ia32/assembler-ia32-inl.h
/branches/bleeding_edge/src/ic.cc
/branches/bleeding_edge/src/mips/assembler-mips-inl.h
/branches/bleeding_edge/src/mips64/assembler-mips64-inl.h
/branches/bleeding_edge/src/objects-visiting-inl.h
/branches/bleeding_edge/src/objects.cc
/branches/bleeding_edge/src/x64/assembler-x64-inl.h
/branches/bleeding_edge/src/x87/assembler-x87-inl.h
=======================================
--- /branches/bleeding_edge/src/arm/assembler-arm-inl.h Thu Jul 3 17:01:14
2014 UTC
+++ /branches/bleeding_edge/src/arm/assembler-arm-inl.h Tue Jul 15 10:51:12
2014 UTC
@@ -166,7 +166,6 @@
WriteBarrierMode write_barrier_mode,
ICacheFlushMode icache_flush_mode) {
ASSERT(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT);
- ASSERT(!target->IsConsString());
Assembler::set_target_address_at(pc_, host_,
reinterpret_cast<Address>(target),
icache_flush_mode);
=======================================
--- /branches/bleeding_edge/src/arm64/assembler-arm64-inl.h Tue Jul 8
14:14:25 2014 UTC
+++ /branches/bleeding_edge/src/arm64/assembler-arm64-inl.h Tue Jul 15
10:51:12 2014 UTC
@@ -716,7 +716,6 @@
WriteBarrierMode write_barrier_mode,
ICacheFlushMode icache_flush_mode) {
ASSERT(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT);
- ASSERT(!target->IsConsString());
Assembler::set_target_address_at(pc_, host_,
reinterpret_cast<Address>(target),
icache_flush_mode);
=======================================
--- /branches/bleeding_edge/src/factory.cc Mon Jul 14 14:52:24 2014 UTC
+++ /branches/bleeding_edge/src/factory.cc Tue Jul 15 10:51:12 2014 UTC
@@ -541,19 +541,6 @@
result->set_second(*right, mode);
return result;
}
-
-
-Handle<String> Factory::NewFlatConcatString(Handle<String> first,
- Handle<String> second) {
- int total_length = first->length() + second->length();
- if (first->IsOneByteRepresentation() &&
second->IsOneByteRepresentation()) {
- return ConcatStringContent<uint8_t>(
- NewRawOneByteString(total_length).ToHandleChecked(), first,
second);
- } else {
- return ConcatStringContent<uc16>(
- NewRawTwoByteString(total_length).ToHandleChecked(), first,
second);
- }
-}
Handle<String> Factory::NewProperSubString(Handle<String> str,
=======================================
--- /branches/bleeding_edge/src/factory.h Mon Jul 7 13:27:37 2014 UTC
+++ /branches/bleeding_edge/src/factory.h Tue Jul 15 10:51:12 2014 UTC
@@ -197,10 +197,6 @@
MUST_USE_RESULT MaybeHandle<String> NewConsString(Handle<String> left,
Handle<String> right);
- // Create a new sequential string containing the concatenation of the
inputs.
- Handle<String> NewFlatConcatString(Handle<String> first,
- Handle<String> second);
-
// Create a new string object which holds a proper substring of a string.
Handle<String> NewProperSubString(Handle<String> str,
int begin,
=======================================
--- /branches/bleeding_edge/src/hydrogen-instructions.cc Fri Jul 11
12:12:58 2014 UTC
+++ /branches/bleeding_edge/src/hydrogen-instructions.cc Tue Jul 15
10:51:12 2014 UTC
@@ -4067,10 +4067,9 @@
Handle<String> right_string = c_right->StringValue();
// Prevent possible exception by invalid string length.
if (left_string->length() + right_string->length() <
String::kMaxLength) {
- Handle<String> concat =
zone->isolate()->factory()->NewFlatConcatString(
+ MaybeHandle<String> concat =
zone->isolate()->factory()->NewConsString(
c_left->StringValue(), c_right->StringValue());
- ASSERT(!concat.is_null());
- return HConstant::New(zone, context, concat);
+ return HConstant::New(zone, context, concat.ToHandleChecked());
}
}
}
=======================================
--- /branches/bleeding_edge/src/ia32/assembler-ia32-inl.h Mon Jun 30
13:25:46 2014 UTC
+++ /branches/bleeding_edge/src/ia32/assembler-ia32-inl.h Tue Jul 15
10:51:12 2014 UTC
@@ -141,7 +141,6 @@
WriteBarrierMode write_barrier_mode,
ICacheFlushMode icache_flush_mode) {
ASSERT(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT);
- ASSERT(!target->IsConsString());
Memory::Object_at(pc_) = target;
if (icache_flush_mode != SKIP_ICACHE_FLUSH) {
CpuFeatures::FlushICache(pc_, sizeof(Address));
=======================================
--- /branches/bleeding_edge/src/ic.cc Mon Jul 14 14:52:24 2014 UTC
+++ /branches/bleeding_edge/src/ic.cc Tue Jul 15 10:51:12 2014 UTC
@@ -992,9 +992,6 @@
}
case CONSTANT: {
Handle<Object> constant(lookup->GetConstant(), isolate());
- // TODO(2803): Don't compute a stub for cons strings because they
cannot
- // be embedded into code.
- if (constant->IsConsString()) break;
return compiler.CompileLoadConstant(type, holder, name, constant);
}
case NORMAL:
=======================================
--- /branches/bleeding_edge/src/mips/assembler-mips-inl.h Mon Jun 30
13:25:46 2014 UTC
+++ /branches/bleeding_edge/src/mips/assembler-mips-inl.h Tue Jul 15
10:51:12 2014 UTC
@@ -207,7 +207,6 @@
WriteBarrierMode write_barrier_mode,
ICacheFlushMode icache_flush_mode) {
ASSERT(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT);
- ASSERT(!target->IsConsString());
Assembler::set_target_address_at(pc_, host_,
reinterpret_cast<Address>(target),
icache_flush_mode);
=======================================
--- /branches/bleeding_edge/src/mips64/assembler-mips64-inl.h Wed Jul 9
11:08:26 2014 UTC
+++ /branches/bleeding_edge/src/mips64/assembler-mips64-inl.h Tue Jul 15
10:51:12 2014 UTC
@@ -201,7 +201,6 @@
WriteBarrierMode write_barrier_mode,
ICacheFlushMode icache_flush_mode) {
ASSERT(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT);
- ASSERT(!target->IsConsString());
Assembler::set_target_address_at(pc_, host_,
reinterpret_cast<Address>(target),
icache_flush_mode);
=======================================
--- /branches/bleeding_edge/src/objects-visiting-inl.h Tue Jun 3 17:37:33
2014 UTC
+++ /branches/bleeding_edge/src/objects-visiting-inl.h Tue Jul 15 10:51:12
2014 UTC
@@ -237,7 +237,6 @@
void StaticMarkingVisitor<StaticVisitor>::VisitEmbeddedPointer(
Heap* heap, RelocInfo* rinfo) {
ASSERT(rinfo->rmode() == RelocInfo::EMBEDDED_OBJECT);
- ASSERT(!rinfo->target_object()->IsConsString());
HeapObject* object = HeapObject::cast(rinfo->target_object());
heap->mark_compact_collector()->RecordRelocSlot(rinfo, object);
// TODO(ulan): It could be better to record slots only for strongly
embedded
=======================================
--- /branches/bleeding_edge/src/objects.cc Tue Jul 15 08:46:47 2014 UTC
+++ /branches/bleeding_edge/src/objects.cc Tue Jul 15 10:51:12 2014 UTC
@@ -16900,10 +16900,9 @@
Handle<Object> value) {
Isolate* isolate = cell->GetIsolate();
Handle<HeapType> old_type(cell->type(), isolate);
- // TODO(2803): Do not track ConsString as constant because they cannot be
- // embedded into code.
- Handle<HeapType> new_type = value->IsConsString() || value->IsTheHole()
- ? HeapType::Any(isolate) : HeapType::Constant(value, isolate);
+ Handle<HeapType> new_type = value->IsTheHole()
+ ? HeapType::Any(isolate)
+ : HeapType::Constant(value, isolate);
if (new_type->Is(old_type)) {
return old_type;
=======================================
--- /branches/bleeding_edge/src/x64/assembler-x64-inl.h Mon Jun 30 13:25:46
2014 UTC
+++ /branches/bleeding_edge/src/x64/assembler-x64-inl.h Tue Jul 15 10:51:12
2014 UTC
@@ -307,7 +307,6 @@
WriteBarrierMode write_barrier_mode,
ICacheFlushMode icache_flush_mode) {
ASSERT(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT);
- ASSERT(!target->IsConsString());
Memory::Object_at(pc_) = target;
if (icache_flush_mode != SKIP_ICACHE_FLUSH) {
CpuFeatures::FlushICache(pc_, sizeof(Address));
=======================================
--- /branches/bleeding_edge/src/x87/assembler-x87-inl.h Mon Jun 30 13:25:46
2014 UTC
+++ /branches/bleeding_edge/src/x87/assembler-x87-inl.h Tue Jul 15 10:51:12
2014 UTC
@@ -142,7 +142,6 @@
WriteBarrierMode write_barrier_mode,
ICacheFlushMode icache_flush_mode) {
ASSERT(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT);
- ASSERT(!target->IsConsString());
Memory::Object_at(pc_) = target;
if (icache_flush_mode != SKIP_ICACHE_FLUSH) {
CpuFeatures::FlushICache(pc_, sizeof(Address));
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.