Author: chromatic
Date: Fri Apr 13 20:53:19 2007
New Revision: 18184

Modified:
   trunk/include/parrot/pobj.h

Log:
Added PMC_data_typed() and PMC_data0_typed() macros to make casting easier.

I don't know if this will satisfy *all* compilers, so it might need more
parentheses.

Modified: trunk/include/parrot/pobj.h
==============================================================================
--- trunk/include/parrot/pobj.h (original)
+++ trunk/include/parrot/pobj.h Fri Apr 13 20:53:19 2007
@@ -141,12 +141,16 @@
 #  define PMC_ext_checked(pmc)             (assert((pmc)->pmc_ext), 
(pmc)->pmc_ext)
 #endif /* NDEBUG */
 #if PMC_DATA_IN_EXT
-#  define PMC_data(pmc)       PMC_ext_checked(pmc)->data
+#  define PMC_data(pmc)                   PMC_ext_checked(pmc)->data
+#  define PMC_data_typed(pmc, type) (type)PMC_ext_checked(pmc)->data
 #  define PMC_data0(pmc)      ((pmc)->pmc_ext ? pmc->pmc_ext->data : 0)
+#  define PMC_data0_typed(pmc, type) (type)(pmc)->pmc_ext ? pmc->pmc_ext->data 
: 0)
 #else
-#  define PMC_data(pmc)       (pmc)->data
+#  define PMC_data(pmc)                   (pmc)->data
+#  define PMC_data_typed(pmc, type) (type)(pmc)->data
 /* do not allow PMC_data2 as lvalue */
-#  define PMC_data0(pmc)      (1 ? (pmc)->data : 0)
+#  define PMC_data0(pmc)            (1 ? (pmc)->data : 0)
+#  define PMC_data0_typed(pmc)      (type)(1 ? (pmc)->data : 0)
 #endif /* PMC_DATA_IN_EXT */
 #define PMC_metadata(pmc)     PMC_ext_checked(pmc)->_metadata
 #define PMC_next_for_GC(pmc)  PMC_ext_checked(pmc)->_next_for_GC

Reply via email to