size */
static void
magic_size(pTHX_ const SV * const thing, struct state *st) {
- MAGIC *magic_pointer;
+ MAGIC *magic_pointer = SvMAGIC(thing);
- /* Is there any? */
- if (!SvMAGIC(thing)) {
- /* No, bail */
- return;
- }
-
- /* Get the base magic pointer */
- magic_pointer = SvMAGIC(thing);
-
- /* Have we seen the magic pointer? */
+ /* Have we seen the magic pointer? (NULL has always been seen before) */
while (check_new(st, magic_pointer)) {
st->total_size += sizeof(MAGIC);
return TRUE;
}
+/* Frustratingly, the vtables aren't const in perl.h
+ gcc is happy enough to have non-const initialisers in a static array.
+ VC seems not to be. (Is it actually treating the file as C++?)
+ So do the maximally portable thing, unless we know it's gcc, in which case
+ we can do the more space efficient version. */
+
+#if __GNUC__
void *vtables[] = {
#include "vtables.inc"
NULL
};
+#endif
static struct state *
new_state(pTHX)
{
SV *warn_flag;
struct state *st;
+#if __GNUC__
void **vt_p = vtables;
+#endif
Newxz(st, 1, struct state);
st->go_yell = TRUE;
check_new(st, &PL_sv_undef);
check_new(st, &PL_sv_no);
check_new(st, &PL_sv_yes);
+#if __GNUC__
while(*vt_p)
check_new(st, *vt_p++);
+#else
+#include "vtables.inc"
+#endif
return st;
}