mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-12-23 10:34:07 +00:00
Update from Gnulib
This incorporates: 2019-08-25 intprops.h, verify.h: port better to clang 2019-08-21 New strip-trailing-space option for srclist-update * .gitattributes: Remove doc/misc/texinfo.tex special case, which is no longer needed now that Gnulib trims blank-at-eol. * build-aux/install-sh, doc/misc/texinfo.tex, lib/intprops.h: * lib/regex_internal.c, lib/verify.h: Copy from Gnulib.
This commit is contained in:
parent
7c37b17b3d
commit
fda015e7b8
3
.gitattributes
vendored
3
.gitattributes
vendored
@ -31,9 +31,6 @@ test/manual/etags/html-src/algrthms.html whitespace=cr-at-eol
|
||||
# The todo-mode file format includes trailing whitespace.
|
||||
*.tod[aorty] -whitespace=blank-at-eol
|
||||
|
||||
# The upstream maintainer does not want to remove trailing whitespace.
|
||||
doc/misc/texinfo.tex -whitespace=blank-at-eol
|
||||
|
||||
# Some files should not be treated as text when diffing or merging.
|
||||
*.cur binary
|
||||
*.gpg binary
|
||||
|
@ -451,7 +451,18 @@ do
|
||||
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
|
||||
|
||||
# Copy the file name to the temp name.
|
||||
(umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
|
||||
(umask $cp_umask &&
|
||||
{ test -z "$stripcmd" || {
|
||||
# Create $dsttmp read-write so that cp doesn't create it read-only,
|
||||
# which would cause strip to fail.
|
||||
if test -z "$doit"; then
|
||||
: >"$dsttmp" # No need to fork-exec 'touch'.
|
||||
else
|
||||
$doit touch "$dsttmp"
|
||||
fi
|
||||
}
|
||||
} &&
|
||||
$doit_exec $cpprog "$src" "$dsttmp") &&
|
||||
|
||||
# and set any options; do chmod last to preserve setuid bits.
|
||||
#
|
||||
|
@ -1,9 +1,9 @@
|
||||
% texinfo.tex -- TeX macros to handle Texinfo files.
|
||||
%
|
||||
%
|
||||
% Load plain if necessary, i.e., if running under initex.
|
||||
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
|
||||
%
|
||||
\def\texinfoversion{2019-06-01.23}
|
||||
\def\texinfoversion{2019-08-18.20}
|
||||
%
|
||||
% Copyright 1985, 1986, 1988, 1990-2019 Free Software Foundation, Inc.
|
||||
%
|
||||
@ -218,7 +218,7 @@
|
||||
% @errormsg{MSG}. Do the index-like expansions on MSG, but if things
|
||||
% aren't perfect, it's not the end of the world, being an error message,
|
||||
% after all.
|
||||
%
|
||||
%
|
||||
\def\errormsg{\begingroup \indexnofonts \doerrormsg}
|
||||
\def\doerrormsg#1{\errmessage{#1}}
|
||||
|
||||
@ -323,9 +323,9 @@
|
||||
% the output routine. The saved contents are valid until we actually
|
||||
% \shipout a page.
|
||||
%
|
||||
% (We used to run a short output routine to actually set \topmark and
|
||||
% \firstmark to the right values, but if this was called with an empty page
|
||||
% containing whatsits for writing index entries, the whatsits would be thrown
|
||||
% (We used to run a short output routine to actually set \topmark and
|
||||
% \firstmark to the right values, but if this was called with an empty page
|
||||
% containing whatsits for writing index entries, the whatsits would be thrown
|
||||
% away and the index auxiliary file would remain empty.)
|
||||
%
|
||||
\newtoks\savedtopmark
|
||||
@ -365,7 +365,7 @@
|
||||
\let\thischapterheading\thischapter
|
||||
\else
|
||||
% \thischapterheading is the same as \thischapter except it is blank
|
||||
% for the first page of a chapter. This is to prevent the chapter name
|
||||
% for the first page of a chapter. This is to prevent the chapter name
|
||||
% being shown twice.
|
||||
\def\thischapterheading{}%
|
||||
\fi
|
||||
@ -448,7 +448,7 @@
|
||||
}%
|
||||
}
|
||||
|
||||
% First remove any @comment, then any @c comment. Pass the result on to
|
||||
% First remove any @comment, then any @c comment. Pass the result on to
|
||||
% \argcheckspaces.
|
||||
\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
|
||||
\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
|
||||
@ -1137,7 +1137,7 @@
|
||||
% for display in the outlines, and in other places. Thus, we have to
|
||||
% double any backslashes. Otherwise, a name like "\node" will be
|
||||
% interpreted as a newline (\n), followed by o, d, e. Not good.
|
||||
%
|
||||
%
|
||||
% See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and
|
||||
% related messages. The final outcome is that it is up to the TeX user
|
||||
% to double the backslashes and otherwise make the string valid, so
|
||||
@ -1442,7 +1442,7 @@
|
||||
% their "best" equivalent, based on the @documentencoding. Too
|
||||
% much work for too little return. Just use the ASCII equivalents
|
||||
% we use for the index sort strings.
|
||||
%
|
||||
%
|
||||
\indexnofonts
|
||||
\setupdatafile
|
||||
% We can have normal brace characters in the PDF outlines, unlike
|
||||
@ -2726,7 +2726,7 @@
|
||||
}
|
||||
|
||||
% Commands to set the quote options.
|
||||
%
|
||||
%
|
||||
\parseargdef\codequoteundirected{%
|
||||
\def\temp{#1}%
|
||||
\ifx\temp\onword
|
||||
@ -2767,7 +2767,7 @@
|
||||
% If we are in a monospaced environment, however, 1) always use \ttsl,
|
||||
% and 2) do not add an italic correction.
|
||||
\def\dosmartslant#1#2{%
|
||||
\ifusingtt
|
||||
\ifusingtt
|
||||
{{\ttsl #2}\let\next=\relax}%
|
||||
{\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}%
|
||||
\next
|
||||
@ -2914,14 +2914,14 @@
|
||||
\gdef\codedash{\futurelet\next\codedashfinish}
|
||||
\gdef\codedashfinish{%
|
||||
\normaldash % always output the dash character itself.
|
||||
%
|
||||
%
|
||||
% Now, output a discretionary to allow a line break, unless
|
||||
% (a) the next character is a -, or
|
||||
% (b) the preceding character is a -.
|
||||
% E.g., given --posix, we do not want to allow a break after either -.
|
||||
% Given --foo-bar, we do want to allow a break between the - and the b.
|
||||
\ifx\next\codedash \else
|
||||
\ifx\codedashprev\codedash
|
||||
\ifx\codedashprev\codedash
|
||||
\else \discretionary{}{}{}\fi
|
||||
\fi
|
||||
% we need the space after the = for the case when \next itself is a
|
||||
@ -3003,7 +3003,7 @@
|
||||
% For pdfTeX and LuaTeX
|
||||
\ifurefurlonlylink
|
||||
% PDF plus option to not display url, show just arg
|
||||
\unhbox0
|
||||
\unhbox0
|
||||
\else
|
||||
% PDF, normally display both arg and url for consistency,
|
||||
% visibility, if the pdf is eventually used to print, etc.
|
||||
@ -3016,7 +3016,7 @@
|
||||
% For XeTeX
|
||||
\ifurefurlonlylink
|
||||
% PDF plus option to not display url, show just arg
|
||||
\unhbox0
|
||||
\unhbox0
|
||||
\else
|
||||
% PDF, normally display both arg and url for consistency,
|
||||
% visibility, if the pdf is eventually used to print, etc.
|
||||
@ -3074,10 +3074,10 @@
|
||||
}
|
||||
}
|
||||
|
||||
% By default we'll break after the special characters, but some people like to
|
||||
% break before the special chars, so allow that. Also allow no breaking at
|
||||
% By default we'll break after the special characters, but some people like to
|
||||
% break before the special chars, so allow that. Also allow no breaking at
|
||||
% all, for manual control.
|
||||
%
|
||||
%
|
||||
\parseargdef\urefbreakstyle{%
|
||||
\def\txiarg{#1}%
|
||||
\ifx\txiarg\wordnone
|
||||
@ -3095,7 +3095,7 @@
|
||||
\def\wordbefore{before}
|
||||
\def\wordnone{none}
|
||||
|
||||
% Allow a ragged right output to aid breaking long URL's. Putting stretch in
|
||||
% Allow a ragged right output to aid breaking long URL's. Putting stretch in
|
||||
% between characters of the URL doesn't look good.
|
||||
\def\urefallowbreak{%
|
||||
\hskip 0pt plus 4 em\relax
|
||||
@ -3299,7 +3299,7 @@
|
||||
% @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}.
|
||||
% Ignore unless FMTNAME == tex; then it is like @iftex and @tex,
|
||||
% except specified as a normal braced arg, so no newlines to worry about.
|
||||
%
|
||||
%
|
||||
\def\outfmtnametex{tex}
|
||||
%
|
||||
\long\def\inlinefmt#1{\doinlinefmt #1,\finish}
|
||||
@ -3307,7 +3307,7 @@
|
||||
\def\inlinefmtname{#1}%
|
||||
\ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi
|
||||
}
|
||||
%
|
||||
%
|
||||
% @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if
|
||||
% FMTNAME is tex, else ELSE-TEXT.
|
||||
\long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish}
|
||||
@ -3323,7 +3323,7 @@
|
||||
% *right* brace they would have to use a command anyway, so they may as
|
||||
% well use a command to get a left brace too. We could re-use the
|
||||
% delimiter character idea from \verb, but it seems like overkill.
|
||||
%
|
||||
%
|
||||
\long\def\inlineraw{\tex \doinlineraw}
|
||||
\long\def\doinlineraw#1{\doinlinerawtwo #1,\finish}
|
||||
\def\doinlinerawtwo#1,#2,\finish{%
|
||||
@ -3600,7 +3600,7 @@
|
||||
% for non-CM glyphs. That is ec* for regular text and tc* for the text
|
||||
% companion symbols (LaTeX TS1 encoding). Both are part of the ec
|
||||
% package and follow the same conventions.
|
||||
%
|
||||
%
|
||||
\def\ecfont{\etcfont{e}}
|
||||
\def\tcfont{\etcfont{t}}
|
||||
%
|
||||
@ -3672,7 +3672,7 @@
|
||||
after the title page.}}%
|
||||
\def\setshortcontentsaftertitlepage{%
|
||||
\errmessage{@setshortcontentsaftertitlepage has been removed as a Texinfo
|
||||
command; move your @shortcontents and @contents commands if you
|
||||
command; move your @shortcontents and @contents commands if you
|
||||
want the contents after the title page.}}%
|
||||
|
||||
\parseargdef\shorttitlepage{%
|
||||
@ -3727,7 +3727,7 @@
|
||||
% don't worry much about spacing, ragged right. This should be used
|
||||
% inside a \vbox, and fonts need to be set appropriately first. \par should
|
||||
% be specified before the end of the \vbox, since a vbox is a group.
|
||||
%
|
||||
%
|
||||
\def\raggedtitlesettings{%
|
||||
\rm
|
||||
\hyphenpenalty=10000
|
||||
@ -4350,7 +4350,7 @@
|
||||
}
|
||||
|
||||
% multitable-only commands.
|
||||
%
|
||||
%
|
||||
% @headitem starts a heading row, which we typeset in bold. Assignments
|
||||
% have to be global since we are inside the implicit group of an
|
||||
% alignment entry. \everycr below resets \everytab so we don't have to
|
||||
@ -4669,13 +4669,13 @@
|
||||
% Like \expandablevalue, but completely expandable (the \message in the
|
||||
% definition above operates at the execution level of TeX). Used when
|
||||
% writing to auxiliary files, due to the expansion that \write does.
|
||||
% If flag is undefined, pass through an unexpanded @value command: maybe it
|
||||
% If flag is undefined, pass through an unexpanded @value command: maybe it
|
||||
% will be set by the time it is read back in.
|
||||
%
|
||||
% NB flag names containing - or _ may not work here.
|
||||
\def\dummyvalue#1{%
|
||||
\expandafter\ifx\csname SET#1\endcsname\relax
|
||||
\noexpand\value{#1}%
|
||||
\string\value{#1}%
|
||||
\else
|
||||
\csname SET#1\endcsname
|
||||
\fi
|
||||
@ -4693,7 +4693,7 @@
|
||||
|
||||
% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
|
||||
% with @set.
|
||||
%
|
||||
%
|
||||
% To get the special treatment we need for `@end ifset,' we call
|
||||
% \makecond and then redefine.
|
||||
%
|
||||
@ -4726,7 +4726,7 @@
|
||||
% without the @) is in fact defined. We can only feasibly check at the
|
||||
% TeX level, so something like `mathcode' is going to considered
|
||||
% defined even though it is not a Texinfo command.
|
||||
%
|
||||
%
|
||||
\makecond{ifcommanddefined}
|
||||
\def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}}
|
||||
%
|
||||
@ -4834,8 +4834,8 @@
|
||||
\def\docodeindex#1{\edef\indexname{#1}\parsearg\docodeindexxxx}
|
||||
\def\docodeindexxxx #1{\doind{\indexname}{\code{#1}}}
|
||||
|
||||
|
||||
% Used for the aux, toc and index files to prevent expansion of Texinfo
|
||||
|
||||
% Used for the aux, toc and index files to prevent expansion of Texinfo
|
||||
% commands.
|
||||
%
|
||||
\def\atdummies{%
|
||||
@ -5180,7 +5180,7 @@
|
||||
}
|
||||
\def\defglyph#1#2{\def#1##1{#2}} % see above
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
% #1 is the index name, #2 is the entry text.
|
||||
@ -5207,7 +5207,7 @@
|
||||
\ifx\suffix\indexisfl\def\suffix{f1}\fi
|
||||
% Open the file
|
||||
\immediate\openout\csname#1indfile\endcsname \jobname.\suffix
|
||||
% Using \immediate above here prevents an object entering into the current
|
||||
% Using \immediate above here prevents an object entering into the current
|
||||
% box, which could confound checks such as those in \safewhatsit for
|
||||
% preceding skips.
|
||||
\typeout{Writing index file \jobname.\suffix}%
|
||||
@ -5259,7 +5259,7 @@
|
||||
\ifx\segment\isfinish
|
||||
\else
|
||||
%
|
||||
% Fully expand the segment, throwing away any @sortas directives, and
|
||||
% Fully expand the segment, throwing away any @sortas directives, and
|
||||
% trim spaces.
|
||||
\edef\trimmed{\segment}%
|
||||
\edef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}%
|
||||
@ -5317,12 +5317,12 @@
|
||||
% the current value of \escapechar.
|
||||
\def\escapeisbackslash{\escapechar=`\\}
|
||||
|
||||
% Use \ in index files by default. texi2dvi didn't support @ as the escape
|
||||
% character (as it checked for "\entry" in the files, and not "@entry"). When
|
||||
% the new version of texi2dvi has had a chance to become more prevalent, then
|
||||
% the escape character can change back to @ again. This should be an easy
|
||||
% change to make now because both @ and \ are only used as escape characters in
|
||||
% index files, never standing for themselves.
|
||||
% Use \ in index files by default. texi2dvi didn't support @ as the escape
|
||||
% character (as it checked for "\entry" in the files, and not "@entry"). When
|
||||
% the new version of texi2dvi has had a chance to become more prevalent, then
|
||||
% the escape character can change back to @ again. This should be an easy
|
||||
% change to make now because both @ and \ are only used as escape characters in
|
||||
% index files, never standing for themselves.
|
||||
%
|
||||
\set txiindexescapeisbackslash
|
||||
|
||||
@ -5342,7 +5342,7 @@
|
||||
\def\}{\rbracechar{}}%
|
||||
\uccode`\~=`\\ \uppercase{\def~{\backslashchar{}}}%
|
||||
%
|
||||
% Split the entry into primary entry and any subentries, and get the index
|
||||
% Split the entry into primary entry and any subentries, and get the index
|
||||
% sort key.
|
||||
\splitindexentry\indextext
|
||||
%
|
||||
@ -5523,18 +5523,18 @@
|
||||
\uccode`\~=`\\ \uppercase{\if\noexpand~}\noexpand#1
|
||||
\expandafter\ifx\csname SETtxiskipindexfileswithbackslash\endcsname\relax
|
||||
\errmessage{%
|
||||
ERROR: A sorted index file in an obsolete format was skipped.
|
||||
ERROR: A sorted index file in an obsolete format was skipped.
|
||||
To fix this problem, please upgrade your version of 'texi2dvi'
|
||||
or 'texi2pdf' to that at <https://ftp.gnu.org/gnu/texinfo>.
|
||||
If you are using an old version of 'texindex' (part of the Texinfo
|
||||
If you are using an old version of 'texindex' (part of the Texinfo
|
||||
distribution), you may also need to upgrade to a newer version (at least 6.0).
|
||||
You may be able to typeset the index if you run
|
||||
'texindex \jobname.\indexname' yourself.
|
||||
You could also try setting the 'txiindexescapeisbackslash' flag by
|
||||
You could also try setting the 'txiindexescapeisbackslash' flag by
|
||||
running a command like
|
||||
'texi2dvi -t "@set txiindexescapeisbackslash" \jobname.texi'. If you do
|
||||
'texi2dvi -t "@set txiindexescapeisbackslash" \jobname.texi'. If you do
|
||||
this, Texinfo will try to use index files in the old format.
|
||||
If you continue to have problems, deleting the index files and starting again
|
||||
If you continue to have problems, deleting the index files and starting again
|
||||
might help (with 'rm \jobname.?? \jobname.??s')%
|
||||
}%
|
||||
\else
|
||||
@ -5603,7 +5603,7 @@
|
||||
% bottom of a column to reduce an increase in inter-line spacing.
|
||||
\nobreak
|
||||
\vskip 0pt plus 5\baselineskip
|
||||
\penalty -300
|
||||
\penalty -300
|
||||
\vskip 0pt plus -5\baselineskip
|
||||
%
|
||||
% Typeset the initial. Making this add up to a whole number of
|
||||
@ -5719,7 +5719,7 @@
|
||||
\advance\dimen@ii by 1\dimen@i
|
||||
\ifdim\wd\boxA > \dimen@ii % If the entry doesn't fit in one line
|
||||
\ifdim\dimen@ > 0.8\dimen@ii % due to long index text
|
||||
% Try to split the text roughly evenly. \dimen@ will be the length of
|
||||
% Try to split the text roughly evenly. \dimen@ will be the length of
|
||||
% the first line.
|
||||
\dimen@ = 0.7\dimen@
|
||||
\dimen@ii = \hsize
|
||||
@ -5927,7 +5927,7 @@
|
||||
\newbox\balancedcolumns
|
||||
\setbox\balancedcolumns=\vbox{shouldnt see this}%
|
||||
%
|
||||
% Only called for the last of the double column material. \doublecolumnout
|
||||
% Only called for the last of the double column material. \doublecolumnout
|
||||
% does the others.
|
||||
\def\balancecolumns{%
|
||||
\setbox0 = \vbox{\unvbox\PAGE}% like \box255 but more efficient, see p.120.
|
||||
@ -5955,7 +5955,7 @@
|
||||
}%
|
||||
% Now the left column is in box 1, and the right column in box 3.
|
||||
%
|
||||
% Check whether the left column has come out higher than the page itself.
|
||||
% Check whether the left column has come out higher than the page itself.
|
||||
% (Note that we have doubled \vsize for the double columns, so
|
||||
% the actual height of the page is 0.5\vsize).
|
||||
\ifdim2\ht1>\vsize
|
||||
@ -6252,7 +6252,7 @@
|
||||
\let\top\unnumbered
|
||||
|
||||
% Sections.
|
||||
%
|
||||
%
|
||||
\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
|
||||
\def\seczzz#1{%
|
||||
\global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
|
||||
@ -6275,7 +6275,7 @@
|
||||
}
|
||||
|
||||
% Subsections.
|
||||
%
|
||||
%
|
||||
% normally calls numberedsubseczzz:
|
||||
\outer\parseargdef\numberedsubsec{\numhead2{#1}}
|
||||
\def\numberedsubseczzz#1{%
|
||||
@ -6300,7 +6300,7 @@
|
||||
}
|
||||
|
||||
% Subsubsections.
|
||||
%
|
||||
%
|
||||
% normally numberedsubsubseczzz:
|
||||
\outer\parseargdef\numberedsubsubsec{\numhead3{#1}}
|
||||
\def\numberedsubsubseczzz#1{%
|
||||
@ -7358,7 +7358,7 @@
|
||||
|
||||
% @indentedblock is like @quotation, but indents only on the left and
|
||||
% has no optional argument.
|
||||
%
|
||||
%
|
||||
\makedispenvdef{indentedblock}{\indentedblockstart}
|
||||
%
|
||||
\def\indentedblockstart{%
|
||||
@ -7658,7 +7658,7 @@
|
||||
% @deftypefnnewline on|off says whether the return type of typed functions
|
||||
% are printed on their own line. This affects @deftypefn, @deftypefun,
|
||||
% @deftypeop, and @deftypemethod.
|
||||
%
|
||||
%
|
||||
\parseargdef\deftypefnnewline{%
|
||||
\def\temp{#1}%
|
||||
\ifx\temp\onword
|
||||
@ -7677,8 +7677,8 @@
|
||||
% \dosubind {index}{topic}{subtopic}
|
||||
%
|
||||
% If SUBTOPIC is present, precede it with a space, and call \doind.
|
||||
% (At some time during the 20th century, this made a two-level entry in an
|
||||
% index such as the operation index. Nobody seemed to notice the change in
|
||||
% (At some time during the 20th century, this made a two-level entry in an
|
||||
% index such as the operation index. Nobody seemed to notice the change in
|
||||
% behaviour though.)
|
||||
\def\dosubind#1#2#3{%
|
||||
\def\thirdarg{#3}%
|
||||
@ -7853,7 +7853,7 @@
|
||||
\tclose{\temp}% typeset the return type
|
||||
\ifrettypeownline
|
||||
% put return type on its own line; prohibit line break following:
|
||||
\hfil\vadjust{\nobreak}\break
|
||||
\hfil\vadjust{\nobreak}\break
|
||||
\else
|
||||
\space % type on same line, so just followed by a space
|
||||
\fi
|
||||
@ -8000,7 +8000,7 @@
|
||||
\scantokens{#1@comment}%
|
||||
%
|
||||
% The \comment is to remove the \newlinechar added by \scantokens, and
|
||||
% can be noticed by \parsearg. Note \c isn't used because this means cedilla
|
||||
% can be noticed by \parsearg. Note \c isn't used because this means cedilla
|
||||
% in math mode.
|
||||
}
|
||||
|
||||
@ -8201,7 +8201,7 @@
|
||||
% list to some hook where the argument is to be expanded. If there are
|
||||
% less than 10 arguments that hook is to be replaced by ##N where N
|
||||
% is the position in that list, that is to say the macro arguments are to be
|
||||
% defined `a la TeX in the macro body.
|
||||
% defined `a la TeX in the macro body.
|
||||
%
|
||||
% That gets used by \mbodybackslash (above).
|
||||
%
|
||||
@ -8232,8 +8232,8 @@
|
||||
%
|
||||
% Read recursive and nonrecursive macro bodies. (They're different since
|
||||
% rec and nonrec macros end differently.)
|
||||
%
|
||||
% We are in \macrobodyctxt, and the \xdef causes backslashshes in the macro
|
||||
%
|
||||
% We are in \macrobodyctxt, and the \xdef causes backslashshes in the macro
|
||||
% body to be transformed.
|
||||
% Set \macrobody to the body of the macro, and call \defmacro.
|
||||
%
|
||||
@ -8267,7 +8267,7 @@
|
||||
% twice the \macarg.BLAH macros does not cost too much processing power.
|
||||
\def\parsemmanyargdef@@#1,{%
|
||||
\if#1;\let\next=\relax
|
||||
\else
|
||||
\else
|
||||
\let\next=\parsemmanyargdef@@
|
||||
\edef\tempb{\eatspaces{#1}}%
|
||||
\expandafter\def\expandafter\tempa
|
||||
@ -8352,7 +8352,7 @@
|
||||
|
||||
% Replace arguments by their values in the macro body, and place the result
|
||||
% in macro \@tempa.
|
||||
%
|
||||
%
|
||||
\def\macvalstoargs@{%
|
||||
% To do this we use the property that token registers that are \the'ed
|
||||
% within an \edef expand only once. So we are going to place all argument
|
||||
@ -8376,9 +8376,9 @@
|
||||
\expandafter\def\expandafter\@tempa\expandafter{\@tempc}%
|
||||
}
|
||||
|
||||
% Define the named-macro outside of this group and then close this group.
|
||||
%
|
||||
\def\macargexpandinbody@{%
|
||||
% Define the named-macro outside of this group and then close this group.
|
||||
%
|
||||
\def\macargexpandinbody@{%
|
||||
\expandafter
|
||||
\endgroup
|
||||
\macargdeflist@
|
||||
@ -8416,7 +8416,7 @@
|
||||
}
|
||||
|
||||
% Trailing missing arguments are set to empty.
|
||||
%
|
||||
%
|
||||
\def\setemptyargvalues@{%
|
||||
\ifx\paramlist\nilm@
|
||||
\let\next\macargexpandinbody@
|
||||
@ -8493,7 +8493,7 @@
|
||||
\else % at most 9
|
||||
\ifnum\paramno<10\relax
|
||||
% @MACNAME sets the context for reading the macro argument
|
||||
% @MACNAME@@ gets the argument, processes backslashes and appends a
|
||||
% @MACNAME@@ gets the argument, processes backslashes and appends a
|
||||
% comma.
|
||||
% @MACNAME@@@ removes braces surrounding the argument list.
|
||||
% @MACNAME@@@@ scans the macro body with arguments substituted.
|
||||
@ -8537,11 +8537,11 @@
|
||||
% Call #1 with a list of tokens #2, with any doubled backslashes in #2
|
||||
% compressed to one.
|
||||
%
|
||||
% This implementation works by expansion, and not execution (so we cannot use
|
||||
% \def or similar). This reduces the risk of this failing in contexts where
|
||||
% complete expansion is done with no execution (for example, in writing out to
|
||||
% This implementation works by expansion, and not execution (so we cannot use
|
||||
% \def or similar). This reduces the risk of this failing in contexts where
|
||||
% complete expansion is done with no execution (for example, in writing out to
|
||||
% an auxiliary file for an index entry).
|
||||
%
|
||||
%
|
||||
% State is kept in the input stream: the argument passed to
|
||||
% @look_ahead, @gobble_and_check_finish and @add_segment is
|
||||
%
|
||||
@ -8563,11 +8563,11 @@
|
||||
% #3 - NEXT_TOKEN
|
||||
% #4 used to look ahead
|
||||
%
|
||||
% If the next token is not a backslash, process the rest of the argument;
|
||||
% If the next token is not a backslash, process the rest of the argument;
|
||||
% otherwise, remove the next token.
|
||||
@gdef@look_ahead#1!#2#3#4{%
|
||||
@ifx#4\%
|
||||
@expandafter@gobble_and_check_finish
|
||||
@expandafter@gobble_and_check_finish
|
||||
@else
|
||||
@expandafter@add_segment
|
||||
@fi#1!{#2}#4#4%
|
||||
@ -8591,9 +8591,9 @@
|
||||
% #3 - NEXT_TOKEN
|
||||
% #4 is input stream until next backslash
|
||||
%
|
||||
% Input stream is either at the start of the argument, or just after a
|
||||
% backslash sequence, either a lone backslash, or a doubled backslash.
|
||||
% NEXT_TOKEN contains the first token in the input stream: if it is \finish,
|
||||
% Input stream is either at the start of the argument, or just after a
|
||||
% backslash sequence, either a lone backslash, or a doubled backslash.
|
||||
% NEXT_TOKEN contains the first token in the input stream: if it is \finish,
|
||||
% finish; otherwise, append to ARG_RESULT the segment of the argument up until
|
||||
% the next backslash. PENDING_BACKSLASH contains a backslash to represent
|
||||
% a backslash just before the start of the input stream that has not been
|
||||
@ -8605,13 +8605,13 @@
|
||||
% append the pending backslash to the result, followed by the next segment
|
||||
@expandafter@is_fi@look_ahead#1#2#4!{\}@fi
|
||||
% this @fi is discarded by @look_ahead.
|
||||
% we can't get rid of it with \expandafter because we don't know how
|
||||
% we can't get rid of it with \expandafter because we don't know how
|
||||
% long #4 is.
|
||||
}
|
||||
|
||||
% #1 - THE_MACRO
|
||||
% #2 - ARG_RESULT
|
||||
% #3 discards the res of the conditional in @add_segment, and @is_fi ends the
|
||||
% #3 discards the res of the conditional in @add_segment, and @is_fi ends the
|
||||
% conditional.
|
||||
@gdef@call_the_macro#1#2!#3@fi{@is_fi #1{#2}}
|
||||
|
||||
@ -8623,7 +8623,7 @@
|
||||
% for reading the argument (slightly different in the two cases). Then,
|
||||
% to read the argument, in the whole-line case, it then calls the regular
|
||||
% \parsearg MAC; in the lbrace case, it calls \passargtomacro MAC.
|
||||
%
|
||||
%
|
||||
\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
|
||||
\def\braceorlinexxx{%
|
||||
\ifx\nchar\bgroup
|
||||
@ -8677,7 +8677,7 @@
|
||||
|
||||
% Used so that the @top node doesn't have to be wrapped in an @ifnottex
|
||||
% conditional.
|
||||
% \doignore goes to more effort to skip nested conditionals but we don't need
|
||||
% \doignore goes to more effort to skip nested conditionals but we don't need
|
||||
% that here.
|
||||
\def\omittopnode{%
|
||||
\ifx\lastnode\wordTop
|
||||
@ -8685,7 +8685,7 @@
|
||||
}
|
||||
\def\wordTop{Top}
|
||||
|
||||
% Until the next @node or @bye command, divert output to a box that is not
|
||||
% Until the next @node or @bye command, divert output to a box that is not
|
||||
% output.
|
||||
\def\ignorenode{\setbox\dummybox\vbox\bgroup\def\node{\egroup\node}%
|
||||
\ignorenodebye
|
||||
@ -8752,7 +8752,7 @@
|
||||
% automatically in xrefs, if the third arg is not explicitly specified.
|
||||
% This was provided as a "secret" @set xref-automatic-section-title
|
||||
% variable, now it's official.
|
||||
%
|
||||
%
|
||||
\parseargdef\xrefautomaticsectiontitle{%
|
||||
\def\temp{#1}%
|
||||
\ifx\temp\onword
|
||||
@ -8768,7 +8768,7 @@
|
||||
\fi\fi
|
||||
}
|
||||
|
||||
%
|
||||
%
|
||||
% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is
|
||||
% the node name, #2 the name of the Info cross-reference, #3 the printed
|
||||
% node name, #4 the name of the Info file, #5 the name of the printed
|
||||
@ -8921,24 +8921,24 @@
|
||||
\fi
|
||||
\else
|
||||
% node/anchor (non-float) references.
|
||||
%
|
||||
%
|
||||
% If we use \unhbox to print the node names, TeX does not insert
|
||||
% empty discretionaries after hyphens, which means that it will not
|
||||
% find a line break at a hyphen in a node names. Since some manuals
|
||||
% are best written with fairly long node names, containing hyphens,
|
||||
% this is a loss. Therefore, we give the text of the node name
|
||||
% again, so it is as if TeX is seeing it for the first time.
|
||||
%
|
||||
%
|
||||
\ifdim \wd\printedmanualbox > 0pt
|
||||
% Cross-manual reference with a printed manual name.
|
||||
%
|
||||
%
|
||||
\crossmanualxref{\cite{\printedmanual\unskip}}%
|
||||
%
|
||||
\else\ifdim \wd\infofilenamebox > 0pt
|
||||
% Cross-manual reference with only an info filename (arg 4), no
|
||||
% printed manual name (arg 5). This is essentially the same as
|
||||
% the case above; we output the filename, since we have nothing else.
|
||||
%
|
||||
%
|
||||
\crossmanualxref{\code{\infofilename\unskip}}%
|
||||
%
|
||||
\else
|
||||
@ -8978,20 +8978,20 @@
|
||||
\endgroup}
|
||||
|
||||
% Output a cross-manual xref to #1. Used just above (twice).
|
||||
%
|
||||
%
|
||||
% Only include the text "Section ``foo'' in" if the foo is neither
|
||||
% missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply
|
||||
% "see The Foo Manual", the idea being to refer to the whole manual.
|
||||
%
|
||||
%
|
||||
% But, this being TeX, we can't easily compare our node name against the
|
||||
% string "Top" while ignoring the possible spaces before and after in
|
||||
% the input. By adding the arbitrary 7sp below, we make it much less
|
||||
% likely that a real node name would have the same width as "Top" (e.g.,
|
||||
% in a monospaced font). Hopefully it will never happen in practice.
|
||||
%
|
||||
%
|
||||
% For the same basic reason, we retypeset the "Top" at every
|
||||
% reference, since the current font is indeterminate.
|
||||
%
|
||||
%
|
||||
\def\crossmanualxref#1{%
|
||||
\setbox\toprefbox = \hbox{Top\kern7sp}%
|
||||
\setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}%
|
||||
@ -9038,7 +9038,7 @@
|
||||
\fi\fi\fi
|
||||
}
|
||||
|
||||
% \refx{NAME}{SUFFIX} - reference a cross-reference string named NAME. SUFFIX
|
||||
% \refx{NAME}{SUFFIX} - reference a cross-reference string named NAME. SUFFIX
|
||||
% is output afterwards if non-empty.
|
||||
\def\refx#1#2{%
|
||||
\requireauxfile
|
||||
@ -9070,9 +9070,9 @@
|
||||
#2% Output the suffix in any case.
|
||||
}
|
||||
|
||||
% This is the macro invoked by entries in the aux file. Define a control
|
||||
% sequence for a cross-reference target (we prepend XR to the control sequence
|
||||
% name to avoid collisions). The value is the page number. If this is a float
|
||||
% This is the macro invoked by entries in the aux file. Define a control
|
||||
% sequence for a cross-reference target (we prepend XR to the control sequence
|
||||
% name to avoid collisions). The value is the page number. If this is a float
|
||||
% type, we have more work to do.
|
||||
%
|
||||
\def\xrdef#1#2{%
|
||||
@ -9088,10 +9088,10 @@
|
||||
\bgroup
|
||||
\expandafter\gdef\csname XR\safexrefname\endcsname{#2}%
|
||||
\egroup
|
||||
% We put the \gdef inside a group to avoid the definitions building up on
|
||||
% TeX's save stack, which can cause it to run out of space for aux files with
|
||||
% We put the \gdef inside a group to avoid the definitions building up on
|
||||
% TeX's save stack, which can cause it to run out of space for aux files with
|
||||
% thousands of lines. \gdef doesn't use the save stack, but \csname does
|
||||
% when it defines an unknown control sequence as \relax.
|
||||
% when it defines an unknown control sequence as \relax.
|
||||
%
|
||||
% Was that xref control sequence that we just defined for a float?
|
||||
\expandafter\iffloat\csname XR\safexrefname\endcsname
|
||||
@ -9450,7 +9450,7 @@
|
||||
%
|
||||
\ifimagevmode
|
||||
\medskip % space after a standalone image
|
||||
\fi
|
||||
\fi
|
||||
\ifx\centersub\centerV \egroup \fi
|
||||
\endgroup}
|
||||
|
||||
@ -10281,7 +10281,7 @@
|
||||
\uppercase{.}
|
||||
\endgroup
|
||||
\else
|
||||
\errhelp = \EMsimple
|
||||
\errhelp = \EMsimple
|
||||
\errmessage{Unicode character U+#1 not supported, sorry}%
|
||||
\fi
|
||||
\else
|
||||
@ -10314,7 +10314,7 @@
|
||||
\countUTFz = "#1\relax
|
||||
\begingroup
|
||||
\parseXMLCharref
|
||||
|
||||
|
||||
% Give \u8:... its definition. The sequence of seven \expandafter's
|
||||
% expands after the \gdef three times, e.g.
|
||||
%
|
||||
@ -10326,7 +10326,7 @@
|
||||
\expandafter\expandafter
|
||||
\expandafter\expandafter
|
||||
\expandafter\gdef \UTFviiiTmp{#2}%
|
||||
%
|
||||
%
|
||||
\expandafter\ifx\csname uni:#1\endcsname \relax \else
|
||||
\message{Internal error, already defined: #1}%
|
||||
\fi
|
||||
@ -10365,7 +10365,7 @@
|
||||
\divide\countUTFz by 64
|
||||
\countUTFy = \countUTFz % Save to be the future value of \countUTFz.
|
||||
\multiply\countUTFz by 64
|
||||
|
||||
|
||||
% \countUTFz is now \countUTFx with the last 5 bits cleared. Subtract
|
||||
% in order to get the last five bits.
|
||||
\advance\countUTFx by -\countUTFz
|
||||
@ -10400,7 +10400,7 @@
|
||||
% U+0080..U+00FF = https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)
|
||||
% U+0100..U+017F = https://en.wikipedia.org/wiki/Latin_Extended-A
|
||||
% U+0180..U+024F = https://en.wikipedia.org/wiki/Latin_Extended-B
|
||||
%
|
||||
%
|
||||
% Many of our renditions are less than wonderful, and all the missing
|
||||
% characters are available somewhere. Loading the necessary fonts
|
||||
% awaits user request. We can't truly support Unicode without
|
||||
@ -11438,9 +11438,9 @@
|
||||
\def\texinfochars{%
|
||||
\let< = \activeless
|
||||
\let> = \activegtr
|
||||
\let~ = \activetilde
|
||||
\let~ = \activetilde
|
||||
\let^ = \activehat
|
||||
\markupsetuplqdefault \markupsetuprqdefault
|
||||
\markupsetuplqdefault \markupsetuprqdefault
|
||||
\let\b = \strong
|
||||
\let\i = \smartitalic
|
||||
% in principle, all other definitions in \tex have to be undone too.
|
||||
|
@ -22,6 +22,18 @@
|
||||
|
||||
#include <limits.h>
|
||||
|
||||
/* If the compiler lacks __has_builtin, define it well enough for this
|
||||
source file only. */
|
||||
#ifndef __has_builtin
|
||||
# define __has_builtin(x) _GL_HAS_##x
|
||||
# if 5 <= __GNUC__ && !defined __ICC
|
||||
# define _GL_HAS___builtin_add_overflow 1
|
||||
# else
|
||||
# define _GL_HAS___builtin_add_overflow 0
|
||||
# endif
|
||||
# define _GL_TEMPDEF___has_builtin
|
||||
#endif
|
||||
|
||||
/* Return a value with the common real type of E and V and the value of V.
|
||||
Do not evaluate E. */
|
||||
#define _GL_INT_CONVERT(e, v) ((1 ? 0 : (e)) + (v))
|
||||
@ -220,14 +232,24 @@
|
||||
? (a) < (min) >> (b) \
|
||||
: (max) >> (b) < (a))
|
||||
|
||||
/* True if __builtin_add_overflow (A, B, P) works when P is non-null. */
|
||||
#if 5 <= __GNUC__ && !defined __ICC
|
||||
# define _GL_HAS_BUILTIN_OVERFLOW 1
|
||||
/* True if __builtin_add_overflow (A, B, P) and __builtin_sub_overflow
|
||||
(A, B, P) work when P is non-null. */
|
||||
#if __has_builtin (__builtin_add_overflow)
|
||||
# define _GL_HAS_BUILTIN_ADD_OVERFLOW 1
|
||||
#else
|
||||
# define _GL_HAS_BUILTIN_OVERFLOW 0
|
||||
# define _GL_HAS_BUILTIN_ADD_OVERFLOW 0
|
||||
#endif
|
||||
|
||||
/* True if __builtin_add_overflow_p (A, B, C) works. */
|
||||
/* True if __builtin_mul_overflow (A, B, P) works when P is non-null. */
|
||||
#ifdef __clang__
|
||||
/* Work around Clang bug <https://bugs.llvm.org/show_bug.cgi?id=16404>. */
|
||||
# define _GL_HAS_BUILTIN_MUL_OVERFLOW 0
|
||||
#else
|
||||
# define _GL_HAS_BUILTIN_MUL_OVERFLOW _GL_HAS_BUILTIN_ADD_OVERFLOW
|
||||
#endif
|
||||
|
||||
/* True if __builtin_add_overflow_p (A, B, C) works, and similarly for
|
||||
__builtin_mul_overflow_p and __builtin_mul_overflow_p. */
|
||||
#define _GL_HAS_BUILTIN_OVERFLOW_P (7 <= __GNUC__)
|
||||
|
||||
/* The _GL*_OVERFLOW macros have the same restrictions as the
|
||||
@ -351,29 +373,33 @@
|
||||
|
||||
/* Store the low-order bits of A + B, A - B, A * B, respectively, into *R.
|
||||
Return 1 if the result overflows. See above for restrictions. */
|
||||
#define INT_ADD_WRAPV(a, b, r) \
|
||||
_GL_INT_OP_WRAPV (a, b, r, +, __builtin_add_overflow, \
|
||||
_GL_INT_ADD_RANGE_OVERFLOW)
|
||||
#define INT_SUBTRACT_WRAPV(a, b, r) \
|
||||
_GL_INT_OP_WRAPV (a, b, r, -, __builtin_sub_overflow, \
|
||||
_GL_INT_SUBTRACT_RANGE_OVERFLOW)
|
||||
#define INT_MULTIPLY_WRAPV(a, b, r) \
|
||||
_GL_INT_OP_WRAPV (a, b, r, *, _GL_BUILTIN_MUL_OVERFLOW, \
|
||||
_GL_INT_MULTIPLY_RANGE_OVERFLOW)
|
||||
|
||||
/* Like __builtin_mul_overflow, but work around GCC bug 91450. */
|
||||
#define _GL_BUILTIN_MUL_OVERFLOW(a, b, r) \
|
||||
((!_GL_SIGNED_TYPE_OR_EXPR (*(r)) && EXPR_SIGNED (a) && EXPR_SIGNED (b) \
|
||||
&& _GL_INT_MULTIPLY_RANGE_OVERFLOW (a, b, 0, (__typeof__ (*(r))) -1)) \
|
||||
? ((void) __builtin_mul_overflow (a, b, r), 1) \
|
||||
: __builtin_mul_overflow (a, b, r))
|
||||
#if _GL_HAS_BUILTIN_ADD_OVERFLOW
|
||||
# define INT_ADD_WRAPV(a, b, r) __builtin_add_overflow (a, b, r)
|
||||
# define INT_SUBTRACT_WRAPV(a, b, r) __builtin_sub_overflow (a, b, r)
|
||||
#else
|
||||
# define INT_ADD_WRAPV(a, b, r) \
|
||||
_GL_INT_OP_WRAPV (a, b, r, +, _GL_INT_ADD_RANGE_OVERFLOW)
|
||||
# define INT_SUBTRACT_WRAPV(a, b, r) \
|
||||
_GL_INT_OP_WRAPV (a, b, r, -, _GL_INT_SUBTRACT_RANGE_OVERFLOW)
|
||||
#endif
|
||||
#if _GL_HAS_BUILTIN_MUL_OVERFLOW
|
||||
/* Work around GCC bug 91450. */
|
||||
# define INT_MULTIPLY_WRAPV(a, b, r) \
|
||||
((!_GL_SIGNED_TYPE_OR_EXPR (*(r)) && EXPR_SIGNED (a) && EXPR_SIGNED (b) \
|
||||
&& _GL_INT_MULTIPLY_RANGE_OVERFLOW (a, b, 0, (__typeof__ (*(r))) -1)) \
|
||||
? ((void) __builtin_mul_overflow (a, b, r), 1) \
|
||||
: __builtin_mul_overflow (a, b, r))
|
||||
#else
|
||||
# define INT_MULTIPLY_WRAPV(a, b, r) \
|
||||
_GL_INT_OP_WRAPV (a, b, r, *, _GL_INT_MULTIPLY_RANGE_OVERFLOW)
|
||||
#endif
|
||||
|
||||
/* Nonzero if this compiler has GCC bug 68193 or Clang bug 25390. See:
|
||||
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68193
|
||||
https://llvm.org/bugs/show_bug.cgi?id=25390
|
||||
For now, assume all versions of GCC-like compilers generate bogus
|
||||
warnings for _Generic. This matters only for older compilers that
|
||||
lack __builtin_add_overflow. */
|
||||
warnings for _Generic. This matters only for compilers that
|
||||
lack relevant builtins. */
|
||||
#if __GNUC__
|
||||
# define _GL__GENERIC_BOGUS 1
|
||||
#else
|
||||
@ -381,13 +407,10 @@
|
||||
#endif
|
||||
|
||||
/* Store the low-order bits of A <op> B into *R, where OP specifies
|
||||
the operation. BUILTIN is the builtin operation, and OVERFLOW the
|
||||
overflow predicate. Return 1 if the result overflows. See above
|
||||
for restrictions. */
|
||||
#if _GL_HAS_BUILTIN_OVERFLOW
|
||||
# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) builtin (a, b, r)
|
||||
#elif 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS
|
||||
# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \
|
||||
the operation and OVERFLOW the overflow predicate. Return 1 if the
|
||||
result overflows. See above for restrictions. */
|
||||
#if 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS
|
||||
# define _GL_INT_OP_WRAPV(a, b, r, op, overflow) \
|
||||
(_Generic \
|
||||
(*(r), \
|
||||
signed char: \
|
||||
@ -442,7 +465,7 @@
|
||||
: (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st), 0)))
|
||||
# endif
|
||||
|
||||
# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \
|
||||
# define _GL_INT_OP_WRAPV(a, b, r, op, overflow) \
|
||||
(sizeof *(r) == sizeof (signed char) \
|
||||
? _GL_INT_OP_WRAPV_SMALLISH (a, b, r, op, overflow, \
|
||||
signed char, SCHAR_MIN, SCHAR_MAX, \
|
||||
@ -563,4 +586,10 @@
|
||||
: (tmin) / (a) < (b)) \
|
||||
: (tmax) / (b) < (a)))
|
||||
|
||||
#ifdef _GL_TEMPDEF___has_builtin
|
||||
# undef __has_builtin
|
||||
# undef _GL_HAS___builtin_add_overflow
|
||||
# undef _GL_TEMPDEF___has_builtin
|
||||
#endif
|
||||
|
||||
#endif /* _GL_INTPROPS_H */
|
||||
|
@ -1311,7 +1311,6 @@ re_node_set_insert (re_node_set *set, Idx elem)
|
||||
first element separately to skip a check in the inner loop. */
|
||||
if (elem < set->elems[0])
|
||||
{
|
||||
idx = 0;
|
||||
for (idx = set->nelem; idx > 0; idx--)
|
||||
set->elems[idx] = set->elems[idx - 1];
|
||||
}
|
||||
@ -1716,15 +1715,19 @@ create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes,
|
||||
{
|
||||
if (newstate->entrance_nodes == &newstate->nodes)
|
||||
{
|
||||
newstate->entrance_nodes = re_malloc (re_node_set, 1);
|
||||
if (__glibc_unlikely (newstate->entrance_nodes == NULL))
|
||||
re_node_set *entrance_nodes = re_malloc (re_node_set, 1);
|
||||
if (__glibc_unlikely (entrance_nodes == NULL))
|
||||
{
|
||||
free_state (newstate);
|
||||
return NULL;
|
||||
}
|
||||
newstate->entrance_nodes = entrance_nodes;
|
||||
if (re_node_set_init_copy (newstate->entrance_nodes, nodes)
|
||||
!= REG_NOERROR)
|
||||
return NULL;
|
||||
{
|
||||
free_state (newstate);
|
||||
return NULL;
|
||||
}
|
||||
nctx_nodes = 0;
|
||||
newstate->has_constraint = 1;
|
||||
}
|
||||
|
28
lib/verify.h
28
lib/verify.h
@ -56,6 +56,16 @@
|
||||
# undef _Static_assert
|
||||
#endif
|
||||
|
||||
/* If the compiler lacks __has_builtin, define it well enough for this
|
||||
source file only. */
|
||||
#ifndef __has_builtin
|
||||
# define __has_builtin(x) _GL_HAS_##x
|
||||
# define _GL_HAS___builtin_unreachable (4 < __GNUC__ + (5 <= __GNUC_MINOR__))
|
||||
# define _GL_HAS___builtin_trap \
|
||||
(3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__)))
|
||||
# define _GL_TEMPDEF___has_builtin
|
||||
#endif
|
||||
|
||||
/* Each of these macros verifies that its argument R is nonzero. To
|
||||
be portable, R should be an integer constant expression. Unlike
|
||||
assert (R), there is no run-time overhead.
|
||||
@ -260,24 +270,17 @@ template <int w>
|
||||
# define verify(R) _GL_VERIFY (R, "verify (" #R ")", -)
|
||||
#endif
|
||||
|
||||
#ifndef __has_builtin
|
||||
# define __has_builtin(x) 0
|
||||
#endif
|
||||
|
||||
/* Assume that R always holds. Behavior is undefined if R is false,
|
||||
fails to evaluate, or has side effects. Although assuming R can
|
||||
help a compiler generate better code or diagnostics, performance
|
||||
can suffer if R uses hard-to-optimize features such as function
|
||||
calls not inlined by the compiler. */
|
||||
|
||||
#if (__has_builtin (__builtin_unreachable) \
|
||||
|| 4 < __GNUC__ + (5 <= __GNUC_MINOR__))
|
||||
#if __has_builtin (__builtin_unreachable)
|
||||
# define assume(R) ((R) ? (void) 0 : __builtin_unreachable ())
|
||||
#elif 1200 <= _MSC_VER
|
||||
# define assume(R) __assume (R)
|
||||
#elif ((defined GCC_LINT || defined lint) \
|
||||
&& (__has_builtin (__builtin_trap) \
|
||||
|| 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__))))
|
||||
#elif (defined GCC_LINT || defined lint) && __has_builtin (__builtin_trap)
|
||||
/* Doing it this way helps various packages when configured with
|
||||
--enable-gcc-warnings, which compiles with -Dlint. It's nicer
|
||||
when 'assume' silences warnings even with older GCCs. */
|
||||
@ -287,6 +290,13 @@ template <int w>
|
||||
# define assume(R) ((R) ? (void) 0 : /*NOTREACHED*/ (void) 0)
|
||||
#endif
|
||||
|
||||
#ifdef _GL_TEMPDEF___has_builtin
|
||||
# undef __has_builtin
|
||||
# undef _GL_HAS___builtin_unreachable
|
||||
# undef _GL_HAS___builtin_trap
|
||||
# undef _GL_TEMPDEF___has_builtin
|
||||
#endif
|
||||
|
||||
/* @assert.h omit end@ */
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user