From 59017825dd984a30f69bec25890d1ffceaf30e04 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Thu, 11 Nov 2010 22:14:56 -0600 Subject: start the conversion to xs --- Stash.xs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Stash.xs (limited to 'Stash.xs') diff --git a/Stash.xs b/Stash.xs new file mode 100644 index 0000000..879d7ac --- /dev/null +++ b/Stash.xs @@ -0,0 +1,26 @@ +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" + +MODULE = Package::Stash PACKAGE = Package::Stash + +SV* +new(class, package_name) + char *class + SV *package_name + INIT: + HV *instance; + HV *namespace; + CODE: + if (!SvPOK(package_name)) + croak("The constructor argument must be the name of a package"); + + instance = newHV(); + + hv_store(instance, "name", 4, package_name, 0); + namespace = gv_stashpv(SvPV_nolen(package_name), GV_ADD); + hv_store(instance, "namespace", 9, newRV((SV*)namespace), 0); + + RETVAL = sv_bless(newRV((SV*)instance), gv_stashpv(class, 0)); + OUTPUT: + RETVAL -- cgit v1.2.3-54-g00ecf