[svn:parrot] r35707 - trunk/src

[email protected]
Newsgroups perl.cvs.parrot
Message-ID <[email protected]>
Author: Whiteknight
Date: Sat Jan 17 13:01:19 2009
New Revision: 35707

Modified:
   trunk/src/oo.c
   trunk/src/pmc.c

Log:
[get_class] Undoing some of my earlier changes. We can't unify this as easily as I had hoped because there are too many different types of objects coming down the pipeline that I can't keep track of. Will try again later maybe

Modified: trunk/src/oo.c
==============================================================================
--- trunk/src/oo.c	(original)
+++ trunk/src/oo.c	Sat Jan 17 13:01:19 2009
@@ -221,8 +221,18 @@
     /* If the PMCProxy doesn't exist yet for the given key, we look up the
        type ID here and create a new one */
     if (PMC_IS_NULL(classobj)) {
-        /* Look up a low-level class and create a proxy */
-        const INTVAL type = pmc_type_p(interp, key);
+        INTVAL type;
+        const INTVAL base_type = key->vtable->base_type;
+
+        /* XXX TT#182: This is a hack! We should be able to treat all
+           PMC types the same through pmc_type_p or some interface to it */
+        if (base_type == enum_class_Key
+         || base_type == enum_class_ResizableStringArray
+         || base_type == enum_class_String
+         || base_type == enum_class_NameSpace)
+            type = pmc_type_p(interp, key);
+        else
+            type = pmc_type(interp, VTABLE_get_string(interp, key));
 
         /* Reject invalid type numbers */
         if (type > interp->n_vtable_max || type <= 0)

Modified: trunk/src/pmc.c
==============================================================================
--- trunk/src/pmc.c	(original)
+++ trunk/src/pmc.c	Sat Jan 17 13:01:19 2009
@@ -633,12 +633,6 @@
         else
             return 0;
     }
-    else if (name->vtable->base_type == enum_class_Role)
-        /* This is a bit of a hack for now. Stringification is imprecise, and
-           we sholdn't be relying on that to find unique class IDs in all
-           cases. */
-        return pmc_type(interp, VTABLE_get_string(interp, name));
-
     item = (PMC *)VTABLE_get_pointer_keyed(interp, classname_hash, name);
 
     if (!PMC_IS_NULL(item))
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.