This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Revert bootstrapping to non-ASCII platforms
authorKarl Williamson <khw@cpan.org>
Mon, 5 May 2014 23:16:03 +0000 (17:16 -0600)
committerKarl Williamson <khw@cpan.org>
Sat, 31 May 2014 17:28:53 +0000 (11:28 -0600)
This effectively reverts commit 3ded5eb052cdc3f861ec0c0ff85348086d653be0.

That commit created a scheme to bootstrap Perl onto a non-ASCII
platform, by adding the allowing a Configure option that caused the
compiled code to bypass a number of normal macro definitions and use
slower, generic ones, sufficient to get miniperl to compile on the
target architecture.  One would then use miniperl to run a few scripts
that would re-order certain header files,  Using this one could then
recompile all of perl, and once that was done, use it to recompile to
use the normal fast macros.

This worked, but was a cumbersome process.  We now have the
infrastructure, since commit 6ff677df5d6fe0f52ca0b6736f8b5a46ac402943,
to cross compile on an ASCII platform to EBCDIC, the likely only
non-ASCII character set to ever be used.  So the new infrastructure will
be used in future commits.

handy.h
inline.h

diff --git a/handy.h b/handy.h
index 44dc64d..13f8d22 100644 (file)
--- a/handy.h
+++ b/handy.h
@@ -951,8 +951,7 @@ patched there.  The file as of this writing is cpan/Devel-PPPort/parts/inc/misc
 #  define _HIGHEST_REGCOMP_DOT_H_SYNC _CC_VERTSPACE
 
 /* The members of the third group below do not need to be coordinated with data
- * structures in regcomp.[ch] and regexec.c.  But they should be added to
- * bootstrap_ctype() */
+ * structures in regcomp.[ch] and regexec.c. */
 #  define _CC_IDFIRST           17
 #  define _CC_CHARNAME_CONT     18
 #  define _CC_NONLATIN1_FOLD    19
@@ -1029,9 +1028,6 @@ EXTCONST  U32 PL_charclass[] = {
 #  else /* ! DOINIT */
 EXTCONST U32 PL_charclass[];
 #  endif
-#endif  /* Has perl.h */
-
-#if defined(H_PERL) && ! defined(BOOTSTRAP_CHARSET)
 
     /* The 1U keeps Solaris from griping when shifting sets the uppermost bit */
 #   define _CC_mask(classnum) (1U << (classnum))
@@ -1094,17 +1090,11 @@ EXTCONST U32 PL_charclass[];
                                             _generic_isCC(c, _CC_NON_FINAL_FOLD)
 #   define _IS_IN_SOME_FOLD_ONLY_FOR_USE_BY_REGCOMP_DOT_C(c) \
                                             _generic_isCC(c, _CC_IS_IN_SOME_FOLD)
-#else   /* Either don't have perl.h or don't want to use char_class_tab.h */
+#else   /* else we don't have perl.h */
 
     /* If we don't have perl.h, we are compiling a utility program.  Below we
      * hard-code various macro definitions that wouldn't otherwise be available
-     * to it.  We can also get here if we are configured to bootstrap up Perl
-     * on a non-ASCII platform that doesn't have a working Perl (currently only
-     * EBCDIC).  For these we currently use the native definitions to get
-     * things going.  (It should also be possible to use the translation
-     * function NATIVE_TO_LATIN1(), but that is an extra layer of dependence on
-     * Perl, so it is currently avoided for the macros where it's possible to
-     * do so.) */
+     * to it. */
 #   ifdef EBCDIC
         /* Use the native functions.  They likely will return false for all
          * non-ASCII values, but this makes sure */
@@ -1135,9 +1125,8 @@ EXTCONST U32 PL_charclass[];
                           || ((c) >= 'a' && (c) <= 'f')                      \
                           || ((c) <= 'F' && (c) >= 'A'))
 
