summaryrefslogtreecommitdiffstats
path: root/Stash.xs
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2010-11-11 22:14:56 -0600
committerJesse Luehrs <doy@tozt.net>2010-11-12 03:20:44 -0600
commit59017825dd984a30f69bec25890d1ffceaf30e04 (patch)
treebe633cf9ad0e6c511ec9b9c298178e135c924b45 /Stash.xs
parentd1f721b320d72e83c0cb24c45fe9995a6dcf29c2 (diff)
downloadpackage-stash-xs-59017825dd984a30f69bec25890d1ffceaf30e04.tar.gz
package-stash-xs-59017825dd984a30f69bec25890d1ffceaf30e04.zip
start the conversion to xs
Diffstat (limited to 'Stash.xs')
-rw-r--r--Stash.xs26
1 files changed, 26 insertions, 0 deletions
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