1 ################################################################################
5 ## $Date: 2006/01/14 18:08:03 +0100 $
7 ################################################################################
9 ## Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz.
10 ## Version 2.x, Copyright (C) 2001, Paul Marquess.
11 ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
13 ## This program is free software; you can redistribute it and/or
14 ## modify it under the same terms as Perl itself.
16 ################################################################################
25 __UNDEFINED__ SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END
27 __UNDEFINED__ PERL_MAGIC_sv '\0'
28 __UNDEFINED__ PERL_MAGIC_overload 'A'
29 __UNDEFINED__ PERL_MAGIC_overload_elem 'a'
30 __UNDEFINED__ PERL_MAGIC_overload_table 'c'
31 __UNDEFINED__ PERL_MAGIC_bm 'B'
32 __UNDEFINED__ PERL_MAGIC_regdata 'D'
33 __UNDEFINED__ PERL_MAGIC_regdatum 'd'
34 __UNDEFINED__ PERL_MAGIC_env 'E'
35 __UNDEFINED__ PERL_MAGIC_envelem 'e'
36 __UNDEFINED__ PERL_MAGIC_fm 'f'
37 __UNDEFINED__ PERL_MAGIC_regex_global 'g'
38 __UNDEFINED__ PERL_MAGIC_isa 'I'
39 __UNDEFINED__ PERL_MAGIC_isaelem 'i'
40 __UNDEFINED__ PERL_MAGIC_nkeys 'k'
41 __UNDEFINED__ PERL_MAGIC_dbfile 'L'
42 __UNDEFINED__ PERL_MAGIC_dbline 'l'
43 __UNDEFINED__ PERL_MAGIC_mutex 'm'
44 __UNDEFINED__ PERL_MAGIC_shared 'N'
45 __UNDEFINED__ PERL_MAGIC_shared_scalar 'n'
46 __UNDEFINED__ PERL_MAGIC_collxfrm 'o'
47 __UNDEFINED__ PERL_MAGIC_tied 'P'
48 __UNDEFINED__ PERL_MAGIC_tiedelem 'p'
49 __UNDEFINED__ PERL_MAGIC_tiedscalar 'q'
50 __UNDEFINED__ PERL_MAGIC_qr 'r'
51 __UNDEFINED__ PERL_MAGIC_sig 'S'
52 __UNDEFINED__ PERL_MAGIC_sigelem 's'
53 __UNDEFINED__ PERL_MAGIC_taint 't'
54 __UNDEFINED__ PERL_MAGIC_uvar 'U'
55 __UNDEFINED__ PERL_MAGIC_uvar_elem 'u'
56 __UNDEFINED__ PERL_MAGIC_vstring 'V'
57 __UNDEFINED__ PERL_MAGIC_vec 'v'
58 __UNDEFINED__ PERL_MAGIC_utf8 'w'
59 __UNDEFINED__ PERL_MAGIC_substr 'x'
60 __UNDEFINED__ PERL_MAGIC_defelem 'y'
61 __UNDEFINED__ PERL_MAGIC_glob '*'
62 __UNDEFINED__ PERL_MAGIC_arylen '#'
63 __UNDEFINED__ PERL_MAGIC_pos '.'
64 __UNDEFINED__ PERL_MAGIC_backref '<'
65 __UNDEFINED__ PERL_MAGIC_ext '~'
67 /* That's the best we can do... */
68 __UNDEFINED__ SvPV_force_nomg SvPV_force
69 __UNDEFINED__ SvPV_nomg SvPV
70 __UNDEFINED__ sv_catpvn_nomg sv_catpvn
71 __UNDEFINED__ sv_catsv_nomg sv_catsv
72 __UNDEFINED__ sv_setsv_nomg sv_setsv
73 __UNDEFINED__ sv_pvn_nomg sv_pvn
74 __UNDEFINED__ SvIV_nomg SvIV
75 __UNDEFINED__ SvUV_nomg SvUV
78 # define sv_catpv_mg(sv, ptr) \
81 sv_catpv(TeMpSv,ptr); \
87 # define sv_catpvn_mg(sv, ptr, len) \
90 sv_catpvn(TeMpSv,ptr,len); \
96 # define sv_catsv_mg(dsv, ssv) \
99 sv_catsv(TeMpSv,ssv); \
100 SvSETMAGIC(TeMpSv); \
105 # define sv_setiv_mg(sv, i) \
108 sv_setiv(TeMpSv,i); \
109 SvSETMAGIC(TeMpSv); \
114 # define sv_setnv_mg(sv, num) \
117 sv_setnv(TeMpSv,num); \
118 SvSETMAGIC(TeMpSv); \
123 # define sv_setpv_mg(sv, ptr) \
126 sv_setpv(TeMpSv,ptr); \
127 SvSETMAGIC(TeMpSv); \
132 # define sv_setpvn_mg(sv, ptr, len) \
135 sv_setpvn(TeMpSv,ptr,len); \
136 SvSETMAGIC(TeMpSv); \
141 # define sv_setsv_mg(dsv, ssv) \
144 sv_setsv(TeMpSv,ssv); \
145 SvSETMAGIC(TeMpSv); \
150 # define sv_setuv_mg(sv, i) \
153 sv_setuv(TeMpSv,i); \
154 SvSETMAGIC(TeMpSv); \
159 # define sv_usepvn_mg(sv, ptr, len) \
162 sv_usepvn(TeMpSv,ptr,len); \
163 SvSETMAGIC(TeMpSv); \
170 sv_catpv_mg(sv, string)
174 sv_catpv_mg(sv, string);
177 sv_catpvn_mg(sv, sv2)
184 str = SvPV(sv2, len);
185 sv_catpvn_mg(sv, str, len);
192 sv_catsv_mg(sv, sv2);
216 sv_setpvn_mg(sv, sv2)
223 str = SvPV(sv2, len);
224 sv_setpvn_mg(sv, str, len);
231 sv_setsv_mg(sv, sv2);
241 sv_usepvn_mg(sv, sv2)
248 str = SvPV(sv2, len);
249 New(42, copy, len+1, char);
250 Copy(str, copy, len+1, char);
251 sv_usepvn_mg(sv, copy, len);
257 tie %h, 'Tie::StdHash';
261 &Devel::PPPort::sv_catpv_mg($h{foo}, 'bar');
262 ok($h{foo}, 'foobar');
264 &Devel::PPPort::sv_catpvn_mg($h{bar}, 'baz');
267 &Devel::PPPort::sv_catsv_mg($h{foo}, '42');
268 ok($h{foo}, 'foobar42');
270 &Devel::PPPort::sv_setiv_mg($h{bar}, 42);
273 &Devel::PPPort::sv_setnv_mg($h{PI}, 3.14159);
274 ok(abs($h{PI} - 3.14159) < 0.01);
276 &Devel::PPPort::sv_setpv_mg($h{mhx}, 'mhx');
279 &Devel::PPPort::sv_setpvn_mg($h{mhx}, 'Marcus');
280 ok($h{mhx}, 'Marcus');
282 &Devel::PPPort::sv_setsv_mg($h{sv}, 'SV');
285 &Devel::PPPort::sv_setuv_mg($h{sv}, 4711);
288 &Devel::PPPort::sv_usepvn_mg($h{sv}, 'Perl');