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.

Reply via email to