If FBMcf_TAIL, the table is created as if the string has a trailing \n. */
void
-Perl_fbm_compile(pTHX_ SV *sv, U32 flags /* not used yet */)
+Perl_fbm_compile(pTHX_ SV *sv, U32 flags)
{
register U8 *s;
register U8 *table;
if (len == 0) /* TAIL might be on on a zero-length string. */
return;
if (len > 2) {
- I32 mlen = len;
+ U8 mlen;
unsigned char *sb;
- if (mlen > 255)
+ if (len > 255)
mlen = 255;
- Sv_Grow(sv,len + 256 + FBM_TABLE_OFFSET);
+ else
+ mlen = (U8)len;
+ Sv_Grow(sv, len + 256 + FBM_TABLE_OFFSET);
table = (unsigned char*)(SvPVX(sv) + len + FBM_TABLE_OFFSET);
- s = table - 1 - FBM_TABLE_OFFSET; /* Last char */
- for (i = 0; i < 256; i++) {
- table[i] = mlen;
- }
- table[-1] = flags; /* Not used yet */
+ s = table - 1 - FBM_TABLE_OFFSET; /* last char */
+ memset((void*)table, mlen, 256);
+ table[-1] = (U8)flags;
i = 0;
- sb = s - mlen;
+ sb = s - mlen + 1; /* first char (maybe) */
while (s >= sb) {
if (table[*s] == mlen)
- table[*s] = i;
+ table[*s] = (U8)i;
s--, i++;
}
}
BmUSEFUL(sv) = 100; /* Initial value */
if (flags & FBMcf_TAIL)
SvTAIL_on(sv);
- DEBUG_r(PerlIO_printf(Perl_debug_log, "rarest char %c at %d\n",BmRARE(sv),BmPREVIOUS(sv)));
+ DEBUG_r(PerlIO_printf(Perl_debug_log, "rarest char %c at %d\n",
+ BmRARE(sv),BmPREVIOUS(sv)));
}
/* If SvTAIL(littlestr), it has a fake '\n' at end. */
}
if (SvTAIL(littlestr) && !multiline) { /* tail anchored? */
s = bigend - littlelen;
- if (s >= big
- && bigend[-1] == '\n'
- && *s == *little
+ if (s >= big && bigend[-1] == '\n' && *s == *little
/* Automatically of length > 2 */
&& memEQ((char*)s + 1, (char*)little + 1, littlelen - 2))
+ {
return (char*)s; /* how sweet it is */
- if (s[1] == *little && memEQ((char*)s + 2,(char*)little + 1,
- littlelen - 2))
+ }
+ if (s[1] == *little
+ && memEQ((char*)s + 2, (char*)little + 1, littlelen - 2))
+ {
return (char*)s + 1; /* how sweet it is */
+ }
return Nullch;
}
if (SvTYPE(littlestr) != SVt_PVBM || !SvVALID(littlestr)) {
if (!b && SvTAIL(littlestr)) { /* Automatically multiline! */
/* Chop \n from littlestr: */
s = bigend - littlelen + 1;
- if (*s == *little && memEQ((char*)s + 1, (char*)little + 1,
- littlelen - 2))
+ if (*s == *little
+ && memEQ((char*)s + 1, (char*)little + 1, littlelen - 2))
+ {
return (char*)s;
+ }
return Nullch;
}
return b;
top2:
/*SUPPRESS 560*/
- if (tmp = table[*s]) {
+ if ((tmp = table[*s])) {
#ifdef POINTERRIGOR
if (bigend - s > tmp) {
s += tmp;
return SvPVX(sv);
}
+#if defined(PERL_IMPLICIT_CONTEXT)
+SV *
+Perl_mess_nocontext(const char *pat, ...)
+{
+ dTHX;
+ SV *retval;
+ va_list args;
+ va_start(args, pat);
+ retval = vmess(pat, &args);
+ va_end(args);
+ return retval;
+}
+#endif /* PERL_IMPLICIT_CONTEXT */
+
+SV *
+Perl_mess(pTHX_ const char *pat, ...)
+{
+ SV *retval;
+ va_list args;
+ va_start(args, pat);
+ retval = vmess(pat, &args);
+ va_end(args);
+ return retval;
+}
+
SV *
-Perl_mess(pTHX_ const char *pat, va_list *args)
+Perl_vmess(pTHX_ const char *pat, va_list *args)
{
SV *sv = mess_alloc();
static char dgd[] = " during global destruction.\n";
sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
if (!SvCUR(sv) || *(SvEND(sv) - 1) != '\n') {
dTHR;
-#ifdef IV_IS_QUAD
if (PL_curcop->cop_line)
- Perl_sv_catpvf(aTHX_ sv, " at %_ line %" PERL_PRId64,
+ Perl_sv_catpvf(aTHX_ sv, " at %_ line %"IVdf,
GvSV(PL_curcop->cop_filegv), (IV)PL_curcop->cop_line);
-#else
- if (PL_curcop->cop_line)
- Perl_sv_catpvf(aTHX_ sv, " at %_ line %ld",
- GvSV(PL_curcop->cop_filegv), (long)PL_curcop->cop_line);
-#endif
if (GvIO(PL_last_in_gv) && IoLINES(GvIOp(PL_last_in_gv))) {
bool line_mode = (RsSIMPLE(PL_rs) &&
SvCUR(PL_rs) == 1 && *SvPVX(PL_rs) == '\n');
-#ifdef IV_IS_QUAD
- Perl_sv_catpvf(aTHX_ sv, ", <%s> %s %" PERL_PRId64,
+ Perl_sv_catpvf(aTHX_ sv, ", <%s> %s %"IVdf,
PL_last_in_gv == PL_argvgv ? "" : GvNAME(PL_last_in_gv),
line_mode ? "line" : "chunk",
(IV)IoLINES(GvIOp(PL_last_in_gv)));
-#else
- Perl_sv_catpvf(aTHX_ sv, ", <%s> %s %ld",
- PL_last_in_gv == PL_argvgv ? "" : GvNAME(PL_last_in_gv),
- line_mode ? "line" : "chunk",
- (long)IoLINES(GvIOp(PL_last_in_gv)));
-#endif
}
#ifdef USE_THREADS
if (thr->tid)
thr, PL_curstack, PL_mainstack));
if (pat) {
- msv = mess(pat, args);
- message = SvPV(msv,msglen);
+ msv = vmess(pat, args);
+ if (PL_errors && SvCUR(PL_errors)) {
+ sv_catsv(PL_errors, msv);
+ message = SvPV(PL_errors, msglen);
+ SvCUR_set(PL_errors, 0);
+ }
+ else
+ message = SvPV(msv,msglen);
}
else {
message = Nullch;
SV *msv;
STRLEN msglen;
- msv = mess(pat, args);
- message = SvPV(msv,msglen);
- DEBUG_S(PerlIO_printf(PerlIO_stderr(), "croak: 0x%lx %s", (unsigned long) thr, message));
+ msv = vmess(pat, args);
+ if (PL_errors && SvCUR(PL_errors)) {
+ sv_catsv(PL_errors, msv);
+ message = SvPV(PL_errors, msglen);
+ SvCUR_set(PL_errors, 0);
+ }
+ else
+ message = SvPV(msv,msglen);
+
+ DEBUG_S(PerlIO_printf(PerlIO_stderr(), "croak: 0x%lx %s",
+ (unsigned long) thr, message));
+
if (PL_diehook) {
/* sv_2cv might call Perl_croak() */
SV *olddiehook = PL_diehook;
SV *msv;
STRLEN msglen;
- msv = mess(pat, args);
+ msv = vmess(pat, args);
message = SvPV(msv, msglen);
if (PL_warnhook) {
SV *msv;
STRLEN msglen;
- msv = mess(pat, args);
+ msv = vmess(pat, args);
message = SvPV(msv, msglen);
if (ckDEAD(err)) {
PL_restartop = 0;
PL_statname = NEWSV(66,0);
+ PL_errors = newSVpvn("", 0);
PL_maxscream = -1;
PL_regcompp = MEMBER_TO_FPTR(Perl_pregcomp);
PL_regexecp = MEMBER_TO_FPTR(Perl_regexec_flags);