Make one-ascii-character-string a symbol in its cache.
authorfeng@chromium.org <feng@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 21 Oct 2008 16:28:44 +0000 (16:28 +0000)
committerfeng@chromium.org <feng@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 21 Oct 2008 16:28:44 +0000 (16:28 +0000)
Review URL: http://codereview.chromium.org/7521

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@539 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/heap.cc

index c4fa2d2..e4e3c47 100644 (file)
@@ -1503,16 +1503,20 @@ Object* Heap::AllocateExternalStringFromTwoByte(
 }
 
 
-Object* Heap:: LookupSingleCharacterStringFromCode(uint16_t code) {
+Object* Heap::LookupSingleCharacterStringFromCode(uint16_t code) {
   if (code <= String::kMaxAsciiCharCode) {
     Object* value = Heap::single_character_string_cache()->get(code);
     if (value != Heap::undefined_value()) return value;
-    Object* result = Heap::AllocateRawAsciiString(1);
+
+    char buffer[1];
+    buffer[0] = static_cast<char>(code);
+    Object* result = LookupSymbol(Vector<const char>(buffer, 1));
+
     if (result->IsFailure()) return result;
-    String::cast(result)->Set(0, code);
     Heap::single_character_string_cache()->set(code, result);
     return result;
   }
+
   Object* result = Heap::AllocateRawTwoByteString(1);
   if (result->IsFailure()) return result;
   String::cast(result)->Set(0, code);