Stash.xs 502 B

123456789101112131415161718192021222324252627282930
  1. #include <EXTERN.h>
  2. #include <perl.h>
  3. #include <XSUB.h>
  4. MODULE=B__Stash PACKAGE=B::Stash
  5. PROTOTYPES: DISABLE
  6. # cvname is not a constXSUB
  7. bool
  8. CvIsXSUB(cvname)
  9. SV* cvname;
  10. CODE:
  11. CV *cv;
  12. GV *const gv = gv_fetchsv(cvname, 0, SVt_PVCV);
  13. RETVAL = FALSE;
  14. if (gv && (cv = GvCV(gv))) {
  15. if (CvXSUB(cv)) {
  16. #if PERLVERSION < 7
  17. RETVAL = TRUE;
  18. #else
  19. if (!(CvFLAGS(cv) & CVf_CONST) || (CvFLAGS(cv) & CVf_ANON)) {
  20. RETVAL = TRUE;
  21. }
  22. #endif
  23. }
  24. }
  25. OUTPUT:
  26. RETVAL