XEop |void |dtrace_probe_phase|enum perl_phase phase
#endif
+XEop |STRLEN*|dup_warnings |NN STRLEN* warnings
+
: ex: set ts=8 sts=4 sw=4 noet:
XSRETURN(AvFILLp(av)+1);
}
+/* Copy an existing cop->cop_warnings field.
+ * If it's one of the standard addresses, just re-use the address.
+ * This is the e implementation for the DUP_WARNINGS() macro
+ */
+
+STRLEN*
+Perl_dup_warnings(pTHX_ STRLEN* warnings)
+{
+ Size_t size;
+ STRLEN *new_warnings;
+
+ if (specialWARN(warnings))
+ return warnings;
+
+ size = sizeof(*warnings) + *warnings;
+
+ new_warnings = (STRLEN*)PerlMemShared_malloc(size);
+ Copy(warnings, new_warnings, size, char);
+ return new_warnings;
+}
/*
* ex: set ts=8 sts=4 sw=4 et:
PERL_CALLCONV void Perl_dump_vindent(pTHX_ I32 level, PerlIO *file, const char* pat, va_list *args);
#define PERL_ARGS_ASSERT_DUMP_VINDENT \
assert(file); assert(pat)
+PERL_CALLCONV STRLEN* Perl_dup_warnings(pTHX_ STRLEN* warnings);
+#define PERL_ARGS_ASSERT_DUP_WARNINGS \
+ assert(warnings)
PERL_CALLCONV void Perl_emulate_cop_io(pTHX_ const COP *const c, SV *const sv);
#define PERL_ARGS_ASSERT_EMULATE_COP_IO \
assert(c); assert(sv)
#define isWARN_on(c,x) (IsSet((U8 *)(c + 1), 2*(x)))
#define isWARNf_on(c,x) (IsSet((U8 *)(c + 1), 2*(x)+1))
-#define DUP_WARNINGS(p) \
- (specialWARN(p) ? (STRLEN*)(p) \
- : (STRLEN*)CopyD(p, PerlMemShared_malloc(sizeof(*p)+*p), sizeof(*p)+*p, \
- char))
+#define DUP_WARNINGS(p) Perl_dup_warnings(aTHX_ p)
/*
#define isWARN_on(c,x) (IsSet((U8 *)(c + 1), 2*(x)))
#define isWARNf_on(c,x) (IsSet((U8 *)(c + 1), 2*(x)+1))
-#define DUP_WARNINGS(p) \
- (specialWARN(p) ? (STRLEN*)(p) \
- : (STRLEN*)CopyD(p, PerlMemShared_malloc(sizeof(*p)+*p), sizeof(*p)+*p, \
- char))
+#define DUP_WARNINGS(p) Perl_dup_warnings(aTHX_ p)
/*