source: trunk/third/perl/mg.h @ 14545

Revision 14545, 1.4 KB checked in by ghudson, 24 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r14544, which included commits to RCS files with non-trunk default branches.
Line 
1/*    mg.h
2 *
3 *    Copyright (c) 1991-2000, Larry Wall
4 *
5 *    You may distribute under the terms of either the GNU General Public
6 *    License or the Artistic License, as specified in the README file.
7 *
8 */
9
10#ifdef STRUCT_MGVTBL_DEFINITION
11STRUCT_MGVTBL_DEFINITION;
12#else
13struct mgvtbl {
14    int         (CPERLscope(*svt_get))  (pTHX_ SV *sv, MAGIC* mg);
15    int         (CPERLscope(*svt_set))  (pTHX_ SV *sv, MAGIC* mg);
16    U32         (CPERLscope(*svt_len))  (pTHX_ SV *sv, MAGIC* mg);
17    int         (CPERLscope(*svt_clear))(pTHX_ SV *sv, MAGIC* mg);
18    int         (CPERLscope(*svt_free)) (pTHX_ SV *sv, MAGIC* mg);
19};
20#endif
21
22struct magic {
23    MAGIC*      mg_moremagic;
24    MGVTBL*     mg_virtual;     /* pointer to magic functions */
25    U16         mg_private;
26    char        mg_type;
27    U8          mg_flags;
28    SV*         mg_obj;
29    char*       mg_ptr;
30    I32         mg_len;
31};
32
33#define MGf_TAINTEDDIR 1
34#define MGf_REFCOUNTED 2
35#define MGf_GSKIP      4
36
37#define MGf_MINMATCH   1
38
39#define MgTAINTEDDIR(mg)        (mg->mg_flags & MGf_TAINTEDDIR)
40#define MgTAINTEDDIR_on(mg)     (mg->mg_flags |= MGf_TAINTEDDIR)
41#define MgTAINTEDDIR_off(mg)    (mg->mg_flags &= ~MGf_TAINTEDDIR)
42
43#define MgPV(mg,lp)             ((((int)(lp = (mg)->mg_len)) == HEf_SVKEY) ?   \
44                                 SvPV((SV*)((mg)->mg_ptr),lp) :         \
45                                 (mg)->mg_ptr)
46
47#define SvTIED_mg(sv,how) \
48    (SvRMAGICAL(sv) ? mg_find((sv),(how)) : Null(MAGIC*))
49#define SvTIED_obj(sv,mg) \
50    ((mg)->mg_obj ? (mg)->mg_obj : sv_2mortal(newRV(sv)))
Note: See TracBrowser for help on using the repository browser.