ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/staticperl/perl/mg.h
Revision: 1.1
Committed: Thu Jun 30 14:26:41 2005 UTC (21 years, 4 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: PERL-5-8-7, HEAD
Branch point for: PERL
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 /* mg.h
2     *
3     * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999,
4     * 2000, 2002, by Larry Wall and others
5     *
6     * You may distribute under the terms of either the GNU General Public
7     * License or the Artistic License, as specified in the README file.
8     *
9     */
10    
11     #ifdef STRUCT_MGVTBL_DEFINITION
12     STRUCT_MGVTBL_DEFINITION;
13     #else
14     struct mgvtbl {
15     int (CPERLscope(*svt_get)) (pTHX_ SV *sv, MAGIC* mg);
16     int (CPERLscope(*svt_set)) (pTHX_ SV *sv, MAGIC* mg);
17     U32 (CPERLscope(*svt_len)) (pTHX_ SV *sv, MAGIC* mg);
18     int (CPERLscope(*svt_clear))(pTHX_ SV *sv, MAGIC* mg);
19     int (CPERLscope(*svt_free)) (pTHX_ SV *sv, MAGIC* mg);
20     int (CPERLscope(*svt_copy)) (pTHX_ SV *sv, MAGIC* mg,
21     SV *nsv, const char *name, int namlen);
22     int (CPERLscope(*svt_dup)) (pTHX_ MAGIC *mg, CLONE_PARAMS *param);
23     };
24     #endif
25    
26     struct magic {
27     MAGIC* mg_moremagic;
28     MGVTBL* mg_virtual; /* pointer to magic functions */
29     U16 mg_private;
30     char mg_type;
31     U8 mg_flags;
32     SV* mg_obj;
33     char* mg_ptr;
34     I32 mg_len;
35     };
36    
37     #define MGf_TAINTEDDIR 1 /* PERL_MAGIC_envelem only */
38     #define MGf_MINMATCH 1 /* PERL_MAGIC_regex_global only */
39     #define MGf_REFCOUNTED 2
40     #define MGf_GSKIP 4
41     #define MGf_COPY 8
42     #define MGf_DUP 16
43    
44     #define MgTAINTEDDIR(mg) (mg->mg_flags & MGf_TAINTEDDIR)
45     #define MgTAINTEDDIR_on(mg) (mg->mg_flags |= MGf_TAINTEDDIR)
46     #define MgTAINTEDDIR_off(mg) (mg->mg_flags &= ~MGf_TAINTEDDIR)
47    
48     #define MgPV(mg,lp) ((((int)(lp = (mg)->mg_len)) == HEf_SVKEY) ? \
49     SvPV((SV*)((mg)->mg_ptr),lp) : \
50     (mg)->mg_ptr)
51    
52     #define SvTIED_mg(sv,how) \
53     (SvRMAGICAL(sv) ? mg_find((sv),(how)) : Null(MAGIC*))
54     #define SvTIED_obj(sv,mg) \
55     ((mg)->mg_obj ? (mg)->mg_obj : sv_2mortal(newRV(sv)))