summaryrefslogtreecommitdiffstats
path: root/Stash.xs
diff options
context:
space:
mode:
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