Upgrade to Devel::PPPort 3.07
[p5sagit/p5-mst-13.2.git] / ext / Devel / PPPort / parts / inc / magic
CommitLineData
adfe19db 1################################################################################
2##
0d0f8426 3## $Revision: 9 $
adfe19db 4## $Author: mhx $
0d0f8426 5## $Date: 2006/01/14 18:08:03 +0100 $
adfe19db 6##
7################################################################################
8##
0d0f8426 9## Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz.
adfe19db 10## Version 2.x, Copyright (C) 2001, Paul Marquess.
11## Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
12##
13## This program is free software; you can redistribute it and/or
14## modify it under the same terms as Perl itself.
15##
16################################################################################
17
18=provides
19
20__UNDEFINED__
21/sv_\w+_mg/
22
23=implementation
24
25__UNDEFINED__ SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END
26
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 '~'
66
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
76
77#ifndef sv_catpv_mg
78# define sv_catpv_mg(sv, ptr) \
79 STMT_START { \
80 SV *TeMpSv = sv; \
81 sv_catpv(TeMpSv,ptr); \
82 SvSETMAGIC(TeMpSv); \
83 } STMT_END
84#endif
85
86#ifndef sv_catpvn_mg
87# define sv_catpvn_mg(sv, ptr, len) \
88 STMT_START { \
89 SV *TeMpSv = sv; \
90 sv_catpvn(TeMpSv,ptr,len); \
91 SvSETMAGIC(TeMpSv); \
92 } STMT_END
93#endif
94
95#ifndef sv_catsv_mg
96# define sv_catsv_mg(dsv, ssv) \
97 STMT_START { \
98 SV *TeMpSv = dsv; \
99 sv_catsv(TeMpSv,ssv); \
100 SvSETMAGIC(TeMpSv); \
101 } STMT_END
102#endif
103
104#ifndef sv_setiv_mg
105# define sv_setiv_mg(sv, i) \
106 STMT_START { \
107 SV *TeMpSv = sv; \
108 sv_setiv(TeMpSv,i); \
109 SvSETMAGIC(TeMpSv); \
110 } STMT_END
111#endif
112
113#ifndef sv_setnv_mg
114# define sv_setnv_mg(sv, num) \
115 STMT_START { \
116 SV *TeMpSv = sv; \
117 sv_setnv(TeMpSv,num); \
118 SvSETMAGIC(TeMpSv); \
119 } STMT_END
120#endif
121
122#ifndef sv_setpv_mg
123# define sv_setpv_mg(sv, ptr) \
124 STMT_START { \
125 SV *TeMpSv = sv; \
126 sv_setpv(TeMpSv,ptr); \
127 SvSETMAGIC(TeMpSv); \
128 } STMT_END
129#endif
130
131#ifndef sv_setpvn_mg
132# define sv_setpvn_mg(sv, ptr, len) \
133 STMT_START { \
134 SV *TeMpSv = sv; \
135 sv_setpvn(TeMpSv,ptr,len); \
136 SvSETMAGIC(TeMpSv); \
137 } STMT_END
138#endif
139
140#ifndef sv_setsv_mg
141# define sv_setsv_mg(dsv, ssv) \
142 STMT_START { \
143 SV *TeMpSv = dsv; \
144 sv_setsv(TeMpSv,ssv); \
145 SvSETMAGIC(TeMpSv); \
146 } STMT_END
147#endif
148
149#ifndef sv_setuv_mg
150# define sv_setuv_mg(sv, i) \
151 STMT_START { \
152 SV *TeMpSv = sv; \
153 sv_setuv(TeMpSv,i); \
154 SvSETMAGIC(TeMpSv); \
155 } STMT_END
156#endif
157
158#ifndef sv_usepvn_mg
159# define sv_usepvn_mg(sv, ptr, len) \
160 STMT_START { \
161 SV *TeMpSv = sv; \
162 sv_usepvn(TeMpSv,ptr,len); \
163 SvSETMAGIC(TeMpSv); \
164 } STMT_END
165#endif
166
167=xsubs
168
169void
170sv_catpv_mg(sv, string)
171 SV *sv;
172 char *string;
173 CODE:
174 sv_catpv_mg(sv, string);
175
176void
177sv_catpvn_mg(sv, sv2)
178 SV *sv;
179 SV *sv2;
180 PREINIT:
181 char *str;
182 STRLEN len;
183 CODE:
184 str = SvPV(sv2, len);
185 sv_catpvn_mg(sv, str, len);
186
187void
188sv_catsv_mg(sv, sv2)
189 SV *sv;
190 SV *sv2;
191 CODE:
192 sv_catsv_mg(sv, sv2);
193
194void
195sv_setiv_mg(sv, iv)
196 SV *sv;
197 IV iv;
198 CODE:
199 sv_setiv_mg(sv, iv);
200
201void
202sv_setnv_mg(sv, nv)
203 SV *sv;
204 NV nv;
205 CODE:
206 sv_setnv_mg(sv, nv);
207
208void
209sv_setpv_mg(sv, pv)
210 SV *sv;
211 char *pv;
212 CODE:
213 sv_setpv_mg(sv, pv);
214
215void
216sv_setpvn_mg(sv, sv2)
217 SV *sv;
218 SV *sv2;
219 PREINIT:
220 char *str;
221 STRLEN len;
222 CODE:
223 str = SvPV(sv2, len);
224 sv_setpvn_mg(sv, str, len);
225
226void
227sv_setsv_mg(sv, sv2)
228 SV *sv;
229 SV *sv2;
230 CODE:
231 sv_setsv_mg(sv, sv2);
232
233void
234sv_setuv_mg(sv, uv)
235 SV *sv;
236 UV uv;
237 CODE:
238 sv_setuv_mg(sv, uv);
239
240void
241sv_usepvn_mg(sv, sv2)
242 SV *sv;
243 SV *sv2;
244 PREINIT:
245 char *str, *copy;
246 STRLEN len;
247 CODE:
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);
252
253=tests plan => 10
254
255use Tie::Hash;
256my %h;
257tie %h, 'Tie::StdHash';
258$h{foo} = 'foo';
259$h{bar} = '';
260
261&Devel::PPPort::sv_catpv_mg($h{foo}, 'bar');
262ok($h{foo}, 'foobar');
263
264&Devel::PPPort::sv_catpvn_mg($h{bar}, 'baz');
265ok($h{bar}, 'baz');
266
267&Devel::PPPort::sv_catsv_mg($h{foo}, '42');
268ok($h{foo}, 'foobar42');
269
270&Devel::PPPort::sv_setiv_mg($h{bar}, 42);
271ok($h{bar}, 42);
272
273&Devel::PPPort::sv_setnv_mg($h{PI}, 3.14159);
274ok(abs($h{PI} - 3.14159) < 0.01);
275
276&Devel::PPPort::sv_setpv_mg($h{mhx}, 'mhx');
277ok($h{mhx}, 'mhx');
278
279&Devel::PPPort::sv_setpvn_mg($h{mhx}, 'Marcus');
280ok($h{mhx}, 'Marcus');
281
282&Devel::PPPort::sv_setsv_mg($h{sv}, 'SV');
283ok($h{sv}, 'SV');
284
285&Devel::PPPort::sv_setuv_mg($h{sv}, 4711);
286ok($h{sv}, 4711);
287
288&Devel::PPPort::sv_usepvn_mg($h{sv}, 'Perl');
289ok($h{sv}, 'Perl');
290