Skip Menu |
Report information
Id: 123727
Status: open
Priority: 0/
Queue: perl5

Owner: Nobody
Requestors: bulk88 <bulk88 [at] hotmail.com>
Cc:
AdminCc:

Operating System: mswin32
PatchStatus: HasPatch
Severity: low
Type:
Perl Version: 5.21.4
Fixed In: (no value)



Date: Wed, 4 Feb 2015 02:18:08 -0500
Subject: [PATCH] INTERN/EXTERN C++ cleanup
To: perlbug [...] perl.org
From: bulk88 <bulk88 [...] hotmail.com>
Download (untitled) / with headers
text/plain 3.8k
This is a bug report for perl from bulk88@hotmail.com, generated with the help of perlbug 1.40 running under perl 5.21.4. ----------------------------------------------------------------- [Please describe your issue here] This patch never got any comments in its its original thread at http://www.nntp.perl.org/group/perl.perl5.porters/2015/01/msg225087.html , so I am filing it as a ticket. It is not intended to be committed as is (no commit body for example). [Please do not change anything below this line] ----------------------------------------------------------------- --- Flags: category=core severity=low --- Site configuration information for perl 5.21.4: Configured by Owner at Thu Sep 18 12:08:58 2014. Summary of my perl5 (revision 5 version 21 subversion 4) configuration: Derived from: 7d2b2edb94ab56333b9049a3e26d15ea18445512 Ancestor: 19be3be6968e2337bcdfe480693fff795ecd1304 Platform: osname=MSWin32, osvers=5.1, archname=MSWin32-x86-multi-thread uname='' config_args='undef' hint=recommended, useposix=true, d_sigaction=undef useithreads=define, usemultiplicity=define use64bitint=undef, use64bitall=undef, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cl', ccflags ='-nologo -GF -W3 -O1 -MD -Zi -DNDEBUG -DWIN32 -D_CONSOLE -DNO_STRICT -DPERL_TEXTMODE_SCRIPTS -DPERL_HASH_FUNC_ONE_AT_A_TIME -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -D_USE_32BIT_TIME_T', optimize='-O1 -MD -Zi -DNDEBUG', cppflags='-DWIN32' ccversion='12.00.8168', gccversion='', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=8, longdblkind=0 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='__int64', lseeksize=8 alignbytes=8, prototype=define Linker and Libraries: ld='link', ldflags ='-nologo -nodefaultlib -debug -opt:ref,icf -libpath:"c:\perl521\lib\CORE" -machine:x86' libpth=C:\PROGRA~1\MIAF9D~1\VC98\lib libs=oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib perllibs=oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib libc=msvcrt.lib, so=dll, useshrplib=true, libperl=perl521.lib gnulibc_version='' Dynamic Linking: dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' ' cccdlflags=' ', lddlflags='-dll -nologo -nodefaultlib -debug -opt:ref,icf -libpath:"c:\perl521\lib\CORE" -machine:x86' Locally applied patches: uncommitted-changes a0fe7a7e75de29e59f1da0d6822dc06e5be658fe a261faffee83d0145642ab5d1d046c9f813bc497 6506ab86ad1602a9ca720fcd30446dce1461d23d 7d2b2edb94ab56333b9049a3e26d15ea18445512 --- @INC for perl 5.21.4: lib C:/perl521/srcnew/lib . --- Environment for perl 5.21.4: HOME (unset) LANG (unset) LANGUAGE (unset) LD_LIBRARY_PATH (unset) LOGDIR (unset) PATH= PERL_BADLANG (unset) PERL_JSON_BACKEND=Cpanel::JSON::XS PERL_YAML_BACKEND=YAML SHELL (unset)
From 8a12f1e05d9aac2ed5ca1d716ad142f79e4e0f1c Mon Sep 17 00:00:00 2001 From: Daniel Dragan <bulk88@hotmail.com> Date: Sat, 24 Jan 2015 04:09:17 -0500 Subject: [PATCH] INTERN/EXTERN C++ cleanup --- EXTERN.h | 20 ++++++++++---------- INTERN.h | 11 +++++++---- opcode.h | 10 ---------- perl.h | 19 +++++-------------- perlapi.c | 3 --- perlapi.h | 8 -------- regcomp.h | 5 ----- regen/opcode.pl | 10 ---------- utf8.h | 3 --- utfebcdic.h | 4 ---- 10 files changed, 22 insertions(+), 71 deletions(-) diff --git a/EXTERN.h b/EXTERN.h index 4e4f1ad..345eccd 100644 --- a/EXTERN.h +++ b/EXTERN.h @@ -22,33 +22,33 @@ # if (defined(WIN32) || defined(__SYMBIAN32__)) && !defined(PERL_STATIC_SYMS) /* miniperl should not export anything */ # if defined(PERL_IS_MINIPERL) && !defined(UNDER_CE) && defined(_MSC_VER) -# define EXT extern +# define EXT EXTERN_C # define dEXT -# define EXTCONST extern const +# define EXTCONST EXTERN_C const # define dEXTCONST const # else # if defined(PERLDLL) || defined(__SYMBIAN32__) -# define EXT extern __declspec(dllexport) +# define EXT EXTERN_C __declspec(dllexport) # define dEXT -# define EXTCONST extern __declspec(dllexport) const +# define EXTCONST EXTERN_C __declspec(dllexport) const # define dEXTCONST const # else -# define EXT extern __declspec(dllimport) +# define EXT EXTERN_C __declspec(dllimport) # define dEXT -# define EXTCONST extern __declspec(dllimport) const +# define EXTCONST EXTERN_C __declspec(dllimport) const # define dEXTCONST const # endif # endif # else # if defined(__CYGWIN__) && defined(USEIMPORTLIB) -# define EXT extern __declspec(dllimport) +# define EXT EXTERN_C __declspec(dllimport) # define dEXT -# define EXTCONST extern __declspec(dllimport) const +# define EXTCONST EXTERN_C __declspec(dllimport) const # define dEXTCONST const # else -# define EXT extern +# define EXT EXTERN_C # define dEXT -# define EXTCONST extern const +# define EXTCONST EXTERN_C const # define dEXTCONST const # endif # endif diff --git a/INTERN.h b/INTERN.h index e6e0602..8b8df49 100644 --- a/INTERN.h +++ b/INTERN.h @@ -21,9 +21,12 @@ # if (defined(WIN32) && defined(__MINGW32__)) || defined(__SYMBIAN32__) # ifdef __cplusplus -# define EXT __declspec(dllexport) +# define EXT EXTERN_C __declspec(dllexport) # define dEXT -# define EXTCONST __declspec(dllexport) extern const +/* Win32 GCC errors out with + "..\perl.h:4614:35: error: expected unqualified-id before string constant" + if dllexport is first, then EXTERN_C */ +# define EXTCONST EXTERN_C __declspec(dllexport) const # define dEXTCONST const # else # define EXT __declspec(dllexport) @@ -33,9 +36,9 @@ # endif # else # ifdef __cplusplus -# define EXT +# define EXT EXTERN_C # define dEXT -# define EXTCONST extern const +# define EXTCONST EXTERN_C const # define dEXTCONST const # else # define EXT diff --git a/opcode.h b/opcode.h index 5d910fd..d16da3f 100644 --- a/opcode.h +++ b/opcode.h @@ -142,7 +142,6 @@ #define Perl_pp_custom Perl_unimplemented_op #define Perl_pp_reach Perl_pp_rkeys #define Perl_pp_rvalues Perl_pp_rkeys -START_EXTERN_C #ifndef DOINIT EXTCONST char* const PL_op_name[]; @@ -936,12 +935,8 @@ EXTCONST char* const PL_op_desc[] = { }; #endif -END_EXTERN_C - #endif /* !PERL_GLOBAL_STRUCT_INIT */ -START_EXTERN_C - #ifdef PERL_GLOBAL_STRUCT_INIT # define PERL_PPADDR_INITED static const Perl_ppaddr_t Gppaddr[] @@ -2153,8 +2148,6 @@ EXTCONST U32 PL_opargs[] = { #endif /* !PERL_GLOBAL_STRUCT_INIT */ -END_EXTERN_C - #define OPpLVREF_SV 0x00 #define OPpARG1_MASK 0x01 @@ -2250,7 +2243,6 @@ END_EXTERN_C #define OPpPV_IS_UTF8 0x80 #define OPpSPLIT_IMPLIM 0x80 #define OPpTRANS_DELETE 0x80 -START_EXTERN_C #ifndef PERL_GLOBAL_STRUCT_INIT @@ -3263,8 +3255,6 @@ EXTCONST U8 PL_op_private_valid[] = { # endif /* !DOINIT */ #endif /* !PERL_GLOBAL_STRUCT_INIT */ -END_EXTERN_C - /* ex: set ro: */ diff --git a/perl.h b/perl.h index d9cfdb3..270bffd 100644 --- a/perl.h +++ b/perl.h @@ -4608,8 +4608,6 @@ extern char ** environ; /* environment variables supplied via exec */ STRINGIFY(PERL_API_VERSION) "." \ STRINGIFY(PERL_API_SUBVERSION) -START_EXTERN_C - /* handy constants */ EXTCONST char PL_warn_uninit[] INIT("Use of uninitialized value%s%s%s"); @@ -5191,8 +5189,6 @@ EXTCONST char *const PL_phase_names[]; #define PL_hints PL_compiling.cop_hints -END_EXTERN_C - /*****************************************************************************/ /* This lexer/parser stuff is currently global since yacc is hard to reenter */ /*****************************************************************************/ @@ -5512,15 +5508,18 @@ struct tempsym; /* defined in pp_pack.c */ * these include variables that would have been their struct-s */ +#ifdef DOINIT +#define PERLVAR(prefix,var,type) EXT type PL_##var; type PL_##var; +#define PERLVARA(prefix,var,n,type) EXT type PL_##var[n]; type PL_##var[n]; +#else #define PERLVAR(prefix,var,type) EXT type PL_##var; #define PERLVARA(prefix,var,n,type) EXT type PL_##var[n]; +#endif #define PERLVARI(prefix,var,type,init) EXT type PL_##var INIT(init); #define PERLVARIC(prefix,var,type,init) EXTCONST type PL_##var INIT(init); #if !defined(MULTIPLICITY) -START_EXTERN_C # include "intrpvar.h" -END_EXTERN_C #endif #ifdef PERL_CORE @@ -5534,11 +5533,7 @@ END_EXTERN_C #include "embed.h" #ifndef PERL_GLOBAL_STRUCT -START_EXTERN_C - # include "perlvars.h" - -END_EXTERN_C #endif #undef PERLVAR @@ -5566,8 +5561,6 @@ struct PerlHandShakeInterpreter { # undef PERLVARIC #endif -START_EXTERN_C - /* dummy variables that hold pointers to both runops functions, thus forcing * them *both* to get linked in (useful for Peek.xs, debugging etc) */ @@ -5663,8 +5656,6 @@ EXTCONST bool PL_valid_types_NV_set[]; #include "overload.h" -END_EXTERN_C - struct am_table { U8 flags; U8 fallback; diff --git a/perlapi.c b/perlapi.c index 7858337..90111d8 100644 --- a/perlapi.c +++ b/perlapi.c @@ -31,7 +31,6 @@ #if defined (MULTIPLICITY) && defined (PERL_GLOBAL_STRUCT) /* accessor functions for Perl "global" variables */ -START_EXTERN_C #undef PERLVARI #define PERLVARI(p,v,t,i) PERLVAR(p,v,t) @@ -53,8 +52,6 @@ START_EXTERN_C #undef PERLVARI #undef PERLVARIC -END_EXTERN_C - #endif /* MULTIPLICITY && PERL_GLOBAL_STRUCT */ /* ex: set ro: */ diff --git a/perlapi.h b/perlapi.h index 5268c2c..4d512a2 100644 --- a/perlapi.h +++ b/perlapi.h @@ -22,8 +22,6 @@ #if defined (MULTIPLICITY) && defined (PERL_GLOBAL_STRUCT) -START_EXTERN_C - #undef PERLVAR #undef PERLVARA #undef PERLVARI @@ -41,8 +39,6 @@ START_EXTERN_C #undef PERLVARI #undef PERLVARIC -END_EXTERN_C - #if defined(PERL_CORE) /* accessor functions for Perl "global" variables */ @@ -52,8 +48,6 @@ END_EXTERN_C #ifndef PERL_NO_FORCE_LINK -START_EXTERN_C - #ifndef DOINIT EXTCONST void * const PL_force_link_funcs[]; #else @@ -93,8 +87,6 @@ EXTCONST void * const PL_force_link_funcs[] = { }; #endif /* DOINIT */ -END_EXTERN_C - #endif /* PERL_NO_FORCE_LINK */ #else /* !PERL_CORE */ diff --git a/regcomp.h b/regcomp.h index de31d65..edafd59 100644 --- a/regcomp.h +++ b/regcomp.h @@ -610,8 +610,6 @@ struct regnode_ssc { #define REG_UNBOUNDED_QUANTIFIER_SEEN 0x00001000 -START_EXTERN_C - #ifdef PLUGGABLE_RE_EXTENSION #include "re_nodes.h" #else @@ -643,9 +641,6 @@ EXTCONST regexp_engine PL_core_reg_engine = { #endif /* PLUGGABLE_RE_EXTENSION */ -END_EXTERN_C - - /* .what is a character array with one character for each member of .data * The character describes the function of the corresponding .data item: * a - AV for paren_name_list under DEBUGGING diff --git a/regen/opcode.pl b/regen/opcode.pl index 327e45e..8cc9e5c 100755 --- a/regen/opcode.pl +++ b/regen/opcode.pl @@ -814,7 +814,6 @@ sub print_PL_op_private_tables { } print $fh <<EOF; -START_EXTERN_C #ifndef PERL_GLOBAL_STRUCT_INIT @@ -893,8 +892,6 @@ $PL_op_private_valid # endif /* !DOINIT */ #endif /* !PERL_GLOBAL_STRUCT_INIT */ -END_EXTERN_C - EOF @@ -971,7 +968,6 @@ print $on "#define OP_FREED MAXO\n"; # Emit op names and descriptions. print $oc <<'END'; -START_EXTERN_C #ifndef DOINIT EXTCONST char* const PL_op_name[]; @@ -1008,8 +1004,6 @@ print $oc <<'END'; }; #endif -END_EXTERN_C - #endif /* !PERL_GLOBAL_STRUCT_INIT */ END @@ -1017,8 +1011,6 @@ END print $oc <<'END'; -START_EXTERN_C - #ifdef PERL_GLOBAL_STRUCT_INIT # define PERL_PPADDR_INITED static const Perl_ppaddr_t Gppaddr[] @@ -1185,8 +1177,6 @@ print $oc <<'END'; #endif #endif /* !PERL_GLOBAL_STRUCT_INIT */ - -END_EXTERN_C END # Emit OP_IS_* macros diff --git a/utf8.h b/utf8.h index aaf878c..8313298 100644 --- a/utf8.h +++ b/utf8.h @@ -89,7 +89,6 @@ than just the ASCII characters, so C<is_invariant_string> is preferred. #include "utfebcdic.h" #else /* ! EBCDIC */ -START_EXTERN_C #ifdef DOINIT EXTCONST unsigned char PL_utf8skip[] = { @@ -117,8 +116,6 @@ EXTCONST unsigned char PL_utf8skip[] = { EXTCONST unsigned char PL_utf8skip[]; #endif -END_EXTERN_C - /* Native character to/from iso-8859-1. Are the identity functions on ASCII * platforms */ #define NATIVE_TO_LATIN1(ch) (ch) diff --git a/utfebcdic.h b/utfebcdic.h index 23b4ae2..04e7276 100644 --- a/utfebcdic.h +++ b/utfebcdic.h @@ -97,8 +97,6 @@ * UTF-EBCDIC is 0x3FFF, instead of 0x7FFF in UTF-8. */ -START_EXTERN_C - #ifdef DOINIT #include "ebcdic_tables.h" @@ -115,8 +113,6 @@ EXTCONST U8 PL_latin1_lc[]; EXTCONST U8 PL_mod_latin1_uc[]; #endif -END_EXTERN_C - /* EBCDIC-happy ways of converting native code to UTF-8 */ #define NATIVE_TO_LATIN1(ch) PL_e2a[(U8)(ch)] -- 1.7.9.msysgit.0
Subject: Re: [perl #123727] [PATCH] INTERN/EXTERN C++ cleanup
To: "perl5-porters [...] perl.org" <perl5-porters [...] perl.org>
Date: Mon, 9 Feb 2015 09:10:02 +0000
CC: "bugs-bitbucket [...] rt.perl.org" <bugs-bitbucket [...] rt.perl.org>
From: Steve Hay <steve.m.hay [...] googlemail.com>
Download (untitled) / with headers
text/plain 1.8k
On 4 February 2015 at 07:18, bulk88 <perlbug-followup@perl.org> wrote: Show quoted text
> # New Ticket Created by bulk88 > # Please include the string: [perl #123727] > # in the subject line of all future correspondence about this issue. > # <URL: https://rt.perl.org/Ticket/Display.html?id=123727 > > > > This is a bug report for perl from bulk88@hotmail.com, > generated with the help of perlbug 1.40 running under perl 5.21.4. > > > ----------------------------------------------------------------- > [Please describe your issue here] > > This patch never got any comments in its its original thread at > http://www.nntp.perl.org/group/perl.perl5.porters/2015/01/msg225087.html > , so I am filing it as a ticket. It is not intended to be committed as > is (no commit body for example). >
A couple of thoughts, without having tested it yet: I don't think the comment "Win32 GCC errors out with "..\perl.h:4614:35: error: expected unqualified-id before string constant" if dllexport is first, then EXTERN_C" in INTERN.h is necessary. That's normal, isn't it? The extern "C" always has to be first, e.g. VC++ also errors with: "'__declspec(dllexport)' : storage-class or type specifier(s) unexpected here; ignored. 'linkage specification' requires use of keyword 'extern' and must precede all other specifiers". I've stared at the line # if (defined(WIN32) && defined(__MINGW32__)) || defined(__SYMBIAN32__) in INTERN.h before and wondered why something different is done for MinGW compared to VC++ on Windows. Why do we have all the dllexport stuff for MinGW but not for VC++? Couldn't the line change either to "#if defined(WIN32) || defined(__SYMBIAN32__)" or to "#ifdef __SYMBIAN32__"? Otherwise it looks good to me, except for the "#ifdef DOINIT" part in perl.h, which I didn't understand. I see that it's defining variables after their declarations, but it's not obvious to me why this is necessary now.
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 699b
On Tue Feb 03 23:18:42 2015, bulk88 wrote: Show quoted text
> This is a bug report for perl from bulk88@hotmail.com, > generated with the help of perlbug 1.40 running under perl 5.21.4. > > > ----------------------------------------------------------------- > [Please describe your issue here] > > This patch never got any comments in its its original thread at > http://www.nntp.perl.org/group/perl.perl5.porters/2015/01/msg225087.html > , so I am filing it as a ticket. It is not intended to be committed as > is (no commit body for example).
Updated patch attached. It fixes a regen.t failure. This doesn't address any of Steve Hay's concerns which I will get to later. -- bulk88 ~ bulk88 at hotmail.com
Subject: 0001-INTERN-EXTERN-C-cleanup.patch
From 0396b6e086746f16c9d4f0e0b36bf18c0d9f29ca Mon Sep 17 00:00:00 2001 From: Daniel Dragan <bulk88@hotmail.com> Date: Thu, 26 Mar 2015 19:14:29 -0400 Subject: [PATCH] INTERN/EXTERN C++ cleanup --- EXTERN.h | 20 ++++++++++---------- INTERN.h | 11 +++++++---- opcode.h | 10 ---------- perl.h | 19 +++++-------------- perlapi.c | 3 --- perlapi.h | 8 -------- regcomp.h | 5 ----- regen/embed.pl | 11 ----------- regen/opcode.pl | 10 ---------- utf8.h | 3 --- utfebcdic.h | 4 ---- 11 files changed, 22 insertions(+), 82 deletions(-) diff --git a/EXTERN.h b/EXTERN.h index 4e4f1ad..345eccd 100644 --- a/EXTERN.h +++ b/EXTERN.h @@ -22,33 +22,33 @@ # if (defined(WIN32) || defined(__SYMBIAN32__)) && !defined(PERL_STATIC_SYMS) /* miniperl should not export anything */ # if defined(PERL_IS_MINIPERL) && !defined(UNDER_CE) && defined(_MSC_VER) -# define EXT extern +# define EXT EXTERN_C # define dEXT -# define EXTCONST extern const +# define EXTCONST EXTERN_C const # define dEXTCONST const # else # if defined(PERLDLL) || defined(__SYMBIAN32__) -# define EXT extern __declspec(dllexport) +# define EXT EXTERN_C __declspec(dllexport) # define dEXT -# define EXTCONST extern __declspec(dllexport) const +# define EXTCONST EXTERN_C __declspec(dllexport) const # define dEXTCONST const # else -# define EXT extern __declspec(dllimport) +# define EXT EXTERN_C __declspec(dllimport) # define dEXT -# define EXTCONST extern __declspec(dllimport) const +# define EXTCONST EXTERN_C __declspec(dllimport) const # define dEXTCONST const # endif # endif # else # if defined(__CYGWIN__) && defined(USEIMPORTLIB) -# define EXT extern __declspec(dllimport) +# define EXT EXTERN_C __declspec(dllimport) # define dEXT -# define EXTCONST extern __declspec(dllimport) const +# define EXTCONST EXTERN_C __declspec(dllimport) const # define dEXTCONST const # else -# define EXT extern +# define EXT EXTERN_C # define dEXT -# define EXTCONST extern const +# define EXTCONST EXTERN_C const # define dEXTCONST const # endif # endif diff --git a/INTERN.h b/INTERN.h index e6e0602..8b8df49 100644 --- a/INTERN.h +++ b/INTERN.h @@ -21,9 +21,12 @@ # if (defined(WIN32) && defined(__MINGW32__)) || defined(__SYMBIAN32__) # ifdef __cplusplus -# define EXT __declspec(dllexport) +# define EXT EXTERN_C __declspec(dllexport) # define dEXT -# define EXTCONST __declspec(dllexport) extern const +/* Win32 GCC errors out with + "..\perl.h:4614:35: error: expected unqualified-id before string constant" + if dllexport is first, then EXTERN_C */ +# define EXTCONST EXTERN_C __declspec(dllexport) const # define dEXTCONST const # else # define EXT __declspec(dllexport) @@ -33,9 +36,9 @@ # endif # else # ifdef __cplusplus -# define EXT +# define EXT EXTERN_C # define dEXT -# define EXTCONST extern const +# define EXTCONST EXTERN_C const # define dEXTCONST const # else # define EXT diff --git a/opcode.h b/opcode.h index cf39a4b..a11e372 100644 --- a/opcode.h +++ b/opcode.h @@ -144,7 +144,6 @@ #define Perl_pp_custom Perl_unimplemented_op #define Perl_pp_reach Perl_pp_rkeys #define Perl_pp_rvalues Perl_pp_rkeys -START_EXTERN_C #ifndef DOINIT EXTCONST char* const PL_op_name[]; @@ -954,12 +953,8 @@ EXTCONST char* const PL_op_desc[] = { }; #endif -END_EXTERN_C - #endif /* !PERL_GLOBAL_STRUCT_INIT */ -START_EXTERN_C - #ifdef PERL_GLOBAL_STRUCT_INIT # define PERL_PPADDR_INITED static const Perl_ppaddr_t Gppaddr[] @@ -2195,8 +2190,6 @@ EXTCONST U32 PL_opargs[] = { #endif /* !PERL_GLOBAL_STRUCT_INIT */ -END_EXTERN_C - #define OPpLVREF_SV 0x00 #define OPpARG1_MASK 0x01 @@ -2292,7 +2285,6 @@ END_EXTERN_C #define OPpPV_IS_UTF8 0x80 #define OPpSPLIT_IMPLIM 0x80 #define OPpTRANS_DELETE 0x80 -START_EXTERN_C #ifndef PERL_GLOBAL_STRUCT_INIT @@ -3321,8 +3313,6 @@ EXTCONST U8 PL_op_private_valid[] = { # endif /* !DOINIT */ #endif /* !PERL_GLOBAL_STRUCT_INIT */ -END_EXTERN_C - /* ex: set ro: */ diff --git a/perl.h b/perl.h index cc4111a..55383ad 100644 --- a/perl.h +++ b/perl.h @@ -4620,8 +4620,6 @@ extern char ** environ; /* environment variables supplied via exec */ STRINGIFY(PERL_API_VERSION) "." \ STRINGIFY(PERL_API_SUBVERSION) -START_EXTERN_C - /* handy constants */ EXTCONST char PL_warn_uninit[] INIT("Use of uninitialized value%s%s%s"); @@ -5203,8 +5201,6 @@ EXTCONST char *const PL_phase_names[]; #define PL_hints PL_compiling.cop_hints -END_EXTERN_C - /*****************************************************************************/ /* This lexer/parser stuff is currently global since yacc is hard to reenter */ /*****************************************************************************/ @@ -5524,15 +5520,18 @@ struct tempsym; /* defined in pp_pack.c */ * these include variables that would have been their struct-s */ +#ifdef DOINIT +#define PERLVAR(prefix,var,type) EXT type PL_##var; type PL_##var; +#define PERLVARA(prefix,var,n,type) EXT type PL_##var[n]; type PL_##var[n]; +#else #define PERLVAR(prefix,var,type) EXT type PL_##var; #define PERLVARA(prefix,var,n,type) EXT type PL_##var[n]; +#endif #define PERLVARI(prefix,var,type,init) EXT type PL_##var INIT(init); #define PERLVARIC(prefix,var,type,init) EXTCONST type PL_##var INIT(init); #if !defined(MULTIPLICITY) -START_EXTERN_C # include "intrpvar.h" -END_EXTERN_C #endif #ifdef PERL_CORE @@ -5546,11 +5545,7 @@ END_EXTERN_C #include "embed.h" #ifndef PERL_GLOBAL_STRUCT -START_EXTERN_C - # include "perlvars.h" - -END_EXTERN_C #endif #undef PERLVAR @@ -5578,8 +5573,6 @@ struct PerlHandShakeInterpreter { # undef PERLVARIC #endif -START_EXTERN_C - /* dummy variables that hold pointers to both runops functions, thus forcing * them *both* to get linked in (useful for Peek.xs, debugging etc) */ @@ -5675,8 +5668,6 @@ EXTCONST bool PL_valid_types_NV_set[]; #include "overload.h" -END_EXTERN_C - struct am_table { U8 flags; U8 fallback; diff --git a/perlapi.c b/perlapi.c index 7858337..90111d8 100644 --- a/perlapi.c +++ b/perlapi.c @@ -31,7 +31,6 @@ #if defined (MULTIPLICITY) && defined (PERL_GLOBAL_STRUCT) /* accessor functions for Perl "global" variables */ -START_EXTERN_C #undef PERLVARI #define PERLVARI(p,v,t,i) PERLVAR(p,v,t) @@ -53,8 +52,6 @@ START_EXTERN_C #undef PERLVARI #undef PERLVARIC -END_EXTERN_C - #endif /* MULTIPLICITY && PERL_GLOBAL_STRUCT */ /* ex: set ro: */ diff --git a/perlapi.h b/perlapi.h index 5268c2c..4d512a2 100644 --- a/perlapi.h +++ b/perlapi.h @@ -22,8 +22,6 @@ #if defined (MULTIPLICITY) && defined (PERL_GLOBAL_STRUCT) -START_EXTERN_C - #undef PERLVAR #undef PERLVARA #undef PERLVARI @@ -41,8 +39,6 @@ START_EXTERN_C #undef PERLVARI #undef PERLVARIC -END_EXTERN_C - #if defined(PERL_CORE) /* accessor functions for Perl "global" variables */ @@ -52,8 +48,6 @@ END_EXTERN_C #ifndef PERL_NO_FORCE_LINK -START_EXTERN_C - #ifndef DOINIT EXTCONST void * const PL_force_link_funcs[]; #else @@ -93,8 +87,6 @@ EXTCONST void * const PL_force_link_funcs[] = { }; #endif /* DOINIT */ -END_EXTERN_C - #endif /* PERL_NO_FORCE_LINK */ #else /* !PERL_CORE */ diff --git a/regcomp.h b/regcomp.h index c17bf62..a6c63e8 100644 --- a/regcomp.h +++ b/regcomp.h @@ -610,8 +610,6 @@ struct regnode_ssc { #define REG_UNBOUNDED_QUANTIFIER_SEEN 0x00001000 -START_EXTERN_C - #ifdef PLUGGABLE_RE_EXTENSION #include "re_nodes.h" #else @@ -643,9 +641,6 @@ EXTCONST regexp_engine PL_core_reg_engine = { #endif /* PLUGGABLE_RE_EXTENSION */ -END_EXTERN_C - - /* .what is a character array with one character for each member of .data * The character describes the function of the corresponding .data item: * a - AV for paren_name_list under DEBUGGING diff --git a/regen/embed.pl b/regen/embed.pl index 07438de..5e28743 100755 --- a/regen/embed.pl +++ b/regen/embed.pl @@ -501,8 +501,6 @@ print $capih <<'EOT'; #if defined (MULTIPLICITY) && defined (PERL_GLOBAL_STRUCT) -START_EXTERN_C - #undef PERLVAR #undef PERLVARA #undef PERLVARI @@ -520,8 +518,6 @@ START_EXTERN_C #undef PERLVARI #undef PERLVARIC -END_EXTERN_C - #if defined(PERL_CORE) /* accessor functions for Perl "global" variables */ @@ -531,8 +527,6 @@ END_EXTERN_C #ifndef PERL_NO_FORCE_LINK -START_EXTERN_C - #ifndef DOINIT EXTCONST void * const PL_force_link_funcs[]; #else @@ -572,8 +566,6 @@ EXTCONST void * const PL_force_link_funcs[] = { }; #endif /* DOINIT */ -END_EXTERN_C - #endif /* PERL_NO_FORCE_LINK */ #else /* !PERL_CORE */ @@ -615,7 +607,6 @@ print $capi <<'EOT'; #if defined (MULTIPLICITY) && defined (PERL_GLOBAL_STRUCT) /* accessor functions for Perl "global" variables */ -START_EXTERN_C #undef PERLVARI #define PERLVARI(p,v,t,i) PERLVAR(p,v,t) @@ -637,8 +628,6 @@ START_EXTERN_C #undef PERLVARI #undef PERLVARIC -END_EXTERN_C - #endif /* MULTIPLICITY && PERL_GLOBAL_STRUCT */ EOT diff --git a/regen/opcode.pl b/regen/opcode.pl index fe10584..6a80e1b 100755 --- a/regen/opcode.pl +++ b/regen/opcode.pl @@ -816,7 +816,6 @@ sub print_PL_op_private_tables { } print $fh <<EOF; -START_EXTERN_C #ifndef PERL_GLOBAL_STRUCT_INIT @@ -895,8 +894,6 @@ $PL_op_private_valid # endif /* !DOINIT */ #endif /* !PERL_GLOBAL_STRUCT_INIT */ -END_EXTERN_C - EOF @@ -973,7 +970,6 @@ print $on "#define OP_FREED MAXO\n"; # Emit op names and descriptions. print $oc <<'END'; -START_EXTERN_C #ifndef DOINIT EXTCONST char* const PL_op_name[]; @@ -1010,8 +1006,6 @@ print $oc <<'END'; }; #endif -END_EXTERN_C - #endif /* !PERL_GLOBAL_STRUCT_INIT */ END @@ -1019,8 +1013,6 @@ END print $oc <<'END'; -START_EXTERN_C - #ifdef PERL_GLOBAL_STRUCT_INIT # define PERL_PPADDR_INITED static const Perl_ppaddr_t Gppaddr[] @@ -1189,8 +1181,6 @@ print $oc <<'END'; #endif #endif /* !PERL_GLOBAL_STRUCT_INIT */ - -END_EXTERN_C END # Emit OP_IS_* macros diff --git a/utf8.h b/utf8.h index aaf878c..8313298 100644 --- a/utf8.h +++ b/utf8.h @@ -89,7 +89,6 @@ than just the ASCII characters, so C<is_invariant_string> is preferred. #include "utfebcdic.h" #else /* ! EBCDIC */ -START_EXTERN_C #ifdef DOINIT EXTCONST unsigned char PL_utf8skip[] = { @@ -117,8 +116,6 @@ EXTCONST unsigned char PL_utf8skip[] = { EXTCONST unsigned char PL_utf8skip[]; #endif -END_EXTERN_C - /* Native character to/from iso-8859-1. Are the identity functions on ASCII * platforms */ #define NATIVE_TO_LATIN1(ch) (ch) diff --git a/utfebcdic.h b/utfebcdic.h index 23b4ae2..04e7276 100644 --- a/utfebcdic.h +++ b/utfebcdic.h @@ -97,8 +97,6 @@ * UTF-EBCDIC is 0x3FFF, instead of 0x7FFF in UTF-8. */ -START_EXTERN_C - #ifdef DOINIT #include "ebcdic_tables.h" @@ -115,8 +113,6 @@ EXTCONST U8 PL_latin1_lc[]; EXTCONST U8 PL_mod_latin1_uc[]; #endif -END_EXTERN_C - /* EBCDIC-happy ways of converting native code to UTF-8 */ #define NATIVE_TO_LATIN1(ch) PL_e2a[(U8)(ch)] -- 1.7.9.msysgit.0
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 246b
Another patch update. VC6 but not any newer VCs doesn't like a "static __inline" declaration inside an "extern "C" {" block. So proto.h was fixed. Also PERL_CALLCONV_NO_RET was missing "extern "C"" in win32.h. -- bulk88 ~ bulk88 at hotmail.com
Subject: 0001-INTERN-EXTERN-C-cleanup.patch
From 9ab5732b45d6aadfc130d15845c3dbdf09318d11 Mon Sep 17 00:00:00 2001 From: Daniel Dragan <bulk88@hotmail.com> Date: Tue, 19 May 2015 11:58:34 -0400 Subject: [PATCH] INTERN/EXTERN C++ cleanup --- EXTERN.h | 20 ++++++++++---------- INTERN.h | 11 +++++++---- opcode.h | 10 ---------- perl.h | 19 +++++-------------- perlapi.c | 3 --- perlapi.h | 8 -------- proto.h | 2 -- regcomp.h | 5 ----- regen/embed.pl | 13 ------------- regen/opcode.pl | 10 ---------- utf8.h | 3 --- utfebcdic.h | 4 ---- win32/win32.h | 6 +++++- 13 files changed, 27 insertions(+), 87 deletions(-) diff --git a/EXTERN.h b/EXTERN.h index 4e4f1ad..345eccd 100644 --- a/EXTERN.h +++ b/EXTERN.h @@ -22,33 +22,33 @@ # if (defined(WIN32) || defined(__SYMBIAN32__)) && !defined(PERL_STATIC_SYMS) /* miniperl should not export anything */ # if defined(PERL_IS_MINIPERL) && !defined(UNDER_CE) && defined(_MSC_VER) -# define EXT extern +# define EXT EXTERN_C # define dEXT -# define EXTCONST extern const +# define EXTCONST EXTERN_C const # define dEXTCONST const # else # if defined(PERLDLL) || defined(__SYMBIAN32__) -# define EXT extern __declspec(dllexport) +# define EXT EXTERN_C __declspec(dllexport) # define dEXT -# define EXTCONST extern __declspec(dllexport) const +# define EXTCONST EXTERN_C __declspec(dllexport) const # define dEXTCONST const # else -# define EXT extern __declspec(dllimport) +# define EXT EXTERN_C __declspec(dllimport) # define dEXT -# define EXTCONST extern __declspec(dllimport) const +# define EXTCONST EXTERN_C __declspec(dllimport) const # define dEXTCONST const # endif # endif # else # if defined(__CYGWIN__) && defined(USEIMPORTLIB) -# define EXT extern __declspec(dllimport) +# define EXT EXTERN_C __declspec(dllimport) # define dEXT -# define EXTCONST extern __declspec(dllimport) const +# define EXTCONST EXTERN_C __declspec(dllimport) const # define dEXTCONST const # else -# define EXT extern +# define EXT EXTERN_C # define dEXT -# define EXTCONST extern const +# define EXTCONST EXTERN_C const # define dEXTCONST const # endif # endif diff --git a/INTERN.h b/INTERN.h index e6e0602..8b8df49 100644 --- a/INTERN.h +++ b/INTERN.h @@ -21,9 +21,12 @@ # if (defined(WIN32) && defined(__MINGW32__)) || defined(__SYMBIAN32__) # ifdef __cplusplus -# define EXT __declspec(dllexport) +# define EXT EXTERN_C __declspec(dllexport) # define dEXT -# define EXTCONST __declspec(dllexport) extern const +/* Win32 GCC errors out with + "..\perl.h:4614:35: error: expected unqualified-id before string constant" + if dllexport is first, then EXTERN_C */ +# define EXTCONST EXTERN_C __declspec(dllexport) const # define dEXTCONST const # else # define EXT __declspec(dllexport) @@ -33,9 +36,9 @@ # endif # else # ifdef __cplusplus -# define EXT +# define EXT EXTERN_C # define dEXT -# define EXTCONST extern const +# define EXTCONST EXTERN_C const # define dEXTCONST const # else # define EXT diff --git a/opcode.h b/opcode.h index 5c4254b..b81bd4f 100644 --- a/opcode.h +++ b/opcode.h @@ -144,7 +144,6 @@ #define Perl_pp_custom Perl_unimplemented_op #define Perl_pp_reach Perl_pp_rkeys #define Perl_pp_rvalues Perl_pp_rkeys -START_EXTERN_C #ifndef DOINIT EXTCONST char* const PL_op_name[]; @@ -954,12 +953,8 @@ EXTCONST char* const PL_op_desc[] = { }; #endif -END_EXTERN_C - #endif /* !PERL_GLOBAL_STRUCT_INIT */ -START_EXTERN_C - #ifdef PERL_GLOBAL_STRUCT_INIT # define PERL_PPADDR_INITED static const Perl_ppaddr_t Gppaddr[] @@ -2195,8 +2190,6 @@ EXTCONST U32 PL_opargs[] = { #endif /* !PERL_GLOBAL_STRUCT_INIT */ -END_EXTERN_C - #define OPpLVREF_SV 0x00 #define OPpARG1_MASK 0x01 @@ -2292,7 +2285,6 @@ END_EXTERN_C #define OPpPV_IS_UTF8 0x80 #define OPpSPLIT_IMPLIM 0x80 #define OPpTRANS_DELETE 0x80 -START_EXTERN_C #ifndef PERL_GLOBAL_STRUCT_INIT @@ -3319,8 +3311,6 @@ EXTCONST U8 PL_op_private_valid[] = { # endif /* !DOINIT */ #endif /* !PERL_GLOBAL_STRUCT_INIT */ -END_EXTERN_C - /* ex: set ro: */ diff --git a/perl.h b/perl.h index b9de947..9c9b8c0 100644 --- a/perl.h +++ b/perl.h @@ -4638,8 +4638,6 @@ extern char ** environ; /* environment variables supplied via exec */ STRINGIFY(PERL_API_VERSION) "." \ STRINGIFY(PERL_API_SUBVERSION) -START_EXTERN_C - /* handy constants */ EXTCONST char PL_warn_uninit[] INIT("Use of uninitialized value%s%s%s"); @@ -5221,8 +5219,6 @@ EXTCONST char *const PL_phase_names[]; #define PL_hints PL_compiling.cop_hints -END_EXTERN_C - /*****************************************************************************/ /* This lexer/parser stuff is currently global since yacc is hard to reenter */ /*****************************************************************************/ @@ -5542,15 +5538,18 @@ struct tempsym; /* defined in pp_pack.c */ * these include variables that would have been their struct-s */ +#ifdef DOINIT +#define PERLVAR(prefix,var,type) EXT type PL_##var; type PL_##var; +#define PERLVARA(prefix,var,n,type) EXT type PL_##var[n]; type PL_##var[n]; +#else #define PERLVAR(prefix,var,type) EXT type PL_##var; #define PERLVARA(prefix,var,n,type) EXT type PL_##var[n]; +#endif #define PERLVARI(prefix,var,type,init) EXT type PL_##var INIT(init); #define PERLVARIC(prefix,var,type,init) EXTCONST type PL_##var INIT(init); #if !defined(MULTIPLICITY) -START_EXTERN_C # include "intrpvar.h" -END_EXTERN_C #endif #ifdef PERL_CORE @@ -5564,11 +5563,7 @@ END_EXTERN_C #include "embed.h" #ifndef PERL_GLOBAL_STRUCT -START_EXTERN_C - # include "perlvars.h" - -END_EXTERN_C #endif #undef PERLVAR @@ -5596,8 +5591,6 @@ struct PerlHandShakeInterpreter { # undef PERLVARIC #endif -START_EXTERN_C - /* dummy variables that hold pointers to both runops functions, thus forcing * them *both* to get linked in (useful for Peek.xs, debugging etc) */ @@ -5693,8 +5686,6 @@ EXTCONST bool PL_valid_types_NV_set[]; #include "overload.h" -END_EXTERN_C - struct am_table { U8 flags; U8 fallback; diff --git a/perlapi.c b/perlapi.c index 7858337..90111d8 100644 --- a/perlapi.c +++ b/perlapi.c @@ -31,7 +31,6 @@ #if defined (MULTIPLICITY) && defined (PERL_GLOBAL_STRUCT) /* accessor functions for Perl "global" variables */ -START_EXTERN_C #undef PERLVARI #define PERLVARI(p,v,t,i) PERLVAR(p,v,t) @@ -53,8 +52,6 @@ START_EXTERN_C #undef PERLVARI #undef PERLVARIC -END_EXTERN_C - #endif /* MULTIPLICITY && PERL_GLOBAL_STRUCT */ /* ex: set ro: */ diff --git a/perlapi.h b/perlapi.h index 5268c2c..4d512a2 100644 --- a/perlapi.h +++ b/perlapi.h @@ -22,8 +22,6 @@ #if defined (MULTIPLICITY) && defined (PERL_GLOBAL_STRUCT) -START_EXTERN_C - #undef PERLVAR #undef PERLVARA #undef PERLVARI @@ -41,8 +39,6 @@ START_EXTERN_C #undef PERLVARI #undef PERLVARIC -END_EXTERN_C - #if defined(PERL_CORE) /* accessor functions for Perl "global" variables */ @@ -52,8 +48,6 @@ END_EXTERN_C #ifndef PERL_NO_FORCE_LINK -START_EXTERN_C - #ifndef DOINIT EXTCONST void * const PL_force_link_funcs[]; #else @@ -93,8 +87,6 @@ EXTCONST void * const PL_force_link_funcs[] = { }; #endif /* DOINIT */ -END_EXTERN_C - #endif /* PERL_NO_FORCE_LINK */ #else /* !PERL_CORE */ diff --git a/proto.h b/proto.h index 8ad321f..9fa5b7f 100644 --- a/proto.h +++ b/proto.h @@ -16,7 +16,6 @@ * Edit those files and run 'make regen_headers' to effect changes. */ -START_EXTERN_C PERL_CALLCONV UV ASCII_TO_NEED(const UV enc, const UV ch) __attribute__deprecated__ __attribute__warn_unused_result__ @@ -8353,6 +8352,5 @@ PERL_CALLCONV int Perl_magic_regdatum_set(pTHX_ SV* sv, MAGIC* mg) #ifdef PERL_CORE # include "pp_proto.h" #endif -END_EXTERN_C /* ex: set ro: */ diff --git a/regcomp.h b/regcomp.h index f418086..eda2b46 100644 --- a/regcomp.h +++ b/regcomp.h @@ -608,8 +608,6 @@ struct regnode_ssc { #define REG_UNBOUNDED_QUANTIFIER_SEEN 0x00001000 -START_EXTERN_C - #ifdef PLUGGABLE_RE_EXTENSION #include "re_nodes.h" #else @@ -641,9 +639,6 @@ EXTCONST regexp_engine PL_core_reg_engine = { #endif /* PLUGGABLE_RE_EXTENSION */ -END_EXTERN_C - - /* .what is a character array with one character for each member of .data * The character describes the function of the corresponding .data item: * a - AV for paren_name_list under DEBUGGING diff --git a/regen/embed.pl b/regen/embed.pl index 07438de..cb8068c 100755 --- a/regen/embed.pl +++ b/regen/embed.pl @@ -65,7 +65,6 @@ my ($embed, $core, $ext, $api) = setup_embed(); # generate proto.h { my $pr = open_print_header("proto.h"); - print $pr "START_EXTERN_C\n"; my $ret; foreach (@$embed) { @@ -229,7 +228,6 @@ my ($embed, $core, $ext, $api) = setup_embed(); #ifdef PERL_CORE # include "pp_proto.h" #endif -END_EXTERN_C EOF read_only_bottom_close_and_rename($pr); @@ -501,8 +499,6 @@ print $capih <<'EOT'; #if defined (MULTIPLICITY) && defined (PERL_GLOBAL_STRUCT) -START_EXTERN_C - #undef PERLVAR #undef PERLVARA #undef PERLVARI @@ -520,8 +516,6 @@ START_EXTERN_C #undef PERLVARI #undef PERLVARIC -END_EXTERN_C - #if defined(PERL_CORE) /* accessor functions for Perl "global" variables */ @@ -531,8 +525,6 @@ END_EXTERN_C #ifndef PERL_NO_FORCE_LINK -START_EXTERN_C - #ifndef DOINIT EXTCONST void * const PL_force_link_funcs[]; #else @@ -572,8 +564,6 @@ EXTCONST void * const PL_force_link_funcs[] = { }; #endif /* DOINIT */ -END_EXTERN_C - #endif /* PERL_NO_FORCE_LINK */ #else /* !PERL_CORE */ @@ -615,7 +605,6 @@ print $capi <<'EOT'; #if defined (MULTIPLICITY) && defined (PERL_GLOBAL_STRUCT) /* accessor functions for Perl "global" variables */ -START_EXTERN_C #undef PERLVARI #define PERLVARI(p,v,t,i) PERLVAR(p,v,t) @@ -637,8 +626,6 @@ START_EXTERN_C #undef PERLVARI #undef PERLVARIC -END_EXTERN_C - #endif /* MULTIPLICITY && PERL_GLOBAL_STRUCT */ EOT diff --git a/regen/opcode.pl b/regen/opcode.pl index fe10584..6a80e1b 100755 --- a/regen/opcode.pl +++ b/regen/opcode.pl @@ -816,7 +816,6 @@ sub print_PL_op_private_tables { } print $fh <<EOF; -START_EXTERN_C #ifndef PERL_GLOBAL_STRUCT_INIT @@ -895,8 +894,6 @@ $PL_op_private_valid # endif /* !DOINIT */ #endif /* !PERL_GLOBAL_STRUCT_INIT */ -END_EXTERN_C - EOF @@ -973,7 +970,6 @@ print $on "#define OP_FREED MAXO\n"; # Emit op names and descriptions. print $oc <<'END'; -START_EXTERN_C #ifndef DOINIT EXTCONST char* const PL_op_name[]; @@ -1010,8 +1006,6 @@ print $oc <<'END'; }; #endif -END_EXTERN_C - #endif /* !PERL_GLOBAL_STRUCT_INIT */ END @@ -1019,8 +1013,6 @@ END print $oc <<'END'; -START_EXTERN_C - #ifdef PERL_GLOBAL_STRUCT_INIT # define PERL_PPADDR_INITED static const Perl_ppaddr_t Gppaddr[] @@ -1189,8 +1181,6 @@ print $oc <<'END'; #endif #endif /* !PERL_GLOBAL_STRUCT_INIT */ - -END_EXTERN_C END # Emit OP_IS_* macros diff --git a/utf8.h b/utf8.h index 3e15707..6a6315f 100644 --- a/utf8.h +++ b/utf8.h @@ -95,7 +95,6 @@ than just the ASCII characters, so C<is_invariant_string> is preferred. #include "utfebcdic.h" #else /* ! EBCDIC */ -START_EXTERN_C #ifdef DOINIT EXTCONST unsigned char PL_utf8skip[] = { @@ -123,8 +122,6 @@ EXTCONST unsigned char PL_utf8skip[] = { EXTCONST unsigned char PL_utf8skip[]; #endif -END_EXTERN_C - /* Native character to/from iso-8859-1. Are the identity functions on ASCII * platforms */ #define NATIVE_TO_LATIN1(ch) (ch) diff --git a/utfebcdic.h b/utfebcdic.h index 24101ed..df3404a 100644 --- a/utfebcdic.h +++ b/utfebcdic.h @@ -108,8 +108,6 @@ * UTF-EBCDIC is 0x3FFF, instead of 0x7FFF in UTF-8. */ -START_EXTERN_C - #ifdef DOINIT #include "ebcdic_tables.h" @@ -126,8 +124,6 @@ EXTCONST U8 PL_latin1_lc[]; EXTCONST U8 PL_mod_latin1_uc[]; #endif -END_EXTERN_C - /* EBCDIC-happy ways of converting native code to UTF-8 */ #define NATIVE_TO_LATIN1(ch) PL_e2a[(U8)(ch)] diff --git a/win32/win32.h b/win32/win32.h index 107062a..c0e9073 100644 --- a/win32/win32.h +++ b/win32/win32.h @@ -120,7 +120,11 @@ # endif #else /* MSVC noreturn support inside the interp */ # ifdef _MSC_VER -# define PERL_CALLCONV_NO_RET __declspec(noreturn) +# ifdef __cplusplus +# define PERL_CALLCONV_NO_RET extern "C" __declspec(noreturn) +# else +# define PERL_CALLCONV_NO_RET __declspec(noreturn) +# endif # endif #endif -- 1.7.9.msysgit.0
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 377b
On Tue May 19 09:02:06 2015, bulk88 wrote: Show quoted text
> Another patch update. VC6 but not any newer VCs doesn't like a "static > __inline" declaration inside an "extern "C" {" block. So proto.h was > fixed. Also PERL_CALLCONV_NO_RET was missing "extern "C"" in win32.h.
Is this still "not intended to be committed as is"? The description still doesn't say what it's trying to fix. Tony
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 1.7k
On Tue Jul 28 19:11:50 2015, tonyc wrote: Show quoted text
> On Tue May 19 09:02:06 2015, bulk88 wrote:
> > Another patch update. VC6 but not any newer VCs doesn't like a > > "static > > __inline" declaration inside an "extern "C" {" block. So proto.h was > > fixed. Also PERL_CALLCONV_NO_RET was missing "extern "C"" in win32.h.
> > Is this still "not intended to be committed as is"? The description > still doesn't say what it's trying to fix. > > Tony
This patch was a proof of concept based on discussions in this thread http://www.nntp.perl.org/group/perl.perl5.porters/2015/01/msg225087.html It removed the requirement to keep declarations and definitions inside multi-line blocks, and instead each declaration or definition statement, on its own, does the extern "C" for itself alone. In a C++ perl build there were problems where some symbols were just "extern" not "extern "C"" and that was causing linking problems with plain C XS or plain C parts of perl core in some corner cases. The patch also removes usage of "extern" (implied C++) from perl core. Everything should be more uniformly C names in C++ mode with this patch, rather than a pool of C++ perl symbols existing that plain C XS code happens to never try to link with since those C++ perl symbols aren't public api (not like p5p can technically enforce public API), but once in a while for whatever (perl macro got changed by P5P, XS author decides to use non-public macro or func/global data var) reason plain C code tries linking with that C++ symbol and C++ builds break. For example this commit came as a result of that ML thread http://perl5.git.perl.org/perl.git/blobdiff/7aa20b428680dffac746f9c0947535a222940bda..6635f04f27bfaa7296536aad8659044e8bed8df3:/handy.h which shows perl is inconsistent in using extern "C" inside itself. -- bulk88 ~ bulk88 at hotmail.com


This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

For issues related to this RT instance (aka "perlbug"), please contact perlbug-admin at perl.org