[svn:parrot] r36882 - in trunk: include/parrot src

NotFound at svn.parrot.org NotFound at svn.parrot.org
Thu Feb 19 19:04:40 UTC 2009


Author: NotFound
Date: Thu Feb 19 19:04:39 2009
New Revision: 36882
URL: https://trac.parrot.org/parrot/changeset/36882

Log:
[core] add Parrot_sub_new_from_c_func to extend.h

Modified:
   trunk/include/parrot/extend.h
   trunk/src/extend.c

Modified: trunk/include/parrot/extend.h
==============================================================================
--- trunk/include/parrot/extend.h	Thu Feb 19 18:38:54 2009	(r36881)
+++ trunk/include/parrot/extend.h	Thu Feb 19 19:04:39 2009	(r36882)
@@ -403,6 +403,12 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
+Parrot_PMC Parrot_sub_new_from_c_func(PARROT_INTERP,
+    void (*func)(void),
+    const char * signature)
+        __attribute__nonnull__(1);
+
+PARROT_EXPORT
 void Parrot_unregister_pmc(PARROT_INTERP, Parrot_PMC pmc)
         __attribute__nonnull__(1);
 
@@ -538,6 +544,8 @@
        PARROT_ASSERT_ARG(interp)
 #define ASSERT_ARGS_Parrot_set_strreg __attribute__unused__ int _ASSERT_ARGS_CHECK = \
        PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_Parrot_sub_new_from_c_func __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp)
 #define ASSERT_ARGS_Parrot_unregister_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = \
        PARROT_ASSERT_ARG(interp)
 #define ASSERT_ARGS_Parrot_vfprintf __attribute__unused__ int _ASSERT_ARGS_CHECK = \

Modified: trunk/src/extend.c
==============================================================================
--- trunk/src/extend.c	Thu Feb 19 18:38:54 2009	(r36881)
+++ trunk/src/extend.c	Thu Feb 19 19:04:39 2009	(r36882)
@@ -1415,6 +1415,29 @@
 
 /*
 
+=item C<Parrot_PMC Parrot_sub_new_from_c_func>
+
+Returns a PMC sub wrapper for a c function
+
+=cut
+
+*/
+
+PARROT_EXPORT
+Parrot_PMC
+Parrot_sub_new_from_c_func(PARROT_INTERP,
+        void (*func)(void), const char * signature)
+{
+    Parrot_String sig = Parrot_new_string(interp, signature, strlen(signature),
+        (char *) NULL, 0);
+    Parrot_PMC sub = pmc_new(interp, enum_class_NCI);
+    VTABLE_set_pointer_keyed_str(interp, sub, sig, F2DPTR(func));
+    PObj_get_FLAGS(sub) |= PObj_private1_FLAG;
+    return sub;
+}
+
+/*
+
 =back
 
 =head1 SEE ALSO


More information about the parrot-commits mailing list