This is a live mirror of the Perl 5 development currently hosted at
Correction to 0563a5d0db
authorSteve Hay <>
Wed, 28 Jan 2015 08:46:28 +0000 (08:46 +0000)
committerSteve Hay <>
Wed, 28 Jan 2015 08:46:28 +0000 (08:46 +0000)
Functions marked "b" do not have to be in mathoms.c after all. That was
partly based on the belief (from e4524c4c2a) that "b" functions have their
proto.h entries skipped, but that is not the case. It is "m" functions
(macros) that have their proto.h entries skipped. The confusion may have
arisen because all but four current "b" functions have "m" as well anyway.

However, even functions marked "b" and "m" do not absolutely have to be in
mathoms.c. At the time of writing they all are, which is convenient for
having the symbols marked EXTERN_C, which is required to unmangle the
exported names in a C++ build (see d447858807). Their presence in mathoms.c
will also have them skipped from -DNO_MATHOMS builds (as of 075eb5c9b6).
But it is possible for "bm" functions to exist elsewhere as long as they
are explicitly marked EXTERN_C. In that case they won't be automatically
skipped for -DNO_MATHOMS builds either, which may or may not require
special attention too.

Thanks to Craig A. Berry for pointing out that 0563a5d0db wasn't quite


index 220acd7..61049a9 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
 :         proto.h: add __attribute__malloc__
-:   b  Binary backward compatibility; function is a macro
-:      but has also Perl_ implementation (which is exported); must be
-:      implemented in mathoms.c (whose compilation can be suppressed; see
-:      INSTALL) as commit 075eb5c9b6:
+:   b  Binary backward compatibility; has an exported Perl_ implementation
+:      but function is also normally a macro (i.e. has the "m" flag as well).
+:      Backcompat functions ("b") can be anywhere, but if they are also
+:      macros ("m") then they have no proto.h entries so must either be in
+:      mathoms.c to get marked EXTERN_C (and skipped for -DNO_MATHOMS builds)
+:      or else will require special attention to ensure they are marked
+:      EXTERN_C (and then won't be automatically skipped for -DNO_MATHOMS
+:      builds).
 :         add entry to the list of exported symbols;
 :         don't define PERL_ARGS_ASSERT_FOO