File: MethodMaker.xs

package info (click to toggle)
libclass-methodmaker-perl 2.24-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, sid, trixie
  • size: 544 kB
  • sloc: perl: 1,849; objc: 492; makefile: 3
file content (30 lines) | stat: -rw-r--r-- 837 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

/* inspired/stolen from Clone::Closure, to keep in sync with 5.13.3+ */
#ifndef CvGV_set
#define CvGV_set(cv,gv) CvGV(cv) = (gv)
#endif

MODULE = Class::MethodMaker PACKAGE = Class::MethodMaker

PROTOTYPES: ENABLE

int
set_sub_name(SV *sub, char *pname, char *subname, char *stashname)
  INIT:
    if (!SvTRUE(ST(0)) || !SvTRUE(ST(1)) || !SvTRUE(ST(2)) || !SvTRUE(ST(3)))
      XSRETURN_UNDEF;
  CODE:
    CvGV_set((CV*)SvRV(sub), gv_fetchpv(stashname, TRUE, SVt_PV));
    GvSTASH(CvGV((GV*)SvRV(sub))) = gv_stashpv(pname, 1);
#ifdef gv_name_set
    gv_name_set(CvGV((GV*)SvRV(sub)), subname, strlen(subname), GV_NOTQUAL);
#else
    GvNAME(CvGV((GV*)SvRV(sub))) = savepv(subname);
    GvNAMELEN(CvGV((GV*)SvRV(sub))) = strlen(subname);
#endif
    RETVAL = 1;
  OUTPUT:
    RETVAL