summaryrefslogtreecommitdiff
path: root/proto.h
diff options
context:
space:
mode:
authorDaniel Dragan <bulk88@hotmail.com>2012-10-27 22:25:47 -0400
committerJan Dubois <jand@activestate.com>2012-11-08 16:54:55 -0800
commit073dd0357a846739ff3ae9a14379de2302d5e877 (patch)
treee98d00b9a5881f5381d9815828990a60737fe091 /proto.h
parente566981e5a5b2c2716eea4363106c4ed7620e5bb (diff)
downloadperl-073dd0357a846739ff3ae9a14379de2302d5e877.tar.gz
"func not implemented" croaks optimizations in /win32/*
This commit removes a number of "* not implemented" strings from the image. A win32_croak_not_implemented wrapper is created to reduce machine code by not putting the format string on the C stack many times. embed.fnc was used to declare win32_croak_not_implemented for proper cross compiler support of noreturn (noreturn on GCC and VC ok). Tailcalling and noreturn optimizations of the C compiler are heavily used in this commit.
Diffstat (limited to 'proto.h')
-rw-r--r--proto.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/proto.h b/proto.h
index 4bfa724f70..e42d6bcc52 100644
--- a/proto.h
+++ b/proto.h
@@ -7728,6 +7728,14 @@ PERL_CALLCONV SSize_t Perl_PerlIO_write(pTHX_ PerlIO *f, const void *vbuf, Size_
assert(vbuf)
#endif
+#if defined(WIN32)
+PERL_CALLCONV_NO_RET void win32_croak_not_implemented(const char * fname)
+ __attribute__noreturn__
+ __attribute__nonnull__(1);
+#define PERL_ARGS_ASSERT_WIN32_CROAK_NOT_IMPLEMENTED \
+ assert(fname)
+
+#endif
#if defined(WIN32) || defined(__SYMBIAN32__) || defined(VMS)
PERL_CALLCONV int Perl_do_aspawn(pTHX_ SV* really, SV** mark, SV** sp)
__attribute__nonnull__(pTHX_2)