Revision: 7454
Author:   [email protected]
Date:     Thu Mar 31 03:33:45 2011
Log: Improve property access with keys that can always be converted into a symbol string.
Review URL: http://codereview.chromium.org/6670115
http://code.google.com/p/v8/source/detail?r=7454

Modified:
 /branches/bleeding_edge/src/heap.h
 /branches/bleeding_edge/src/ic.cc

=======================================
--- /branches/bleeding_edge/src/heap.h  Wed Mar 30 08:17:10 2011
+++ /branches/bleeding_edge/src/heap.h  Thu Mar 31 03:33:45 2011
@@ -155,6 +155,7 @@
   V(name_symbol, "name")                                                 \
   V(number_symbol, "number")                                             \
   V(Number_symbol, "Number")                                             \
+  V(nan_symbol, "NaN")                                                   \
   V(RegExp_symbol, "RegExp")                                             \
   V(source_symbol, "source")                                             \
   V(global_symbol, "global")                                             \
=======================================
--- /branches/bleeding_edge/src/ic.cc   Wed Mar 30 07:17:39 2011
+++ /branches/bleeding_edge/src/ic.cc   Thu Mar 31 03:33:45 2011
@@ -1143,6 +1143,16 @@
 MaybeObject* KeyedLoadIC::Load(State state,
                                Handle<Object> object,
                                Handle<Object> key) {
+  // Check for values that can be converted into a symbol.
+  // TODO(1295): Remove this code.
+  HandleScope scope(isolate());
+  if (key->IsHeapNumber() &&
+      isnan(HeapNumber::cast(*key)->value())) {
+    key = isolate()->factory()->nan_symbol();
+  } else if (key->IsUndefined()) {
+    key = isolate()->factory()->undefined_symbol();
+  }
+
   if (key->IsSymbol()) {
     Handle<String> name = Handle<String>::cast(key);

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to