const char *name(CYPoolCString(pool, property, &length));
     double number(CYCastDouble(name, length));
 
-    if (std::isnan(number))
-        // XXX: implement!
-        return false;
+    if (std::isnan(number)) {
+        if (property == NULL)
+            return false;
 
-    index = static_cast<ssize_t>(number);
-    if (index != number || index < 0 || static_cast<size_t>(index) >= typical->type_.data.signature.count)
+        // XXX: implement!
         return false;
+    } else {
+        index = static_cast<ssize_t>(number);
+        if (index != number || index < 0 || static_cast<size_t>(index) >= typical->type_.data.signature.count)
+            return false;
+    }
 
     base = reinterpret_cast<uint8_t *>(internal->value_);
     for (ssize_t local(0); local != index; ++local)
 
 property labels should get minimized
 functors use both ffiData and ffoData...
 rename "data" variables to "internal"
+unicode identifier support (native and \u)