]> git.vpit.fr Git - perl/modules/Sub-Nary.git/commitdiff
Rewrite list in XS
authorVincent Pit <vince@profvince.com>
Fri, 8 Aug 2008 10:05:46 +0000 (12:05 +0200)
committerVincent Pit <vince@profvince.com>
Fri, 8 Aug 2008 10:05:46 +0000 (12:05 +0200)
Nary.xs
lib/Sub/Nary.pm

diff --git a/Nary.xs b/Nary.xs
index 2415760185f879bcddfba0c20c1ade5d93ab449f..0165a66cb947b058a20f7e20bb1251d957433108 100644 (file)
--- a/Nary.xs
+++ b/Nary.xs
@@ -50,6 +50,23 @@ CODE:
  res = hv_exists(hv, "0", 1) && hv_iterinit(hv) == 1;
  XSRETURN_IV(res);
 
+void
+list(SV *sv)
+PROTOTYPE: $
+PREINIT:
+ HV *hv;
+ IV res;
+CODE:
+ if (!SvOK(sv))
+  XSRETURN_IV(0);
+ if (!SvROK(sv)) {
+  res = strEQ(SvPV_nolen(sv), "list");
+  XSRETURN_IV(res);
+ }
+ hv = (HV *) SvRV(sv);
+ res = hv_exists(hv, "list", 4) && hv_iterinit(hv) == 1;
+ XSRETURN_IV(res);
+
 void
 count(SV *sv)
 PROTOTYPE: $
index 53aabd8cd022c8c7123b898fdd62201bc855c657..6dc1820a15ae53e3b170fbbb64ebf2f0d9e1f7f8 100644 (file)
@@ -178,13 +178,6 @@ sub name ($) {
  $n eq 'null' ? substr(ppname($_[0]->targ), 3) : $n
 }
 
-sub list ($) {
- my $r = $_[0];
- return 0 unless defined $r;
- return $r eq 'list' unless ref $r;
- return $r->{list} and 1 == scalar keys %$r;
-}
-
 sub normalize ($) {
  my $r = $_[0];
  return unless defined $r;