summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embed.h9
-rwxr-xr-xembed.pl9
-rw-r--r--pod/perlembed.pod18
3 files changed, 32 insertions, 4 deletions
diff --git a/embed.h b/embed.h
index b8cc87b414..e369c33b5c 100644
--- a/embed.h
+++ b/embed.h
@@ -16,7 +16,10 @@
/* (Doing namespace management portably in C is really gross.) */
-/* NO_EMBED is no longer supported. i.e. EMBED is always active. */
+/* NO_EMBED is no longer supported. i.e. EMBED is always active--
+ * but you can define PERL_HIDE_SHORT_NAMES to achieve the same. */
+
+#ifndef PERL_HIDE_SHORT_NAMES
/* Hide global symbols */
@@ -4944,6 +4947,8 @@
#endif /* PERL_IMPLICIT_CONTEXT */
+#endif /* #ifndef PERL_HIDE_SHORT_NAMES */
+
/* Compatibility stubs. Compile extensions with -DPERL_NOCOMPAT to
disable them.
@@ -4985,7 +4990,7 @@
an extra argument but grab the context pointer using the macro
dTHX.
*/
-#if defined(PERL_IMPLICIT_CONTEXT)
+#if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_HIDE_SHORT_NAMES)
# define croak Perl_croak_nocontext
# define deb Perl_deb_nocontext
# define die Perl_die_nocontext
diff --git a/embed.pl b/embed.pl
index a2a509e964..5fc18a744e 100755
--- a/embed.pl
+++ b/embed.pl
@@ -316,7 +316,10 @@ print EM do_not_edit ("embed.h"), <<'END';
/* (Doing namespace management portably in C is really gross.) */
-/* NO_EMBED is no longer supported. i.e. EMBED is always active. */
+/* NO_EMBED is no longer supported. i.e. EMBED is always active--
+ * but you can define PERL_HIDE_SHORT_NAMES to achieve the same. */
+
+#ifndef PERL_HIDE_SHORT_NAMES
/* Hide global symbols */
@@ -428,6 +431,8 @@ print EM <<'END';
#endif /* PERL_IMPLICIT_CONTEXT */
+#endif /* #ifndef PERL_HIDE_SHORT_NAMES */
+
END
print EM <<'END';
@@ -472,7 +477,7 @@ print EM <<'END';
an extra argument but grab the context pointer using the macro
dTHX.
*/
-#if defined(PERL_IMPLICIT_CONTEXT)
+#if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_HIDE_SHORT_NAMES)
# define croak Perl_croak_nocontext
# define deb Perl_deb_nocontext
# define die Perl_die_nocontext
diff --git a/pod/perlembed.pod b/pod/perlembed.pod
index b9aae2d87a..24385dd354 100644
--- a/pod/perlembed.pod
+++ b/pod/perlembed.pod
@@ -1038,6 +1038,24 @@ also need this path so it knows where to find Perl include files.
This path can be added via the Tools -> Options -> Directories menu.
Finally, select Build -> Build interp.exe and you're ready to go.
+=head1 Hiding Perl_
+
+If you completely hide the short forms forms of the Perl public API,
+add -DPERL_HIDE_SHORT_NAMES to the compilation flags. This means that
+for example instead of writing
+
+ warn("%d bottles of beer on the wall", bottlecount);
+
+you will have to write the explicit full form
+
+ Perl_warn(aTHX_ "%d bottles of beer on the wall", bottlecount);
+
+(See L<perlguts/Background and PERL_IMPLICIT_CONTEXT for the explanation
+of the C<aTHX_>.> ) Hiding the short forms is very useful for avoiding
+all sorts of nasty (C preprocessor or otherwise) conflicts with other
+software packages (Perl defines about 2400 APIs with these short names,
+take or leave few hundred, so there certainly is room for conflict.)
+
=head1 MORAL
You can sometimes I<write faster code> in C, but