diff options
author | Jesse Luehrs <doy@tozt.net> | 2010-11-11 22:14:56 -0600 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2010-11-12 03:20:44 -0600 |
commit | 59017825dd984a30f69bec25890d1ffceaf30e04 (patch) | |
tree | be633cf9ad0e6c511ec9b9c298178e135c924b45 /Stash.xs | |
parent | d1f721b320d72e83c0cb24c45fe9995a6dcf29c2 (diff) | |
download | package-stash-xs-59017825dd984a30f69bec25890d1ffceaf30e04.tar.gz package-stash-xs-59017825dd984a30f69bec25890d1ffceaf30e04.zip |
start the conversion to xs
Diffstat (limited to 'Stash.xs')
-rw-r--r-- | Stash.xs | 26 |
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 |