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.

Reply via email to