[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