Reviewers: Yang,
Message:
By now this seems to be a matter of removing asserts. Please note that this
change still doesn't do short-circuiting of embedded ConsString objects in
code.
This can be done in a follow-up CL if necessary by adapting
VisitEmbeddedPointer.
Description:
Allow embedding of ConsString objects into code.
[email protected]
BUG=v8:2803
LOG=N
Please review this at https://codereview.chromium.org/395713002/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files (+3, -15 lines):
M src/arm/assembler-arm-inl.h
M src/arm64/assembler-arm64-inl.h
M src/ia32/assembler-ia32-inl.h
M src/ic.cc
M src/mips/assembler-mips-inl.h
M src/mips64/assembler-mips64-inl.h
M src/objects.cc
M src/objects-visiting-inl.h
M src/x64/assembler-x64-inl.h
M src/x87/assembler-x87-inl.h
Index: src/arm/assembler-arm-inl.h
diff --git a/src/arm/assembler-arm-inl.h b/src/arm/assembler-arm-inl.h
index
f5b901578e3a0e1d75d12dfb8ab64407e82d9360..292885d1b248d99a358db9de9d13a28ebae8cd81
100644
--- a/src/arm/assembler-arm-inl.h
+++ b/src/arm/assembler-arm-inl.h
@@ -166,7 +166,6 @@ void RelocInfo::set_target_object(Object* target,
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);
Index: src/arm64/assembler-arm64-inl.h
diff --git a/src/arm64/assembler-arm64-inl.h
b/src/arm64/assembler-arm64-inl.h
index
a0bcb77e6b5cd7f0eb8bdadfe17119ba01728397..1454adf44c9c947f81117137f90a2598333dde64
100644
--- a/src/arm64/assembler-arm64-inl.h
+++ b/src/arm64/assembler-arm64-inl.h
@@ -716,7 +716,6 @@ void RelocInfo::set_target_object(Object* target,
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);
Index: src/ia32/assembler-ia32-inl.h
diff --git a/src/ia32/assembler-ia32-inl.h b/src/ia32/assembler-ia32-inl.h
index
9531c695e3a95cb5b14096a77b8dd7e53034d48a..ff8978c966b2274ee0883742d5dabdf803356f07
100644
--- a/src/ia32/assembler-ia32-inl.h
+++ b/src/ia32/assembler-ia32-inl.h
@@ -141,7 +141,6 @@ void RelocInfo::set_target_object(Object* target,
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));
Index: src/ic.cc
diff --git a/src/ic.cc b/src/ic.cc
index
e2123d0f7cd27fd64be02c4374596cf495db1c76..42a4bfc82a76b767d4bf48896b19b57ce0fe5f39
100644
--- a/src/ic.cc
+++ b/src/ic.cc
@@ -992,9 +992,6 @@ Handle<Code> LoadIC::CompileHandler(LookupResult*
lookup,
}
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:
Index: src/mips/assembler-mips-inl.h
diff --git a/src/mips/assembler-mips-inl.h b/src/mips/assembler-mips-inl.h
index
086e55a6f48dee5fae170a69be02d28a74ea2ffe..cf8865b875d690db6e35dcad7fc6e74b06d425f6
100644
--- a/src/mips/assembler-mips-inl.h
+++ b/src/mips/assembler-mips-inl.h
@@ -207,7 +207,6 @@ void RelocInfo::set_target_object(Object* target,
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);
Index: src/mips64/assembler-mips64-inl.h
diff --git a/src/mips64/assembler-mips64-inl.h
b/src/mips64/assembler-mips64-inl.h
index
776fe567910d52119fa74eff1bd51e9ad231ff8b..9c6d1573a24bd1e76ca4835d5896f2950fccf530
100644
--- a/src/mips64/assembler-mips64-inl.h
+++ b/src/mips64/assembler-mips64-inl.h
@@ -201,7 +201,6 @@ void RelocInfo::set_target_object(Object* target,
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);
Index: src/objects-visiting-inl.h
diff --git a/src/objects-visiting-inl.h b/src/objects-visiting-inl.h
index
887a3de868f69bd650e7ad11ac605117203b0d38..f7341c98e3e7ae869c0d67bf049b35f8ea3511df
100644
--- a/src/objects-visiting-inl.h
+++ b/src/objects-visiting-inl.h
@@ -237,7 +237,6 @@ template<typename StaticVisitor>
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
Index: src/objects.cc
diff --git a/src/objects.cc b/src/objects.cc
index
27636585b1c736aac37384ee1d82a5a8e22ef4d3..39c4cbca9890e4b77a1d8e651f6b3304c6ac0515
100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -16942,10 +16942,9 @@ Handle<HeapType>
PropertyCell::UpdatedType(Handle<PropertyCell> cell,
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;
Index: src/x64/assembler-x64-inl.h
diff --git a/src/x64/assembler-x64-inl.h b/src/x64/assembler-x64-inl.h
index
0006481996e3ac3781790cd4b49ae40c6e64790f..299ef29818dca9dae13701ad1a6dff67fe96f535
100644
--- a/src/x64/assembler-x64-inl.h
+++ b/src/x64/assembler-x64-inl.h
@@ -307,7 +307,6 @@ void RelocInfo::set_target_object(Object* target,
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));
Index: src/x87/assembler-x87-inl.h
diff --git a/src/x87/assembler-x87-inl.h b/src/x87/assembler-x87-inl.h
index
e1682926201ae00f823d3b002a6578c11886623c..07a8751099c1c6844397332b30501f7d216a806c
100644
--- a/src/x87/assembler-x87-inl.h
+++ b/src/x87/assembler-x87-inl.h
@@ -142,7 +142,6 @@ void RelocInfo::set_target_object(Object* target,
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.