-    /* The _L1 macros may be unnecessary for both the utilities and for
-     * bootstrapping; I (khw) added them during debugging of bootstrapping, and
-     * it seems best to keep them. */
+    /* The _L1 macros may be unnecessary for the utilities; I (khw) added them
+     * during debugging, and it seems best to keep them. */
 #   define isPSXSPC_A(c)     isSPACE_A(c) /* XXX Assumes SPACE matches '\v' */
 #   define isALPHA_L1(c)     (isUPPER_L1(c) || isLOWER_L1(c))
 #   define isALPHANUMERIC_L1(c) (isALPHA_L1(c) || isDIGIT_A(c))
@@ -1204,7 +1193,7 @@ EXTCONST U32 PL_charclass[];
          (FITS_IN_8_BITS(c) && S_bootstrap_ctype((U8) (c), (classnum), TRUE))
 #   define _generic_isCC_A(c, classnum)                                      \
          (FITS_IN_8_BITS(c) && S_bootstrap_ctype((U8) (c), (classnum), FALSE))
-#endif  /* End of no perl.h or have BOOTSTRAP_CHARSET */
+#endif  /* End of no perl.h */
 
 #define isALPHANUMERIC(c)  isALPHANUMERIC_A(c)
 #define isALPHA(c)   isALPHA_A(c)
index f4b9554..615c2e3 100644 (file)
--- a/inline.h
+++ b/inline.h
@@ -201,53 +201,6 @@ S_croak_memory_wrap(void)
 #pragma clang diagnostic pop
 #endif
 
-#ifdef BOOTSTRAP_CHARSET
-static bool
-S_bootstrap_ctype(U8 character, UV classnum, bool full_Latin1)
-{
-    /* See comments in handy.h.  This is placed in this file primarily to avoid
-     * having to have an entry for it in embed.fnc */
-
-    dTHX;
-
-    if (! full_Latin1 && ! isASCII(character)) {
-        return FALSE;
-    }
-
-    switch (classnum) {
-        case _CC_ALPHANUMERIC: return isALPHANUMERIC_L1(character);
-        case _CC_ALPHA:     return isALPHA_L1(character);
-        case _CC_ASCII:     return isASCII_L1(character);
-        case _CC_BLANK:     return isBLANK_L1(character);
-        case _CC_CASED:     return isLOWER_L1(character)
-                                   || isUPPER_L1(character);
-        case _CC_CNTRL:     return isCNTRL_L1(character);
-        case _CC_DIGIT:     return isDIGIT_L1(character);
-        case _CC_GRAPH:     return isGRAPH_L1(character);
-        case _CC_LOWER:     return isLOWER_L1(character);
-        case _CC_PRINT:     return isPRINT_L1(character);
-        case _CC_PSXSPC:    return isPSXSPC_L1(character);
-        case _CC_PUNCT:     return isPUNCT_L1(character);
-        case _CC_SPACE:     return isSPACE_L1(character);
-        case _CC_UPPER:     return isUPPER_L1(character);
-        case _CC_WORDCHAR:  return isWORDCHAR_L1(character);
-        case _CC_XDIGIT:    return isXDIGIT_L1(character);
-        case _CC_VERTSPACE: return isSPACE_L1(character) && ! isBLANK_L1(character);
-        case _CC_IDFIRST:   return isIDFIRST_L1(character);
-        case _CC_QUOTEMETA: return _isQUOTEMETA(character);
-        case _CC_CHARNAME_CONT: return isCHARNAME_CONT(character);
-        case _CC_NONLATIN1_FOLD: return _HAS_NONLATIN1_FOLD_CLOSURE_ONLY_FOR_USE_BY_REGCOMP_DOT_C_AND_REGEXEC_DOT_C(character);
-        case _CC_NON_FINAL_FOLD: return _IS_NON_FINAL_FOLD_ONLY_FOR_USE_BY_REGCOMP_DOT_C(character);
-        case _CC_IS_IN_SOME_FOLD: return _IS_IN_SOME_FOLD_ONLY_FOR_USE_BY_REGCOMP_DOT_C(character);
-        case _CC_BACKSLASH_FOO_LBRACE_IS_META: return 0;
-
-
-        default: break;
-    }
-    Perl_croak(aTHX_ "panic: bootstrap_ctype() has an unexpected character class '%" UVxf "'", classnum);
-}
-#endif
-
 /* ------------------------------- utf8.h ------------------------------- */
 
 PERL_STATIC_INLINE void