texlive[73651] Master/texmf-dist: l3kernel (30jan25)

commits+karl at tug.org commits+karl at tug.org
Thu Jan 30 22:12:08 CET 2025


Revision: 73651
          https://tug.org/svn/texlive?view=revision&revision=73651
Author:   karl
Date:     2025-01-30 22:12:07 +0100 (Thu, 30 Jan 2025)
Log Message:
-----------
l3kernel (30jan25)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
    trunk/Master/texmf-dist/doc/latex/l3kernel/README.md
    trunk/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3doc.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex
    trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3.ins
    trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3bitset.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3color.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-functions.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-symbolic.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-types.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-build.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.lua
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3debug.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3docstrip.tex
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88591.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885910.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885911.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885913.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885914.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885915.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885916.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88592.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88593.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88594.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88595.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88596.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88597.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88598.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88599.def

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md	2025-01-30 21:12:07 UTC (rev 73651)
@@ -7,18 +7,37 @@
 
 ## [Unreleased]
 
+## [2025-01-18]
+
+### Changed
+- Use a dedicated internal marker for `fp` and `int` expressions, allowing use
+  with LuaMetaTeX (see \#1518)
+
+### Fixed
+- Missing trailing period in `\tl_analysis_log:(N|n)` output (see \#1663)
+- Some state variables weren't correctly reset by `\keys_define:nn` and
+    `\keys_set:nn` breaking some nested usages in edge cases
+
+## [2025-01-14]
+
+### Added
+- `\int_step_tokens:nn`, `\int_step_tokens:nnn`, and `\int_step_tokens:nnnn`
+
+### Fixed
+- Check conditionals are defined when creating variants (see \#1189)
+
 ## [2024-12-25]
 
+### Added
+- `\file_forget:n`
+
 ### Changed
 - Expand 'value(s)' arg. to `\color_select:nn`, `\color_set:nnn`, etc. (see
-  #1640)
+  \#1640)
 
 ### Fixed
 - Initialize color `.` properly (see \#1642)
 
-### Added
-- `\file_forget:n`
-
 ## [2024-12-09]
 
 ### Added
@@ -36,7 +55,7 @@
 
 ### Fixed
 - `\prop_item:Nn` result not returned in `\exp_not:n` for linked properties
-  (#1630)
+  (see \#1630)
 
 ### Removed
 - `\c_catcode_active_tl`: was missing a `_`, always intended to be internal
@@ -60,12 +79,12 @@
 
 ## [2024-09-10]
 
+### Changed
+- Increase outdent of long function names in `l3doc` (issue \#1585)
+
 ### Fixed
 - `\seq_map_pairwise_function:NNN` not work with `\seq_map_break:(n)` (issue \#1587)
 
-### Changed
-- Increase outdent of long function names in `l3doc` (issue \#1585)
-
 ## [2024-08-30]
 
 ### Changed
@@ -409,6 +428,7 @@
 - `\file_input_raw:n`
 - `\int_if_zero:n(TF)`
 - `\str_mdfive_hash:n`
+
 ### Changed
 - Remove `\noexpand` inside math mode in `\text_expand:n`
 - Re-implement `\dim_to_decimal_in_bp:n` and 
@@ -561,14 +581,14 @@
 ### Added
 - Complete list of pdfTeX primitives
 
+### Changed
+- Leave catcode of `&` unchanged in code environment
+
 ### Fixed
 - Allow for multi-part BCP47 strings in case changing
 - Loading with plain TeX due to `\outer` status of `^^L`
   issue ([\#1161](https://github.com/latex3/latex3/issues/1161))
 
-### Changed
-- Leave catcode of `&` unchanged in code environment
-
 ## [2023-01-16]
 
 ### Added
@@ -658,9 +678,8 @@
 
 ### Changed
 - Replace `LaTeX3` in message text by `LaTeX`
+- Approach to setting current color data from LaTeX2e
 
-### Changed
-- Approach to setting current color data from LaTeX2e
 ## [2022-08-05]
 
 ### Added
@@ -1197,7 +1216,7 @@
   also *expandable*
 
 ### Fixed
-- Make `expl3` reload-safe for `latexrelease` (see latex3/latex2e#295)
+- Make `expl3` reload-safe for `latexrelease` (see latex3/latex2e\#295)
 
 ## [2020-02-25]
 
@@ -1827,7 +1846,9 @@
 - Step functions have been added for dim variables,
   e.g. `\dim_step_inline:nnnn`
 
-[Unreleased]: https://github.com/latex3/latex3/compare/2024-12-25...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2025-01-18...HEAD
+[2025-01-18]: https://github.com/latex3/latex3/compare/2025-01-14...2025-01-18
+[2025-01-14]: https://github.com/latex3/latex3/compare/2024-12-25...2025-01-14
 [2024-12-25]: https://github.com/latex3/latex3/compare/2024-12-09...2024-12-25
 [2024-12-09]: https://github.com/latex3/latex3/compare/2024-11-02...2024-12-09
 [2024-11-02]: https://github.com/latex3/latex3/compare/2024-10-09...2024-11-02

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/README.md	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/README.md	2025-01-30 21:12:07 UTC (rev 73651)
@@ -1,7 +1,7 @@
 LaTeX3 Programming Conventions
 ==============================
 
-Release 2024-12-25
+Release 2025-01-18
 
 Overview
 --------
@@ -91,6 +91,6 @@
 
 -----
 
-<p>Copyright (C) 1998-2012,2015-2024 The LaTeX Project <br />
+<p>Copyright (C) 1998-2012,2015-2025 The LaTeX Project <br />
 <a href="http://latex-project.org/">http://latex-project.org/</a> <br />
 All rights reserved.</p>

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 
 File: interface3.tex
 
-Copyright (C) 1990-2011,2017-2024 The LaTeX Project
+Copyright (C) 1990-2011,2017-2025 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of the
 LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -58,7 +58,7 @@
          {latex-team at latex-project.org}%
    }%
 }
-\date{Released 2024-12-25}
+\date{Released 2025-01-18}
 
 \pagenumbering{roman}
 \maketitle

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3doc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 
 File: l3styleguide.tex
 
-Copyright (C) 2011,2012,2014-2024 The LaTeX Project
+Copyright (C) 2011,2012,2014-2025 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of the
 LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2024-12-25}
+\date{Released 2025-01-18}
 
 \begin{document}
 

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 
 File: l3syntax-changes.tex
 
-Copyright (C) 2011,2012,2017-2024 The LaTeX Project
+Copyright (C) 2011,2012,2017-2025 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of the
 LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2024-12-25}
+\date{Released 2025-01-18}
 
 \newcommand{\TF}{\textit{(TF)}}
 

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 
 File: l3term-glossary.tex
 
-Copyright (C) 2018-2024 The LaTeX Project
+Copyright (C) 2018-2025 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of the
 LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2024-12-25}
+\date{Released 2025-01-18}
 
 \newcommand{\TF}{\textit{(TF)}}
 

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 
 File: source3.tex
 
-Copyright (C) 1990-2012,2017-2024 The LaTeX Project
+Copyright (C) 1990-2012,2017-2025 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of the
 LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -57,7 +57,7 @@
          {latex-team at latex-project.org}%
    }%
 }
-\date{Released 2024-12-25}
+\date{Released 2025-01-18}
 
 \pagenumbering{roman}
 \maketitle

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex	2025-01-30 21:12:07 UTC (rev 73651)
@@ -335,6 +335,21 @@
     lists (with access at both ends) and stacks.
 \end{description}
 
+\subsection{Behavior of \texttt{c}-type arguments when the \texttt{N}-type token
+  resulting from expansion is undefined}
+
+When \texttt{c}-type expansion is applied, it will produce an \texttt{N}-type
+token to be consumed by the underlying function. If the result of this process
+is a token which is undefined, \TeX{}'s behavior is to make it equal to
+|\scan_stop:| (|\relax|).
+
+This will likely lead to low-level errors if it occurs in contexts where
+\pkg{expl3} expects a \enquote{variable}, e.g.~a \texttt{prop}, \texttt{seq},
+etc. Therefore, the programmer should ensure that \texttt{c}-type expansion is
+only applied when the resulting \texttt{N}-type token will definitely exist,
+i.e.~when it is either defined prior to the application of the \texttt{c}-type
+expansion or will be by the underlying \texttt{N}-type function.
+
 \subsection{Scratch variables}
 
 Modules focussed on variable usage typically provide four scratch variables,

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: expl3.dtx
 %
-% Copyright (C) 1990-2024 The LaTeX Project
+% Copyright (C) 1990-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -24,7 +24,7 @@
 %
 %<*driver|generic|package|2ekernel>
 %</driver|generic|package|2ekernel>
-\def\ExplFileDate{2024-12-25}%
+\def\ExplFileDate{2025-01-18}%
 %<*driver>
 \documentclass[full]{l3doc}
 \usepackage{graphicx}
@@ -51,7 +51,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3.ins	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3.ins	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 
 File l3.ins
 
-Copyright (C) 2011,2012,2014-2024 The LaTeX Project
+Copyright (C) 2011,2012,2014-2025 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of the
 LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
 
 \preamble
 
-Copyright (C) 1990-2024 The LaTeX Project
+Copyright (C) 1990-2025 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of
 the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -156,7 +156,7 @@
 \def\MetaPrefix{--}
 \preamble
 
-Copyright (C) 1990-2024 The LaTeX Project
+Copyright (C) 1990-2025 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of
 the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3basics.dtx
 %
-% Copyright (C) 1990-2024 The LaTeX Project
+% Copyright (C) 1990-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -1186,9 +1186,10 @@
 %     \cs{cs_if_exist:NTF} \meta{control sequence} \Arg{true code} \Arg{false code}
 %   \end{syntax}
 %   Tests whether the \meta{control sequence} is currently defined
-%   (whether as a function or another control sequence type). Any
-%   definition of \meta{control sequence} other than \tn{relax}
-%   evaluates as \texttt{true}.
+%   (whether as a function or another control sequence type),
+%   and its meaning is not the primitive \tn{relax} token.
+%   This is different from \cs{if_cs_exist:N}, which evaluates to
+%   \texttt{true} if passed the token \tn{relax} as an argument.
 % \end{function}
 %
 % \begin{function}[EXP,pTF]{\cs_if_free:N, \cs_if_free:c}
@@ -1196,10 +1197,7 @@
 %     \cs{cs_if_free_p:N} \meta{control sequence}
 %     \cs{cs_if_free:NTF} \meta{control sequence} \Arg{true code} \Arg{false code}
 %   \end{syntax}
-%   Tests whether the \meta{control sequence} is currently free to
-%   be defined. This test is \texttt{false} if the
-%   \meta{control sequence} currently exists (as defined by
-%   \cs{cs_if_exist:NTF}).
+%   This test is the negation of the above \cs{cs_if_exist:NTF}.
 % \end{function}
 %
 % \subsection{Primitive conditionals}
@@ -1281,7 +1279,7 @@
 %   Check if <cs> appears in the hash table or if the control sequence
 %   that can be formed from <tokens> appears in the hash table. The
 %   latter function does not turn the control sequence in question into
-%   "\scan_stop:"! This can be useful when dealing with control
+%   the primitive \tn{relax} token. This can be useful when dealing with control
 %   sequences which cannot be entered as a single token.
 %   \begin{texnote}
 %     These are the \TeX{} primitives \tn{ifdefined} and \tn{ifcsname}.
@@ -2457,7 +2455,7 @@
 %
 % \subsection{Exist or free}
 %
-% A control sequence is said to \emph{exist} (to be used) if has an entry in
+% A control sequence is said to \emph{exist} (to be used) if it has an entry in
 % the hash table and its meaning is different from the primitive
 % \tn{relax} token. A control sequence is said to be \emph{free}
 % (to be defined) if it does not already exist.

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3bitset.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3bitset.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3bitset.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3bitset.dtx
 %
-% Copyright (C) 2020-2024 The LaTeX Project
+% Copyright (C) 2020-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -42,7 +42,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3bootstrap.dtx
 %
-% Copyright (C) 2011-2024 The LaTeX Project
+% Copyright (C) 2011-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -70,14 +70,14 @@
 %     \cs{ExplSyntaxOn} \meta{code} \cs{ExplSyntaxOff}
 %   \end{syntax}
 %   The \cs{ExplSyntaxOn} function switches to a category code
-%   regime in which spaces and new lines are ignored, and in which the colon (|:|)
+%   régime in which spaces and new lines are ignored, and in which the colon (|:|)
 %   and underscore (|_|) are treated as \enquote{letters}, thus allowing
 %   access to the names of code functions and variables. Within this
 %   environment, |~| is used to input a space. The \cs{ExplSyntaxOff}
-%   reverts to the document category code regime.
+%   reverts to the document category code régime.
 %   \begin{texnote}
 %     Spaces introduced by~|~| behave much in the same way as normal
-%     space characters in the standard category code regime: they are
+%     space characters in the standard category code régime: they are
 %     ignored after a control word or at the start of a line, and
 %     multiple consecutive~|~| are equivalent to a single one.  However,
 %     |~|~is \emph{not} ignored at the end of a line.

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3box.dtx
 %
-% Copyright (C) 2005-2024 The LaTeX Project
+% Copyright (C) 2005-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3cctab.dtx
 %
-% Copyright (C) 2018-2024 The LaTeX Project
+% Copyright (C) 2018-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -3,7 +3,7 @@
 %% File: l3clist.dtx
 %
 % Copyright (C) 2004-2011 Frank Mittelbach, The LaTeX Project
-%           (C) 2012-2024 The LaTeX Project
+%           (C) 2012-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3coffins.dtx
 %
-% Copyright (C) 2010-2024 The LaTeX Project
+% Copyright (C) 2010-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3color.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3color.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3color.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3color.dtx
 %
-% Copyright (C) 2017-2024 The LaTeX Project
+% Copyright (C) 2017-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3debug.dtx
 %
-% Copyright (C) 2019-2024 The LaTeX Project
+% Copyright (C) 2019-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -69,7 +69,7 @@
 %
 % Standard file identification.
 %    \begin{macrocode}
-\ProvidesExplFile{l3debug.def}{2024-12-25}{}{L3 Debugging support}
+\ProvidesExplFile{l3debug.def}{2025-01-18}{}{L3 Debugging support}
 %    \end{macrocode}
 %
 % \begin{variable}{\s_@@_stop}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3deprecation.dtx
 %
-% Copyright (C) 2017-2024 The LaTeX Project
+% Copyright (C) 2017-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3doc.dtx
 %
-% Copyright (C) 1990-2024 The LaTeX Project
+% Copyright (C) 1990-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@
 \askforoverwritefalse
 \preamble
 
-Copyright (C) 1990-2024 The LaTeX Project
+Copyright (C) 1990-2025 The LaTeX Project
 
 It may be distributed and/or modified under the conditions of
 the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -71,7 +71,7 @@
 % This isn't included in the typeset documentation because it's a bit
 % ugly:
 %<*class>
-\ProvidesExplClass{l3doc}{2024-12-25}{}
+\ProvidesExplClass{l3doc}{2025-01-18}{}
   {L3 Experimental documentation class}
 %</class>
 % \fi
@@ -84,7 +84,7 @@
 %    require you to do updates, if the class changes.}}
 %
 % \author{\Team}
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 % \maketitle
 % \tableofcontents
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File l3dosctrip.dtx
 %
-% Copyright (C) 2012-2024 The LaTeX Project
+% Copyright (C) 2012-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -63,7 +63,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3expan.dtx
 %
-% Copyright (C) 1990-2024 The LaTeX Project
+% Copyright (C) 1990-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -2203,6 +2203,7 @@
 %     \@@_generate_variant_T_form:nnn,
 %     \@@_generate_variant_F_form:nnn,
 %     \@@_generate_variant_TF_form:nnn,
+%     \@@_generate_variant_check:nn
 %   }
 %    \begin{macrocode}
 \cs_new_protected:Npn \prg_generate_conditional_variant:Nnn #1
@@ -2244,13 +2245,23 @@
     \@@_generate_variant:w #2 \s_@@_mark {#3} {#4} {#5}
   }
 \cs_new_protected:Npn \@@_generate_variant_p_form:nnn #1#2
-  { \cs_generate_variant:cn { #1 _p : #2 } }
+  { \@@_generate_variant_check:nn { #1 _p : #2 } }
 \cs_new_protected:Npn \@@_generate_variant_T_form:nnn #1#2
-  { \cs_generate_variant:cn { #1 : #2 T } }
+  { \@@_generate_variant_check:nn { #1 : #2 T } }
 \cs_new_protected:Npn \@@_generate_variant_F_form:nnn #1#2
-  { \cs_generate_variant:cn { #1 : #2 F } }
+  { \@@_generate_variant_check:nn { #1 : #2 F } }
 \cs_new_protected:Npn \@@_generate_variant_TF_form:nnn #1#2
-  { \cs_generate_variant:cn { #1 : #2 TF } }
+  { \@@_generate_variant_check:nn { #1 : #2 TF } }
+\cs_new_protected:Npn \@@_generate_variant_check:nn #1#2
+  {
+    \cs_if_exist:cTF {#1}
+      { \cs_generate_variant:cn {#1} {#2} }
+      {
+        \msg_error:nne
+          { kernel } { conditional-base-undefined }
+            { \token_to_str:c {#1} }
+      }
+  }
 %    \end{macrocode}
 % \end{macro}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3file.dtx
 %
-% Copyright (C) 1990-2024 The LaTeX Project
+% Copyright (C) 1990-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3flag.dtx
 %
-% Copyright (C) 2011-2024 The LaTeX Project
+% Copyright (C) 2011-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp-assign.dtx
 %
-% Copyright (C) 2011-2024 The LaTeX Project
+% Copyright (C) 2011-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 % \maketitle
 %
 % \begin{documentation}
@@ -204,9 +204,9 @@
   {
     \@@_show_validate:nn { #1 }
       {
-        \s_@@ \@@_chk:w ??? ;~ or \iow_newline:
-        \s_@@_tuple \_@@_tuple_chk:w ? ;~ or \iow_newline:
-        \s_@@_symbolic \@@_symbolic_chk:w ? , ? ;
+        \s_@@ \@@_chk:w ??? \@@_sep: or \iow_newline:
+        \s_@@_tuple \_@@_tuple_chk:w ? \@@_sep: or \iow_newline:
+        \s_@@_symbolic \@@_symbolic_chk:w ? , ? \@@_sep:
       }
   }
 \cs_new:Npn \@@_show_validate_aux:n #1
@@ -222,17 +222,17 @@
             { \s_@@ }
               {
                 \@@_show_validate:w #1 \s_@@
-                \@@_chk:w ??? ; \s_@@_stop
+                \@@_chk:w ??? \@@_sep: \s_@@_stop
               }
             { \s_@@_tuple }
               {
                 \@@_tuple_show_validate:w #1
-                \s_@@_tuple \_@@_tuple_chk:w ?? ; \s_@@_stop
+                \s_@@_tuple \_@@_tuple_chk:w ?? \@@_sep: \s_@@_stop
               }
             { \s_@@_symbolic }
               {
                 \@@_symbolic_show_validate:w #1
-                \s_@@_symbolic \@@_symbolic_chk:w ? , ?? ; \s_@@_stop
+                \s_@@_symbolic \@@_symbolic_chk:w ? , ?? \@@_sep: \s_@@_stop
               }
           }
           { #2 }
@@ -239,29 +239,32 @@
       }
   }
 \cs_new:Npn \@@_show_validate:w
-    #1 \s_@@ \@@_chk:w #2#3#4#5 ; #6 \s_@@_stop
+    #1 \s_@@ \@@_chk:w #2#3#4#5 \@@_sep: #6 \s_@@_stop
   {
     \str_if_eq:nnF { #2 } {?}
       {
         \token_if_eq_meaning:NNTF #2 1
-          { \s_@@ \@@_chk:w #2 #3 { #4 } #5 ; }
-          { \s_@@ \@@_chk:w #2 #3 #4 #5 ; }
+          { \s_@@ \@@_chk:w #2 #3 { #4 } #5 \@@_sep: }
+          { \s_@@ \@@_chk:w #2 #3 #4 #5 \@@_sep: }
         \@@_show_validate_aux:n { #6 }
       }
   }
 \cs_new:Npn \@@_tuple_show_validate:w
-    #1 \s_@@_tuple \_@@_tuple_chk:w #2#3 ; #4 \s_@@_stop
+    #1 \s_@@_tuple \_@@_tuple_chk:w #2#3 \@@_sep: #4 \s_@@_stop
   {
     \str_if_eq:nnF { #2 } {?}
-      { \s_@@_tuple \@@_tuple_chk:w { \@@_show_validate_aux:n { #2 } } ; }
+      {
+        \s_@@_tuple \@@_tuple_chk:w { \@@_show_validate_aux:n { #2 } }
+          \@@_sep:
+      }
   }
 \cs_new:Npn \@@_symbolic_show_validate:w
-    #1 \s_@@_symbolic \@@_symbolic_chk:w #2 , #3#4 ; #5 \s_@@_stop
+    #1 \s_@@_symbolic \@@_symbolic_chk:w #2 , #3#4 \@@_sep: #5 \s_@@_stop
   {
     \str_if_eq:nnF { #2 } {?}
       {
         \s_@@_symbolic \@@_symbolic_chk:w \exp_not:n { #2 } ,
-        { \@@_show_validate_aux:n { #3 } };
+        { \@@_show_validate_aux:n { #3 } }\@@_sep:
         \@@_show_validate_aux:n { #5 }
       }
   }

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp-aux.dtx
 %
-% Copyright (C) 2011-2024 The LaTeX Project
+% Copyright (C) 2011-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -79,12 +79,27 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\@@_sep:}
+%   We need a way to stop the expansion in \cs{@@_int_eval:w} and similar with a
+%   token that isn't absorbed so that it works as a marker for right-delimited
+%   arguments. Additionally the used token should be impossible to form a valid
+%   expression for these expression primitives (the otherwise often used
+%   |;| is turned into a binary operator in some engines for instance). And
+%   since this is about right-delimiting I think it's funny to use
+%   \cs{tex_right:D}. An unexpandable primitive is used because it is guaranteed
+%   to never be a valid token in such an expression and survives all kinds of
+%   expansion (just like |;| would).
+%    \begin{macrocode}
+\cs_new_eq:NN \@@_sep: \tex_right:D
+%    \end{macrocode}
+% \end{macro}
+%
 % \subsection{Internal representation}
 %
 % Internally, a floating point number \meta{X} is a
 % token list containing
 % \begin{quote}
-%   \cs{s_@@} \cs{@@_chk:w} \meta{case} \meta{sign} \meta{body} |;|
+%   \cs{s_@@} \cs{@@_chk:w} \meta{case} \meta{sign} \meta{body} \cs{@@_sep:}
 % \end{quote}
 % Let us explain each piece separately.
 %
@@ -117,15 +132,15 @@
 %
 % Special floating point numbers have the form
 % \begin{quote}
-%   \cs{s_@@} \cs{@@_chk:w} \meta{case} \meta{sign} \cs[no-index]{s_@@_\ldots} |;|
+%   \cs{s_@@} \cs{@@_chk:w} \meta{case} \meta{sign} \cs[no-index]{s_@@_\ldots} \cs{@@_sep:}
 % \end{quote}
-% where \cs[no-index]{s_@@_\ldots} is a scan mark carrying information about how the
-% number was formed (useful for debugging).
+% where \cs[no-index]{s_@@_\ldots} is a scan mark carrying information about how
+% the number was formed (useful for debugging).
 %
 % Normal floating point numbers ($\meta{case} = 1$) have the form
 % \begin{quote}
 %   \cs{s_@@} \cs{@@_chk:w} 1 \meta{sign} \Arg{exponent}
-%   \Arg{X_1} \Arg{X_2} \Arg{X_3} \Arg{X_4} |;|
+%   \Arg{X_1} \Arg{X_2} \Arg{X_3} \Arg{X_4} \cs{@@_sep:}
 % \end{quote}
 % Here, the \meta{exponent} is an integer, between
 % $-\ExplSyntaxOn\int_use:N\c__fp_minus_min_exponent_int$ and
@@ -135,8 +150,9 @@
 % \[
 % (-1)^{\meta{sign}/2} \meta{X_1}\meta{X_2}\meta{X_3}\meta{X_4}\cdot 10^{\meta{exponent}-16}
 % \]
-% where we have concatenated the $16$ digits.  Currently, floating point numbers are normalized such that
-% the \meta{exponent} is minimal, in other words, $1000 \leq \meta{X_1} \leq 9999$.
+% where we have concatenated the $16$ digits.  Currently, floating point numbers
+% are normalized such that the \meta{exponent} is minimal, in other words,
+% $1000 \leq \meta{X_1} \leq 9999$.
 %
 % \begin{table}\centering
 %   \caption{Internal representation of floating point numbers.}
@@ -176,8 +192,8 @@
 %   Those functions place a semicolon after one or two arguments
 %   (typically digits).
 %    \begin{macrocode}
-\cs_new:Npn \@@_use_s:n #1 { #1; }
-\cs_new:Npn \@@_use_s:nn #1#2 { #1#2; }
+\cs_new:Npn \@@_use_s:n #1 { #1\@@_sep: }
+\cs_new:Npn \@@_use_s:nn #1#2 { #1#2\@@_sep: }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -186,9 +202,9 @@
 %   Those functions select specific arguments among a set of arguments
 %   delimited by a semicolon.
 %    \begin{macrocode}
-\cs_new:Npn \@@_use_none_until_s:w #1; { }
-\cs_new:Npn \@@_use_i_until_s:nw #1#2; {#1}
-\cs_new:Npn \@@_use_ii_until_s:nnw #1#2#3; {#2}
+\cs_new:Npn \@@_use_none_until_s:w #1\@@_sep: { }
+\cs_new:Npn \@@_use_i_until_s:nw #1#2\@@_sep: {#1}
+\cs_new:Npn \@@_use_ii_until_s:nnw #1#2#3\@@_sep: {#2}
 %    \end{macrocode}
 % \end{macro}
 %
@@ -196,7 +212,8 @@
 %   Many internal functions take arguments delimited by semicolons, and
 %   it is occasionally useful to swap two such arguments.
 %    \begin{macrocode}
-\cs_new:Npn \@@_reverse_args:Nww #1 #2; #3; { #1 #3; #2; }
+\cs_new:Npn \@@_reverse_args:Nww #1 #2\@@_sep: #3\@@_sep:
+  { #1 #3\@@_sep: #2\@@_sep: }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -204,7 +221,8 @@
 %   Rotate three arguments delimited by semicolons.  This is the inverse
 %   (or the square) of the Forth primitive |ROT|, hence the name.
 %    \begin{macrocode}
-\cs_new:Npn \@@_rrot:www #1; #2; #3; { #2; #3; #1; }
+\cs_new:Npn \@@_rrot:www #1\@@_sep: #2\@@_sep: #3\@@_sep:
+  { #2\@@_sep: #3\@@_sep: #1\@@_sep: }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -212,8 +230,8 @@
 %   Many internal functions take arguments delimited by semicolons, and
 %   it is occasionally useful to remove one or two such arguments.
 %    \begin{macrocode}
-\cs_new:Npn \@@_use_i:ww #1; #2; { #1; }
-\cs_new:Npn \@@_use_i:www #1; #2; #3; { #1; }
+\cs_new:Npn \@@_use_i:ww #1\@@_sep: #2\@@_sep: { #1\@@_sep: }
+\cs_new:Npn \@@_use_i:www #1\@@_sep: #2\@@_sep: #3\@@_sep: { #1\@@_sep: }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -241,8 +259,8 @@
 %   expanded.  We define \cs{@@_chk:w} to produce an error.
 %    \begin{macrocode}
 \scan_new:N \s_@@
-\cs_new_protected:Npn \@@_chk:w #1 ;
-  { \@@_misused:n { \s_@@ \@@_chk:w #1 ; } }
+\cs_new_protected:Npn \@@_chk:w #1 \@@_sep:
+  { \@@_misused:n { \s_@@ \@@_chk:w #1 \@@_sep: } }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -287,13 +305,14 @@
 %
 % \begin{variable}
 %   {\c_zero_fp, \c_minus_zero_fp, \c_inf_fp, \c_minus_inf_fp, \c_nan_fp}
-%   The special floating points. We define the floating points here as \enquote{exact}.
+%   The special floating points. We define the floating points here as
+%   \enquote{exact}.
 %    \begin{macrocode}
-\tl_const:Nn \c_zero_fp       { \s_@@ \@@_chk:w 0 0 \s_@@_exact ; }
-\tl_const:Nn \c_minus_zero_fp { \s_@@ \@@_chk:w 0 2 \s_@@_exact ; }
-\tl_const:Nn \c_inf_fp        { \s_@@ \@@_chk:w 2 0 \s_@@_exact ; }
-\tl_const:Nn \c_minus_inf_fp  { \s_@@ \@@_chk:w 2 2 \s_@@_exact ; }
-\tl_const:Nn \c_nan_fp        { \s_@@ \@@_chk:w 3 1 \s_@@_exact ; }
+\tl_const:Nn \c_zero_fp       { \s_@@ \@@_chk:w 0 0 \s_@@_exact \@@_sep: }
+\tl_const:Nn \c_minus_zero_fp { \s_@@ \@@_chk:w 0 2 \s_@@_exact \@@_sep: }
+\tl_const:Nn \c_inf_fp        { \s_@@ \@@_chk:w 2 0 \s_@@_exact \@@_sep: }
+\tl_const:Nn \c_minus_inf_fp  { \s_@@ \@@_chk:w 2 2 \s_@@_exact \@@_sep: }
+\tl_const:Nn \c_nan_fp        { \s_@@ \@@_chk:w 3 1 \s_@@_exact \@@_sep: }
 %    \end{macrocode}
 % \end{variable}
 %
@@ -343,7 +362,7 @@
   {
     \s_@@ \@@_chk:w 1 0
       { \int_eval:n { \c_@@_max_exponent_int + 1 } }
-      {1000} {0000} {0000} {0000} ;
+      {1000} {0000} {0000} {0000} \@@_sep:
   }
 %    \end{macrocode}
 % \end{variable}
@@ -353,9 +372,9 @@
 %   a zero or infinity with a given sign.
 %    \begin{macrocode}
 \cs_new:Npn \@@_zero_fp:N #1
-  { \s_@@ \@@_chk:w 0 #1 \s_@@_underflow ; }
+  { \s_@@ \@@_chk:w 0 #1 \s_@@_underflow \@@_sep: }
 \cs_new:Npn \@@_inf_fp:N #1
-  { \s_@@ \@@_chk:w 2 #1 \s_@@_overflow ; }
+  { \s_@@ \@@_chk:w 2 #1 \s_@@_overflow \@@_sep: }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -411,7 +430,7 @@
 %   to $\pm\infty$.  The functions \cs{@@_underflow:w} and
 %   \cs{@@_overflow:w} are defined in \pkg{l3fp-traps}.
 %    \begin{macrocode}
-\cs_new:Npn \@@_sanitize:Nw #1 #2;
+\cs_new:Npn \@@_sanitize:Nw #1 #2\@@_sep:
   {
     \if_case:w
         \if_int_compare:w #2 > \c_@@_max_exponent_int 1 ~ \else:
@@ -423,8 +442,8 @@
     \fi:
     \s_@@ \@@_chk:w 1 #1 {#2}
   }
-\cs_new:Npn \@@_sanitize:wN #1; #2 { \@@_sanitize:Nw #2 #1; }
-\cs_new:Npn \@@_sanitize_zero:w \s_@@ \@@_chk:w #1 #2 #3;
+\cs_new:Npn \@@_sanitize:wN #1\@@_sep: #2 { \@@_sanitize:Nw #2 #1\@@_sep: }
+\cs_new:Npn \@@_sanitize_zero:w \s_@@ \@@_chk:w #1 #2 #3\@@_sep:
   { \c_zero_fp }
 %    \end{macrocode}
 % \end{macro}
@@ -472,12 +491,12 @@
 %
 % \begin{macro}[EXP]{\@@_exp_after_special:nNNw}
 %   \begin{syntax}
-%     \cs{@@_exp_after_special:nNNw} \Arg{after} \meta{case} \meta{sign} \meta{scan mark} |;|
+%     \cs{@@_exp_after_special:nNNw} \Arg{after} \meta{case} \meta{sign} \meta{scan mark} \cs{@@_sep:}
 %   \end{syntax}
 %   Special floating point numbers are easy to jump over since they
 %   contain few tokens.
 %    \begin{macrocode}
-\cs_new:Npn \@@_exp_after_special:nNNw #1#2#3#4;
+\cs_new:Npn \@@_exp_after_special:nNNw #1#2#3#4\@@_sep:
   {
     \exp_after:wN \s_@@
     \exp_after:wN \@@_chk:w
@@ -484,7 +503,7 @@
     \exp_after:wN #2
     \exp_after:wN #3
     \exp_after:wN #4
-    \exp_after:wN ;
+    \exp_after:wN \@@_sep:
     #1
   }
 %    \end{macrocode}
@@ -496,19 +515,19 @@
 %   the digits were not braced but instead were delimited arguments (for
 %   instance delimited by |,|).  That may be changed some day.
 %    \begin{macrocode}
-\cs_new:Npn \@@_exp_after_normal:nNNw #1 1 #2 #3 #4#5#6#7;
+\cs_new:Npn \@@_exp_after_normal:nNNw #1 1 #2 #3 #4#5#6#7\@@_sep:
   {
     \exp_after:wN \@@_exp_after_normal:Nwwwww
     \exp_after:wN #2
-    \int_value:w #3   \exp_after:wN ;
-    \int_value:w 1 #4 \exp_after:wN ;
-    \int_value:w 1 #5 \exp_after:wN ;
-    \int_value:w 1 #6 \exp_after:wN ;
-    \int_value:w 1 #7 \exp_after:wN ; #1
+    \int_value:w #3   \exp_after:wN \@@_sep:
+    \int_value:w 1 #4 \exp_after:wN \@@_sep:
+    \int_value:w 1 #5 \exp_after:wN \@@_sep:
+    \int_value:w 1 #6 \exp_after:wN \@@_sep:
+    \int_value:w 1 #7 \exp_after:wN \@@_sep: #1
   }
 \cs_new:Npn \@@_exp_after_normal:Nwwwww
-    #1 #2; 1 #3 ; 1 #4 ; 1 #5 ; 1 #6 ;
-  { \s_@@ \@@_chk:w 1 #1 {#2} {#3} {#4} {#5} {#6} ; }
+    #1 #2\@@_sep: 1 #3 \@@_sep: 1 #4 \@@_sep: 1 #5 \@@_sep: 1 #6 \@@_sep:
+  { \s_@@ \@@_chk:w 1 #1 {#2} {#3} {#4} {#5} {#6} \@@_sep: }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -517,17 +536,17 @@
 % \begin{macro}{\s_@@_tuple, \@@_tuple_chk:w}
 % \begin{variable}{\c_@@_empty_tuple_fp}
 %   Floating point tuples take the form \cs{s_@@_tuple}
-%   \cs{@@_tuple_chk:w} |{| \meta{fp 1} \meta{fp 2} \dots |}| |;| where
-%   each \meta{fp} is a floating point number or tuple, hence ends with
-%   |;| itself.  When a tuple is typeset, \cs{@@_tuple_chk:w} produces
+%   \cs{@@_tuple_chk:w} |{| \meta{fp 1} \meta{fp 2} \dots |}| \cs{@@_sep:}
+%   where each \meta{fp} is a floating point number or tuple, hence ends with
+%   \cs{@@_sep:} itself.  When a tuple is typeset, \cs{@@_tuple_chk:w} produces
 %   an error, just like usual floating point numbers.
 %   Tuples may have zero or one element.
 %    \begin{macrocode}
 \scan_new:N \s_@@_tuple
-\cs_new_protected:Npn \@@_tuple_chk:w #1 ;
-  { \@@_misused:n { \s_@@_tuple \@@_tuple_chk:w #1 ; } }
+\cs_new_protected:Npn \@@_tuple_chk:w #1 \@@_sep:
+  { \@@_misused:n { \s_@@_tuple \@@_tuple_chk:w #1 \@@_sep: } }
 \tl_const:Nn \c_@@_empty_tuple_fp
-  { \s_@@_tuple \@@_tuple_chk:w { } ; }
+  { \s_@@_tuple \@@_tuple_chk:w { } \@@_sep: }
 %    \end{macrocode}
 % \end{variable}
 % \end{macro}
@@ -540,15 +559,15 @@
 %   with the |\use_none:n #1| construction.
 %    \begin{macrocode}
 \cs_new:Npn \@@_array_count:n #1
-  { \@@_tuple_count:w \s_@@_tuple \@@_tuple_chk:w {#1} ; }
-\cs_new:Npn \@@_tuple_count:w \s_@@_tuple \@@_tuple_chk:w #1 ;
+  { \@@_tuple_count:w \s_@@_tuple \@@_tuple_chk:w {#1} \@@_sep: }
+\cs_new:Npn \@@_tuple_count:w \s_@@_tuple \@@_tuple_chk:w #1 \@@_sep:
   {
     \int_value:w \@@_int_eval:w 0
-      \@@_tuple_count_loop:Nw #1 { ? \prg_break: } ;
+      \@@_tuple_count_loop:Nw #1 { ? \prg_break: } \@@_sep:
       \prg_break_point:
     \@@_int_eval_end:
   }
-\cs_new:Npn \@@_tuple_count_loop:Nw #1#2;
+\cs_new:Npn \@@_tuple_count_loop:Nw #1#2\@@_sep:
   { \use_none:n #1 + 1 \@@_tuple_count_loop:Nw }
 %    \end{macrocode}
 % \end{macro}
@@ -570,10 +589,10 @@
 %    \begin{macrocode}
 \cs_new:Npn \@@_array_if_all_fp:nTF #1
   {
-    \@@_array_if_all_fp_loop:w #1 { \s_@@ \prg_break: } ;
+    \@@_array_if_all_fp_loop:w #1 { \s_@@ \prg_break: } \@@_sep:
     \prg_break_point: \use_i:nn
   }
-\cs_new:Npn \@@_array_if_all_fp_loop:w #1#2 ;
+\cs_new:Npn \@@_array_if_all_fp_loop:w #1#2 \@@_sep:
   {
     \@@_if_type_fp:NTwFw
       #1 \@@_array_if_all_fp_loop:w
@@ -680,9 +699,9 @@
 %   item in the tuple and expand it.
 %   \begin{quote}
 %     \cs{@@_exp_after_array_f:w}\\
-%       \meta{fp_1} |;|\\
+%       \meta{fp_1} \cs{@@_sep:}\\
 %       \ldots{}\\
-%       \meta{fp_n} |;|\\
+%       \meta{fp_n} \cs{@@_sep:}\\
 %       \cs{s_@@_expr_stop}
 %   \end{quote}
 %    \begin{macrocode}
@@ -689,7 +708,7 @@
 \cs_new:Npn \@@_exp_after_tuple_o:w
   { \@@_exp_after_tuple_f:nw { \exp_after:wN \exp_stop_f: } }
 \cs_new:Npn \@@_exp_after_tuple_f:nw
-  #1 \s_@@_tuple \@@_tuple_chk:w #2 ;
+  #1 \s_@@_tuple \@@_tuple_chk:w #2 \@@_sep:
   {
     \exp_after:wN \s_@@_tuple
     \exp_after:wN \@@_tuple_chk:w
@@ -697,7 +716,7 @@
       \exp:w \exp_end_continue_f:w
       \@@_exp_after_array_f:w #2 \s_@@_expr_stop
     \exp_after:wN }
-    \exp_after:wN ;
+    \exp_after:wN \@@_sep:
     \exp:w \exp_end_continue_f:w #1
   }
 \cs_new:Npn \@@_exp_after_array_f:w
@@ -780,7 +799,8 @@
 \int_const:Nn \c_@@_leading_shift_int  { - 5 0000 }
 \int_const:Nn \c_@@_middle_shift_int   { 5 0000 *  9999 }
 \int_const:Nn \c_@@_trailing_shift_int { 5 0000 * 10000 }
-\cs_new:Npn \@@_pack:NNNNNw #1 #2#3#4#5 #6; { + #1#2#3#4#5 ; {#6} }
+\cs_new:Npn \@@_pack:NNNNNw #1 #2#3#4#5 #6\@@_sep:
+  { + #1#2#3#4#5 \@@_sep: {#6} }
 %    \end{macrocode}
 % \end{variable}
 % \end{macro}
@@ -802,8 +822,8 @@
 \int_const:Nn \c_@@_big_leading_shift_int  { - 15 2374 }
 \int_const:Nn \c_@@_big_middle_shift_int   { 15 2374 *  9999 }
 \int_const:Nn \c_@@_big_trailing_shift_int { 15 2374 * 10000 }
-\cs_new:Npn \@@_pack_big:NNNNNNw #1#2 #3#4#5#6 #7;
-  { + #1#2#3#4#5#6 ; {#7} }
+\cs_new:Npn \@@_pack_big:NNNNNNw #1#2 #3#4#5#6 #7\@@_sep:
+  { + #1#2#3#4#5#6 \@@_sep: {#7} }
 %    \end{macrocode}
 % \end{variable}
 % \end{macro}
@@ -824,8 +844,8 @@
 \int_const:Nn \c_@@_Bigg_leading_shift_int  { - 20 0000 }
 \int_const:Nn \c_@@_Bigg_middle_shift_int   { 20 0000 *  9999 }
 \int_const:Nn \c_@@_Bigg_trailing_shift_int { 20 0000 * 10000 }
-\cs_new:Npn \@@_pack_Bigg:NNNNNNw #1#2 #3#4#5#6 #7;
-  { + #1#2#3#4#5#6 ; {#7} }
+\cs_new:Npn \@@_pack_Bigg:NNNNNNw #1#2 #3#4#5#6 #7\@@_sep:
+  { + #1#2#3#4#5#6 \@@_sep: {#7} }
 %    \end{macrocode}
 % \end{variable}
 % \end{macro}
@@ -832,7 +852,7 @@
 %
 % \begin{macro}[EXP]{\@@_pack_twice_four:wNNNNNNNN}
 %   \begin{syntax}
-%     \cs{@@_pack_twice_four:wNNNNNNNN} \meta{tokens} |;| \meta{$\geq 8$ digits}
+%     \cs{@@_pack_twice_four:wNNNNNNNN} \meta{tokens} \cs{@@_sep:} \meta{$\geq 8$ digits}
 %   \end{syntax}
 %   Grabs two sets of $4$ digits and places them before the semi-colon
 %   delimiter.  Putting several copies of this function before a
@@ -839,14 +859,14 @@
 %   semicolon packs more digits since each takes the digits
 %   packed by the others in its first argument.
 %    \begin{macrocode}
-\cs_new:Npn \@@_pack_twice_four:wNNNNNNNN #1; #2#3#4#5 #6#7#8#9
-  { #1 {#2#3#4#5} {#6#7#8#9} ; }
+\cs_new:Npn \@@_pack_twice_four:wNNNNNNNN #1\@@_sep: #2#3#4#5 #6#7#8#9
+  { #1 {#2#3#4#5} {#6#7#8#9} \@@_sep: }
 %    \end{macrocode}
 % \end{macro}
 %
 % \begin{macro}[EXP]{\@@_pack_eight:wNNNNNNNN}
 %   \begin{syntax}
-%     \cs{@@_pack_eight:wNNNNNNNN} \meta{tokens} |;| \meta{$\geq 8$ digits}
+%     \cs{@@_pack_eight:wNNNNNNNN} \meta{tokens} \cs{@@_sep:} \meta{$\geq 8$ digits}
 %   \end{syntax}
 %   Grabs one set of $8$ digits and places them before the semi-colon
 %   delimiter as a single group.  Putting several copies of this
@@ -853,8 +873,8 @@
 %   function before a semicolon packs more digits since each
 %   takes the digits packed by the others in its first argument.
 %    \begin{macrocode}
-\cs_new:Npn \@@_pack_eight:wNNNNNNNN #1; #2#3#4#5 #6#7#8#9
-  { #1 {#2#3#4#5#6#7#8#9} ; }
+\cs_new:Npn \@@_pack_eight:wNNNNNNNN #1\@@_sep: #2#3#4#5 #6#7#8#9
+  { #1 {#2#3#4#5#6#7#8#9} \@@_sep: }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -875,17 +895,17 @@
 %
 %   This is used in \pkg{l3fp-basics} and \pkg{l3fp-extended}.
 %    \begin{macrocode}
-\cs_new:Npn \@@_basics_pack_low:NNNNNw #1 #2#3#4#5 #6;
-  { + #1 - 1 ; {#2#3#4#5} {#6} ; }
-\cs_new:Npn \@@_basics_pack_high:NNNNNw #1 #2#3#4#5 #6;
+\cs_new:Npn \@@_basics_pack_low:NNNNNw #1 #2#3#4#5 #6\@@_sep:
+  { + #1 - 1 \@@_sep: {#2#3#4#5} {#6} \@@_sep: }
+\cs_new:Npn \@@_basics_pack_high:NNNNNw #1 #2#3#4#5 #6\@@_sep:
   {
     \if_meaning:w 2 #1
       \@@_basics_pack_high_carry:w
     \fi:
-    ; {#2#3#4#5} {#6}
+    \@@_sep: {#2#3#4#5} {#6}
   }
-\cs_new:Npn \@@_basics_pack_high_carry:w \fi: ; #1
-  { \fi: + 1 ; {1000} }
+\cs_new:Npn \@@_basics_pack_high_carry:w \fi: \@@_sep: #1
+  { \fi: + 1 \@@_sep: {1000} }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -897,16 +917,16 @@
 %   This is used in \pkg{l3fp-basics} for additions and
 %   divisions.  Their syntax is confusing, hence the name.
 %    \begin{macrocode}
-\cs_new:Npn \@@_basics_pack_weird_low:NNNNw #1 #2#3#4 #5;
+\cs_new:Npn \@@_basics_pack_weird_low:NNNNw #1 #2#3#4 #5\@@_sep:
   {
     \if_meaning:w 2 #1
       + 1
     \fi:
     \@@_int_eval_end:
-    #2#3#4; {#5} ;
+    #2#3#4\@@_sep: {#5} \@@_sep:
   }
 \cs_new:Npn \@@_basics_pack_weird_high:NNNNNNNNw
-  1 #1#2#3#4 #5#6#7#8 #9; { ; {#1#2#3#4} {#5#6#7#8} {#9} }
+  1 #1#2#3#4 #5#6#7#8 #9\@@_sep: { \@@_sep: {#1#2#3#4} {#5#6#7#8} {#9} }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -922,7 +942,7 @@
 %   and $1000\leq\meta{X_1}<9999$. The first argument determines
 %   by how much we shift the digits. \meta{f_1} is called as follows:
 %   \begin{syntax}
-%     \meta{f_1} \meta{rounding} \Arg{X'_1} \Arg{X'_2} \meta{extra-digits} |;|
+%     \meta{f_1} \meta{rounding} \Arg{X'_1} \Arg{X'_2} \meta{extra-digits} \cs{@@_sep:}
 %   \end{syntax}
 %   where $0\leq\meta{X'_i}<10^{8}-1$ are $8$ digit integers,
 %   forming the truncation of our number. In other words,
@@ -972,9 +992,9 @@
 %   If the \meta{shift} is zero, or too big, life is very easy.
 %    \begin{macrocode}
 \cs_new:Npn \@@_decimate_:Nnnnn #1 #2#3#4#5
-  { #1 0 {#2#3} {#4#5} ; }
+  { #1 0 {#2#3} {#4#5} \@@_sep: }
 \cs_new:Npn \@@_decimate_tiny:Nnnnn #1 #2#3#4#5
-  { #1 1 { 0000 0000 } { 0000 0000 } 0 #2#3#4#5 ; }
+  { #1 1 { 0000 0000 } { 0000 0000 } 0 #2#3#4#5 \@@_sep: }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -1015,8 +1035,8 @@
       {
         \exp_after:wN ##1
         \int_value:w
-          \exp_after:wN \@@_round_digit:Nw #2 ;
-        \@@_decimate_pack:nnnnnnnnnnw #3 ;
+          \exp_after:wN \@@_round_digit:Nw #2 \@@_sep:
+        \@@_decimate_pack:nnnnnnnnnnw #3 \@@_sep:
       }
   }
 \@@_tmp:w {i}   {\use_none:nnn      #50}{    0{#2}#3{#4}#5               }
@@ -1106,7 +1126,7 @@
 %   follow, simply anything ending in a semicolon.  This, in turn, means
 %   that the \meta{junk} may not contain semicolons.
 %    \begin{macrocode}
-\cs_new:Npn \@@_case_return:nw #1#2 \fi: #3 ; { \fi: #1 }
+\cs_new:Npn \@@_case_return:nw #1#2 \fi: #3 \@@_sep: { \fi: #1 }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -1115,7 +1135,7 @@
 %   point, and returns its first argument (an \meta{fp~var}) then expands
 %   once after it.
 %    \begin{macrocode}
-\cs_new:Npn \@@_case_return_o:Nw #1#2 \fi: #3 \s_@@ #4 ;
+\cs_new:Npn \@@_case_return_o:Nw #1#2 \fi: #3 \s_@@ #4 \@@_sep:
   { \fi: \exp_after:wN #1 }
 %    \end{macrocode}
 % \end{macro}
@@ -1133,7 +1153,7 @@
 %   Same as \cs{@@_case_return_o:Nw} but with two trailing floating
 %   points.
 %    \begin{macrocode}
-\cs_new:Npn \@@_case_return_o:Nww #1#2 \fi: #3 \s_@@ #4 ; #5 ;
+\cs_new:Npn \@@_case_return_o:Nww #1#2 \fi: #3 \s_@@ #4 \@@_sep: #5 \@@_sep:
   { \fi: \exp_after:wN #1 }
 %    \end{macrocode}
 % \end{macro}
@@ -1143,9 +1163,10 @@
 %   or second of two trailing floating point numbers, expanding once
 %   after the result.
 %    \begin{macrocode}
-\cs_new:Npn \@@_case_return_i_o:ww #1 \fi: #2 \s_@@ #3 ; \s_@@ #4 ;
-  { \fi: \@@_exp_after_o:w \s_@@ #3 ; }
-\cs_new:Npn \@@_case_return_ii_o:ww #1 \fi: #2 \s_@@ #3 ;
+\cs_new:Npn \@@_case_return_i_o:ww
+    #1 \fi: #2 \s_@@ #3 \@@_sep: \s_@@ #4 \@@_sep:
+  { \fi: \@@_exp_after_o:w \s_@@ #3 \@@_sep: }
+\cs_new:Npn \@@_case_return_ii_o:ww #1 \fi: #2 \s_@@ #3 \@@_sep:
   { \fi: \@@_exp_after_o:w }
 %    \end{macrocode}
 % \end{macro}
@@ -1157,7 +1178,7 @@
 %   floating point numbers, this holds if the rounding digit resulting
 %   from \cs{@@_decimate:nNnnnn} is~$0$.
 %    \begin{macrocode}
-\prg_new_conditional:Npnn \@@_int:w \s_@@ \@@_chk:w #1 #2 #3 #4;
+\prg_new_conditional:Npnn \@@_int:w \s_@@ \@@_chk:w #1 #2 #3 #4\@@_sep:
   { TF , T , F , p }
   {
     \if_case:w #1 \exp_stop_f:
@@ -1199,26 +1220,26 @@
 \cs_new:Npn \@@_small_int:wTF \s_@@ \@@_chk:w #1#2
   {
     \if_case:w #1 \exp_stop_f:
-           \@@_case_return:nw { \@@_small_int_true:wTF 0 ; }
+           \@@_case_return:nw { \@@_small_int_true:wTF 0 \@@_sep: }
     \or:   \exp_after:wN \@@_small_int_normal:NnwTF
     \or:
       \@@_case_return:nw
         {
           \exp_after:wN \@@_small_int_true:wTF \int_value:w
-            \if_meaning:w 2 #2 - \fi: 1 0000 0000 ;
+            \if_meaning:w 2 #2 - \fi: 1 0000 0000 \@@_sep:
         }
     \else: \@@_case_return:nw \use_ii:nn
     \fi:
     #2
   }
-\cs_new:Npn \@@_small_int_true:wTF #1; #2#3 { #2 {#1} }
-\cs_new:Npn \@@_small_int_normal:NnwTF #1#2#3;
+\cs_new:Npn \@@_small_int_true:wTF #1\@@_sep: #2#3 { #2 {#1} }
+\cs_new:Npn \@@_small_int_normal:NnwTF #1#2#3\@@_sep:
   {
     \@@_decimate:nNnnnn { \c_@@_prec_int - #2 }
       \@@_small_int_test:NnnwNw
       #3 #1
   }
-\cs_new:Npn \@@_small_int_test:NnnwNw #1#2#3#4; #5
+\cs_new:Npn \@@_small_int_test:NnnwNw #1#2#3#4\@@_sep: #5
   {
     \if_meaning:w 0 #1
       \exp_after:wN \@@_small_int_true:wTF
@@ -1228,7 +1249,7 @@
         \else:
           #3
         \fi:
-      \exp_after:wN ;
+      \exp_after:wN \@@_sep:
     \else:
       \exp_after:wN \use_ii:nn
     \fi:

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp-basics.dtx
 %
-% Copyright (C) 2011-2024 The LaTeX Project
+% Copyright (C) 2011-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -156,7 +156,7 @@
 %   discarded.
 %    \begin{macrocode}
 \cs_new:cpn { @@_+_o:ww }
-    \s_@@ #1 \@@_chk:w #2 #3 ; \s_@@ \@@_chk:w #4 #5
+    \s_@@ #1 \@@_chk:w #2 #3 \@@_sep: \s_@@ \@@_chk:w #4 #5
   {
     \if_case:w
       \if_meaning:w #2 #4
@@ -176,7 +176,7 @@
     \else: \exp_after:wN \@@_add_return_ii_o:Nww \int_value:w
     \fi:
     #1 #5
-    \s_@@ \@@_chk:w #2 #3 ;
+    \s_@@ \@@_chk:w #2 #3 \@@_sep:
     \s_@@ \@@_chk:w #4 #5
   }
 %    \end{macrocode}
@@ -186,7 +186,7 @@
 %   Ignore the first operand, and return the second, but using the sign
 %   |#1| rather than |#4|.  As usual, expand after the floating point.
 %    \begin{macrocode}
-\cs_new:Npn \@@_add_return_ii_o:Nww #1 #2 ; \s_@@ \@@_chk:w #3 #4
+\cs_new:Npn \@@_add_return_ii_o:Nww #1 #2 \@@_sep: \s_@@ \@@_chk:w #3 #4
   { \@@_exp_after_o:w \s_@@ \@@_chk:w #3 #1 }
 %    \end{macrocode}
 % \end{macro}
@@ -216,7 +216,7 @@
 %   identical.
 %    \begin{macrocode}
 \cs_new:Npn \@@_add_inf_o:Nww
-    #1 \s_@@ \@@_chk:w 2 #2 #3; \s_@@ \@@_chk:w 2 #4
+    #1 \s_@@ \@@_chk:w 2 #2 #3\@@_sep: \s_@@ \@@_chk:w 2 #4
   {
     \if_meaning:w #1 #2
       \@@_case_return_i_o:ww
@@ -227,7 +227,7 @@
             { \token_if_eq_meaning:NNTF #1 #4 + - }
         }
     \fi:
-    \s_@@ \@@_chk:w 2 #2 #3;
+    \s_@@ \@@_chk:w 2 #2 #3\@@_sep:
     \s_@@ \@@_chk:w 2 #4
   }
 %    \end{macrocode}
@@ -237,9 +237,9 @@
 %   \begin{quote}
 %     \cs{@@_add_normal_o:Nww} \meta{sign_2}
 %       \cs{s_@@} \cs{@@_chk:w} |1| \meta{sign_1}
-%       \meta{exp_1} \meta{body_1} |;|
+%       \meta{exp_1} \meta{body_1} \cs{@@_sep:}
 %       \cs{s_@@} \cs{@@_chk:w} |1| \meta{initial sign_2}
-%       \meta{exp_2} \meta{body_2} |;|
+%       \meta{exp_2} \meta{body_2} \cs{@@_sep:}
 %   \end{quote}
 %   We now have two normal numbers to add, and we have to check signs
 %   and exponents more carefully before performing the addition.
@@ -264,8 +264,8 @@
 % \begin{macro}[EXP]{\@@_add_npos_o:NnwNnw}
 %   \begin{quote}
 %     \cs{@@_add_npos_o:NnwNnw} \meta{sign_1} \meta{exp_1} \meta{body_1}
-%     |;| \cs{s_@@} \cs{@@_chk:w} |1| \meta{initial sign_2} \meta{exp_2}
-%     \meta{body_2} |;|
+%     \cs{@@_sep:} \cs{s_@@} \cs{@@_chk:w} |1| \meta{initial sign_2}
+%     \meta{exp_2} \meta{body_2} \cs{@@_sep:}
 %   \end{quote}
 %   Since we are doing an addition, the final sign is \meta{sign_1}.
 %   Start an \cs{@@_int_eval:w}, responsible for computing the exponent:
@@ -278,7 +278,7 @@
 %   the final sign with us in the midst of the calculation to round
 %   properly at the end.
 %    \begin{macrocode}
-\cs_new:Npn \@@_add_npos_o:NnwNnw #1#2#3 ; \s_@@ \@@_chk:w 1 #4 #5
+\cs_new:Npn \@@_add_npos_o:NnwNnw #1#2#3 \@@_sep: \s_@@ \@@_chk:w 1 #4 #5
   {
     \exp_after:wN \@@_sanitize:Nw
     \exp_after:wN #1
@@ -290,7 +290,7 @@
         #5
         \exp_after:wN \@@_add_big_ii_o:wNww \int_value:w
       \fi:
-      \@@_int_eval:w #5 - #2 ; #1 #3;
+      \@@_int_eval:w #5 - #2 \@@_sep: #1 #3\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -298,14 +298,14 @@
 % \begin{macro}[rEXP]{\@@_add_big_i_o:wNww}
 % \begin{macro}[rEXP]{\@@_add_big_ii_o:wNww}
 %   \begin{quote}
-%     \cs{@@_add_big_i_o:wNww} \meta{shift} |;| \meta{final sign}
-%       \meta{body_1} |;| \meta{body_2} |;|
+%     \cs{@@_add_big_i_o:wNww} \meta{shift} \cs{@@_sep:} \meta{final sign}
+%       \meta{body_1} \cs{@@_sep:} \meta{body_2} \cs{@@_sep:}
 %   \end{quote}
 %   Used in \pkg{l3fp-expo}.
 %   Shift the significand of the small number, then add with
 %   \cs{@@_add_significand_o:NnnwnnnnN}.
 %    \begin{macrocode}
-\cs_new:Npn \@@_add_big_i_o:wNww #1; #2 #3; #4;
+\cs_new:Npn \@@_add_big_i_o:wNww #1\@@_sep: #2 #3\@@_sep: #4\@@_sep:
   {
     \@@_decimate:nNnnnn {#1}
       \@@_add_significand_o:NnnwnnnnN
@@ -313,7 +313,7 @@
     #3
     #2
   }
-\cs_new:Npn \@@_add_big_ii_o:wNww #1; #2 #3; #4;
+\cs_new:Npn \@@_add_big_ii_o:wNww #1\@@_sep: #2 #3\@@_sep: #4\@@_sep:
   {
     \@@_decimate:nNnnnn {#1}
       \@@_add_significand_o:NnnwnnnnN
@@ -331,7 +331,7 @@
 %   \begin{quote}\raggedright
 %     \cs{@@_add_significand_o:NnnwnnnnN}
 %       \meta{rounding digit}
-%       \Arg{Y'_1} \Arg{Y'_2} \meta{extra-digits} |;|
+%       \Arg{Y'_1} \Arg{Y'_2} \meta{extra-digits} \cs{@@_sep:}
 %       \Arg{X_1} \Arg{X_2} \Arg{X_3} \Arg{X_4}
 %       \meta{final sign}
 %   \end{quote}
@@ -344,12 +344,12 @@
 %   give an exact power of $10$, for which it is easy to correct
 %   the result at the end.
 %    \begin{macrocode}
-\cs_new:Npn \@@_add_significand_o:NnnwnnnnN #1 #2#3 #4; #5#6#7#8
+\cs_new:Npn \@@_add_significand_o:NnnwnnnnN #1 #2#3 #4\@@_sep: #5#6#7#8
   {
     \exp_after:wN \@@_add_significand_test_o:N
     \int_value:w \@@_int_eval:w 1#5#6 + #2
       \exp_after:wN \@@_add_significand_pack:NNNNNNN
-      \int_value:w \@@_int_eval:w 1#7#8 + #3 ; #1
+      \int_value:w \@@_int_eval:w 1#7#8 + #3 \@@_sep: #1
   }
 \cs_new:Npn \@@_add_significand_pack:NNNNNNN #1 #2#3#4#5#6#7
   {
@@ -356,7 +356,7 @@
     \if_meaning:w 2 #1
       + 1
     \fi:
-    ; #2 #3 #4 #5 #6 #7 ;
+    \@@_sep: #2 #3 #4 #5 #6 #7 \@@_sep:
   }
 \cs_new:Npn \@@_add_significand_test_o:N #1
   {
@@ -373,7 +373,7 @@
 % \begin{macro}[rEXP]{\@@_add_significand_no_carry_o:wwwNN}
 %   \begin{quote}
 %     \cs{@@_add_significand_no_carry_o:wwwNN}
-%       \meta{8d} |;| \meta{6d} |;| \meta{2d} |;|
+%       \meta{8d} \cs{@@_sep:} \meta{6d} \cs{@@_sep:} \meta{2d} \cs{@@_sep:}
 %       \meta{rounding digit} \meta{sign}
 %   \end{quote}
 %   If there's no carry, grab all the digits again and round.  The
@@ -381,7 +381,7 @@
 %   case where rounding brings a carry.
 %    \begin{macrocode}
 \cs_new:Npn \@@_add_significand_no_carry_o:wwwNN
-    #1; #2; #3#4 ; #5#6
+    #1\@@_sep: #2\@@_sep: #3#4 \@@_sep: #5#6
   {
     \exp_after:wN \@@_basics_pack_high:NNNNNw
     \int_value:w \@@_int_eval:w 1 #1
@@ -388,7 +388,7 @@
       \exp_after:wN \@@_basics_pack_low:NNNNNw
       \int_value:w \@@_int_eval:w 1 #2 #3#4
         + \@@_round:NNN #6 #4 #5
-        \exp_after:wN ;
+        \exp_after:wN \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -396,7 +396,7 @@
 % \begin{macro}[rEXP]{\@@_add_significand_carry_o:wwwNN}
 %   \begin{quote}
 %     \cs{@@_add_significand_carry_o:wwwNN}
-%       \meta{8d} |;| \meta{6d} |;| \meta{2d} |;|
+%       \meta{8d} \cs{@@_sep:} \meta{6d} \cs{@@_sep:} \meta{2d} \cs{@@_sep:}
 %       \meta{rounding digit} \meta{sign}
 %   \end{quote}
 %   The case where there is a carry is very similar.  Rounding can even
@@ -403,7 +403,7 @@
 %   raise the first digit from $1$ to $2$, but we don't care.
 %    \begin{macrocode}
 \cs_new:Npn \@@_add_significand_carry_o:wwwNN
-    #1; #2; #3#4; #5#6
+    #1\@@_sep: #2\@@_sep: #3#4\@@_sep: #5#6
   {
     + 1
     \exp_after:wN \@@_basics_pack_weird_high:NNNNNNNNw
@@ -413,8 +413,8 @@
         \exp_after:wN \@@_round:NNN
         \exp_after:wN #6
         \exp_after:wN #3
-        \int_value:w \@@_round_digit:Nw #4 #5 ;
-        \exp_after:wN ;
+        \int_value:w \@@_round_digit:Nw #4 #5 \@@_sep:
+        \exp_after:wN \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -425,9 +425,9 @@
 % \begin{macro}[EXP]{\@@_sub_eq_o:Nnwnw, \@@_sub_npos_ii_o:Nnwnw}
 %   \begin{quote}
 %     \cs{@@_sub_npos_o:NnwNnw}
-%       \meta{sign_1} \meta{exp_1} \meta{body_1} |;|
+%       \meta{sign_1} \meta{exp_1} \meta{body_1} \cs{@@_sep:}
 %       \cs{s_@@} \cs{@@_chk:w} |1|
-%       \meta{initial sign_2} \meta{exp_2} \meta{body_2} |;|
+%       \meta{initial sign_2} \meta{exp_2} \meta{body_2} \cs{@@_sep:}
 %   \end{quote}
 %   Rounding properly in some modes requires to know what the sign of
 %   the result will be.  Thus, we start by comparing the exponents and
@@ -435,9 +435,11 @@
 %   number is larger, swap the numbers and call
 %   \cs{@@_sub_npos_i_o:Nnwnw} with the opposite of \meta{sign_1}.
 %    \begin{macrocode}
-\cs_new:Npn \@@_sub_npos_o:NnwNnw #1#2#3; \s_@@ \@@_chk:w 1 #4#5#6;
+\cs_new:Npn \@@_sub_npos_o:NnwNnw
+    #1#2#3\@@_sep: \s_@@ \@@_chk:w 1 #4#5#6\@@_sep:
   {
-    \if_case:w \@@_compare_npos:nwnw {#2} #3; {#5} #6; \exp_stop_f:
+    \if_case:w
+        \@@_compare_npos:nwnw {#2} #3\@@_sep: {#5} #6\@@_sep: \exp_stop_f:
       \exp_after:wN \@@_sub_eq_o:Nnwnw
     \or:
       \exp_after:wN \@@_sub_npos_i_o:Nnwnw
@@ -444,14 +446,15 @@
     \else:
       \exp_after:wN \@@_sub_npos_ii_o:Nnwnw
     \fi:
-    #1 {#2} #3; {#5} #6;
+    #1 {#2} #3\@@_sep: {#5} #6\@@_sep:
   }
-\cs_new:Npn \@@_sub_eq_o:Nnwnw #1#2; #3; { \exp_after:wN \c_zero_fp }
-\cs_new:Npn \@@_sub_npos_ii_o:Nnwnw #1 #2; #3;
+\cs_new:Npn \@@_sub_eq_o:Nnwnw #1#2\@@_sep: #3\@@_sep:
+  { \exp_after:wN \c_zero_fp }
+\cs_new:Npn \@@_sub_npos_ii_o:Nnwnw #1 #2\@@_sep: #3\@@_sep:
   {
     \exp_after:wN \@@_sub_npos_i_o:Nnwnw
       \int_value:w \@@_neg_sign:N #1
-      #3; #2;
+      #3\@@_sep: #2\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -460,8 +463,8 @@
 % \begin{macro}[EXP]{\@@_sub_npos_i_o:Nnwnw}
 %   After the computation is done, \cs{@@_sanitize:Nw} checks for
 %   overflow/underflow.  It expects the \meta{final sign} and the
-%   \meta{exponent} (delimited by |;|).  Start an integer expression for
-%   the exponent, which starts with the exponent of the largest number,
+%   \meta{exponent} (delimited by \cs{@@_sep:}).  Start an integer expression
+%   for the exponent, which starts with the exponent of the largest number,
 %   and may be decreased if the two numbers are very close.  If the two
 %   numbers have the same exponent, call the \texttt{near} auxiliary.
 %   Otherwise, decimate $y$, then call the \texttt{far} auxiliary to
@@ -468,7 +471,7 @@
 %   evaluate the difference between the two significands.  Note that we
 %   decimate by $1$ less than one could expect.
 %    \begin{macrocode}
-\cs_new:Npn \@@_sub_npos_i_o:Nnwnw #1 #2#3; #4#5;
+\cs_new:Npn \@@_sub_npos_i_o:Nnwnw #1 #2#3\@@_sep: #4#5\@@_sep:
   {
     \exp_after:wN \@@_sanitize:Nw
     \exp_after:wN #1
@@ -509,16 +512,16 @@
     \exp_after:wN \@@_sub_back_near_after:wNNNNw
     \int_value:w \@@_int_eval:w 10#5#6 - #1#2 - 11
       \exp_after:wN \@@_sub_back_near_pack:NNNNNNw
-      \int_value:w \@@_int_eval:w 11#7#8 - #3#4 \exp_after:wN ;
+      \int_value:w \@@_int_eval:w 11#7#8 - #3#4 \exp_after:wN \@@_sep:
   }
-\cs_new:Npn \@@_sub_back_near_pack:NNNNNNw #1#2#3#4#5#6#7 ;
-  { + #1#2 ; {#3#4#5#6} {#7} ; }
-\cs_new:Npn \@@_sub_back_near_after:wNNNNw 10 #1#2#3#4 #5 ;
+\cs_new:Npn \@@_sub_back_near_pack:NNNNNNw #1#2#3#4#5#6#7 \@@_sep:
+  { + #1#2 \@@_sep: {#3#4#5#6} {#7} \@@_sep: }
+\cs_new:Npn \@@_sub_back_near_after:wNNNNw 10 #1#2#3#4 #5 \@@_sep:
   {
     \if_meaning:w 0 #1
       \exp_after:wN \@@_sub_back_shift:wnnnn
     \fi:
-    ; {#1#2#3#4} {#5}
+    \@@_sep: {#1#2#3#4} {#5}
   }
 %    \end{macrocode}
 % \end{macro}
@@ -532,8 +535,8 @@
 %     \@@_sub_back_shift_iv:nnnnw
 %   }
 %   \begin{quote}
-%     \cs{@@_sub_back_shift:wnnnn} |;|
-%       \Arg{Z_1} \Arg{Z_2} \Arg{Z_3} \Arg{Z_4} |;|
+%     \cs{@@_sub_back_shift:wnnnn} \cs{@@_sep:}
+%       \Arg{Z_1} \Arg{Z_2} \Arg{Z_3} \Arg{Z_4} \cs{@@_sep:}
 %   \end{quote}
 %   This function is called with $\meta{Z_1}\leq 999$.  Act with
 %   \tn{number} to trim leading zeros from \meta{Z_1} \meta{Z_2} (we
@@ -547,30 +550,31 @@
 %   |#2#3| is ignored), get four blocks of $4$~digits and finally clean
 %   up.  Trailing zeros are added so that digits can be grabbed safely.
 %    \begin{macrocode}
-\cs_new:Npn \@@_sub_back_shift:wnnnn ; #1#2
+\cs_new:Npn \@@_sub_back_shift:wnnnn \@@_sep: #1#2
   {
     \exp_after:wN \@@_sub_back_shift_ii:ww
-    \int_value:w #1 #2 0 ;
+    \int_value:w #1 #2 0 \@@_sep:
   }
-\cs_new:Npn \@@_sub_back_shift_ii:ww #1 0 ; #2#3 ;
+\cs_new:Npn \@@_sub_back_shift_ii:ww #1 0 \@@_sep: #2#3 \@@_sep:
   {
     \if_meaning:w @ #1 @
       - 7
       - \exp_after:wN \use_i:nnn
         \exp_after:wN \@@_sub_back_shift_iii:NNNNNNNNw
-        \int_value:w #2#3 0 ~ 123456789;
+        \int_value:w #2#3 0 ~ 123456789\@@_sep:
     \else:
-      - \@@_sub_back_shift_iii:NNNNNNNNw #1 123456789;
+      - \@@_sub_back_shift_iii:NNNNNNNNw #1 123456789\@@_sep:
     \fi:
     \exp_after:wN \@@_pack_twice_four:wNNNNNNNN
     \exp_after:wN \@@_pack_twice_four:wNNNNNNNN
     \exp_after:wN \@@_sub_back_shift_iv:nnnnw
-    \exp_after:wN ;
+    \exp_after:wN \@@_sep:
     \int_value:w
-    #1 ~ #2#3 0 ~ 0000 0000 0000 000 ;
+    #1 ~ #2#3 0 ~ 0000 0000 0000 000 \@@_sep:
   }
-\cs_new:Npn \@@_sub_back_shift_iii:NNNNNNNNw #1#2#3#4#5#6#7#8#9; {#8}
-\cs_new:Npn \@@_sub_back_shift_iv:nnnnw #1 ; #2 ; { ; #1 ; }
+\cs_new:Npn \@@_sub_back_shift_iii:NNNNNNNNw #1#2#3#4#5#6#7#8#9\@@_sep: {#8}
+\cs_new:Npn \@@_sub_back_shift_iv:nnnnw #1 \@@_sep: #2 \@@_sep:
+  { \@@_sep: #1 \@@_sep: }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -578,7 +582,7 @@
 % \begin{macro}[rEXP]{\@@_sub_back_far_o:NnnwnnnnN}
 %   \begin{quote}\raggedright
 %     \cs{@@_sub_back_far_o:NnnwnnnnN}
-%       \meta{rounding} \Arg{Y'_1} \Arg{Y'_2} \meta{extra-digits} |;|
+%       \meta{rounding} \Arg{Y'_1} \Arg{Y'_2} \meta{extra-digits} \cs{@@_sep:}
 %       \Arg{X_1} \Arg{X_2} \Arg{X_3} \Arg{X_4}
 %       \meta{final sign}
 %   \end{quote}
@@ -591,9 +595,9 @@
 %   and semi-colon delimiters to allow the \texttt{not_far} auxiliary to
 %   grab each piece individually, the \texttt{very_far} auxiliary to use
 %   \cs{@@_pack_eight:wNNNNNNNN}, and the \texttt{quite_far} to ignore
-%   the significands easily (using the |;| delimiter).
+%   the significands easily (using the \cs{@@_sep:} delimiter).
 %    \begin{macrocode}
-\cs_new:Npn \@@_sub_back_far_o:NnnwnnnnN #1 #2#3 #4; #5#6#7#8
+\cs_new:Npn \@@_sub_back_far_o:NnnwnnnnN #1 #2#3 #4\@@_sep: #5#6#7#8
   {
     \if_case:w
       \if_int_compare:w 1 #2 = #5#6 \use_i:nnnn #7 \exp_stop_f:
@@ -610,7 +614,7 @@
     \or:   \exp_after:wN \@@_sub_back_very_far_o:wwwwNN
     \else: \exp_after:wN \@@_sub_back_not_far_o:wwwwNN
     \fi:
-    #2 ~ #3 ; #5 #6 ~ #7 #8 ; #1
+    #2 ~ #3 \@@_sep: #5 #6 ~ #7 #8 \@@_sep: #1
   }
 %    \end{macrocode}
 % \end{macro}
@@ -626,7 +630,7 @@
 %   (remember that the \meta{rounding} digit is only equal to $5$ if
 %   there was no further non-zero digit).
 %    \begin{macrocode}
-\cs_new:Npn \@@_sub_back_quite_far_o:wwNN #1; #2; #3#4
+\cs_new:Npn \@@_sub_back_quite_far_o:wwNN #1\@@_sep: #2\@@_sep: #3#4
   {
     \exp_after:wN \@@_sub_back_quite_far_ii:NN
     \exp_after:wN #3
@@ -639,8 +643,8 @@
     \else:
       \exp_after:wN \use_ii:nn
     \fi:
-      { ; {1000} {0000} {0000} {0000} ; }
-      { - 1 ; {9999} {9999} {9999} {9999} ; }
+      { \@@_sep: {1000} {0000} {0000} {0000} \@@_sep: }
+      { - 1 \@@_sep: {9999} {9999} {9999} {9999} \@@_sep: }
   }
 %    \end{macrocode}
 % \end{macro}
@@ -661,7 +665,7 @@
 %   about its parity, which is identical to that of the last digit
 %   of~|#2|.
 %    \begin{macrocode}
-\cs_new:Npn \@@_sub_back_not_far_o:wwwwNN #1 ~ #2; #3 ~ #4; #5#6
+\cs_new:Npn \@@_sub_back_not_far_o:wwwwNN #1 ~ #2\@@_sep: #3 ~ #4\@@_sep: #5#6
   {
     - 1
     \exp_after:wN \@@_sub_back_near_after:wNNNNw
@@ -671,7 +675,7 @@
         - \exp_after:wN \@@_round_neg:NNN
           \exp_after:wN #6
           \use_none:nnnnnnn #2 #5
-        \exp_after:wN ;
+        \exp_after:wN \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -693,9 +697,10 @@
     \@@_pack_eight:wNNNNNNNN
     \@@_sub_back_very_far_ii_o:nnNwwNN
     { 0 #1#2#3 #4#5#6#7 }
-    ;
+    \@@_sep:
   }
-\cs_new:Npn \@@_sub_back_very_far_ii_o:nnNwwNN #1#2 ; #3 ; #4 ~ #5; #6#7
+\cs_new:Npn \@@_sub_back_very_far_ii_o:nnNwwNN
+    #1#2 \@@_sep: #3 \@@_sep: #4 ~ #5\@@_sep: #6#7
   {
     \exp_after:wN \@@_basics_pack_high:NNNNNw
     \int_value:w \@@_int_eval:w 1#4 - #1 - 1
@@ -706,8 +711,8 @@
           \int_value:w
             \if_int_odd:w \@@_int_eval:w #5 - #2 \@@_int_eval_end:
               1 \else: 2 \fi:
-          \int_value:w \@@_round_digit:Nw #3 #6 ;
-      \exp_after:wN ;
+          \int_value:w \@@_round_digit:Nw #3 #6 \@@_sep:
+      \exp_after:wN \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -757,7 +762,7 @@
 %   argument |#4|, because it differs in the case of divisions.
 %    \begin{macrocode}
 \cs_new:Npn \@@_mul_cases_o:NnNnww
-    #1#2#3#4 \s_@@ \@@_chk:w #5#6#7; \s_@@ \@@_chk:w #8#9
+    #1#2#3#4 \s_@@ \@@_chk:w #5#6#7\@@_sep: \s_@@ \@@_chk:w #8#9
   {
     \if_case:w \@@_int_eval:w
                  \if_int_compare:w #5 #8 = 11 ~
@@ -791,7 +796,7 @@
     \or: \@@_case_return_o:Nww \c_minus_inf_fp
     #4
     \fi:
-    \s_@@ \@@_chk:w #5 #6 #7;
+    \s_@@ \@@_chk:w #5 #6 #7\@@_sep:
     \s_@@ \@@_chk:w #8 #9
   }
 %    \end{macrocode}
@@ -805,8 +810,8 @@
 % \begin{macro}[EXP]{\@@_mul_npos_o:Nww}
 %   \begin{quote}
 %     \cs{@@_mul_npos_o:Nww} \meta{final sign}
-%     \cs{s_@@} \cs{@@_chk:w} |1| \meta{sign_1} \Arg{exp_1}  \meta{body_1} |;|
-%     \cs{s_@@} \cs{@@_chk:w} |1| \meta{sign_2} \Arg{exp_2}  \meta{body_2} |;|
+%     \cs{s_@@} \cs{@@_chk:w} |1| \meta{sign_1} \Arg{exp_1}  \meta{body_1} \cs{@@_sep:}
+%     \cs{s_@@} \cs{@@_chk:w} |1| \meta{sign_2} \Arg{exp_2}  \meta{body_2} \cs{@@_sep:}
 %   \end{quote}
 %   After the computation, \cs{@@_sanitize:Nw} checks for overflow or
 %   underflow.  As we did for addition, \cs{@@_int_eval:w} computes the
@@ -818,7 +823,8 @@
 %   This is also used in \pkg{l3fp-convert}.
 %    \begin{macrocode}
 \cs_new:Npn \@@_mul_npos_o:Nww
-    #1 \s_@@ \@@_chk:w #2 #3 #4 #5 ; \s_@@ \@@_chk:w #6 #7 #8 #9 ;
+    #1 \s_@@ \@@_chk:w #2 #3 #4 #5 \@@_sep:
+       \s_@@ \@@_chk:w #6 #7 #8 #9 \@@_sep:
   {
     \exp_after:wN \@@_sanitize:Nw
     \exp_after:wN #1
@@ -871,13 +877,13 @@
               \exp_after:wN \@@_mul_significand_drop:NNNNNw
               \int_value:w \@@_int_eval:w 99990000 + #3*#9 + #4*#8 +
                 \exp_after:wN \@@_mul_significand_drop:NNNNNw
-                \int_value:w \@@_int_eval:w 100000000 + #4*#9 ;
-    ; \exp_after:wN ;
+                \int_value:w \@@_int_eval:w 100000000 + #4*#9 \@@_sep:
+    \@@_sep: \exp_after:wN \@@_sep:
   }
-\cs_new:Npn \@@_mul_significand_drop:NNNNNw #1#2#3#4#5 #6;
-  { #1#2#3#4#5 ; + #6 }
-\cs_new:Npn \@@_mul_significand_keep:NNNNNw #1#2#3#4#5 #6;
-  { #1#2#3#4#5 ; #6 ; }
+\cs_new:Npn \@@_mul_significand_drop:NNNNNw #1#2#3#4#5 #6\@@_sep:
+  { #1#2#3#4#5 \@@_sep: + #6 }
+\cs_new:Npn \@@_mul_significand_keep:NNNNNw #1#2#3#4#5 #6\@@_sep:
+  { #1#2#3#4#5 \@@_sep: #6 \@@_sep: }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -885,10 +891,10 @@
 % \begin{macro}[rEXP]{\@@_mul_significand_test_f:NNN}
 %   \begin{quote}
 %     \cs{@@_mul_significand_test_f:NNN} \meta{sign} |1|
-%       \meta{digits 1--8} |;| \meta{digits 9--12} |;| \meta{digits 13--16} |;|
+%       \meta{digits 1--8} \cs{@@_sep:} \meta{digits 9--12} \cs{@@_sep:} \meta{digits 13--16} \cs{@@_sep:}
 %       |+| \meta{digits 17--20} |+| \meta{digits 21--24}
-%       |+| \meta{digits 25--28} |+| \meta{digits 29--32} |;|
-%       \cs{exp_after:wN} |;|
+%       |+| \meta{digits 25--28} |+| \meta{digits 29--32} \cs{@@_sep:}
+%       \cs{exp_after:wN} \cs{@@_sep:}
 %   \end{quote}
 %   If the \meta{digit 1} is non-zero, then for rounding we only care
 %   about the digits $16$ and $17$, and whether further digits are zero
@@ -916,7 +922,8 @@
 %   integer expression), and replaces it by a \meta{rounding digit},
 %   suitable for \cs{@@_round:NNN}.
 %    \begin{macrocode}
-\cs_new:Npn \@@_mul_significand_large_f:NwwNNNN #1 #2; #3; #4#5#6#7; +
+\cs_new:Npn \@@_mul_significand_large_f:NwwNNNN
+    #1 #2\@@_sep: #3\@@_sep: #4#5#6#7\@@_sep: +
   {
     \exp_after:wN \@@_basics_pack_high:NNNNNw
     \int_value:w \@@_int_eval:w 1#2
@@ -938,7 +945,8 @@
 %   \texttt{small_pack} auxiliary, by the next digit, to form a $9$
 %   digit number.
 %    \begin{macrocode}
-\cs_new:Npn \@@_mul_significand_small_f:NNwwwN #1 #2#3; #4#5; #6; + #7
+\cs_new:Npn \@@_mul_significand_small_f:NNwwwN
+    #1 #2#3\@@_sep: #4#5\@@_sep: #6\@@_sep: + #7
   {
     - 1
     \exp_after:wN \@@_basics_pack_high:NNNNNw
@@ -994,9 +1002,9 @@
 %   \begin{quote}
 %     \cs{@@_div_npos_o:Nww} \meta{final sign}
 %     \cs{s_@@} \cs{@@_chk:w} |1| \meta{sign_A} \Arg{exp A}
-%       \Arg{A_1} \Arg{A_2} \Arg{A_3} \Arg{A_4} |;|
+%       \Arg{A_1} \Arg{A_2} \Arg{A_3} \Arg{A_4} \cs{@@_sep:}
 %     \cs{s_@@} \cs{@@_chk:w} |1| \meta{sign_Z} \Arg{exp Z}
-%       \Arg{Z_1} \Arg{Z_2} \Arg{Z_3} \Arg{Z_4} |;|
+%       \Arg{Z_1} \Arg{Z_2} \Arg{Z_3} \Arg{Z_4} \cs{@@_sep:}
 %   \end{quote}
 %   We want to compute $A/Z$.  As for multiplication,
 %   \cs{@@_sanitize:Nw} checks for overflow or underflow; we provide it
@@ -1008,7 +1016,8 @@
 %   semi-colon, and the \meta{final sign}, used for rounding at the end.
 %    \begin{macrocode}
 \cs_new:Npn \@@_div_npos_o:Nww
-    #1 \s_@@ \@@_chk:w 1 #2 #3 #4 ; \s_@@ \@@_chk:w 1 #5 #6 #7#8#9;
+    #1 \s_@@ \@@_chk:w 1 #2 #3 #4 \@@_sep:
+       \s_@@ \@@_chk:w 1 #5 #6 #7#8#9\@@_sep:
   {
     \exp_after:wN \@@_sanitize:Nw
     \exp_after:wN #1
@@ -1015,9 +1024,9 @@
     \int_value:w \@@_int_eval:w
       #3 - #6
       \exp_after:wN \@@_div_significand_i_o:wnnw
-        \int_value:w \@@_int_eval:w #7 \use_i:nnnn #8 + 1 ;
+        \int_value:w \@@_int_eval:w #7 \use_i:nnnn #8 + 1 \@@_sep:
         #4
-        {#7}{#8}#9 ;
+        {#7}{#8}#9 \@@_sep:
         #1
   }
 %    \end{macrocode}
@@ -1196,9 +1205,9 @@
 %
 % \begin{macro}[rEXP]{\@@_div_significand_i_o:wnnw}
 %   \begin{quote}
-%     \cs{@@_div_significand_i_o:wnnw} \meta{y} |;|
+%     \cs{@@_div_significand_i_o:wnnw} \meta{y} \cs{@@_sep:}
 %       \Arg{A_1} \Arg{A_2} \Arg{A_3} \Arg{A_4}
-%       \Arg{Z_1} \Arg{Z_2} \Arg{Z_3} \Arg{Z_4} |;| \meta{sign}
+%       \Arg{Z_1} \Arg{Z_2} \Arg{Z_3} \Arg{Z_4} \cs{@@_sep:} \meta{sign}
 %   \end{quote}
 %   Compute $10^{6} + Q_{A}$ (a $7$~digit number thanks to the shift),
 %   unbrace \meta{A_1} and \meta{A_2}, and prepare the
@@ -1208,13 +1217,13 @@
 %   hence the \cs{int_value:w}.  Here, |#4| is six brace groups, which
 %   give the six first |n|-type arguments of the \texttt{calc} function.
 %    \begin{macrocode}
-\cs_new:Npn \@@_div_significand_i_o:wnnw #1 ; #2#3 #4 ;
+\cs_new:Npn \@@_div_significand_i_o:wnnw #1 \@@_sep: #2#3 #4 \@@_sep:
   {
     \exp_after:wN \@@_div_significand_test_o:w
     \int_value:w \@@_int_eval:w
       \exp_after:wN \@@_div_significand_calc:wwnnnnnnn
-      \int_value:w \@@_int_eval:w 999999 + #2 #3 0 / #1 ;
-        #2 #3 ;
+      \int_value:w \@@_int_eval:w 999999 + #2 #3 0 / #1 \@@_sep:
+        #2 #3 \@@_sep:
         #4
         { \exp_after:wN \@@_div_significand_ii:wwn \int_value:w #1 }
         { \exp_after:wN \@@_div_significand_ii:wwn \int_value:w #1 }
@@ -1231,15 +1240,15 @@
 %     \@@_div_significand_calc_ii:wwnnnnnnn,
 %   }
 %   \begin{quote}
-%     \cs{@@_div_significand_calc:wwnnnnnnn} \meta{$10^{6}+{}$Q_{A}} |;|
-%       \meta{A_1} \meta{A_2} |;| \Arg{A_3} \Arg{A_4}
+%     \cs{@@_div_significand_calc:wwnnnnnnn} \meta{$10^{6}+{}$Q_{A}} \cs{@@_sep:}
+%       \meta{A_1} \meta{A_2} \cs{@@_sep:} \Arg{A_3} \Arg{A_4}
 %       \Arg{Z_1} \Arg{Z_2} \Arg{Z_3} \Arg{Z_4}
 %       \Arg{continuation}
 %   \end{quote}
 %   expands to
 %   \begin{quote}
-%     \meta{$10^{6}+{}$Q_{A}} \meta{continuation} |;|
-%       \meta{B_1} \meta{B_2} |;| \Arg{B_3} \Arg{B_4}
+%     \meta{$10^{6}+{}$Q_{A}} \meta{continuation} \cs{@@_sep:}
+%       \meta{B_1} \meta{B_2} \cs{@@_sep:} \Arg{B_3} \Arg{B_4}
 %       \Arg{Z_1} \Arg{Z_2} \Arg{Z_3} \Arg{Z_4}
 %   \end{quote}
 %   where $B = 10^{4} A - Q_{A} \cdot Z$.  This function is also used to
@@ -1292,10 +1301,10 @@
     \fi:
   }
 \cs_new:Npn \@@_div_significand_calc_i:wwnnnnnnn
-  #1; #2;#3#4 #5#6#7#8 #9
+  #1\@@_sep: #2\@@_sep:#3#4 #5#6#7#8 #9
   {
     1 1 #1
-    #9 \exp_after:wN ;
+    #9 \exp_after:wN \@@_sep:
     \int_value:w \@@_int_eval:w \c_@@_Bigg_leading_shift_int
       + #2 - #1 * #5 - #5#60
       \exp_after:wN \@@_pack_Bigg:NNNNNNw
@@ -1306,14 +1315,14 @@
           + #4 - #1 * #7 - #80
           \exp_after:wN \@@_pack_Bigg:NNNNNNw
           \int_value:w \@@_int_eval:w \c_@@_Bigg_trailing_shift_int
-            - #1 * #8 ;
+            - #1 * #8 \@@_sep:
     {#5}{#6}{#7}{#8}
   }
 \cs_new:Npn \@@_div_significand_calc_ii:wwnnnnnnn
-  #1; #2;#3#4 #5#6#7#8 #9
+  #1\@@_sep: #2\@@_sep:#3#4 #5#6#7#8 #9
   {
     1 0 #1
-    #9 \exp_after:wN ;
+    #9 \exp_after:wN \@@_sep:
     \int_value:w \@@_int_eval:w \c_@@_Bigg_leading_shift_int
       + #2 - #1 * #5
       \exp_after:wN \@@_pack_Bigg:NNNNNNw
@@ -1324,7 +1333,7 @@
           + #4 - #1 * #7
           \exp_after:wN \@@_pack_Bigg:NNNNNNw
           \int_value:w \@@_int_eval:w \c_@@_Bigg_trailing_shift_int
-            - #1 * #8 ;
+            - #1 * #8 \@@_sep:
     {#5}{#6}{#7}{#8}
   }
 %    \end{macrocode}
@@ -1333,8 +1342,8 @@
 %
 % \begin{macro}[EXP]{\@@_div_significand_ii:wwn}
 %   \begin{quote}
-%     \cs{@@_div_significand_ii:wwn} \meta{y} |;|
-%       \meta{B_1} |;| \Arg{B_2} \Arg{B_3} \Arg{B_4}
+%     \cs{@@_div_significand_ii:wwn} \meta{y} \cs{@@_sep:}
+%       \meta{B_1} \cs{@@_sep:} \Arg{B_2} \Arg{B_3} \Arg{B_4}
 %       \Arg{Z_1} \Arg{Z_2} \Arg{Z_3} \Arg{Z_4}
 %       \meta{continuations} \meta{sign}
 %   \end{quote}
@@ -1347,12 +1356,13 @@
 %   auxiliary is also used to compute $Q_{C}$ and $Q_{D}$ with the
 %   inputs $C$ and $D$ instead of $B$.
 %    \begin{macrocode}
-\cs_new:Npn \@@_div_significand_ii:wwn #1; #2;#3
+\cs_new:Npn \@@_div_significand_ii:wwn #1\@@_sep: #2\@@_sep:#3
   {
     \exp_after:wN \@@_div_significand_pack:NNN
     \int_value:w \@@_int_eval:w
       \exp_after:wN \@@_div_significand_calc:wwnnnnnnn
-      \int_value:w \@@_int_eval:w 999999 + #2 #3 0 / #1 ; #2 #3 ;
+      \int_value:w \@@_int_eval:w
+        999999 + #2 #3 0 / #1 \@@_sep: #2 #3 \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1359,8 +1369,8 @@
 %
 % \begin{macro}[rEXP]{\@@_div_significand_iii:wwnnnnn}
 %   \begin{quote}
-%     \cs{@@_div_significand_iii:wwnnnnn} \meta{y} |;|
-%       \meta{E_1} |;| \Arg{E_2} \Arg{E_3} \Arg{E_4}
+%     \cs{@@_div_significand_iii:wwnnnnn} \meta{y} \cs{@@_sep:}
+%       \meta{E_1} \cs{@@_sep:} \Arg{E_2} \Arg{E_3} \Arg{E_4}
 %       \Arg{Z_1} \Arg{Z_2} \Arg{Z_3} \Arg{Z_4} \meta{sign}
 %   \end{quote}
 %   We compute $P \simeq 2E/Z$ by rounding $2 E_{1} E_{2}/Z_{1}Z_{2}$.
@@ -1368,12 +1378,12 @@
 %   add (roughly) $5\cdot P$, which amounts to adding $P/2 \simeq E/Z$
 %   to $Q_{D}$, the appropriate correction from a hypothetical $Q_{E}$.
 %    \begin{macrocode}
-\cs_new:Npn \@@_div_significand_iii:wwnnnnn #1; #2;#3#4#5 #6#7
+\cs_new:Npn \@@_div_significand_iii:wwnnnnn #1\@@_sep: #2\@@_sep:#3#4#5 #6#7
   {
     0
     \exp_after:wN \@@_div_significand_iv:wwnnnnnnn
-    \int_value:w \@@_int_eval:w ( 2 * #2 #3) / #6 #7 ; % <- P
-      #2 ; {#3} {#4} {#5}
+    \int_value:w \@@_int_eval:w ( 2 * #2 #3) / #6 #7 \@@_sep: % <- P
+      #2 \@@_sep: {#3} {#4} {#5}
       {#6} {#7}
   }
 %    \end{macrocode}
@@ -1386,8 +1396,8 @@
 %     \@@_div_significand_vi:Nw
 %   }
 %   \begin{quote}
-%     \cs{@@_div_significand_iv:wwnnnnnnn} \meta{P} |;|
-%       \meta{E_1} |;| \Arg{E_2} \Arg{E_3} \Arg{E_4}
+%     \cs{@@_div_significand_iv:wwnnnnnnn} \meta{P} \cs{@@_sep:}
+%       \meta{E_1} \cs{@@_sep:} \Arg{E_2} \Arg{E_3} \Arg{E_4}
 %       \Arg{Z_1} \Arg{Z_2} \Arg{Z_3} \Arg{Z_4} \meta{sign}
 %   \end{quote}
 %   This adds to the current expression ($10^{7} + 10\cdot Q_{D}$) a
@@ -1427,7 +1437,8 @@
 %   argument of \cs{@@_div_significand_vi:Nw}, a sum of several terms, is
 %   also zero.  Otherwise, there was an exact agreement: $T = 0$.
 %    \begin{macrocode}
-\cs_new:Npn \@@_div_significand_iv:wwnnnnnnn #1; #2;#3#4#5 #6#7#8#9
+\cs_new:Npn \@@_div_significand_iv:wwnnnnnnn
+    #1\@@_sep: #2\@@_sep:#3#4#5 #6#7#8#9
   {
     + 5 * #1
     \exp_after:wN \@@_div_significand_vi:Nw
@@ -1435,10 +1446,10 @@
       \exp_after:wN \@@_div_significand_v:NN
       \int_value:w \@@_int_eval:w 499950 + 2*#4 - #1*#8 +
         \exp_after:wN \@@_div_significand_v:NN
-        \int_value:w \@@_int_eval:w 500000 + 2*#5 - #1*#9 ;
+        \int_value:w \@@_int_eval:w 500000 + 2*#5 - #1*#9 \@@_sep:
   }
 \cs_new:Npn \@@_div_significand_v:NN #1#2 { #1#2 \@@_int_eval_end: + }
-\cs_new:Npn \@@_div_significand_vi:Nw #1#2;
+\cs_new:Npn \@@_div_significand_vi:Nw #1#2\@@_sep:
   {
     \if_meaning:w 0 #1
       \if_int_compare:w \@@_int_eval:w #2 > 0 + 1 \fi:
@@ -1445,7 +1456,7 @@
     \else:
       \if_meaning:w - #1 - \else: + \fi: 1
     \fi:
-    ;
+    \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1459,7 +1470,7 @@
 %     \cs{@@_div_significand_pack:NNN} $10^{6} + Q_{B}$
 %     \cs{@@_div_significand_pack:NNN} $10^{6} + Q_{C}$
 %     \cs{@@_div_significand_pack:NNN}
-%     $10^{7} + 10\cdot Q_{D} + 5 \cdot P + \varepsilon$ |;| \meta{sign}
+%     $10^{7} + 10\cdot Q_{D} + 5 \cdot P + \varepsilon$ \cs{@@_sep:} \meta{sign}
 %   \end{quote}
 %   Here, $\varepsilon = \operatorname{sign}(T)$ is $0$ in case $2E=PZ$,
 %   $1$ in case $2E>PZ$, which means that $P$ was the correct value, but
@@ -1468,14 +1479,14 @@
 %   nothing special: it removes the $10^{6}$ and carries two digits (for
 %   the $10^{5}$'s and the $10^{4}$'s).
 %    \begin{macrocode}
-\cs_new:Npn \@@_div_significand_pack:NNN 1 #1 #2 { + #1 #2 ; }
+\cs_new:Npn \@@_div_significand_pack:NNN 1 #1 #2 { + #1 #2 \@@_sep: }
 %    \end{macrocode}
 % \end{macro}
 %
 % \begin{macro}[rEXP]{\@@_div_significand_test_o:w}
 %   \begin{quote}
-%     \cs{@@_div_significand_test_o:w} |1| |0| \meta{5d} |;|
-%     ~~\meta{4d} |;| \meta{4d} |;| \meta{5d} |;| \meta{sign}
+%     \cs{@@_div_significand_test_o:w} |1| |0| \meta{5d} \cs{@@_sep:}
+%     ~~\meta{4d} \cs{@@_sep:} \meta{4d} \cs{@@_sep:} \meta{5d} \cs{@@_sep:} \meta{sign}
 %   \end{quote}
 %   The reason we know that the first two digits are |1| and |0| is that
 %   the final result is known to be between $0.1$ (inclusive) and $10$,
@@ -1500,8 +1511,8 @@
 %
 % \begin{macro}[EXP]{\@@_div_significand_small_o:wwwNNNNwN}
 %   \begin{quote}
-%     \cs{@@_div_significand_small_o:wwwNNNNwN} |0| \meta{4d} |;|
-%     ~~\meta{4d} |;| \meta{4d} |;| \meta{5d} |;| \meta{final sign}
+%     \cs{@@_div_significand_small_o:wwwNNNNwN} |0| \meta{4d} \cs{@@_sep:}
+%     ~~\meta{4d} \cs{@@_sep:} \meta{4d} \cs{@@_sep:} \meta{5d} \cs{@@_sep:} \meta{final sign}
 %   \end{quote}
 %   Standard use of the functions \cs{@@_basics_pack_low:NNNNNw} and
 %   \cs{@@_basics_pack_high:NNNNNw}.  We finally get to use the
@@ -1508,7 +1519,7 @@
 %   \meta{final sign} which has been sitting there for a while.
 %    \begin{macrocode}
 \cs_new:Npn \@@_div_significand_small_o:wwwNNNNwN
-    0 #1; #2; #3; #4#5#6#7#8; #9
+    0 #1\@@_sep: #2\@@_sep: #3\@@_sep: #4#5#6#7#8\@@_sep: #9
   {
     \exp_after:wN \@@_basics_pack_high:NNNNNw
     \int_value:w \@@_int_eval:w 1 #1#2
@@ -1515,7 +1526,7 @@
       \exp_after:wN \@@_basics_pack_low:NNNNNw
       \int_value:w \@@_int_eval:w 1 #3#4#5#6#7
         + \@@_round:NNN #9 #7 #8
-        \exp_after:wN ;
+        \exp_after:wN \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1522,8 +1533,8 @@
 %
 % \begin{macro}[rEXP]{\@@_div_significand_large_o:wwwNNNNwN}
 %   \begin{quote}
-%     \cs{@@_div_significand_large_o:wwwNNNNwN} \meta{5d} |;|
-%     ~~\meta{4d} |;| \meta{4d} |;| \meta{5d} |;| \meta{sign}
+%     \cs{@@_div_significand_large_o:wwwNNNNwN} \meta{5d} \cs{@@_sep:}
+%     ~~\meta{4d} \cs{@@_sep:} \meta{4d} \cs{@@_sep:} \meta{5d} \cs{@@_sep:} \meta{sign}
 %   \end{quote}
 %   We know that the final result cannot reach $10$, hence |1#1#2|,
 %   together with contributions from the level below, cannot reach
@@ -1531,7 +1542,7 @@
 %   from the last two of our $18$ digits.
 %    \begin{macrocode}
 \cs_new:Npn \@@_div_significand_large_o:wwwNNNNwN
-    #1; #2; #3; #4#5#6#7#8; #9
+    #1\@@_sep: #2\@@_sep: #3\@@_sep: #4#5#6#7#8\@@_sep: #9
   {
     + 1
     \exp_after:wN \@@_basics_pack_weird_high:NNNNNNNNw
@@ -1541,8 +1552,8 @@
         \exp_after:wN \@@_round:NNN
         \exp_after:wN #9
         \exp_after:wN #6
-        \int_value:w \@@_round_digit:Nw #7 #8 ;
-      \exp_after:wN ;
+        \int_value:w \@@_round_digit:Nw #7 #8 \@@_sep:
+      \exp_after:wN \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1555,7 +1566,7 @@
 %   Positive infinity, and \texttt{nan}, are unchanged.  Finally, for
 %   normal positive numbers, there is some work to do.
 %    \begin{macrocode}
-\cs_new:Npn \@@_sqrt_o:w #1 \s_@@ \@@_chk:w #2#3#4; @
+\cs_new:Npn \@@_sqrt_o:w #1 \s_@@ \@@_chk:w #2#3#4\@@_sep: @
   {
     \if_meaning:w 0 #2 \@@_case_return_same_o:w \fi:
     \if_meaning:w 2 #3
@@ -1563,7 +1574,7 @@
     \fi:
     \if_meaning:w 1 #2 \else: \@@_case_return_same_o:w \fi:
     \@@_sqrt_npos_o:w
-    \s_@@ \@@_chk:w #2 #3 #4;
+    \s_@@ \@@_chk:w #2 #3 #4\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1581,7 +1592,7 @@
 %   $a_1'\in[10^{6}, 10^{7})$ instead of $[10^{7}, 10^{8})$, then use
 %   Newton's method starting at $17782794 \simeq 10^{7.25}$.
 %    \begin{macrocode}
-\cs_new:Npn \@@_sqrt_npos_o:w \s_@@ \@@_chk:w 1 0 #1#2#3#4#5;
+\cs_new:Npn \@@_sqrt_npos_o:w \s_@@ \@@_chk:w 1 0 #1#2#3#4#5\@@_sep:
   {
     \exp_after:wN \@@_sanitize:Nw
     \exp_after:wN 0
@@ -1590,18 +1601,18 @@
         \exp_after:wN \@@_sqrt_npos_auxi_o:wwnnN
       \fi:
       #1 / 2
-      \@@_sqrt_Newton_o:wwn 56234133; 0; {#2#3} {#4#5} 0
+      \@@_sqrt_Newton_o:wwn 56234133\@@_sep: 0\@@_sep: {#2#3} {#4#5} 0
   }
-\cs_new:Npn \@@_sqrt_npos_auxi_o:wwnnN #1 / 2 #2; 0; #3#4#5
+\cs_new:Npn \@@_sqrt_npos_auxi_o:wwnnN #1 / 2 #2\@@_sep: 0\@@_sep: #3#4#5
   {
     ( #1 + 1 ) / 2
     \@@_pack_eight:wNNNNNNNN
     \@@_sqrt_npos_auxii_o:wNNNNNNNN
-    ;
+    \@@_sep:
     0 #3 #4
   }
-\cs_new:Npn \@@_sqrt_npos_auxii_o:wNNNNNNNN #1; #2#3#4#5#6#7#8#9
-  { \@@_sqrt_Newton_o:wwn 17782794; 0; {#1} {#2#3#4#5#6#7#8#9} }
+\cs_new:Npn \@@_sqrt_npos_auxii_o:wNNNNNNNN #1\@@_sep: #2#3#4#5#6#7#8#9
+  { \@@_sqrt_Newton_o:wwn 17782794\@@_sep: 0\@@_sep: {#1} {#2#3#4#5#6#7#8#9} }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -1670,7 +1681,7 @@
 %   |#3 * 100000000 / #1|.  In any case, the result is within $[10^{7},
 %   10^{8}]$.
 %    \begin{macrocode}
-\cs_new:Npn \@@_sqrt_Newton_o:wwn #1; #2; #3
+\cs_new:Npn \@@_sqrt_Newton_o:wwn #1\@@_sep: #2\@@_sep: #3
   {
     \if_int_compare:w #1 = #2 \exp_stop_f:
       \exp_after:wN \@@_sqrt_auxi_o:NNNNwnnN
@@ -1678,8 +1689,8 @@
         \exp_after:wN \@@_use_none_until_s:w
     \fi:
     \exp_after:wN \@@_sqrt_Newton_o:wwn
-    \int_value:w \@@_int_eval:w (#1 + #3 * 1 0000 0000 / #1) / 2 ;
-    #1; {#3}
+    \int_value:w \@@_int_eval:w (#1 + #3 * 1 0000 0000 / #1) / 2 \@@_sep:
+    #1\@@_sep: {#3}
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1686,8 +1697,8 @@
 %
 % \begin{macro}[rEXP]{\@@_sqrt_auxi_o:NNNNwnnN}
 %   This function is followed by $10^{8}+x-1$, which has~$9$ digits
-%   starting with~$1$, then |;| \Arg{a_1} \Arg{a_2} \meta{a'}.  Here, $x
-%   \simeq \sqrt{10^{8} a_1}$ and we want to estimate the square root of
+%   starting with~$1$, then \cs{@@_sep:} \Arg{a_1} \Arg{a_2} \meta{a'}.  Here,
+%   $x \simeq \sqrt{10^{8} a_1}$ and we want to estimate the square root of
 %   $a = 10^{-8} a_1 + 10^{-16} a_2 + 10^{-17} a'$.  We set up an
 %   initial underestimate
 %   \[
@@ -1708,7 +1719,7 @@
 %   construction, the underestimates~$y$ are always increasing, $a - y^2
 %   < 3.2 \cdot 10^{-8}$ for all.  Also, $y<1$.
 %    \begin{macrocode}
-\cs_new:Npn \@@_sqrt_auxi_o:NNNNwnnN 1 #1#2#3#4#5;
+\cs_new:Npn \@@_sqrt_auxi_o:NNNNwnnN 1 #1#2#3#4#5\@@_sep:
   {
     \@@_sqrt_auxii_o:NnnnnnnnN
       \@@_sqrt_auxiii_o:wnnnnnnnn
@@ -1794,9 +1805,9 @@
                     \exp_after:wN \@@_pack_big:NNNNNNw
                     \int_value:w \@@_int_eval:w
                       \c_@@_big_trailing_shift_int
-                      - #6 * #6 ;
+                      - #6 * #6 \@@_sep:
     % (
-    - 257 ) * 5000 0000 / (#2#3 + 1) + 10 0000 0000 ;
+    - 257 ) * 5000 0000 / (#2#3 + 1) + 10 0000 0000 \@@_sep:
     {#2}{#3}{#4}{#5}{#6} {#7}{#8}#9
   }
 %    \end{macrocode}
@@ -1811,8 +1822,8 @@
 %     \@@_sqrt_auxvii_o:NNNNNw
 %   }
 %   We receive here the difference $a-y^2=d=\sum_i d_i \cdot 10^{-4i}$,
-%   as \meta{d_2} |;| \Arg{d_3} \ldots{} \Arg{d_{10}}, where each block
-%   has~$4$ digits, except \meta{d_2}.  This function finds the largest
+%   as \meta{d_2} \cs{@@_sep:} \Arg{d_3} \ldots{} \Arg{d_{10}}, where each
+%   block has~$4$ digits, except \meta{d_2}.  This function finds the largest
 %   $j\leq 6$ such that $10^{4j}(a-y^2) < 2\cdot 10^{8}$, then leaves an
 %   open parenthesis and the integer
 %   $\bigl\lfloor 10^{4j}(a-y^2)\bigr\rfloor$ in an integer
@@ -1846,7 +1857,7 @@
 %   \]
 %    \begin{macrocode}
 \cs_new:Npn \@@_sqrt_auxiii_o:wnnnnnnnn
-    #1; #2#3#4#5#6#7#8#9
+    #1\@@_sep: #2#3#4#5#6#7#8#9
   {
     \if_int_compare:w #1 > \c_one_int
       \exp_after:wN \@@_sqrt_auxiv_o:NNNNNw
@@ -1866,13 +1877,13 @@
       \fi:
     \fi:
   }
-\cs_new:Npn \@@_sqrt_auxiv_o:NNNNNw 1#1#2#3#4#5#6;
+\cs_new:Npn \@@_sqrt_auxiv_o:NNNNNw 1#1#2#3#4#5#6\@@_sep:
   { \@@_sqrt_auxviii_o:nnnnnnn {#1#2#3#4#5#6} {00000000} }
-\cs_new:Npn \@@_sqrt_auxv_o:NNNNNw 1#1#2#3#4#5#6;
+\cs_new:Npn \@@_sqrt_auxv_o:NNNNNw 1#1#2#3#4#5#6\@@_sep:
   { \@@_sqrt_auxviii_o:nnnnnnn {000#1#2#3#4#5} {#60000} }
-\cs_new:Npn \@@_sqrt_auxvi_o:NNNNNw 1#1#2#3#4#5#6;
+\cs_new:Npn \@@_sqrt_auxvi_o:NNNNNw 1#1#2#3#4#5#6\@@_sep:
   { \@@_sqrt_auxviii_o:nnnnnnn {0000000#1} {#2#3#4#5#6} }
-\cs_new:Npn \@@_sqrt_auxvii_o:NNNNNw 1#1#2#3#4#5#6;
+\cs_new:Npn \@@_sqrt_auxvii_o:NNNNNw 1#1#2#3#4#5#6\@@_sep:
   {
     \if_int_compare:w #1#2 = \c_zero_int
       \exp_after:wN \@@_sqrt_auxx_o:Nnnnnnnn
@@ -1895,9 +1906,9 @@
       \exp_after:wN \@@_basics_pack_low:NNNNNw
       \int_value:w \@@_int_eval:w #1 + 1#4#5
         \exp_after:wN \@@_basics_pack_low:NNNNNw
-        \int_value:w \@@_int_eval:w #2 + 1#6#7 ;
+        \int_value:w \@@_int_eval:w #2 + 1#6#7 \@@_sep:
   }
-\cs_new:Npn \@@_sqrt_auxix_o:wnwnw #1; #2#3; #4#5;
+\cs_new:Npn \@@_sqrt_auxix_o:wnwnw #1\@@_sep: #2#3\@@_sep: #4#5\@@_sep:
   {
     \@@_sqrt_auxii_o:NnnnnnnnN
       \@@_sqrt_auxiii_o:wnnnnnnnn {#1}{#2}{#3}{#4}{#5}
@@ -1942,10 +1953,10 @@
   {
     \exp_after:wN \@@_sqrt_auxxi_o:wwnnN
     \int_value:w \@@_int_eval:w
-      (#8 + 2499) / 5000 * 5000 ;
-      {#4} {#5} {#6} {#7} ;
+      (#8 + 2499) / 5000 * 5000 \@@_sep:
+      {#4} {#5} {#6} {#7} \@@_sep:
   }
-\cs_new:Npn \@@_sqrt_auxxi_o:wwnnN #1; #2; #3#4#5
+\cs_new:Npn \@@_sqrt_auxxi_o:wwnnN #1\@@_sep: #2\@@_sep: #3#4#5
   {
     \@@_sqrt_auxii_o:NnnnnnnnN
       \@@_sqrt_auxxii_o:nnnnnnnnw
@@ -1967,7 +1978,7 @@
 %   \texttt{auxxiv} function with argument~$9998$.  For an exact result
 %   call it with~$9999$, and for an overestimate call it with~$10000$.
 %    \begin{macrocode}
-\cs_new:Npn \@@_sqrt_auxxii_o:nnnnnnnnw 0; #1#2#3#4#5#6#7#8 #9;
+\cs_new:Npn \@@_sqrt_auxxii_o:nnnnnnnnw 0\@@_sep: #1#2#3#4#5#6#7#8 #9\@@_sep:
   {
     \if_int_compare:w #1#2 > \c_zero_int
       \if_int_compare:w #1#2 = \c_one_int
@@ -1985,12 +1996,12 @@
       \exp_after:wN \@@_sqrt_auxxiv_o:wnnnnnnnN
       \int_value:w 10000
     \fi:
-    ;
+    \@@_sep:
   }
-\cs_new:Npn \@@_sqrt_auxxiii_o:w \fi: \fi: \fi: \fi: #1 \fi: ;
+\cs_new:Npn \@@_sqrt_auxxiii_o:w \fi: \fi: \fi: \fi: #1 \fi: \@@_sep:
   {
     \fi: \fi: \fi: \fi: \fi:
-    \@@_sqrt_auxxiv_o:wnnnnnnnN 9999 ;
+    \@@_sqrt_auxxiv_o:wnnnnnnnN 9999 \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -2016,7 +2027,7 @@
 %   $0001$, $4999$, $5000$, $5001$, or~$9999$, which it converts to $0$,
 %   $1$, $4$, $5$, $6$, and~$9$, respectively.
 %    \begin{macrocode}
-\cs_new:Npn \@@_sqrt_auxxiv_o:wnnnnnnnN #1; #2#3#4#5#6 #7#8#9
+\cs_new:Npn \@@_sqrt_auxxiv_o:wnnnnnnnN #1\@@_sep: #2#3#4#5#6 #7#8#9
   {
     \exp_after:wN \@@_basics_pack_high:NNNNNw
     \int_value:w \@@_int_eval:w 1 0000 0000 + #2#3
@@ -2030,8 +2041,8 @@
           \int_value:w
             \exp_after:wN \use_i:nn
             \exp_after:wN \@@_round_digit:Nw
-            \int_value:w \@@_int_eval:w #6 + 19999 - #1 ;
-    \exp_after:wN ;
+            \int_value:w \@@_int_eval:w #6 + 19999 - #1 \@@_sep:
+    \exp_after:wN \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -2041,7 +2052,7 @@
 % \begin{macro}[EXP]{\@@_logb_o:w, \@@_logb_aux_o:w}
 %   The exponent of a normal number is its \meta{exponent} minus one.
 %    \begin{macrocode}
-\cs_new:Npn \@@_logb_o:w ? \s_@@ \@@_chk:w #1#2; @
+\cs_new:Npn \@@_logb_o:w ? \s_@@ \@@_chk:w #1#2\@@_sep: @
   {
     \if_case:w #1 \exp_stop_f:
            \@@_case_use:nw
@@ -2050,9 +2061,9 @@
     \or:   \@@_case_return_o:Nw \c_inf_fp
     \else: \@@_case_return_same_o:w
     \fi:
-    \s_@@ \@@_chk:w #1 #2;
+    \s_@@ \@@_chk:w #1 #2\@@_sep:
   }
-\cs_new:Npn \@@_logb_aux_o:w \s_@@ \@@_chk:w #1 #2 #3 #4 ;
+\cs_new:Npn \@@_logb_aux_o:w \s_@@ \@@_chk:w #1 #2 #3 #4 \@@_sep:
   {
     \exp_after:wN \@@_parse:n \exp_after:wN
       { \int_value:w \int_eval:w #3 - 1 \exp_after:wN }
@@ -2064,7 +2075,7 @@
 % \begin{macro}[EXP]{\@@_sign_aux_o:w}
 %   Find the sign of the floating point: \texttt{nan}, |+0|, |-0|, |+1| or |-1|.
 %    \begin{macrocode}
-\cs_new:Npn \@@_sign_o:w ? \s_@@ \@@_chk:w #1#2; @
+\cs_new:Npn \@@_sign_o:w ? \s_@@ \@@_chk:w #1#2\@@_sep: @
   {
     \if_case:w #1 \exp_stop_f:
            \@@_case_return_same_o:w
@@ -2072,9 +2083,9 @@
     \or:   \exp_after:wN \@@_sign_aux_o:w
     \else: \@@_case_return_same_o:w
     \fi:
-    \s_@@ \@@_chk:w #1 #2;
+    \s_@@ \@@_chk:w #1 #2\@@_sep:
   }
-\cs_new:Npn \@@_sign_aux_o:w \s_@@ \@@_chk:w #1 #2 #3 ;
+\cs_new:Npn \@@_sign_aux_o:w \s_@@ \@@_chk:w #1 #2 #3 \@@_sep:
   { \exp_after:wN \@@_set_sign_o:w \exp_after:wN #2 \c_one_fp @ }
 %    \end{macrocode}
 % \end{macro}
@@ -2088,7 +2099,7 @@
 %   also expands after itself in the input stream, just like
 %   \cs{@@_+_o:ww}.
 %    \begin{macrocode}
-\cs_new:Npn \@@_set_sign_o:w #1 \s_@@ \@@_chk:w #2#3#4; @
+\cs_new:Npn \@@_set_sign_o:w #1 \s_@@ \@@_chk:w #2#3#4\@@_sep: @
   {
     \exp_after:wN \@@_exp_after_o:w
     \exp_after:wN \s_@@
@@ -2096,7 +2107,7 @@
     \exp_after:wN #2
     \int_value:w
       \if_case:w #3 \exp_stop_f: #1 \or: 1 \or: 0 \fi: \exp_stop_f:
-    #4;
+    #4\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -2120,11 +2131,11 @@
   }
 \cs_new:Npn \@@_tuple_set_sign_aux_o:Nnw #1#2
   { \@@_tuple_map_o:nw \@@_tuple_set_sign_aux_o:w }
-\cs_new:Npn \@@_tuple_set_sign_aux_o:w #1#2 ;
+\cs_new:Npn \@@_tuple_set_sign_aux_o:w #1#2 \@@_sep:
   {
     \@@_change_func_type:NNN #1 \@@_set_sign_o:w
       \@@_parse_apply_unary_error:NNw
-    2 #1 #2 ; @
+    2 #1 #2 \@@_sep: @
   }
 %    \end{macrocode}
 % \end{macro}
@@ -2137,12 +2148,18 @@
 %   Importantly we need to dispatch according to the type, and we make
 %   sure to apply the operator in the correct order.
 %    \begin{macrocode}
-\cs_new:cpn { @@_*_tuple_o:ww } #1 ;
-  { \@@_tuple_map_o:nw { \@@_binary_type_o:Nww * #1 ; } }
-\cs_new:cpn { @@_tuple_*_o:ww } #1 ; #2 ;
-  { \@@_tuple_map_o:nw { \@@_binary_rev_type_o:Nww * #2 ; } #1 ; }
-\cs_new:cpn { @@_tuple_/_o:ww } #1 ; #2 ;
-  { \@@_tuple_map_o:nw { \@@_binary_rev_type_o:Nww / #2 ; } #1 ; }
+\cs_new:cpn { @@_*_tuple_o:ww } #1 \@@_sep:
+  { \@@_tuple_map_o:nw { \@@_binary_type_o:Nww * #1 \@@_sep: } }
+\cs_new:cpn { @@_tuple_*_o:ww } #1 \@@_sep: #2 \@@_sep:
+  {
+    \@@_tuple_map_o:nw { \@@_binary_rev_type_o:Nww * #2 \@@_sep: }
+      #1 \@@_sep:
+  }
+\cs_new:cpn { @@_tuple_/_o:ww } #1 \@@_sep: #2 \@@_sep:
+  {
+    \@@_tuple_map_o:nw { \@@_binary_rev_type_o:Nww / #2 \@@_sep: }
+      #1 \@@_sep:
+  }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -2154,15 +2171,15 @@
 \cs_set_protected:Npn \@@_tmp:w #1
   {
     \cs_new:cpn { @@_tuple_#1_tuple_o:ww }
-        \s_@@_tuple \@@_tuple_chk:w ##1 ;
-        \s_@@_tuple \@@_tuple_chk:w ##2 ;
+        \s_@@_tuple \@@_tuple_chk:w ##1 \@@_sep:
+        \s_@@_tuple \@@_tuple_chk:w ##2 \@@_sep:
       {
         \int_compare:nNnTF
           { \@@_array_count:n {##1} } = { \@@_array_count:n {##2} }
           { \@@_tuple_mapthread_o:nww { \@@_binary_type_o:Nww #1 } }
           { \@@_invalid_operation_o:nww #1 }
-        \s_@@_tuple \@@_tuple_chk:w {##1} ;
-        \s_@@_tuple \@@_tuple_chk:w {##2} ;
+        \s_@@_tuple \@@_tuple_chk:w {##1} \@@_sep:
+        \s_@@_tuple \@@_tuple_chk:w {##2} \@@_sep:
       }
   }
 \@@_tmp:w +

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp-convert.dtx
 %
-% Copyright (C) 2011-2024 The LaTeX Project
+% Copyright (C) 2011-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -72,7 +72,7 @@
 %   representation.  We loop through all items, putting |,~| between all
 %   of them and making sure to remove the leading |,~|.
 %    \begin{macrocode}
-\cs_new:Npn \@@_tuple_convert:Nw #1 \s_@@_tuple \@@_tuple_chk:w #2 ;
+\cs_new:Npn \@@_tuple_convert:Nw #1 \s_@@_tuple \@@_tuple_chk:w #2 \@@_sep:
   {
     \int_case:nnF { \@@_array_count:n {#2} }
       {
@@ -81,14 +81,14 @@
       }
       {
         \@@_tuple_convert_loop:nNw { } #1
-          #2 { ? \@@_tuple_convert_end:w } ;
+          #2 { ? \@@_tuple_convert_end:w } \@@_sep:
           @ { \use_none:nn }
       }
   }
-\cs_new:Npn \@@_tuple_convert_loop:nNw #1#2#3#4; #5 @ #6
+\cs_new:Npn \@@_tuple_convert_loop:nNw #1#2#3#4\@@_sep: #5 @ #6
   {
     \use_none:n #3
-    \exp_args:Nf \@@_tuple_convert_loop:nNw { #2 #3#4 ; } #2 #5
+    \exp_args:Nf \@@_tuple_convert_loop:nNw { #2 #3#4 \@@_sep: } #2 #5
       @ { #6 , ~ #1 }
   }
 \cs_new:Npn \@@_tuple_convert_end:w #1 @ #2
@@ -108,14 +108,17 @@
 %   which removes a trailing dot if any.  We then clean-up with the
 %   \texttt{end} auxiliary, keeping only the number.
 %    \begin{macrocode}
-\cs_new:Npn \@@_trim_zeros:w #1 ;
+\cs_new:Npn \@@_trim_zeros:w #1 \@@_sep:
   {
-    \@@_trim_zeros_loop:w #1
-      ; \@@_trim_zeros_loop:w 0; \@@_trim_zeros_dot:w .; \s_@@_stop
+    \@@_trim_zeros_loop:w #1 \@@_sep:
+      \@@_trim_zeros_loop:w 0\@@_sep:
+      \@@_trim_zeros_dot:w .\@@_sep:
+      \s_@@_stop
   }
-\cs_new:Npn \@@_trim_zeros_loop:w #1 0; #2 { #2 #1 ; #2 }
-\cs_new:Npn \@@_trim_zeros_dot:w #1 .; { \@@_trim_zeros_end:w #1 ; }
-\cs_new:Npn \@@_trim_zeros_end:w #1 ; #2 \s_@@_stop { #1 }
+\cs_new:Npn \@@_trim_zeros_loop:w #1 0\@@_sep: #2 { #2 #1 \@@_sep: #2 }
+\cs_new:Npn \@@_trim_zeros_dot:w #1 .\@@_sep:
+  { \@@_trim_zeros_end:w #1 \@@_sep: }
+\cs_new:Npn \@@_trim_zeros_end:w #1 \@@_sep: #2 \s_@@_stop { #1 }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -148,9 +151,9 @@
       #1 \@@_to_scientific:w \@@_to_scientific_recover:w
     #1
   }
-\cs_new:Npn \@@_to_scientific_recover:w #1 #2 ;
+\cs_new:Npn \@@_to_scientific_recover:w #1 #2 \@@_sep:
   {
-    \@@_error:nffn { unknown-type } { \tl_to_str:n { #2 ; } } { } { }
+    \@@_error:nffn { unknown-type } { \tl_to_str:n { #2 \@@_sep: } } { } { }
     nan
   }
 \cs_new:Npn \@@_tuple_to_scientific:w
@@ -201,14 +204,14 @@
     \s_@@ \@@_chk:w #1 #2
   }
 \cs_new:Npn \@@_to_scientific_normal:wnnnnn
-  \s_@@ \@@_chk:w 1 #1 #2 #3#4#5#6 ;
+  \s_@@ \@@_chk:w 1 #1 #2 #3#4#5#6 \@@_sep:
   {
     \exp_after:wN \@@_to_scientific_normal:wNw
     \exp_after:wN e
     \int_value:w \@@_int_eval:w #2 - 1
-    ; #3 #4 #5 #6 ;
+    \@@_sep: #3 #4 #5 #6 \@@_sep:
   }
-\cs_new:Npn \@@_to_scientific_normal:wNw #1 ; #2#3;
+\cs_new:Npn \@@_to_scientific_normal:wNw #1 \@@_sep: #2#3\@@_sep:
   { #2.#3 #1 }
 %    \end{macrocode}
 % \end{macro}
@@ -242,9 +245,9 @@
       #1 \@@_to_decimal:w \@@_to_decimal_recover:w
     #1
   }
-\cs_new:Npn \@@_to_decimal_recover:w #1 #2 ;
+\cs_new:Npn \@@_to_decimal_recover:w #1 #2 \@@_sep:
   {
-    \@@_error:nffn { unknown-type } { \tl_to_str:n { #2 ; } } { } { }
+    \@@_error:nffn { unknown-type } { \tl_to_str:n { #2 \@@_sep: } } { } { }
     nan
   }
 \cs_new:Npn \@@_tuple_to_decimal:w
@@ -297,7 +300,7 @@
     \s_@@ \@@_chk:w #1 #2
   }
 \cs_new:Npn \@@_to_decimal_normal:wnnnnn
-    \s_@@ \@@_chk:w 1 #1 #2 #3#4#5#6 ;
+    \s_@@ \@@_chk:w 1 #1 #2 #3#4#5#6 \@@_sep:
   {
     \int_compare:nNnTF {#2} > 0
       {
@@ -309,7 +312,7 @@
           {
             \exp_after:wN \exp_after:wN
             \exp_after:wN \@@_to_decimal_huge:wnnnn
-            \prg_replicate:nn { #2 - \c_@@_prec_int } { 0 } ;
+            \prg_replicate:nn { #2 - \c_@@_prec_int } { 0 } \@@_sep:
           }
         {#3} {#4} {#5} {#6}
       }
@@ -318,10 +321,10 @@
         \exp_after:wN 0
         \exp_after:wN .
         \exp:w \exp_end_continue_f:w \prg_replicate:nn { - #2 } { 0 }
-        #3#4#5#6 ;
+        #3#4#5#6 \@@_sep:
       }
   }
-\cs_new:Npn \@@_to_decimal_large:Nnnw #1#2#3#4;
+\cs_new:Npn \@@_to_decimal_large:Nnnw #1#2#3#4\@@_sep:
   {
     \exp_after:wN \@@_trim_zeros:w \int_value:w
       \if_int_compare:w #2 > \c_zero_int
@@ -328,9 +331,9 @@
         #2
       \fi:
       \exp_stop_f:
-      #3.#4 ;
+      #3.#4 \@@_sep:
   }
-\cs_new:Npn \@@_to_decimal_huge:wnnnn #1; #2#3#4#5 { #2#3#4#5 #1 }
+\cs_new:Npn \@@_to_decimal_huge:wnnnn #1\@@_sep: #2#3#4#5 { #2#3#4#5 #1 }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -355,9 +358,9 @@
 %    \begin{macrocode}
 \cs_new:Npn \@@_to_tl_dispatch:w #1
   { \@@_change_func_type:NNN #1 \@@_to_tl:w \@@_to_tl_recover:w #1 }
-\cs_new:Npn \@@_to_tl_recover:w #1 #2 ;
+\cs_new:Npn \@@_to_tl_recover:w #1 #2 \@@_sep:
   {
-    \@@_error:nffn { unknown-type } { \tl_to_str:n { #2 ; } } { } { }
+    \@@_error:nffn { unknown-type } { \tl_to_str:n { #2 \@@_sep: } } { } { }
     nan
   }
 \cs_new:Npn \@@_tuple_to_tl:w
@@ -395,15 +398,15 @@
     \s_@@ \@@_chk:w 1 0 {#1}
   }
 \cs_new:Npn \@@_to_tl_scientific:wnnnnn
-  \s_@@ \@@_chk:w 1 #1 #2 #3#4#5#6 ;
+  \s_@@ \@@_chk:w 1 #1 #2 #3#4#5#6 \@@_sep:
   {
     \exp_after:wN \@@_to_tl_scientific:wNw
     \exp_after:wN e
     \int_value:w \@@_int_eval:w #2 - 1
-    ; #3 #4 #5 #6 ;
+    \@@_sep: #3 #4 #5 #6 \@@_sep:
   }
-\cs_new:Npn \@@_to_tl_scientific:wNw #1 ; #2#3;
-  { \@@_trim_zeros:w #2.#3 ; #1 }
+\cs_new:Npn \@@_to_tl_scientific:wNw #1 \@@_sep: #2#3\@@_sep:
+  { \@@_trim_zeros:w #2.#3 \@@_sep: #1 }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -431,14 +434,14 @@
     \exp_after:wN \@@_to_dim_dispatch:w
     \exp:w \exp_end_continue_f:w \@@_parse:n
   }
-\cs_new:Npn \@@_to_dim_dispatch:w #1#2 ;
+\cs_new:Npn \@@_to_dim_dispatch:w #1#2 \@@_sep:
   {
     \@@_change_func_type:NNN #1 \@@_to_dim:w \@@_to_dim_recover:w
-    #1 #2 ;
+    #1 #2 \@@_sep:
   }
 \cs_new:Npn \@@_to_dim_recover:w #1
   { \@@_invalid_operation:nnw { 0pt } { fp_to_dim } }
-\cs_new:Npn \@@_to_dim:w #1 ; { \@@_to_decimal:w #1 ; pt }
+\cs_new:Npn \@@_to_dim:w #1 \@@_sep: { \@@_to_decimal:w #1 \@@_sep: pt }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -459,17 +462,17 @@
     \exp_after:wN \@@_to_int_dispatch:w
     \exp:w \exp_end_continue_f:w \@@_parse:n
   }
-\cs_new:Npn \@@_to_int_dispatch:w #1#2 ;
+\cs_new:Npn \@@_to_int_dispatch:w #1#2 \@@_sep:
   {
     \@@_change_func_type:NNN #1 \@@_to_int:w \@@_to_int_recover:w
-    #1 #2 ;
+    #1 #2 \@@_sep:
   }
 \cs_new:Npn \@@_to_int_recover:w #1
   { \@@_invalid_operation:nnw { 0 } { fp_to_int } }
-\cs_new:Npn \@@_to_int:w #1;
+\cs_new:Npn \@@_to_int:w #1\@@_sep:
   {
     \exp_after:wN \@@_to_decimal:w \exp:w \exp_end_continue_f:w
-    \@@_round:Nwn \@@_round_to_nearest:NNN #1; { 0 }
+    \@@_round:Nwn \@@_round_to_nearest:NNN #1\@@_sep: { 0 }
   }
 %    \end{macrocode}
 % \end{macro}
@@ -490,7 +493,7 @@
 %   points), then multiplied by $2^{-16} = 0.0000152587890625$ to give a
 %   value expressed in points.  The auxiliary \cs{@@_mul_npos_o:Nww}
 %   expects the desired \meta{final sign} and two floating point
-%   operands (of the form \cs{s_@@} \ldots{} |;|) as arguments.
+%   operands (of the form \cs{s_@@} \ldots{} \cs{@@_sep:}) as arguments.
 %   This set of functions is also used to convert dimension registers to
 %   floating points while parsing expressions: in this context there is
 %   an additional exponent, which is the first argument of
@@ -504,7 +507,7 @@
     \exp_after:wN \@@_from_dim_test:ww
     \exp_after:wN 0
     \exp_after:wN ,
-    \int_value:w \tex_glueexpr:D #1 ;
+    \int_value:w \tex_glueexpr:D #1 \@@_sep:
   }
 \cs_new:Npn \@@_from_dim_test:ww #1, #2
   {
@@ -520,18 +523,18 @@
         \fi:
     \fi:
   }
-\cs_new:Npn \@@_from_dim:wNw #1,#2#3;
+\cs_new:Npn \@@_from_dim:wNw #1,#2#3\@@_sep:
   {
-    \@@_pack_twice_four:wNNNNNNNN \@@_from_dim:wNNnnnnnn ;
-    #3 000 0000 00 {10}987654321; #2 {#1}
+    \@@_pack_twice_four:wNNNNNNNN \@@_from_dim:wNNnnnnnn \@@_sep:
+    #3 000 0000 00 {10}987654321\@@_sep: #2 {#1}
   }
-\cs_new:Npn \@@_from_dim:wNNnnnnnn #1; #2#3#4#5#6#7#8#9
-  { \@@_from_dim:wnnnnwNn #1 {#2#300} {0000} ; }
-\cs_new:Npn \@@_from_dim:wnnnnwNn #1; #2#3#4#5#6; #7#8
+\cs_new:Npn \@@_from_dim:wNNnnnnnn #1\@@_sep: #2#3#4#5#6#7#8#9
+  { \@@_from_dim:wnnnnwNn #1 {#2#300} {0000} \@@_sep: }
+\cs_new:Npn \@@_from_dim:wnnnnwNn #1\@@_sep: #2#3#4#5#6\@@_sep: #7#8
   {
     \@@_mul_npos_o:Nww #7
-      \s_@@ \@@_chk:w 1 #7 {#5} #1 ;
-      \s_@@ \@@_chk:w 1 0 {#8} {1525} {8789} {0625} {0000} ;
+      \s_@@ \@@_chk:w 1 #7 {#5} #1 \@@_sep:
+      \s_@@ \@@_chk:w 1 0 {#8} {1525} {8789} {0625} {0000} \@@_sep:
       \prg_do_nothing:
   }
 %    \end{macrocode}
@@ -603,16 +606,16 @@
       {
         \exp_last_unbraced:Ne \use_ii:nn
           {
-            \@@_array_to_clist_loop:Nw #1 { ? \prg_break: } ;
+            \@@_array_to_clist_loop:Nw #1 { ? \prg_break: } \@@_sep:
             \prg_break_point:
           }
       }
   }
-\cs_new:Npn \@@_array_to_clist_loop:Nw #1#2;
+\cs_new:Npn \@@_array_to_clist_loop:Nw #1#2\@@_sep:
   {
     \use_none:n #1
     , ~
-    \exp_not:f { \@@_to_tl_dispatch:w #1 #2 ; }
+    \exp_not:f { \@@_to_tl_dispatch:w #1 #2 \@@_sep: }
     \@@_array_to_clist_loop:Nw
   }
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp-expo.dtx
 %
-% Copyright (C) 2011-2024 The LaTeX Project
+% Copyright (C) 2011-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -135,15 +135,24 @@
 %   Those are needed in the implementation.  It turns out that we don't
 %   need the value of $\ln(5)$.
 %    \begin{macrocode}
-\tl_const:Nn \c_@@_ln_i_fixed_tl   { {0000}{0000}{0000}{0000}{0000}{0000};}
-\tl_const:Nn \c_@@_ln_ii_fixed_tl  { {6931}{4718}{0559}{9453}{0941}{7232};}
-\tl_const:Nn \c_@@_ln_iii_fixed_tl {{10986}{1228}{8668}{1096}{9139}{5245};}
-\tl_const:Nn \c_@@_ln_iv_fixed_tl  {{13862}{9436}{1119}{8906}{1883}{4464};}
-\tl_const:Nn \c_@@_ln_vi_fixed_tl  {{17917}{5946}{9228}{0550}{0081}{2477};}
-\tl_const:Nn \c_@@_ln_vii_fixed_tl {{19459}{1014}{9055}{3133}{0510}{5353};}
-\tl_const:Nn \c_@@_ln_viii_fixed_tl{{20794}{4154}{1679}{8359}{2825}{1696};}
-\tl_const:Nn \c_@@_ln_ix_fixed_tl  {{21972}{2457}{7336}{2193}{8279}{0490};}
-\tl_const:Nn \c_@@_ln_x_fixed_tl   {{23025}{8509}{2994}{0456}{8401}{7991};}
+\tl_const:Nn \c_@@_ln_i_fixed_tl
+  { {0000}{0000}{0000}{0000}{0000}{0000}\@@_sep:}
+\tl_const:Nn \c_@@_ln_ii_fixed_tl
+  { {6931}{4718}{0559}{9453}{0941}{7232}\@@_sep:}
+\tl_const:Nn \c_@@_ln_iii_fixed_tl
+  {{10986}{1228}{8668}{1096}{9139}{5245}\@@_sep:}
+\tl_const:Nn \c_@@_ln_iv_fixed_tl
+  {{13862}{9436}{1119}{8906}{1883}{4464}\@@_sep:}
+\tl_const:Nn \c_@@_ln_vi_fixed_tl
+  {{17917}{5946}{9228}{0550}{0081}{2477}\@@_sep:}
+\tl_const:Nn \c_@@_ln_vii_fixed_tl
+  {{19459}{1014}{9055}{3133}{0510}{5353}\@@_sep:}
+\tl_const:Nn \c_@@_ln_viii_fixed_tl
+  {{20794}{4154}{1679}{8359}{2825}{1696}\@@_sep:}
+\tl_const:Nn \c_@@_ln_ix_fixed_tl
+  {{21972}{2457}{7336}{2193}{8279}{0490}\@@_sep:}
+\tl_const:Nn \c_@@_ln_x_fixed_tl
+  {{23025}{8509}{2994}{0456}{8401}{7991}\@@_sep:}
 %    \end{macrocode}
 % \end{variable}
 %
@@ -156,7 +165,7 @@
 %   $+\infty$ or a \texttt{nan} is itself.  Positive normal numbers call
 %   \cs{@@_ln_npos_o:w}.
 %    \begin{macrocode}
-\cs_new:Npn \@@_ln_o:w #1 \s_@@ \@@_chk:w #2#3#4; @
+\cs_new:Npn \@@_ln_o:w #1 \s_@@ \@@_chk:w #2#3#4\@@_sep: @
   {
     \if_meaning:w 2 #3
       \@@_case_use:nw { \@@_invalid_operation_o:nw { ln } }
@@ -168,7 +177,7 @@
     \else:
       \@@_case_return_same_o:w
     \fi:
-    \@@_ln_npos_o:w \s_@@ \@@_chk:w #2#3#4;
+    \@@_ln_npos_o:w \s_@@ \@@_chk:w #2#3#4\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -180,7 +189,7 @@
 %   In all other cases, the final result is at least $10^{-4}$, and
 %   then an error of $0.5\cdot 10^{-20}$ is acceptable.
 %    \begin{macrocode}
-\cs_new:Npn \@@_ln_npos_o:w \s_@@ \@@_chk:w 10#1#2#3;
+\cs_new:Npn \@@_ln_npos_o:w \s_@@ \@@_chk:w 10#1#2#3\@@_sep:
   { %^^A todo: ln(1) should be "exact zero", not "underflow"
     \exp_after:wN \@@_sanitize:Nw
     \int_value:w % for the overall sign
@@ -203,7 +212,7 @@
 %   \end{syntax}
 %   This function expands to
 %   \begin{syntax}
-%     \meta{continuation} \Arg{Y_1} \Arg{Y_2} \Arg{Y_3} \Arg{Y_4} \Arg{Y_5} \Arg{Y_6} |;|
+%     \meta{continuation} \Arg{Y_1} \Arg{Y_2} \Arg{Y_3} \Arg{Y_4} \Arg{Y_5} \Arg{Y_6} \cs{@@_sep:}
 %   \end{syntax}
 %   where $Y = - \ln(X)$ as an extended fixed point.
 %    \begin{macrocode}
@@ -225,7 +234,7 @@
       \or: 2
       \else: 1
       \fi:
-    ; { #1 #2 #3 #4 }
+    \@@_sep: { #1 #2 #3 #4 }
   }
 %    \end{macrocode}
 % \end{macro}
@@ -234,7 +243,7 @@
 %   We have thus found $c \in [1,10]$ such that $0.7\leq ac < 1.4$
 %   in all cases. Compute $ 1 + x = 1 + ac \in [1.7,2.4)$.
 %    \begin{macrocode}
-\cs_new:Npn \@@_ln_x_ii:wnnnn #1; #2#3#4#5
+\cs_new:Npn \@@_ln_x_ii:wnnnn #1\@@_sep: #2#3#4#5
   {
     \exp_after:wN \@@_ln_div_after:Nw
     \cs:w c_@@_ln_ \@@_int_to_roman:w #1 _fixed_tl \exp_after:wN \cs_end:
@@ -244,14 +253,14 @@
         \exp_after:wN \@@_ln_x_iii_var:NNNNNw
         \int_value:w \@@_int_eval:w 9999 9990 + #1*#2#3 +
           \exp_after:wN \@@_ln_x_iii:NNNNNNw
-          \int_value:w \@@_int_eval:w 10 0000 0000 + #1*#4#5 ;
+          \int_value:w \@@_int_eval:w 10 0000 0000 + #1*#4#5 \@@_sep:
     {20000} {0000} {0000} {0000}
   } %^^A todo: reoptimize (a generalization attempt failed).
-\cs_new:Npn \@@_ln_x_iii:NNNNNNw #1#2 #3#4#5#6 #7;
-  { #1#2; {#3#4#5#6} {#7} }
-\cs_new:Npn \@@_ln_x_iii_var:NNNNNw #1 #2#3#4#5 #6;
+\cs_new:Npn \@@_ln_x_iii:NNNNNNw #1#2 #3#4#5#6 #7\@@_sep:
+  { #1#2\@@_sep: {#3#4#5#6} {#7} }
+\cs_new:Npn \@@_ln_x_iii_var:NNNNNw #1 #2#3#4#5 #6\@@_sep:
   {
-    #1#2#3#4#5 + 1 ;
+    #1#2#3#4#5 + 1 \@@_sep:
     {#1#2#3#4#5} {#6}
   }
 %    \end{macrocode}
@@ -322,16 +331,16 @@
 %   ^^A todo: doc
 %
 %   \begin{syntax}
-%     \cs{@@_ln_x_iv:wnnnnnnnn} \meta{1 or 2} \meta{8d} |;| \Arg{4d} \Arg{4d} \meta{fixed-tl}
+%     \cs{@@_ln_x_iv:wnnnnnnnn} \meta{1 or 2} \meta{8d} \cs{@@_sep:} \Arg{4d} \Arg{4d} \meta{fixed-tl}
 %   \end{syntax}
 %   The number is $x$. Compute $y$ by adding 1 to the five first digits.
 %    \begin{macrocode}
-\cs_new:Npn \@@_ln_x_iv:wnnnnnnnn #1; #2#3#4#5 #6#7#8#9
+\cs_new:Npn \@@_ln_x_iv:wnnnnnnnn #1\@@_sep: #2#3#4#5 #6#7#8#9
   {
     \exp_after:wN \@@_div_significand_pack:NNN
     \int_value:w \@@_int_eval:w
-    \@@_ln_div_i:w #1 ;
-      #6 #7 ; {#8} {#9}
+    \@@_ln_div_i:w #1 \@@_sep:
+      #6 #7 \@@_sep: {#8} {#9}
       {#2} {#3} {#4} {#5}
       { \exp_after:wN \@@_ln_div_ii:wwn \int_value:w #1 }
       { \exp_after:wN \@@_ln_div_ii:wwn \int_value:w #1 }
@@ -339,23 +348,25 @@
       { \exp_after:wN \@@_ln_div_ii:wwn \int_value:w #1 }
       { \exp_after:wN \@@_ln_div_vi:wwn \int_value:w #1 }
   }
-\cs_new:Npn \@@_ln_div_i:w #1;
+\cs_new:Npn \@@_ln_div_i:w #1\@@_sep:
   {
     \exp_after:wN \@@_div_significand_calc:wwnnnnnnn
-    \int_value:w \@@_int_eval:w 999999 + 2 0000 0000 / #1 ; % Q1
+    \int_value:w \@@_int_eval:w 999999 + 2 0000 0000 / #1 \@@_sep: % Q1
   }
-\cs_new:Npn \@@_ln_div_ii:wwn #1; #2;#3 % y; B1;B2 <- for k=1
+\cs_new:Npn \@@_ln_div_ii:wwn
+    #1\@@_sep: #2\@@_sep:#3 % y\@@_sep: B1\@@_sep:B2 <- for k=1
   {
     \exp_after:wN \@@_div_significand_pack:NNN
     \int_value:w \@@_int_eval:w
       \exp_after:wN \@@_div_significand_calc:wwnnnnnnn
-      \int_value:w \@@_int_eval:w 999999 + #2 #3 / #1 ; % Q2
-      #2 #3 ;
+      \int_value:w \@@_int_eval:w 999999 + #2 #3 / #1 \@@_sep: % Q2
+      #2 #3 \@@_sep:
   }
-\cs_new:Npn \@@_ln_div_vi:wwn #1; #2;#3#4#5 #6#7#8#9 %y;F1;F2F3F4x1x2x3x4
+\cs_new:Npn \@@_ln_div_vi:wwn
+    #1\@@_sep: #2\@@_sep:#3#4#5 #6#7#8#9 %y\@@_sep:F1\@@_sep:F2F3F4x1x2x3x4
   {
     \exp_after:wN \@@_div_significand_pack:NNN
-    \int_value:w \@@_int_eval:w 1000000 + #2 #3 / #1 ; % Q6
+    \int_value:w \@@_int_eval:w 1000000 + #2 #3 / #1 \@@_sep: % Q6
   }
 %    \end{macrocode}
 %   We now have essentially
@@ -368,8 +379,8 @@
 %     \cs{@@_div_significand_pack:NNN} $10^6 + Q_{3}$
 %     \cs{@@_div_significand_pack:NNN} $10^6 + Q_{4}$
 %     \cs{@@_div_significand_pack:NNN} $10^6 + Q_{5}$
-%     \cs{@@_div_significand_pack:NNN} $10^6 + Q_{6}$ |;|
-%     \meta{exponent} |;| \meta{continuation}
+%     \cs{@@_div_significand_pack:NNN} $10^6 + Q_{6}$ \cs{@@_sep:}
+%     \meta{exponent} \cs{@@_sep:} \meta{continuation}
 %   \end{syntax}
 %   where \meta{fixed tl} holds the logarithm of a number
 %   in $[1,10]$, and \meta{exponent} is
@@ -378,8 +389,9 @@
 %   correct order to add the $Q_{i}$ together and put semicolons
 %   between each piece. Once those have been expanded, we get
 %   \begin{syntax}
-%     \cs{@@_ln_div_after:Nw} \meta{fixed-tl} \meta{1d} |;| \meta{4d} |;| \meta{4d} |;|
-%     ~~\meta{4d} |;| \meta{4d} |;| \meta{4d} |;| \meta{4d} |;| \meta{exponent} |;|
+%     \cs{@@_ln_div_after:Nw} \meta{fixed-tl} \meta{1d} \cs{@@_sep:} \meta{4d} \cs{@@_sep:}
+%     ~~\meta{4d} \cs{@@_sep:} \meta{4d} \cs{@@_sep:} \meta{4d} \cs{@@_sep:} \meta{4d} \cs{@@_sep:}
+%     ~~\meta{4d} \cs{@@_sep:} \meta{exponent} \cs{@@_sep:}
 %   \end{syntax}
 %   ^^A todo: redoc.
 %   Just as with division, we know that the first two digits
@@ -388,7 +400,7 @@
 %   We then compute $1-2/(x+1)$, after testing whether $2/(x+1)$ is
 %   greater than or smaller than $1$.
 %    \begin{macrocode}
-\cs_new:Npn \@@_ln_div_after:Nw #1#2;
+\cs_new:Npn \@@_ln_div_after:Nw #1#2\@@_sep:
   {
     \if_meaning:w 0 #2
       \exp_after:wN \@@_ln_t_small:Nw
@@ -398,24 +410,26 @@
     \fi:
     #1
   }
-\cs_new:Npn \@@_ln_t_small:Nw #1 #2; #3; #4; #5; #6; #7;
+\cs_new:Npn \@@_ln_t_small:Nw
+    #1 #2\@@_sep: #3\@@_sep: #4\@@_sep: #5\@@_sep: #6\@@_sep: #7\@@_sep:
   {
     \exp_after:wN \@@_ln_t_large:NNw
     \exp_after:wN + % <sign>
     \exp_after:wN #1
-    \int_value:w \@@_int_eval:w 9999 - #2 \exp_after:wN ;
-    \int_value:w \@@_int_eval:w 9999 - #3 \exp_after:wN ;
-    \int_value:w \@@_int_eval:w 9999 - #4 \exp_after:wN ;
-    \int_value:w \@@_int_eval:w 9999 - #5 \exp_after:wN ;
-    \int_value:w \@@_int_eval:w 9999 - #6 \exp_after:wN ;
-    \int_value:w \@@_int_eval:w 1 0000 - #7 ;
+    \int_value:w \@@_int_eval:w 9999 - #2 \exp_after:wN \@@_sep:
+    \int_value:w \@@_int_eval:w 9999 - #3 \exp_after:wN \@@_sep:
+    \int_value:w \@@_int_eval:w 9999 - #4 \exp_after:wN \@@_sep:
+    \int_value:w \@@_int_eval:w 9999 - #5 \exp_after:wN \@@_sep:
+    \int_value:w \@@_int_eval:w 9999 - #6 \exp_after:wN \@@_sep:
+    \int_value:w \@@_int_eval:w 1 0000 - #7 \@@_sep:
   }
 %    \end{macrocode}
 %
 %   \begin{syntax}
 %     \cs{@@_ln_t_large:NNw} \meta{sign} \meta{fixed tl}
-%     ~~\meta{t_1}|;| \meta{t_2} |;| \meta{t_3}|;| \meta{t_4}|;| \meta{t_5} |;| \meta{t_6}|;|
-%     ~~\meta{exponent} |;| \meta{continuation}
+%     ~~\meta{t_1}\cs{@@_sep:} \meta{t_2} \cs{@@_sep:} \meta{t_3}\cs{@@_sep:} \meta{t_4}
+%     ~~\cs{@@_sep:} \meta{t_5} \cs{@@_sep:} \meta{t_6}\cs{@@_sep:}
+%     ~~\meta{exponent} \cs{@@_sep:} \meta{continuation}
 %   \end{syntax}
 %   Compute the square $|t|^2$, and keep $|t|$ at the end with its
 %   sign. We know that $|t|<0.1765$, so every piece has at most $4$
@@ -422,7 +436,9 @@
 %   digits. However, since we were not careful in \cs{@@_ln_t_small:w},
 %   they can have less than $4$ digits.
 %    \begin{macrocode}
-\cs_new:Npn \@@_ln_t_large:NNw #1 #2 #3; #4; #5; #6; #7; #8;
+\cs_new:Npn \@@_ln_t_large:NNw
+    #1 #2
+    #3\@@_sep: #4\@@_sep: #5\@@_sep: #6\@@_sep: #7\@@_sep: #8\@@_sep:
   {
     \exp_after:wN \@@_ln_square_t_after:w
     \int_value:w \@@_int_eval:w 9999 0000 + #3*#3
@@ -436,7 +452,7 @@
             \int_value:w \@@_int_eval:w
               1 0000 0000 + 2*#3*#7 + 2*#4*#6 + #5*#5
               + (2*#3*#8 + 2*#4*#7 + 2*#5*#6) / 1 0000
-              % ; ; ;
+              % \@@_sep: \@@_sep: \@@_sep:
     \exp_after:wN \@@_ln_twice_t_after:w
     \int_value:w \@@_int_eval:w -1 + 2*#3
       \exp_after:wN \@@_ln_twice_t_pack:Nw
@@ -448,15 +464,16 @@
             \exp_after:wN \@@_ln_twice_t_pack:Nw
             \int_value:w \@@_int_eval:w 9999 + 2*#7
               \exp_after:wN \@@_ln_twice_t_pack:Nw
-              \int_value:w \@@_int_eval:w 10000 + 2*#8 ; ;
+              \int_value:w \@@_int_eval:w 10000 + 2*#8 \@@_sep: \@@_sep:
     { \@@_ln_c:NwNw #1 }
     #2
   }
-\cs_new:Npn \@@_ln_twice_t_pack:Nw #1 #2; { + #1 ; {#2} }
-\cs_new:Npn \@@_ln_twice_t_after:w #1; { ;;; {#1} }
-\cs_new:Npn \@@_ln_square_t_pack:NNNNNw #1 #2#3#4#5 #6;
-  { + #1#2#3#4#5 ; {#6} }
-\cs_new:Npn \@@_ln_square_t_after:w 1 0 #1#2#3 #4;
+\cs_new:Npn \@@_ln_twice_t_pack:Nw #1 #2\@@_sep: { + #1 \@@_sep: {#2} }
+\cs_new:Npn \@@_ln_twice_t_after:w #1\@@_sep:
+  { \@@_sep:\@@_sep:\@@_sep: {#1} }
+\cs_new:Npn \@@_ln_square_t_pack:NNNNNw #1 #2#3#4#5 #6\@@_sep:
+  { + #1#2#3#4#5 \@@_sep: {#6} }
+\cs_new:Npn \@@_ln_square_t_after:w 1 0 #1#2#3 #4\@@_sep:
   { \@@_ln_Taylor:wwNw {0#1#2#3} {#4} }
 %    \end{macrocode}
 % \end{macro}
@@ -465,10 +482,10 @@
 %   Denoting $T=t^2$, we get
 %   \begin{syntax}
 %     \cs{@@_ln_Taylor:wwNw}
-%     ~~\Arg{T_1} \Arg{T_2} \Arg{T_3} \Arg{T_4} \Arg{T_5} \Arg{T_6} |;| |;|
-%     ~~\Arg{(2t)_1} \Arg{(2t)_2} \Arg{(2t)_3} \Arg{(2t)_4} \Arg{(2t)_5} \Arg{(2t)_6} |;|
+%     ~~\Arg{T_1} \Arg{T_2} \Arg{T_3} \Arg{T_4} \Arg{T_5} \Arg{T_6} \cs{@@_sep:} \cs{@@_sep:}
+%     ~~\Arg{(2t)_1} \Arg{(2t)_2} \Arg{(2t)_3} \Arg{(2t)_4} \Arg{(2t)_5} \Arg{(2t)_6} \cs{@@_sep:}
 %     ~~|{| \cs{@@_ln_c:NwNw} \meta{sign} |}|
-%     ~~\meta{fixed tl} \meta{exponent} |;| \meta{continuation}
+%     ~~\meta{fixed tl} \meta{exponent} \cs{@@_sep:} \meta{continuation}
 %   \end{syntax}
 %   And we want to compute
 %   \[
@@ -491,26 +508,30 @@
 %   (${}<10^4$).
 %    \begin{macrocode}
 \cs_new:Npn \@@_ln_Taylor:wwNw
-  { \@@_ln_Taylor_loop:www 21 ; {0000}{0000}{0000}{0000}{0000}{0000} ; }
-\cs_new:Npn \@@_ln_Taylor_loop:www #1; #2; #3;
   {
+    \@@_ln_Taylor_loop:www
+      21 \@@_sep: {0000}{0000}{0000}{0000}{0000}{0000} \@@_sep:
+  }
+\cs_new:Npn \@@_ln_Taylor_loop:www #1\@@_sep: #2\@@_sep: #3\@@_sep:
+  {
     \if_int_compare:w #1 = \c_one_int
       \@@_ln_Taylor_break:w
     \fi:
-    \exp_after:wN \@@_fixed_div_int:wwN \c_@@_one_fixed_tl #1;
-    \@@_fixed_add:wwn #2;
-    \@@_fixed_mul:wwn #3;
+    \exp_after:wN \@@_fixed_div_int:wwN \c_@@_one_fixed_tl #1\@@_sep:
+    \@@_fixed_add:wwn #2\@@_sep:
+    \@@_fixed_mul:wwn #3\@@_sep:
     {
       \exp_after:wN \@@_ln_Taylor_loop:www
-      \int_value:w \@@_int_eval:w #1 - 2 ;
+      \int_value:w \@@_int_eval:w #1 - 2 \@@_sep:
     }
-    #3;
+    #3\@@_sep:
   }
-\cs_new:Npn \@@_ln_Taylor_break:w \fi: #1 \@@_fixed_add:wwn #2#3; #4 ;;
+\cs_new:Npn \@@_ln_Taylor_break:w
+    \fi: #1 \@@_fixed_add:wwn #2#3\@@_sep: #4 \@@_sep:\@@_sep:
   {
     \fi:
     \exp_after:wN \@@_fixed_mul:wwn
-    \exp_after:wN { \int_value:w \@@_int_eval:w 10000 + #2 } #3;
+    \exp_after:wN { \int_value:w \@@_int_eval:w 10000 + #2 } #3\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -518,8 +539,8 @@
 % \begin{macro}{\@@_ln_c:NwNw}
 %   \begin{syntax}
 %     \cs{@@_ln_c:NwNw} \meta{sign}
-%     ~~\Arg{r_1} \Arg{r_2} \Arg{r_3} \Arg{r_4} \Arg{r_5} \Arg{r_6} |;|
-%     ~~\meta{fixed tl} \meta{exponent} |;| \meta{continuation}
+%     ~~\Arg{r_1} \Arg{r_2} \Arg{r_3} \Arg{r_4} \Arg{r_5} \Arg{r_6} \cs{@@_sep:}
+%     ~~\meta{fixed tl} \meta{exponent} \cs{@@_sep:} \meta{continuation}
 %   \end{syntax}
 %   We are now reduced to finding $\ln(c)$ and $\meta{exponent}\ln(10)$
 %   in a table, and adding it to the mixture. The first step is to
@@ -530,7 +551,7 @@
 %   is $1$ and $c=1$, we shift to working in units of $\cdot 10^4$,
 %   since the final result is at least $\ln(10/7) \simeq 0.35$.
 %    \begin{macrocode}
-\cs_new:Npn \@@_ln_c:NwNw #1 #2; #3
+\cs_new:Npn \@@_ln_c:NwNw #1 #2\@@_sep: #3
   {
     \if_meaning:w + #1
       \exp_after:wN \exp_after:wN \exp_after:wN \@@_fixed_sub:wwn
@@ -537,7 +558,7 @@
     \else:
       \exp_after:wN \exp_after:wN \exp_after:wN \@@_fixed_add:wwn
     \fi:
-    #3 #2 ;
+    #3 #2 \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -545,7 +566,7 @@
 % \begin{macro}{\@@_ln_exponent:wn}
 %   \begin{syntax}
 %     \cs{@@_ln_exponent:wn}
-%     ~~\Arg{s_1} \Arg{s_2} \Arg{s_3} \Arg{s_4} \Arg{s_5} \Arg{s_6} |;|
+%     ~~\Arg{s_1} \Arg{s_2} \Arg{s_3} \Arg{s_4} \Arg{s_5} \Arg{s_6} \cs{@@_sep:}
 %     ~~\Arg{exponent}
 %   \end{syntax}
 %   Compute \meta{exponent} times $\ln(10)$. Apart from the cases where
@@ -559,7 +580,7 @@
 %   Besides, we already have addition and subtraction for $24$ digits
 %   fixed point numbers.
 %    \begin{macrocode}
-\cs_new:Npn \@@_ln_exponent:wn #1; #2
+\cs_new:Npn \@@_ln_exponent:wn #1\@@_sep: #2
   {
     \if_case:w #2 \exp_stop_f:
       0 \@@_case_return:nw { \@@_fixed_to_float_o:Nw 2 }
@@ -576,16 +597,16 @@
         \exp_after:wN \@@_fixed_add:wwn \int_value:w -
       \fi:
     \fi:
-    #2; #1;
+    #2\@@_sep: #1\@@_sep:
   }
 %    \end{macrocode}
 %   Now we painfully write all the cases.\footnote{Bruno: do rounding.}
 %   No overflow nor underflow can happen, except when computing \texttt{ln(1)}.
 %    \begin{macrocode}
-\cs_new:Npn \@@_ln_exponent_one:ww 1; #1;
+\cs_new:Npn \@@_ln_exponent_one:ww 1\@@_sep: #1\@@_sep:
   {
     0
-    \exp_after:wN \@@_fixed_sub:wwn \c_@@_ln_x_fixed_tl #1;
+    \exp_after:wN \@@_fixed_sub:wwn \c_@@_ln_x_fixed_tl #1\@@_sep:
     \@@_fixed_to_float_o:wN 0
   }
 %    \end{macrocode}
@@ -594,14 +615,14 @@
 %   in the conversion from fixed point to floating point). Note that here
 %   the exponent has been made positive.
 %    \begin{macrocode}
-\cs_new:Npn \@@_ln_exponent_small:NNww #1#2#3; #4#5#6#7#8#9;
+\cs_new:Npn \@@_ln_exponent_small:NNww #1#2#3\@@_sep: #4#5#6#7#8#9\@@_sep:
   {
     4
     \exp_after:wN \@@_fixed_mul:wwn
       \c_@@_ln_x_fixed_tl
-      {#3}{0000}{0000}{0000}{0000}{0000} ;
+      {#3}{0000}{0000}{0000}{0000}{0000} \@@_sep:
     #2
-      {0000}{#4}{#5}{#6}{#7}{#8};
+      {0000}{#4}{#5}{#6}{#7}{#8}\@@_sep:
     \@@_fixed_to_float_o:wN #1
   }
 %    \end{macrocode}
@@ -613,7 +634,7 @@
 %
 % \begin{macro}[EXP]{\@@_exp_o:w}
 %    \begin{macrocode}
-\cs_new:Npn \@@_exp_o:w #1 \s_@@ \@@_chk:w #2#3#4; @
+\cs_new:Npn \@@_exp_o:w #1 \s_@@ \@@_chk:w #2#3#4\@@_sep: @
   {
     \if_case:w #2 \exp_stop_f:
       \@@_case_return_o:Nw \c_one_fp
@@ -630,7 +651,7 @@
     \or:
       \@@_case_return_same_o:w
     \fi:
-    \s_@@ \@@_chk:w #2#3#4;
+    \s_@@ \@@_chk:w #2#3#4\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -645,7 +666,7 @@
       \@@_exp_pos_o:NNwnw - \@@_fixed_inv_to_float_o:wN
     \fi:
   }
-\cs_new:Npn \@@_exp_pos_o:NNwnw #1#2#3 \fi: #4#5;
+\cs_new:Npn \@@_exp_pos_o:NNwnw #1#2#3 \fi: #4#5\@@_sep:
   {
     \fi:
     \if_int_compare:w #4 > \c_@@_max_exp_exponent_int
@@ -696,7 +717,7 @@
 %   delimited by a semicolon, form a fixed point number, so we pack it
 %   in blocks of $4$ digits.
 %    \begin{macrocode}
-\cs_new:Npn \@@_exp_Taylor:Nnnwn #1#2#3 #4; #5 #6
+\cs_new:Npn \@@_exp_Taylor:Nnnwn #1#2#3 #4\@@_sep: #5 #6
   {
     #6
     \@@_pack_twice_four:wNNNNNNNN
@@ -703,26 +724,26 @@
     \@@_pack_twice_four:wNNNNNNNN
     \@@_pack_twice_four:wNNNNNNNN
     \@@_exp_Taylor_ii:ww
-    ; #2#3#4 0000 0000 ;
+    \@@_sep: #2#3#4 0000 0000 \@@_sep:
   }
-\cs_new:Npn \@@_exp_Taylor_ii:ww #1; #2;
-  { \@@_exp_Taylor_loop:www 10 ; #1 ; #1 ; \s_@@_stop }
-\cs_new:Npn \@@_exp_Taylor_loop:www #1; #2; #3;
+\cs_new:Npn \@@_exp_Taylor_ii:ww #1\@@_sep: #2\@@_sep:
+  { \@@_exp_Taylor_loop:www 10 \@@_sep: #1 \@@_sep: #1 \@@_sep: \s_@@_stop }
+\cs_new:Npn \@@_exp_Taylor_loop:www #1\@@_sep: #2\@@_sep: #3\@@_sep:
   {
     \if_int_compare:w #1 = \c_one_int
       \exp_after:wN \@@_exp_Taylor_break:Nww
     \fi:
-    \@@_fixed_div_int:wwN #3 ; #1 ;
+    \@@_fixed_div_int:wwN #3 \@@_sep: #1 \@@_sep:
     \@@_fixed_add_one:wN
-    \@@_fixed_mul:wwn #2 ;
+    \@@_fixed_mul:wwn #2 \@@_sep:
     {
       \exp_after:wN \@@_exp_Taylor_loop:www
-      \int_value:w \@@_int_eval:w #1 - 1 ;
-      #2 ;
+      \int_value:w \@@_int_eval:w #1 - 1 \@@_sep:
+      #2 \@@_sep:
     }
   }
-\cs_new:Npn \@@_exp_Taylor_break:Nww #1 #2; #3 \s_@@_stop
-  { \@@_fixed_add_one:wN #2 ; }
+\cs_new:Npn \@@_exp_Taylor_break:Nww #1 #2\@@_sep: #3 \s_@@_stop
+  { \@@_fixed_add_one:wN #2 \@@_sep: }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -824,23 +845,23 @@
 %   on to the Taylor series, eventually multiplied with the mantissa
 %   that we have just computed.
 %    \begin{macrocode}
-\cs_new:Npn \@@_exp_pos_large:NnnNwn #1#2#3 #4#5; #6
+\cs_new:Npn \@@_exp_pos_large:NnnNwn #1#2#3 #4#5\@@_sep: #6
   {
     \exp_after:wN \exp_after:wN \exp_after:wN \@@_exp_large:NwN
     \exp_after:wN \exp_after:wN \exp_after:wN #6
     \exp_after:wN \c_@@_one_fixed_tl
     \int_value:w #3 #4 \exp_stop_f:
-    #5 00000 ;
+    #5 00000 \@@_sep:
   }
-\cs_new:Npn \@@_exp_large:NwN #1#2; #3
+\cs_new:Npn \@@_exp_large:NwN #1#2\@@_sep: #3
   {
     \if_case:w #3 ~
       \exp_after:wN \@@_fixed_continue:wn
     \else:
       \exp_after:wN \@@_exp_intarray:w
-      \int_value:w \@@_int_eval:w 36 * #1 + 4 * #3 \exp_after:wN ;
+      \int_value:w \@@_int_eval:w 36 * #1 + 4 * #3 \exp_after:wN \@@_sep:
     \fi:
-    #2;
+    #2\@@_sep:
     {
       \if_meaning:w 0 #1
         \exp_after:wN \@@_exp_large_after:wwn
@@ -850,7 +871,7 @@
       \fi:
     }
   }
-\cs_new:Npn \@@_exp_intarray:w #1 ;
+\cs_new:Npn \@@_exp_intarray:w #1 \@@_sep:
   {
     +
     \__kernel_intarray_item:Nn \c_@@_exp_intarray
@@ -865,13 +886,15 @@
     \int_value:w \__kernel_intarray_item:Nn
                    \c_@@_exp_intarray { \@@_int_eval:w #1 - 1 }
     \exp_after:wN \@@_exp_intarray_aux:w
-    \int_value:w \__kernel_intarray_item:Nn \c_@@_exp_intarray {#1} ; ;
+    \int_value:w \__kernel_intarray_item:Nn
+                   \c_@@_exp_intarray {#1} \@@_sep: \@@_sep:
   }
-\cs_new:Npn \@@_exp_intarray_aux:w 1 #1#2#3#4#5 ; { ; {#1#2#3#4} {#5} }
-\cs_new:Npn \@@_exp_large_after:wwn #1; #2; #3
+\cs_new:Npn \@@_exp_intarray_aux:w 1 #1#2#3#4#5 \@@_sep:
+  { \@@_sep: {#1#2#3#4} {#5} }
+\cs_new:Npn \@@_exp_large_after:wwn #1\@@_sep: #2\@@_sep: #3
   {
-    \@@_exp_Taylor:Nnnwn ? { } { } 0 #2; {} #3
-    \@@_fixed_mul:wwn #1;
+    \@@_exp_Taylor:Nnnwn ? { } { } 0 #2\@@_sep: {} #3
+    \@@_fixed_mul:wwn #1\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -921,7 +944,7 @@
 %   \end{itemize}
 %    \begin{macrocode}
 \cs_new:cpn { @@_ \iow_char:N \^ _o:ww }
-    \s_@@ \@@_chk:w #1#2#3; \s_@@ \@@_chk:w #4#5#6;
+    \s_@@ \@@_chk:w #1#2#3\@@_sep: \s_@@ \@@_chk:w #4#5#6\@@_sep:
   {
     \if_meaning:w 0 #4
       \@@_case_return_o:Nw \c_one_fp
@@ -940,10 +963,10 @@
       \else:
         \exp_after:wN \@@_pow_zero_or_inf:ww
       \fi:
-      \s_@@ \@@_chk:w #1#2#3;
+      \s_@@ \@@_chk:w #1#2#3\@@_sep:
     }
-    { \s_@@ \@@_chk:w #4#5#6; \s_@@ \@@_chk:w #1#2#3; }
-    \s_@@ \@@_chk:w #4#5#6;
+    { \s_@@ \@@_chk:w #4#5#6\@@_sep: \s_@@ \@@_chk:w #1#2#3\@@_sep: }
+    \s_@@ \@@_chk:w #4#5#6\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -959,7 +982,7 @@
 %   unless $b=-\infty$.
 %    \begin{macrocode}
 \cs_new:Npn \@@_pow_zero_or_inf:ww
-    \s_@@ \@@_chk:w #1#2; \s_@@ \@@_chk:w #3#4
+    \s_@@ \@@_chk:w #1#2\@@_sep: \s_@@ \@@_chk:w #3#4
   {
     \if_meaning:w 1 #4
       \@@_case_return_same_o:w
@@ -976,7 +999,7 @@
       \@@_case_use:nw
         {
           \@@_division_by_zero_o:NNww \c_inf_fp ^
-            \s_@@ \@@_chk:w #1 #2 ;
+            \s_@@ \@@_chk:w #1 #2 \@@_sep:
         }
     \fi:
     \s_@@ \@@_chk:w #3#4
@@ -1000,7 +1023,7 @@
 %   \end{itemize}
 %    \begin{macrocode}
 \cs_new:Npn \@@_pow_normal_o:ww
-    \s_@@ \@@_chk:w 1 #1#2#3; \s_@@ \@@_chk:w #4#5
+    \s_@@ \@@_chk:w 1 #1#2#3\@@_sep: \s_@@ \@@_chk:w #4#5
   {
     \if:w 0 \@@_str_if_eq:nn { #2 #3 } { 1 {1000} {0000} {0000} {0000} }
       \if_int_compare:w #4 #1 = 32 \exp_stop_f:
@@ -1024,7 +1047,7 @@
     \or:
       \@@_case_return_ii_o:ww
     \fi:
-    \s_@@ \@@_chk:w 1 #1 {#2} #3 ;
+    \s_@@ \@@_chk:w 1 #1 {#2} #3 \@@_sep:
     \s_@@ \@@_chk:w #4 #5
   }
 %    \end{macrocode}
@@ -1069,17 +1092,18 @@
 %   float.  Then comes an exponent and the $4$ brace groups of $x$,
 %   followed by $b$.  Compute $-\ln(x)$.
 %    \begin{macrocode}
-\cs_new:Npn \@@_pow_npos_aux:NNnww #1#2#3#4#5; \s_@@ \@@_chk:w 1#6#7#8;
+\cs_new:Npn \@@_pow_npos_aux:NNnww
+    #1#2#3#4#5\@@_sep: \s_@@ \@@_chk:w 1#6#7#8\@@_sep:
   {
     #1
     \@@_int_eval:w
       \@@_ln_significand:NNNNnnnN #4#5
       \@@_pow_exponent:wnN {#3}
-      \@@_fixed_mul:wwn #8 {0000}{0000} ;
-      \@@_pow_B:wwN #7;
+      \@@_fixed_mul:wwn #8 {0000}{0000} \@@_sep:
+      \@@_pow_B:wwN #7\@@_sep:
       #1 #2 0 % fixed_to_float_o:wN
   }
-\cs_new:Npn \@@_pow_exponent:wnN #1; #2
+\cs_new:Npn \@@_pow_exponent:wnN #1\@@_sep: #2
   {
     \if_int_compare:w #2 > \c_zero_int
       \exp_after:wN \@@_pow_exponent:Nwnnnnnw % n\ln(10) - (-\ln(x))
@@ -1088,9 +1112,9 @@
       \exp_after:wN \@@_pow_exponent:Nwnnnnnw % -(|n|\ln(10) + (-\ln(x)))
       \exp_after:wN -
     \fi:
-    #2; #1;
+    #2\@@_sep: #1\@@_sep:
   }
-\cs_new:Npn \@@_pow_exponent:Nwnnnnnw #1#2; #3#4#5#6#7#8;
+\cs_new:Npn \@@_pow_exponent:Nwnnnnnw #1#2\@@_sep: #3#4#5#6#7#8\@@_sep:
   { %^^A todo: use that in ln.
     \exp_after:wN \@@_fixed_mul_after:wwn
     \int_value:w \@@_int_eval:w \c_@@_leading_shift_int
@@ -1109,9 +1133,9 @@
               \exp_after:wN \@@_pack:NNNNNw
               \int_value:w \@@_int_eval:w \c_@@_trailing_shift_int
                 #1 #2*8401 - #1 #7
-                #1 ( #2*7991 - #8 ) / 1 0000 ; ;
+                #1 ( #2*7991 - #8 ) / 1 0000 \@@_sep: \@@_sep:
   }
-\cs_new:Npn \@@_pow_B:wwN #1#2#3#4#5#6; #7;
+\cs_new:Npn \@@_pow_B:wwN #1#2#3#4#5#6\@@_sep: #7\@@_sep:
   {
     \if_int_compare:w #7 < \c_zero_int
       \exp_after:wN \@@_pow_C_neg:w \int_value:w -
@@ -1122,23 +1146,23 @@
         \exp_after:wN \@@_pow_C_overflow:w \int_value:w
       \fi:
     \fi:
-    #7 \exp_after:wN ;
+    #7 \exp_after:wN \@@_sep:
     \int_value:w \@@_int_eval:w 10 0000 + #1 \@@_int_eval_end:
-    #2#3#4#5#6 0000 0000 0000 0000 0000 0000 ; %^^A todo: how many 0?
+    #2#3#4#5#6 0000 0000 0000 0000 0000 0000 \@@_sep: %^^A todo: how many 0?
   }
-\cs_new:Npn \@@_pow_C_overflow:w #1; #2; #3
+\cs_new:Npn \@@_pow_C_overflow:w #1\@@_sep: #2\@@_sep: #3
   {
     + 2 * \c_@@_max_exponent_int
     \exp_after:wN \@@_fixed_continue:wn \c_@@_one_fixed_tl
   }
-\cs_new:Npn \@@_pow_C_neg:w #1 ; 1
+\cs_new:Npn \@@_pow_C_neg:w #1 \@@_sep: 1
   {
     \exp_after:wN \exp_after:wN \exp_after:wN \@@_pow_C_pack:w
     \prg_replicate:nn {#1} {0}
   }
-\cs_new:Npn \@@_pow_C_pos:w #1; 1
-  { \@@_pow_C_pos_loop:wN #1; }
-\cs_new:Npn \@@_pow_C_pos_loop:wN #1; #2
+\cs_new:Npn \@@_pow_C_pos:w #1\@@_sep: 1
+  { \@@_pow_C_pos_loop:wN #1\@@_sep: }
+\cs_new:Npn \@@_pow_C_pos_loop:wN #1\@@_sep: #2
   {
     \if_meaning:w 0 #1
       \exp_after:wN \@@_pow_C_pack:w
@@ -1149,7 +1173,7 @@
       \else:
         \exp_after:wN \@@_pow_C_overflow:w \int_value:w
       \fi:
-      \@@_int_eval:w #1 - 1 \exp_after:wN ;
+      \@@_int_eval:w #1 - 1 \exp_after:wN \@@_sep:
     \fi:
   }
 \cs_new:Npn \@@_pow_C_pack:w
@@ -1173,13 +1197,14 @@
 %   called, |(-0.1)**(12345.67)| gives $+0$ rather than complaining
 %   that the sign is not defined.
 %    \begin{macrocode}
-\cs_new:Npn \@@_pow_neg:www \s_@@ \@@_chk:w #1#2; #3; #4;
+\cs_new:Npn \@@_pow_neg:www
+    \s_@@ \@@_chk:w #1#2\@@_sep: #3\@@_sep: #4\@@_sep:
   {
-    \if_case:w \@@_pow_neg_case:w #4 ;
+    \if_case:w \@@_pow_neg_case:w #4 \@@_sep:
       \exp_after:wN \@@_pow_neg_aux:wNN
     \or:
       \if_int_compare:w \@@_int_eval:w #1 / 2 = \c_one_int
-        \@@_invalid_operation_o:Nww ^ #3; #4;
+        \@@_invalid_operation_o:Nww ^ #3\@@_sep: #4\@@_sep:
         \exp:w \exp_end_continue_f:w
         \exp_after:wN \exp_after:wN
         \exp_after:wN \@@_use_none_until_s:w
@@ -1186,7 +1211,7 @@
       \fi:
     \fi:
     \@@_exp_after_o:w
-    \s_@@ \@@_chk:w #1#2;
+    \s_@@ \@@_chk:w #1#2\@@_sep:
   }
 \cs_new:Npn \@@_pow_neg_aux:wNN #1 \s_@@ \@@_chk:w #2#3
   {
@@ -1216,7 +1241,7 @@
 %   |0|~if and only if the number was an integer, and |#3| is the $8$
 %   least significant digits of that integer.
 %    \begin{macrocode}
-\cs_new:Npn \@@_pow_neg_case:w \s_@@ \@@_chk:w #1#2#3;
+\cs_new:Npn \@@_pow_neg_case:w \s_@@ \@@_chk:w #1#2#3\@@_sep:
   {
     \if_case:w #1 \exp_stop_f:
            -1
@@ -1236,7 +1261,7 @@
         {#2} {#3} {#4} {#5}
     \fi:
   }
-\cs_new:Npn \@@_pow_neg_case_aux:Nnnw #1#2#3#4 ;
+\cs_new:Npn \@@_pow_neg_case_aux:Nnnw #1#2#3#4 \@@_sep:
   {
     \if_meaning:w 0 #1
       \if_int_odd:w #3 \exp_stop_f:
@@ -1270,7 +1295,7 @@
 %   with $24$ digits instead of~$16$.  It is easy to check that
 %   computing factorials with this precision is enough.
 %    \begin{macrocode}
-\cs_new:Npn \@@_fact_o:w #1 \s_@@ \@@_chk:w #2#3#4; @
+\cs_new:Npn \@@_fact_o:w #1 \s_@@ \@@_chk:w #2#3#4\@@_sep: @
   {
     \if_case:w #2 \exp_stop_f:
       \@@_case_return_o:Nw \c_one_fp
@@ -1286,7 +1311,7 @@
       \@@_case_use:nw { \@@_invalid_operation_o:fw { fact } }
     \fi:
     \@@_fact_pos_o:w
-    \s_@@ \@@_chk:w #2 #3 #4 ;
+    \s_@@ \@@_chk:w #2 #3 #4 \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1298,11 +1323,11 @@
 %   \cs{@@_sanitize:Nw} with a positive sign marker~|0| and an integer
 %   expression that will mop up any exponent in the calculation.
 %    \begin{macrocode}
-\cs_new:Npn \@@_fact_pos_o:w #1;
+\cs_new:Npn \@@_fact_pos_o:w #1\@@_sep:
   {
-    \@@_small_int:wTF #1;
+    \@@_small_int:wTF #1\@@_sep:
       { \@@_fact_int_o:n }
-      { \@@_invalid_operation_o:fw { fact } #1; }
+      { \@@_invalid_operation_o:fw { fact } #1\@@_sep: }
   }
 \cs_new:Npn \@@_fact_int_o:n #1
   {
@@ -1316,7 +1341,7 @@
     \exp_after:wN \@@_sanitize:Nw
     \exp_after:wN 0
     \int_value:w \@@_int_eval:w
-    \@@_fact_loop_o:w #1 . 4 , { 1 } { } { } { } { } { } ;
+    \@@_fact_loop_o:w #1 . 4 , { 1 } { } { } { } { } { } \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1325,7 +1350,7 @@
 %   The loop receives an integer |#1| whose factorial we want to
 %   compute, which we progressively decrement, and the result so far as
 %   an extended-precision number |#2| in the form
-%   \meta{exponent}|,|\meta{mantissa}|;|.  The loop goes in steps of two
+%   \meta{exponent}|,|\meta{mantissa}\cs{@@_sep:}.  The loop goes in steps of two
 %   because we compute |#1*#1-1| as an integer expression (it must fit
 %   since |#1| is at most $3248$), then multiply with the result so far.
 %   We don't need to fill in most of the mantissa with zeros because
@@ -1335,7 +1360,7 @@
 %   chosen because the normalization step cannot deal with larger
 %   integers.
 %    \begin{macrocode}
-\cs_new:Npn \@@_fact_loop_o:w #1 . #2 ;
+\cs_new:Npn \@@_fact_loop_o:w #1 . #2 \@@_sep:
   {
     \if_int_compare:w #1 < 12 \exp_stop_f:
       \@@_fact_small_o:w #1
@@ -1343,14 +1368,14 @@
     \exp_after:wN \@@_ep_mul:wwwwn
     \exp_after:wN 4 \exp_after:wN ,
     \exp_after:wN { \int_value:w \@@_int_eval:w #1 * (#1 - 1) }
-    { } { } { } { } { } ;
-    #2 ;
+    { } { } { } { } { } \@@_sep:
+    #2 \@@_sep:
     {
       \exp_after:wN \@@_fact_loop_o:w
       \int_value:w \@@_int_eval:w #1 - 2 .
     }
   }
-\cs_new:Npn \@@_fact_small_o:w #1 \fi: #2 ; #3 ; #4
+\cs_new:Npn \@@_fact_small_o:w #1 \fi: #2 \@@_sep: #3 \@@_sep: #4
   {
     \fi:
     \exp_after:wN \@@_ep_mul:wwwwn
@@ -1362,8 +1387,8 @@
         1 \or: 1 \or: 2 \or: 6 \or: 24 \or: 120 \or: 720 \or: 5040
         \or: 40320 \or: 362880 \or: 3628800 \or: 39916800
         \fi:
-      } { } { } { } { } { } ;
-    #3 ;
+      } { } { } { } { } { } \@@_sep:
+    #3 \@@_sep:
     \@@_ep_to_float_o:wwN 0
   }
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp-extended.dtx
 %
-% Copyright (C) 2011-2024 The LaTeX Project
+% Copyright (C) 2011-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -76,7 +76,7 @@
 % enough to be rounded away when converting back to a floating point
 % number.  The fixed point numbers are expressed as
 % \begin{quote}
-%   \Arg{a_1} \Arg{a_2} \Arg{a_3} \Arg{a_4} \Arg{a_5} \Arg{a_6} |;|
+%   \Arg{a_1} \Arg{a_2} \Arg{a_3} \Arg{a_4} \Arg{a_5} \Arg{a_6} \cs{@@_sep:}
 % \end{quote}
 % where each \meta{a_i} is exactly $4$ digits (ranging from |0000| to
 % |9999|), except \meta{a_1}, which may be any \enquote{not-too-large}
@@ -89,7 +89,8 @@
 %
 % Most functions we define here have the form
 % \begin{syntax}
-%   \cs{@@_fixed_\meta{calculation}:wwn} \meta{operand_1} |;| \meta{operand_2} |;| \Arg{continuation}
+%   \cs{@@_fixed_\meta{calculation}:wwn} \meta{operand_1} \cs{@@_sep:}
+%   ~~\meta{operand_2} \cs{@@_sep:} \Arg{continuation}
 % \end{syntax}
 % They perform the \meta{calculation} on the two \meta{operands}, then
 % feed the result ($6$ brace groups followed by a semicolon) to the
@@ -97,9 +98,9 @@
 % Some functions only accept an \texttt{N}-type \meta{continuation}.
 % This allows constructions such as
 % \begin{quote}
-%   \cs{@@_fixed_add:wwn} \meta{X_1} |;| \meta{X_2} |;| \\
-%   \cs{@@_fixed_mul:wwn} \meta{X_3} |;| \\
-%   \cs{@@_fixed_add:wwn} \meta{X_4} |;| \\
+%   \cs{@@_fixed_add:wwn} \meta{X_1} \cs{@@_sep:} \meta{X_2} \cs{@@_sep:} \\
+%   \cs{@@_fixed_mul:wwn} \meta{X_3} \cs{@@_sep:} \\
+%   \cs{@@_fixed_add:wwn} \meta{X_4} \cs{@@_sep:} \\
 % \end{quote}
 % to compute $(X_1+X_2)\cdot X_3 + X_4$.  This turns out to be very
 % appropriate for computing continued fractions and Taylor series.
@@ -116,7 +117,7 @@
 %   The fixed-point number~$1$, used in \pkg{l3fp-expo}.
 %    \begin{macrocode}
 \tl_const:Nn \c_@@_one_fixed_tl
-  { {10000} {0000} {0000} {0000} {0000} {0000} ; }
+  { {10000} {0000} {0000} {0000} {0000} {0000} \@@_sep: }
 %    \end{macrocode}
 % \end{variable}
 %
@@ -123,22 +124,22 @@
 % \begin{macro}[EXP]{\@@_fixed_continue:wn}
 %   This function simply calls the next function.
 %    \begin{macrocode}
-\cs_new:Npn \@@_fixed_continue:wn #1; #2 { #2 #1; }
+\cs_new:Npn \@@_fixed_continue:wn #1\@@_sep: #2 { #2 #1\@@_sep: }
 %    \end{macrocode}
 % \end{macro}
 %
 % \begin{macro}[EXP]{\@@_fixed_add_one:wN}
 %   \begin{syntax}
-%     \cs{@@_fixed_add_one:wN} \meta{a} |;| \meta{continuation}
+%     \cs{@@_fixed_add_one:wN} \meta{a} \cs{@@_sep:} \meta{continuation}
 %   \end{syntax}
 %   This function adds $1$ to the fixed point \meta{a}, by changing
 %   $a_1$ to $10000+a_1$, then calls the \meta{continuation}.  This
 %   requires $a_1 + 10000 < 2^{31}$.
 %    \begin{macrocode}
-\cs_new:Npn \@@_fixed_add_one:wN #1#2; #3
+\cs_new:Npn \@@_fixed_add_one:wN #1#2\@@_sep: #3
   {
     \exp_after:wN #3 \exp_after:wN
-      { \int_value:w \@@_int_eval:w \c_@@_myriad_int + #1 } #2 ;
+      { \int_value:w \@@_int_eval:w \c_@@_myriad_int + #1 } #2 \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -151,13 +152,13 @@
 %   exactly $4$~digits.  The choice of shifts allows~|#1| to be in the
 %   range $[0, 5\cdot 10^{8}-1]$.
 %    \begin{macrocode}
-\cs_new:Npn \@@_fixed_div_myriad:wn #1#2#3#4#5#6;
+\cs_new:Npn \@@_fixed_div_myriad:wn #1#2#3#4#5#6\@@_sep:
   {
     \exp_after:wN \@@_fixed_mul_after:wwn
     \int_value:w \@@_int_eval:w \c_@@_leading_shift_int
       \exp_after:wN \@@_pack:NNNNNw
       \int_value:w \@@_int_eval:w \c_@@_trailing_shift_int
-        + #1 ; {#2}{#3}{#4}{#5};
+        + #1 \@@_sep: {#2}{#3}{#4}{#5}\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -167,7 +168,8 @@
 %   calling this auxiliary.  It braces the last block of digits, and
 %   places the \meta{continuation} |#3| in front.
 %    \begin{macrocode}
-\cs_new:Npn \@@_fixed_mul_after:wwn #1; #2; #3 { #3 {#1} #2; }
+\cs_new:Npn \@@_fixed_mul_after:wwn #1\@@_sep: #2\@@_sep: #3
+  { #3 {#1} #2\@@_sep: }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -176,13 +178,13 @@
 % \begin{macro}[EXP]{\@@_fixed_mul_short:wwn}
 %   \begin{syntax}\parskip=0pt\obeylines
 %     \cs{@@_fixed_mul_short:wwn}
-%     |  |\Arg{a_1} \Arg{a_2} \Arg{a_3} \Arg{a_4} \Arg{a_5} \Arg{a_6} |;|
-%     |  |\Arg{b_0} \Arg{b_1} \Arg{b_2} |;| \Arg{continuation}
+%     |  |\Arg{a_1} \Arg{a_2} \Arg{a_3} \Arg{a_4} \Arg{a_5} \Arg{a_6} \cs{@@_sep:}
+%     |  |\Arg{b_0} \Arg{b_1} \Arg{b_2} \cs{@@_sep:} \Arg{continuation}
 %   \end{syntax}
 %   Computes the product $c=ab$ of $a=\sum_i \meta{a_i} 10^{-4i}$ and
 %   $b=\sum_i \meta{b_i} 10^{-4i}$, rounds it to the closest multiple of
 %   $10^{-24}$, and leaves \meta{continuation} \Arg{c_1} \ldots{}
-%   \Arg{c_6} |;| in the input stream, where each of the \meta{c_i} are
+%   \Arg{c_6} \cs{@@_sep:} in the input stream, where each of the \meta{c_i} are
 %   blocks of $4$~digits, except \meta{c_1}, which is any \TeX{}
 %   integer.  Note that indices for \meta{b} start at~$0$: for instance
 %   a second operand of |{0001}{0000}{0000}| leaves the first operand
@@ -189,7 +191,7 @@
 %   unchanged (rather than dividing it by $10^{4}$, as
 %   \cs{@@_fixed_mul:wwn} would).
 %    \begin{macrocode}
-\cs_new:Npn \@@_fixed_mul_short:wwn #1#2#3#4#5#6; #7#8#9;
+\cs_new:Npn \@@_fixed_mul_short:wwn #1#2#3#4#5#6\@@_sep: #7#8#9\@@_sep:
   {
     \exp_after:wN \@@_fixed_mul_after:wwn
     \int_value:w \@@_int_eval:w \c_@@_leading_shift_int
@@ -210,7 +212,7 @@
               \int_value:w \@@_int_eval:w \c_@@_trailing_shift_int
                 + #4*#9 + #5*#8 + #6*#7
                 + ( #5*#9 + #6*#8 + #6*#9 / \c_@@_myriad_int )
-                / \c_@@_myriad_int ; ;
+                / \c_@@_myriad_int \@@_sep: \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -225,7 +227,7 @@
 %     \@@_fixed_div_int_after:Nw
 %   }
 %   \begin{syntax}
-%     \cs{@@_fixed_div_int:wwN} \meta{a} |;| \meta{n} |;| \meta{continuation}
+%     \cs{@@_fixed_div_int:wwN} \meta{a} \cs{@@_sep:} \meta{n} \cs{@@_sep:} \meta{continuation}
 %   \end{syntax}
 %   Divides the fixed point number \meta{a} by the (small) integer
 %   $0<\meta{n}<10^4$ and feeds the result to the \meta{continuation}.
@@ -255,7 +257,7 @@
 %     \cs{@@_fixed_div_int_pack:Nw} $9999 + Q_{4}$ \\
 %     \cs{@@_fixed_div_int_pack:Nw} $9999 + Q_{5}$ \\
 %     \cs{@@_fixed_div_int_pack:Nw} $9999$ \\
-%     \cs{@@_fixed_div_int_auxii:wnn} $Q_{6}$ |;| \Arg{n} \Arg{a_{6}}
+%     \cs{@@_fixed_div_int_auxii:wnn} $Q_{6}$ \cs{@@_sep:} \Arg{n} \Arg{a_{6}}
 %   \end{quote}
 %   where expansion is happening from the last line up.  The
 %   \texttt{iii} auxiliary adds $Q_{6} + 2 \simeq a_{6}/n + 1$ to the
@@ -268,27 +270,27 @@
 %   brace group is produced by the \texttt{after} auxiliary, which
 %   places the \meta{continuation} as appropriate.
 %    \begin{macrocode}
-\cs_new:Npn \@@_fixed_div_int:wwN #1#2#3#4#5#6 ; #7 ; #8
+\cs_new:Npn \@@_fixed_div_int:wwN #1#2#3#4#5#6 \@@_sep: #7 \@@_sep: #8
   {
     \exp_after:wN \@@_fixed_div_int_after:Nw
     \exp_after:wN #8
     \int_value:w \@@_int_eval:w - 1
       \@@_fixed_div_int:wnN
-      #1; {#7} \@@_fixed_div_int_auxi:wnn
-      #2; {#7} \@@_fixed_div_int_auxi:wnn
-      #3; {#7} \@@_fixed_div_int_auxi:wnn
-      #4; {#7} \@@_fixed_div_int_auxi:wnn
-      #5; {#7} \@@_fixed_div_int_auxi:wnn
-      #6; {#7} \@@_fixed_div_int_auxii:wnn ;
+      #1\@@_sep: {#7} \@@_fixed_div_int_auxi:wnn
+      #2\@@_sep: {#7} \@@_fixed_div_int_auxi:wnn
+      #3\@@_sep: {#7} \@@_fixed_div_int_auxi:wnn
+      #4\@@_sep: {#7} \@@_fixed_div_int_auxi:wnn
+      #5\@@_sep: {#7} \@@_fixed_div_int_auxi:wnn
+      #6\@@_sep: {#7} \@@_fixed_div_int_auxii:wnn \@@_sep:
   }
-\cs_new:Npn \@@_fixed_div_int:wnN #1; #2 #3
+\cs_new:Npn \@@_fixed_div_int:wnN #1\@@_sep: #2 #3
   {
     \exp_after:wN #3
-    \int_value:w \@@_int_eval:w #1 / #2 - 1 ;
+    \int_value:w \@@_int_eval:w #1 / #2 - 1 \@@_sep:
     {#2}
     {#1}
   }
-\cs_new:Npn \@@_fixed_div_int_auxi:wnn #1; #2 #3
+\cs_new:Npn \@@_fixed_div_int_auxi:wnn #1\@@_sep: #2 #3
   {
     + #1
     \exp_after:wN \@@_fixed_div_int_pack:Nw
@@ -296,9 +298,9 @@
       \exp_after:wN \@@_fixed_div_int:wnN
       \int_value:w \@@_int_eval:w #3 - #1*#2 \@@_int_eval_end:
   }
-\cs_new:Npn \@@_fixed_div_int_auxii:wnn #1; #2 #3 { + #1 + 2 ; }
-\cs_new:Npn \@@_fixed_div_int_pack:Nw #1 #2; { + #1; {#2} }
-\cs_new:Npn \@@_fixed_div_int_after:Nw #1 #2; { #1 {#2} }
+\cs_new:Npn \@@_fixed_div_int_auxii:wnn #1\@@_sep: #2 #3 { + #1 + 2 \@@_sep: }
+\cs_new:Npn \@@_fixed_div_int_pack:Nw #1 #2\@@_sep: { + #1\@@_sep: {#2} }
+\cs_new:Npn \@@_fixed_div_int_after:Nw #1 #2\@@_sep: { #1 {#2} }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -314,7 +316,7 @@
 %     \@@_fixed_add_after:NNNNNwn
 %   }
 %   \begin{syntax}
-%     \cs{@@_fixed_add:wwn} \meta{a} |;| \meta{b} |;| \Arg{continuation}
+%     \cs{@@_fixed_add:wwn} \meta{a} \cs{@@_sep:} \meta{b} \cs{@@_sep:} \Arg{continuation}
 %   \end{syntax}
 %   Computes $a+b$ (resp.\ $a-b$) and feeds the result to the
 %   \meta{continuation}.  This function requires $0\leq a_{1},b_{1}\leq
@@ -333,7 +335,7 @@
 %    \begin{macrocode}
 \cs_new:Npn \@@_fixed_add:wwn { \@@_fixed_add:Nnnnnwnn + }
 \cs_new:Npn \@@_fixed_sub:wwn { \@@_fixed_add:Nnnnnwnn - }
-\cs_new:Npn \@@_fixed_add:Nnnnnwnn #1 #2#3#4#5 #6; #7#8
+\cs_new:Npn \@@_fixed_add:Nnnnnwnn #1 #2#3#4#5 #6\@@_sep: #7#8
   {
     \exp_after:wN \@@_fixed_add_after:NNNNNwn
     \int_value:w \@@_int_eval:w 9 9999 9998 + #2#3 #1 #7#8
@@ -341,15 +343,16 @@
       \int_value:w \@@_int_eval:w 1 9999 9998 + #4#5
         \@@_fixed_add:nnNnnnwn #6 #1
   }
-\cs_new:Npn \@@_fixed_add:nnNnnnwn #1#2 #3 #4#5 #6#7 ; #8
+\cs_new:Npn \@@_fixed_add:nnNnnnwn #1#2 #3 #4#5 #6#7 \@@_sep: #8
   {
     #3 #4#5
     \exp_after:wN \@@_fixed_add_pack:NNNNNwn
-    \int_value:w \@@_int_eval:w 2 0000 0000 #3 #6#7 + #1#2 ; {#8} ;
+    \int_value:w \@@_int_eval:w
+      2 0000 0000 #3 #6#7 + #1#2 \@@_sep: {#8} \@@_sep:
   }
-\cs_new:Npn \@@_fixed_add_pack:NNNNNwn #1 #2#3#4#5 #6; #7
-  { + #1 ; {#7} {#2#3#4#5} {#6} }
-\cs_new:Npn \@@_fixed_add_after:NNNNNwn 1 #1 #2#3#4#5 #6; #7
+\cs_new:Npn \@@_fixed_add_pack:NNNNNwn #1 #2#3#4#5 #6\@@_sep: #7
+  { + #1 \@@_sep: {#7} {#2#3#4#5} {#6} }
+\cs_new:Npn \@@_fixed_add_after:NNNNNwn 1 #1 #2#3#4#5 #6\@@_sep: #7
   { #7 {#1#2#3#4#5} {#6} }
 %    \end{macrocode}
 % \end{macro}
@@ -361,7 +364,7 @@
 % \begin{macro}[EXP]{\@@_fixed_mul:wwn}
 % \begin{macro}[EXP]{\@@_fixed_mul:nnnnnnnw}
 %   \begin{syntax}
-%     \cs{@@_fixed_mul:wwn} \meta{a} |;| \meta{b} |;| \Arg{continuation}
+%     \cs{@@_fixed_mul:wwn} \meta{a} \cs{@@_sep:} \meta{b} \cs{@@_sep:} \Arg{continuation}
 %   \end{syntax}
 %   Computes $a\times b$ and feeds the result to \meta{continuation}.
 %   This function requires $0\leq a_{1}, b_{1} < 10000$.  Once more, we
@@ -402,7 +405,7 @@
 %   is finally placed in front of the $6$ brace groups by
 %   \cs{@@_fixed_mul_after:wwn}.
 %    \begin{macrocode}
-\cs_new:Npn \@@_fixed_mul:wwn #1#2#3#4 #5; #6#7#8#9
+\cs_new:Npn \@@_fixed_mul:wwn #1#2#3#4 #5\@@_sep: #6#7#8#9
   {
     \exp_after:wN \@@_fixed_mul_after:wwn
     \int_value:w \@@_int_eval:w \c_@@_leading_shift_int
@@ -424,10 +427,10 @@
                 + ( #3*#9 + #4*#8
                   + \@@_fixed_mul:nnnnnnnw #5 {#6}{#7}  {#1}{#2}
   }
-\cs_new:Npn \@@_fixed_mul:nnnnnnnw #1#2 #3#4 #5#6 #7#8 ;
+\cs_new:Npn \@@_fixed_mul:nnnnnnnw #1#2 #3#4 #5#6 #7#8 \@@_sep:
   {
     #1*#4 + #2*#3 + #5*#8 + #6*#7 ) / \c_@@_myriad_int
-    + #1*#3 + #5*#7 ; ;
+    + #1*#3 + #5*#7 \@@_sep: \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -442,9 +445,9 @@
 %     \@@_fixed_mul_one_minus_mul:wwn,
 %   }
 %   \begin{syntax}
-%     \cs{@@_fixed_mul_add:wwwn} \meta{a} |;| \meta{b} |;| \meta{c} |;| \Arg{continuation}
-%     \cs{@@_fixed_mul_sub_back:wwwn} \meta{a} |;| \meta{b} |;| \meta{c} |;| \Arg{continuation}
-%     \cs{@@_fixed_one_minus_mul:wwn} \meta{a} |;| \meta{b} |;| \Arg{continuation}
+%     \cs{@@_fixed_mul_add:wwwn} \meta{a} \cs{@@_sep:} \meta{b} \cs{@@_sep:} \meta{c} \cs{@@_sep:} \Arg{continuation}
+%     \cs{@@_fixed_mul_sub_back:wwwn} \meta{a} \cs{@@_sep:} \meta{b} \cs{@@_sep:} \meta{c} \cs{@@_sep:} \Arg{continuation}
+%     \cs{@@_fixed_one_minus_mul:wwn} \meta{a} \cs{@@_sep:} \meta{b} \cs{@@_sep:} \Arg{continuation}
 %   \end{syntax}
 %   Sometimes called |FMA| (fused multiply-add), these functions
 %   compute $a\times b + c$, $c - a\times b$, and $1 - a\times b$ and
@@ -482,12 +485,12 @@
 %   Each of the three function starts the first two levels (the first,
 %   corresponding to $10^{-4}$, is empty), with $c_{1} c_{2}$ in the
 %   first level, calls the \texttt{i} auxiliary with arguments described
-%   later, and adds a trailing ${} + c_{5}c_{6}$ |;|
-%   \Arg{continuation}~|;|.  The ${} + c_{5}c_{6}$ piece, which is
+%   later, and adds a trailing ${} + c_{5}c_{6}$ \cs{@@_sep:}
+%   \Arg{continuation}~\cs{@@_sep:}.  The ${} + c_{5}c_{6}$ piece, which is
 %   omitted for \cs{@@_fixed_one_minus_mul:wwn}, is taken in the
 %   integer expression for the $10^{-24}$ level.
 %    \begin{macrocode}
-\cs_new:Npn \@@_fixed_mul_add:wwwn #1; #2; #3#4#5#6#7#8;
+\cs_new:Npn \@@_fixed_mul_add:wwwn #1\@@_sep: #2\@@_sep: #3#4#5#6#7#8\@@_sep:
   {
     \exp_after:wN \@@_fixed_mul_after:wwn
     \int_value:w \@@_int_eval:w \c_@@_big_leading_shift_int
@@ -494,10 +497,11 @@
       \exp_after:wN \@@_pack_big:NNNNNNw
       \int_value:w \@@_int_eval:w \c_@@_big_middle_shift_int + #3 #4
         \@@_fixed_mul_add:Nwnnnwnnn +
-          + #5 #6 ; #2 ; #1 ; #2 ; +
-          + #7 #8 ; ;
+          + #5 #6 \@@_sep: #2 \@@_sep: #1 \@@_sep: #2 \@@_sep: +
+          + #7 #8 \@@_sep: \@@_sep:
   }
-\cs_new:Npn \@@_fixed_mul_sub_back:wwwn #1; #2; #3#4#5#6#7#8;
+\cs_new:Npn \@@_fixed_mul_sub_back:wwwn
+    #1\@@_sep: #2\@@_sep: #3#4#5#6#7#8\@@_sep:
   {
     \exp_after:wN \@@_fixed_mul_after:wwn
     \int_value:w \@@_int_eval:w \c_@@_big_leading_shift_int
@@ -504,10 +508,10 @@
       \exp_after:wN \@@_pack_big:NNNNNNw
       \int_value:w \@@_int_eval:w \c_@@_big_middle_shift_int + #3 #4
         \@@_fixed_mul_add:Nwnnnwnnn -
-          + #5 #6 ; #2 ; #1 ; #2 ; -
-          + #7 #8 ; ;
+          + #5 #6 \@@_sep: #2 \@@_sep: #1 \@@_sep: #2 \@@_sep: -
+          + #7 #8 \@@_sep: \@@_sep:
   }
-\cs_new:Npn \@@_fixed_one_minus_mul:wwn #1; #2;
+\cs_new:Npn \@@_fixed_one_minus_mul:wwn #1\@@_sep: #2\@@_sep:
   {
     \exp_after:wN \@@_fixed_mul_after:wwn
     \int_value:w \@@_int_eval:w \c_@@_big_leading_shift_int
@@ -515,8 +519,8 @@
       \int_value:w \@@_int_eval:w \c_@@_big_middle_shift_int +
         1 0000 0000
         \@@_fixed_mul_add:Nwnnnwnnn -
-          ; #2 ; #1 ; #2 ; -
-          ; ;
+          \@@_sep: #2 \@@_sep: #1 \@@_sep: #2 \@@_sep: -
+          \@@_sep: \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -523,9 +527,9 @@
 %
 % \begin{macro}[EXP]{\@@_fixed_mul_add:Nwnnnwnnn}
 %   \begin{syntax}
-%     \cs{@@_fixed_mul_add:Nwnnnwnnn} \meta{op} |+| \meta{c_3} \meta{c_4} |;|
-%     ~~\meta{b} |;| \meta{a} |;| \meta{b} |;| \meta{op}
-%     ~~|+| \meta{c_5} \meta{c_6} |;|
+%     \cs{@@_fixed_mul_add:Nwnnnwnnn} \meta{op} |+| \meta{c_3} \meta{c_4} \cs{@@_sep:}
+%     ~~\meta{b} \cs{@@_sep:} \meta{a} \cs{@@_sep:} \meta{b} \cs{@@_sep:} \meta{op}
+%     ~~|+| \meta{c_5} \meta{c_6} \cs{@@_sep:}
 %   \end{syntax}
 %   Here, \meta{op} is either |+| or |-|.  Arguments |#3|, |#4|, |#5|
 %   are \meta{b_1}, \meta{b_2}, \meta{b_3}; arguments |#7|, |#8|, |#9|
@@ -539,7 +543,7 @@
 %   we've read, but not \meta{b}, since there is another copy later in
 %   the input stream.
 %    \begin{macrocode}
-\cs_new:Npn \@@_fixed_mul_add:Nwnnnwnnn #1 #2; #3#4#5#6; #7#8#9
+\cs_new:Npn \@@_fixed_mul_add:Nwnnnwnnn #1 #2\@@_sep: #3#4#5#6\@@_sep: #7#8#9
   {
     #1 #7*#3
     \exp_after:wN \@@_pack_big:NNNNNNw
@@ -557,8 +561,8 @@
 %
 % \begin{macro}[EXP]{\@@_fixed_mul_add:nnnnwnnnn}
 %   \begin{syntax}
-%     \cs{@@_fixed_mul_add:nnnnwnnnn} \meta{a} |;| \meta{b} |;| \meta{op}
-%     ~~|+| \meta{c_5} \meta{c_6} |;|
+%     \cs{@@_fixed_mul_add:nnnnwnnnn} \meta{a} \cs{@@_sep:} \meta{b} \cs{@@_sep:} \meta{op}
+%     ~~|+| \meta{c_5} \meta{c_6} \cs{@@_sep:}
 %   \end{syntax}
 %   Level $10^{-20}$ is $(a_{1} \cdot b_{4} + a_{2} \cdot b_{3} + a_{3}
 %   \cdot b_{2} + a_{4} \cdot b_{1})$, multiplied by the sign, which was
@@ -577,7 +581,7 @@
 %   To do all this, we keep $a_{1}$, $a_{5}$, $a_{6}$, and the
 %   corresponding pieces of \meta{b}.
 %    \begin{macrocode}
-\cs_new:Npn \@@_fixed_mul_add:nnnnwnnnn #1#2#3#4#5; #6#7#8#9
+\cs_new:Npn \@@_fixed_mul_add:nnnnwnnnn #1#2#3#4#5\@@_sep: #6#7#8#9
   {
     ( #1*#9 + #2*#8 + #3*#7 + #4*#6 )
     \exp_after:wN \@@_pack_big:NNNNNNw
@@ -585,7 +589,7 @@
       \@@_fixed_mul_add:nnnnwnnwN
         { #6 + #4*#7 + #3*#8 + #2*#9 + #1 }
         { #7 + #4*#8 + #3*#9 + #2 }
-        {#1} #5;
+        {#1} #5\@@_sep:
         {#6}
   }
 %    \end{macrocode}
@@ -594,8 +598,8 @@
 % \begin{macro}[EXP]{\@@_fixed_mul_add:nnnnwnnwN}
 %   \begin{syntax}
 %     \cs{@@_fixed_mul_add:nnnnwnnwN} \Arg{partial_1} \Arg{partial_2}
-%     ~~\Arg{a_1} \Arg{a_5} \Arg{a_6} |;| \Arg{b_1} \Arg{b_5} \Arg{b_6} |;|
-%     ~~\meta{op} |+| \meta{c_5} \meta{c_6} |;|
+%     ~~\Arg{a_1} \Arg{a_5} \Arg{a_6} \cs{@@_sep:} \Arg{b_1} \Arg{b_5} \Arg{b_6} \cs{@@_sep:}
+%     ~~\meta{op} |+| \meta{c_5} \meta{c_6} \cs{@@_sep:}
 %   \end{syntax}
 %   Complete the \meta{partial_1} and \meta{partial_2} expressions as
 %   explained for the \texttt{ii} auxiliary.  The second one is divided
@@ -607,7 +611,7 @@
 %   expected by the packing auxiliaries.  See \pkg{l3fp-aux} for the
 %   definition of the shifts and packing auxiliaries.
 %    \begin{macrocode}
-\cs_new:Npn \@@_fixed_mul_add:nnnnwnnwN #1#2 #3#4#5; #6#7#8; #9
+\cs_new:Npn \@@_fixed_mul_add:nnnnwnnwN #1#2 #3#4#5\@@_sep: #6#7#8\@@_sep: #9
   {
     #9 (#4* #1 *#7)
     #9 (#5*#6+#4* #2 *#7+#3*#8) / \c_@@_myriad_int
@@ -637,21 +641,22 @@
 \cs_new:Npn \@@_ep_to_fixed:wwn #1,#2
   {
     \exp_after:wN \@@_ep_to_fixed_auxi:www
-    \int_value:w \@@_int_eval:w 1 0000 0000 + #2 \exp_after:wN ;
+    \int_value:w \@@_int_eval:w 1 0000 0000 + #2 \exp_after:wN \@@_sep:
     \exp:w \exp_end_continue_f:w
-    \prg_replicate:nn { 4 - \int_max:nn {#1} { -32 } } { 0 } ;
+    \prg_replicate:nn { 4 - \int_max:nn {#1} { -32 } } { 0 } \@@_sep:
   }
-\cs_new:Npn \@@_ep_to_fixed_auxi:www 1#1; #2; #3#4#5#6#7;
+\cs_new:Npn \@@_ep_to_fixed_auxi:www
+    1#1\@@_sep: #2\@@_sep: #3#4#5#6#7\@@_sep:
   {
     \@@_pack_eight:wNNNNNNNN
     \@@_pack_twice_four:wNNNNNNNN
     \@@_pack_twice_four:wNNNNNNNN
     \@@_pack_twice_four:wNNNNNNNN
-    \@@_ep_to_fixed_auxii:nnnnnnnwn ;
+    \@@_ep_to_fixed_auxii:nnnnnnnwn \@@_sep:
     #2 #1#3#4#5#6#7 0000 !
   }
-\cs_new:Npn \@@_ep_to_fixed_auxii:nnnnnnnwn #1#2#3#4#5#6#7; #8! #9
-  { #9 {#1#2}{#3}{#4}{#5}{#6}{#7}; }
+\cs_new:Npn \@@_ep_to_fixed_auxii:nnnnnnnwn #1#2#3#4#5#6#7\@@_sep: #8! #9
+  { #9 {#1#2}{#3}{#4}{#5}{#6}{#7}\@@_sep: }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -675,7 +680,7 @@
 %   any digit that did not make it in the final mantissa (typically only
 %   zeros, unless the original first block has more than~$4$ digits).
 %    \begin{macrocode}
-\cs_new:Npn \@@_ep_to_ep:wwN #1,#2#3#4#5#6#7; #8
+\cs_new:Npn \@@_ep_to_ep:wwN #1,#2#3#4#5#6#7\@@_sep: #8
   {
     \exp_after:wN #8
     \int_value:w \@@_int_eval:w #1 + 4
@@ -682,7 +687,7 @@
       \exp_after:wN \use_i:nn
       \exp_after:wN \@@_ep_to_ep_loop:N
       \int_value:w \@@_int_eval:w 1 0000 0000 + #2 \@@_int_eval_end:
-      #3#4#5#6#7 ; ; !
+      #3#4#5#6#7 \@@_sep: \@@_sep: !
   }
 \cs_new:Npn \@@_ep_to_ep_loop:N #1
   {
@@ -694,10 +699,10 @@
     \@@_ep_to_ep_loop:N
   }
 \cs_new:Npn \@@_ep_to_ep_end:www
-    #1 \fi: \@@_ep_to_ep_loop:N #2; #3!
+    #1 \fi: \@@_ep_to_ep_loop:N #2\@@_sep: #3!
   {
     \fi:
-    \if_meaning:w ; #1
+    \if_meaning:w \@@_sep: #1
       - 2 * \c_@@_max_exponent_int
       \@@_ep_to_ep_zero:ww
     \fi:
@@ -704,11 +709,11 @@
     \@@_pack_twice_four:wNNNNNNNN
     \@@_pack_twice_four:wNNNNNNNN
     \@@_pack_twice_four:wNNNNNNNN
-    \@@_use_i:ww , ;
-    #1 #2 0000 0000 0000 0000 0000 0000 ;
+    \@@_use_i:ww , \@@_sep:
+    #1 #2 0000 0000 0000 0000 0000 0000 \@@_sep:
   }
-\cs_new:Npn \@@_ep_to_ep_zero:ww \fi: #1; #2; #3;
-  { \fi: , {1000}{0000}{0000}{0000}{0000}{0000} ; }
+\cs_new:Npn \@@_ep_to_ep_zero:ww \fi: #1\@@_sep: #2\@@_sep: #3\@@_sep:
+  { \fi: , {1000}{0000}{0000}{0000}{0000}{0000} \@@_sep: }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -723,12 +728,14 @@
 %   works if the numbers are normalized so that their first block is
 %   in~$[1000,9999]$.
 %    \begin{macrocode}
-\cs_new:Npn \@@_ep_compare:wwww #1,#2#3#4#5#6#7;
-  { \@@_ep_compare_aux:wwww {#1}{#2}{#3}{#4}{#5}; #6#7; }
-\cs_new:Npn \@@_ep_compare_aux:wwww #1;#2;#3,#4#5#6#7#8#9;
+\cs_new:Npn \@@_ep_compare:wwww #1,#2#3#4#5#6#7\@@_sep:
+  { \@@_ep_compare_aux:wwww {#1}{#2}{#3}{#4}{#5}\@@_sep: #6#7\@@_sep: }
+\cs_new:Npn \@@_ep_compare_aux:wwww
+    #1\@@_sep:#2\@@_sep:#3,#4#5#6#7#8#9\@@_sep:
   {
     \if_case:w
-      \@@_compare_npos:nwnw #1; {#3}{#4}{#5}{#6}{#7}; \exp_stop_f:
+      \@@_compare_npos:nwnw
+        #1\@@_sep: {#3}{#4}{#5}{#6}{#7}\@@_sep: \exp_stop_f:
             \if_int_compare:w #2 = #8#9 \exp_stop_f:
               0
             \else:
@@ -749,19 +756,19 @@
 %   and~|#4| as fixed point numbers, and sum the exponents |#1|
 %   and~|#3|.  The result's first block is in $[100,9999]$.
 %    \begin{macrocode}
-\cs_new:Npn \@@_ep_mul:wwwwn #1,#2; #3,#4;
+\cs_new:Npn \@@_ep_mul:wwwwn #1,#2\@@_sep: #3,#4\@@_sep:
   {
-    \@@_ep_to_ep:wwN #3,#4;
+    \@@_ep_to_ep:wwN #3,#4\@@_sep:
     \@@_fixed_continue:wn
     {
-      \@@_ep_to_ep:wwN #1,#2;
+      \@@_ep_to_ep:wwN #1,#2\@@_sep:
       \@@_ep_mul_raw:wwwwN
     }
     \@@_fixed_continue:wn
   }
-\cs_new:Npn \@@_ep_mul_raw:wwwwN #1,#2; #3,#4; #5
+\cs_new:Npn \@@_ep_mul_raw:wwwwN #1,#2\@@_sep: #3,#4\@@_sep: #5
   {
-    \@@_fixed_mul:wwn #2; #4;
+    \@@_fixed_mul:wwn #2\@@_sep: #4\@@_sep:
     { \exp_after:wN #5 \int_value:w \@@_int_eval:w #1 + #3 , }
   }
 %    \end{macrocode}
@@ -901,12 +908,12 @@
 %   \meta{denominator} \meta{numerator}, responsible for estimating the
 %   inverse of the denominator.
 %    \begin{macrocode}
-\cs_new:Npn \@@_ep_div:wwwwn #1,#2; #3,#4;
+\cs_new:Npn \@@_ep_div:wwwwn #1,#2\@@_sep: #3,#4\@@_sep:
   {
-    \@@_ep_to_ep:wwN #1,#2;
+    \@@_ep_to_ep:wwN #1,#2\@@_sep:
     \@@_fixed_continue:wn
     {
-      \@@_ep_to_ep:wwN #3,#4;
+      \@@_ep_to_ep:wwN #3,#4\@@_sep:
       \@@_ep_div_esti:wwwwn
     }
   }
@@ -935,24 +942,25 @@
 %   $10^{-9}a/(1-\epsilon)$, that is, $1/(10\meta{d})$ and we finally
 %   multiply this by the numerator~|#8|.
 %    \begin{macrocode}
-\cs_new:Npn \@@_ep_div_esti:wwwwn #1,#2#3; #4,
+\cs_new:Npn \@@_ep_div_esti:wwwwn #1,#2#3\@@_sep: #4,
   {
     \exp_after:wN \@@_ep_div_estii:wwnnwwn
     \int_value:w \@@_int_eval:w 10 0000 0000 / ( #2 + 1 )
-      \exp_after:wN ;
+      \exp_after:wN \@@_sep:
     \int_value:w \@@_int_eval:w #4 - #1 + 1 ,
-    {#2} #3;
+    {#2} #3\@@_sep:
   }
-\cs_new:Npn \@@_ep_div_estii:wwnnwwn #1; #2,#3#4#5; #6; #7
+\cs_new:Npn \@@_ep_div_estii:wwnnwwn
+    #1\@@_sep: #2,#3#4#5\@@_sep: #6\@@_sep: #7
   {
     \exp_after:wN \@@_ep_div_estiii:NNNNNwwwn
     \int_value:w \@@_int_eval:w 10 0000 0000 - 1750
-      + #1 000 + (10 0000 0000 / #3 - #1) * (1000 - #4 / 10) ;
-    {#3}{#4}#5; #6; { #7 #2, }
+      + #1 000 + (10 0000 0000 / #3 - #1) * (1000 - #4 / 10) \@@_sep:
+    {#3}{#4}#5\@@_sep: #6\@@_sep: { #7 #2, }
   }
-\cs_new:Npn \@@_ep_div_estiii:NNNNNwwwn 1#1#2#3#4#5#6; #7;
+\cs_new:Npn \@@_ep_div_estiii:NNNNNwwwn 1#1#2#3#4#5#6\@@_sep: #7\@@_sep:
   {
-    \@@_fixed_mul_short:wwn #7; {#1}{#2#3#4#5}{#6};
+    \@@_fixed_mul_short:wwn #7\@@_sep: {#1}{#2#3#4#5}{#6}\@@_sep:
     \@@_ep_div_epsi:wnNNNNNn {#1#2#3#4}#5#6
     \@@_fixed_mul:wwn
   }
@@ -978,7 +986,7 @@
 %   combination of \texttt{short_mul} and \texttt{div_myriad} is both
 %   faster and more precise than a simple \texttt{mul}.
 %    \begin{macrocode}
-\cs_new:Npn \@@_ep_div_epsi:wnNNNNNn #1#2#3#4#5#6;
+\cs_new:Npn \@@_ep_div_epsi:wnNNNNNn #1#2#3#4#5#6\@@_sep:
   {
     \exp_after:wN \@@_ep_div_epsii:wwnNNNNNn
     \int_value:w \@@_int_eval:w 1 9998 - #2
@@ -985,21 +993,22 @@
       \exp_after:wN \@@_ep_div_eps_pack:NNNNNw
       \int_value:w \@@_int_eval:w 1 9999 9998 - #3#4
         \exp_after:wN \@@_ep_div_eps_pack:NNNNNw
-        \int_value:w \@@_int_eval:w 2 0000 0000 - #5#6 ; ;
+        \int_value:w \@@_int_eval:w 2 0000 0000 - #5#6 \@@_sep: \@@_sep:
   }
-\cs_new:Npn \@@_ep_div_eps_pack:NNNNNw #1#2#3#4#5#6;
-  { + #1 ; {#2#3#4#5} {#6} }
-\cs_new:Npn \@@_ep_div_epsii:wwnNNNNNn 1#1; #2; #3#4#5#6#7#8
+\cs_new:Npn \@@_ep_div_eps_pack:NNNNNw #1#2#3#4#5#6\@@_sep:
+  { + #1 \@@_sep: {#2#3#4#5} {#6} }
+\cs_new:Npn \@@_ep_div_epsii:wwnNNNNNn 1#1\@@_sep: #2\@@_sep: #3#4#5#6#7#8
   {
-    \@@_fixed_mul:wwn {0000}{#1}#2; {0000}{#1}#2;
+    \@@_fixed_mul:wwn {0000}{#1}#2\@@_sep: {0000}{#1}#2\@@_sep:
     \@@_fixed_add_one:wN
-    \@@_fixed_mul:wwn {10000} {#1} #2 ;
+    \@@_fixed_mul:wwn {10000} {#1} #2 \@@_sep:
     {
-      \@@_fixed_mul_short:wwn {0000}{#1}#2; {#3}{#4#5#6#7}{#8000};
+      \@@_fixed_mul_short:wwn
+        {0000}{#1}#2\@@_sep: {#3}{#4#5#6#7}{#8000}\@@_sep:
       \@@_fixed_div_myriad:wn
       \@@_fixed_mul:wwn
     }
-    \@@_fixed_add:wwn {#3}{#4#5#6#7}{#8000}{0000}{0000}{0000};
+    \@@_fixed_add:wwn {#3}{#4#5#6#7}{#8000}{0000}{0000}{0000}\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1047,9 +1056,9 @@
 %   mantissa and an altered continuation where we have stored the
 %   result's exponent.
 %    \begin{macrocode}
-\cs_new:Npn \@@_ep_isqrt:wwn #1,#2;
+\cs_new:Npn \@@_ep_isqrt:wwn #1,#2\@@_sep:
   {
-    \@@_ep_to_ep:wwN #1,#2;
+    \@@_ep_to_ep:wwN #1,#2\@@_sep:
     \@@_ep_isqrt_auxi:wwn
   }
 \cs_new:Npn \@@_ep_isqrt_auxi:wwn #1,
@@ -1060,10 +1069,10 @@
         { (1 - #1) / 2 , 535 , { 0 } { } }
         { 1 - #1 / 2 , 168 , { } { 0 } }
   }
-\cs_new:Npn \@@_ep_isqrt_auxii:wwnnnwn #1, #2, #3#4 #5#6; #7
+\cs_new:Npn \@@_ep_isqrt_auxii:wwnnnwn #1, #2, #3#4 #5#6\@@_sep: #7
   {
     \@@_ep_isqrt_esti:wwwnnwn #2, 0, #5, {#3} {#4}
-      {#5} #6 ; { #7 #1 , }
+      {#5} #6 \@@_sep: { #7 #1 , }
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1106,13 +1115,14 @@
   {
     \exp_after:wN \@@_ep_isqrt_estiii:NNNNNwwwn
     \int_value:w \@@_int_eval:w 1000 0000 + #2 * #2 #5 * 5
-      \exp_after:wN , \int_value:w \@@_int_eval:w 10000 + #2 ;
+      \exp_after:wN , \int_value:w \@@_int_eval:w 10000 + #2 \@@_sep:
   }
-\cs_new:Npn \@@_ep_isqrt_estiii:NNNNNwwwn 1#1#2#3#4#5#6, 1#7#8; #9;
+\cs_new:Npn \@@_ep_isqrt_estiii:NNNNNwwwn
+    1#1#2#3#4#5#6, 1#7#8\@@_sep: #9\@@_sep:
   {
-    \@@_fixed_mul_short:wwn #9; {#1} {#2#3#4#5} {#600} ;
+    \@@_fixed_mul_short:wwn #9\@@_sep: {#1} {#2#3#4#5} {#600} \@@_sep:
     \@@_ep_isqrt_epsi:wN
-    \@@_fixed_mul_short:wwn {#7} {#80} {0000} ;
+    \@@_fixed_mul_short:wwn {#7} {#80} {0000} \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1124,19 +1134,19 @@
 %   multiplications.  The \texttt{epsii} auxiliary receives $z$ as~|#1|
 %   and $y$ as~|#2|.
 %    \begin{macrocode}
-\cs_new:Npn \@@_ep_isqrt_epsi:wN #1;
+\cs_new:Npn \@@_ep_isqrt_epsi:wN #1\@@_sep:
   {
-    \@@_fixed_sub:wwn {15000}{0000}{0000}{0000}{0000}{0000}; #1;
-    \@@_ep_isqrt_epsii:wwN #1;
-    \@@_ep_isqrt_epsii:wwN #1;
-    \@@_ep_isqrt_epsii:wwN #1;
+    \@@_fixed_sub:wwn {15000}{0000}{0000}{0000}{0000}{0000}\@@_sep: #1\@@_sep:
+    \@@_ep_isqrt_epsii:wwN #1\@@_sep:
+    \@@_ep_isqrt_epsii:wwN #1\@@_sep:
+    \@@_ep_isqrt_epsii:wwN #1\@@_sep:
   }
-\cs_new:Npn \@@_ep_isqrt_epsii:wwN #1; #2;
+\cs_new:Npn \@@_ep_isqrt_epsii:wwN #1\@@_sep: #2\@@_sep:
   {
-    \@@_fixed_mul:wwn #1; #1;
-    \@@_fixed_mul_sub_back:wwwn #2;
-      {15000}{0000}{0000}{0000}{0000}{0000};
-    \@@_fixed_mul:wwn #1;
+    \@@_fixed_mul:wwn #1\@@_sep: #1\@@_sep:
+    \@@_fixed_mul_sub_back:wwwn #2\@@_sep:
+      {15000}{0000}{0000}{0000}{0000}{0000}\@@_sep:
+    \@@_fixed_mul:wwn #1\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1156,9 +1166,10 @@
 %    \begin{macrocode}
 \cs_new:Npn \@@_ep_to_float_o:wwN #1,
   { + \@@_int_eval:w #1 \@@_fixed_to_float_o:wN }
-\cs_new:Npn \@@_ep_inv_to_float_o:wwN #1,#2;
+\cs_new:Npn \@@_ep_inv_to_float_o:wwN #1,#2\@@_sep:
   {
-    \@@_ep_div:wwwwn 1,{1000}{0000}{0000}{0000}{0000}{0000}; #1,#2;
+    \@@_ep_div:wwwwn
+      1,{1000}{0000}{0000}{0000}{0000}{0000}\@@_sep: #1,#2\@@_sep:
     \@@_ep_to_float_o:wwN
   }
 %    \end{macrocode}
@@ -1178,9 +1189,9 @@
 %   a floating point number.  This could perhaps remain in
 %   \pkg{l3fp-trig}.
 %    \begin{macrocode}
-\cs_new:Npn \@@_fixed_to_float_rad_o:wN #1;
+\cs_new:Npn \@@_fixed_to_float_rad_o:wN #1\@@_sep:
   {
-    \@@_fixed_mul:wwn #1; {5729}{5779}{5130}{8232}{0876}{7981};
+    \@@_fixed_mul:wwn #1\@@_sep: {5729}{5779}{5130}{8232}{0876}{7981}\@@_sep:
     { \@@_ep_to_float_o:wwN 2, }
   }
 %    \end{macrocode}
@@ -1190,11 +1201,11 @@
 % \begin{macro}[rEXP]
 %   {\@@_fixed_to_float_o:wN, \@@_fixed_to_float_o:Nw}
 %   \begin{syntax}
-%     \ldots{} \cs{@@_int_eval:w} \meta{exponent} \cs{@@_fixed_to_float_o:wN} \Arg{a_1} \Arg{a_2} \Arg{a_3} \Arg{a_4} \Arg{a_5} \Arg{a_6} |;| \meta{sign}
+%     \ldots{} \cs{@@_int_eval:w} \meta{exponent} \cs{@@_fixed_to_float_o:wN} \Arg{a_1} \Arg{a_2} \Arg{a_3} \Arg{a_4} \Arg{a_5} \Arg{a_6} \cs{@@_sep:} \meta{sign}
 %   \end{syntax}
 %   yields
 %   \begin{quote}
-%     \meta{exponent'} |;| \Arg{a'_1} \Arg{a'_2} \Arg{a'_3} \Arg{a'_4} |;|
+%     \meta{exponent'} \cs{@@_sep:} \Arg{a'_1} \Arg{a'_2} \Arg{a'_3} \Arg{a'_4} \cs{@@_sep:}
 %   \end{quote}
 %   And the \texttt{to_fixed} version gives six brace groups instead of
 %   $4$, ensuring that $1000\leq\meta{a'_1}\leq 9999$.  At this stage, we
@@ -1204,9 +1215,9 @@
 %
 %^^A todo: round properly when rounding to infinity: I need the sign.
 %    \begin{macrocode}
-\cs_new:Npn \@@_fixed_to_float_o:Nw #1#2;
-  { \@@_fixed_to_float_o:wN #2; #1 }
-\cs_new:Npn \@@_fixed_to_float_o:wN #1#2#3#4#5#6; #7
+\cs_new:Npn \@@_fixed_to_float_o:Nw #1#2\@@_sep:
+  { \@@_fixed_to_float_o:wN #2\@@_sep: #1 }
+\cs_new:Npn \@@_fixed_to_float_o:wN #1#2#3#4#5#6\@@_sep: #7
   { % for the 8-digit-at-the-start thing
     + \@@_int_eval:w \c_@@_block_int
     \exp_after:wN \exp_after:wN
@@ -1217,8 +1228,8 @@
       \int_value:w   1#2 \exp_after:wN \@@_use_none_stop_f:n
       \int_value:w 1#3#4 \exp_after:wN \@@_use_none_stop_f:n
       \int_value:w 1#5#6
-    \exp_after:wN ;
-    \exp_after:wN ;
+    \exp_after:wN \@@_sep:
+    \exp_after:wN \@@_sep:
   }
 \cs_new:Npn \@@_fixed_to_loop:N #1
   {
@@ -1230,36 +1241,36 @@
       \exp_after:wN #1
     \fi:
   }
-\cs_new:Npn \@@_fixed_to_loop_end:w #1 #2 ;
+\cs_new:Npn \@@_fixed_to_loop_end:w #1 #2 \@@_sep:
   {
-    \if_meaning:w ; #1
+    \if_meaning:w \@@_sep: #1
       \exp_after:wN \@@_fixed_to_float_zero:w
     \else:
       \exp_after:wN \@@_pack_twice_four:wNNNNNNNN
       \exp_after:wN \@@_pack_twice_four:wNNNNNNNN
       \exp_after:wN \@@_fixed_to_float_pack:ww
-      \exp_after:wN ;
+      \exp_after:wN \@@_sep:
     \fi:
-    #1 #2 0000 0000 0000 0000 ;
+    #1 #2 0000 0000 0000 0000 \@@_sep:
   }
-\cs_new:Npn \@@_fixed_to_float_zero:w ; 0000 0000 0000 0000 ;
+\cs_new:Npn \@@_fixed_to_float_zero:w \@@_sep: 0000 0000 0000 0000 \@@_sep:
   {
-    - 2 * \c_@@_max_exponent_int ;
-    {0000} {0000} {0000} {0000} ;
+    - 2 * \c_@@_max_exponent_int \@@_sep:
+    {0000} {0000} {0000} {0000} \@@_sep:
   }
-\cs_new:Npn \@@_fixed_to_float_pack:ww #1 ; #2#3 ; ;
+\cs_new:Npn \@@_fixed_to_float_pack:ww #1 \@@_sep: #2#3 \@@_sep: \@@_sep:
   {
     \if_int_compare:w #2 > 4 \exp_stop_f:
       \exp_after:wN \@@_fixed_to_float_round_up:wnnnnw
     \fi:
-    ; #1 ;
+    \@@_sep: #1 \@@_sep:
   }
-\cs_new:Npn \@@_fixed_to_float_round_up:wnnnnw ; #1#2#3#4 ;
+\cs_new:Npn \@@_fixed_to_float_round_up:wnnnnw \@@_sep: #1#2#3#4 \@@_sep:
   {
     \exp_after:wN \@@_basics_pack_high:NNNNNw
     \int_value:w \@@_int_eval:w 1 #1#2
       \exp_after:wN \@@_basics_pack_low:NNNNNw
-      \int_value:w \@@_int_eval:w 1 #3#4 + 1 ;
+      \int_value:w \@@_int_eval:w 1 #3#4 + 1 \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-functions.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-functions.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-functions.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -42,7 +42,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -138,7 +138,7 @@
           \@@_exp_after_array_f:w #2 \s_@@_expr_stop
           \exp_after:wN
         }
-        \exp_after:wN ;
+        \exp_after:wN \@@_sep:
       }
   }
 %    \end{macrocode}
@@ -191,7 +191,7 @@
                   \exp_not:N \@@_symbolic_chk:w
                   \exp_not:N \@@_function_arg_o:w
                   \int_use:N \l_@@_function_arg_int
-                  ########1 , { } ;
+                  ########1 , { } \@@_sep:
                 }
             }
           \cs_set:Npn \@@_function_arg_o:w ##1 @
@@ -203,7 +203,7 @@
               \@@_exp_after_symbolic_loop:N ##1
                 { , \tex_romannumeral:D \use_none:nn }
               \exp_after:wN \c_zero_int
-              \exp_after:wN { \exp_after:wN } \exp_after:wN ;
+              \exp_after:wN { \exp_after:wN } \exp_after:wN \@@_sep:
             }
           \fp_set:Nn \l_@@_symbolic_fp {#4}
           \use:e
@@ -250,9 +250,9 @@
       #2
   }
 \cs_new:Npn \@@_function_arg_few:w #1 @ { \exp_after:wN \c_nan_fp }
-\cs_new:Npn \@@_function_arg_get:w #1#2#3; #4 @
+\cs_new:Npn \@@_function_arg_get:w #1#2#3\@@_sep: #4 @
   {
-    \@@_exp_after_array_f:w #3; \s_@@_expr_stop
+    \@@_exp_after_array_f:w #3\@@_sep: \s_@@_expr_stop
     \exp_after:wN \exp_stop_f:
   }
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp-logic.dtx
 %
-% Copyright (C) 2011-2024 The LaTeX Project
+% Copyright (C) 2011-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -75,8 +75,8 @@
 % \subsection{Syntax of internal functions}
 %
 % \begin{itemize}
-%   \item \cs{@@_compare_npos:nwnw} \Arg{expo_1} \meta{body_1} |;|
-%     \Arg{expo_2} \meta{body_2} |;|
+%   \item \cs{@@_compare_npos:nwnw} \Arg{expo_1} \meta{body_1} \cs{@@_sep:}
+%     \Arg{expo_2} \meta{body_2} \cs{@@_sep:}
 %   \item \cs{@@_minmax_o:Nw} \meta{sign} \meta{floating point array}
 %   \item \cs{@@_not_o:w} |?| \meta{floating point array} (with one floating point number only)
 %   \item \cs{@@_&_o:ww} \meta{floating point} \meta{floating point}
@@ -123,7 +123,7 @@
     \exp_after:wN \@@_compare_return:w
     \exp:w \exp_end_continue_f:w \@@_parse:n {#1}
   }
-\cs_new:Npn \@@_compare_return:w #1#2#3;
+\cs_new:Npn \@@_compare_return:w #1#2#3\@@_sep:
   {
     \if_charcode:w 0
           \@@_if_type_fp:NTwFw
@@ -156,10 +156,10 @@
       \prg_return_false:
     \fi:
   }
-\cs_new:Npn \@@_compare_aux:wn #1; #2
+\cs_new:Npn \@@_compare_aux:wn #1\@@_sep: #2
   {
     \exp_after:wN \@@_compare_back_any:ww
-      \exp:w \exp_end_continue_f:w \@@_parse:n {#2} #1;
+      \exp:w \exp_end_continue_f:w \@@_parse:n {#2} #1\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -167,7 +167,7 @@
 %
 % \begin{macro}[EXP]{\@@_compare_back:ww, \@@_bcmp:ww, \@@_compare_back_any:ww, \@@_compare_nan:w}
 %   \begin{quote}
-%     \cs{@@_compare_back_any:ww} \meta{y} |;| \meta{x} |;|
+%     \cs{@@_compare_back_any:ww} \meta{y} \cs{@@_sep:} \meta{x} \cs{@@_sep:}
 %   \end{quote}
 %   Expands (in the same way as \cs{int_eval:n}) to $-1$ if $x<y$, $0$
 %   if $x=y$, $1$ if $x>y$, and $2$ otherwise (denoted as $x?y$).  If
@@ -180,7 +180,7 @@
 %   a different type, the highest type is a larger number.  Finally, if
 %   $y\leq 0$, then $x>y$, unless both are zero.
 %    \begin{macrocode}
-\cs_new:Npn \@@_compare_back:ww #1#2; #3#4;
+\cs_new:Npn \@@_compare_back:ww #1#2\@@_sep: #3#4\@@_sep:
   {
     \cs:w
       @@
@@ -189,9 +189,9 @@
       \@@_type_from_scan:N #3
       :ww
     \cs_end:
-    #1#2; #3#4;
+    #1#2\@@_sep: #3#4\@@_sep:
   }
-\cs_new:Npn \@@_compare_back_any:ww #1#2; #3
+\cs_new:Npn \@@_compare_back_any:ww #1#2\@@_sep: #3
   {
     \@@_if_type_fp:NTwFw
       #1 { \@@_if_type_fp:NTwFw #3 \use_i:nn \s_@@ \use_ii:nn \s_@@_stop }
@@ -206,11 +206,11 @@
         :ww
       \cs_end:
     }
-    #1#2 ; #3
+    #1#2 \@@_sep: #3
   }
 \cs_new:Npn \@@_bcmp:ww
-    \s_@@ \@@_chk:w #1 #2 #3;
-    \s_@@ \@@_chk:w #4 #5 #6;
+    \s_@@ \@@_chk:w #1 #2 #3\@@_sep:
+    \s_@@ \@@_chk:w #4 #5 #6\@@_sep:
   {
     \int_value:w
       \if_meaning:w 3 #1 \exp_after:wN \@@_compare_nan:w \fi:
@@ -219,7 +219,7 @@
       \if_meaning:w #2 #5
         \if_meaning:w #1 #4
           \if_meaning:w 1 #1
-            \@@_compare_npos:nwnw #6; #3;
+            \@@_compare_npos:nwnw #6\@@_sep: #3\@@_sep:
           \else:
             0
           \fi:
@@ -247,11 +247,11 @@
 %   and if any don't match return~$2$ (as \cs{int_value:w} |02|
 %   \cs{exp_stop_f:}).
 %    \begin{macrocode}
-\cs_new:Npn \@@_compare_back_tuple:ww #1; #2; { 2 }
-\cs_new:Npn \@@_tuple_compare_back:ww #1; #2; { 2 }
+\cs_new:Npn \@@_compare_back_tuple:ww #1\@@_sep: #2\@@_sep: { 2 }
+\cs_new:Npn \@@_tuple_compare_back:ww #1\@@_sep: #2\@@_sep: { 2 }
 \cs_new:Npn \@@_tuple_compare_back_tuple:ww
-  \s_@@_tuple \@@_tuple_chk:w #1;
-  \s_@@_tuple \@@_tuple_chk:w #2;
+  \s_@@_tuple \@@_tuple_chk:w #1\@@_sep:
+  \s_@@_tuple \@@_tuple_chk:w #2\@@_sep:
   {
     \int_compare:nNnTF { \@@_array_count:n {#1} } =
       { \@@_array_count:n {#2} }
@@ -258,19 +258,19 @@
       {
         \int_value:w 0
           \@@_tuple_compare_back_loop:w
-              #1 { \s_@@ \prg_break: } ; @
-              #2 { \s_@@ \prg_break: } ;
+              #1 { \s_@@ \prg_break: } \@@_sep: @
+              #2 { \s_@@ \prg_break: } \@@_sep:
             \prg_break_point:
         \exp_stop_f:
       }
       { 2 }
   }
-\cs_new:Npn \@@_tuple_compare_back_loop:w #1#2 ; #3 @ #4#5 ;
+\cs_new:Npn \@@_tuple_compare_back_loop:w #1#2 \@@_sep: #3 @ #4#5 \@@_sep:
   {
     \use_none:n #1
     \use_none:n #4
     \if_int_compare:w
-        \@@_compare_back_any:ww #1 #2 ; #4 #5 ; = \c_zero_int
+        \@@_compare_back_any:ww #1 #2 \@@_sep: #4 #5 \@@_sep: = \c_zero_int
     \else:
       2 \exp_after:wN \prg_break:
     \fi:
@@ -284,8 +284,8 @@
 % \begin{macro}[EXP]{\@@_compare_significand:nnnnnnnn}
 %   \begin{quote}
 %     \cs{@@_compare_npos:nwnw}
-%       \Arg{expo_1} \meta{body_1} |;|
-%       \Arg{expo_2} \meta{body_2} |;|
+%       \Arg{expo_1} \meta{body_1} \cs{@@_sep:}
+%       \Arg{expo_2} \meta{body_2} \cs{@@_sep:}
 %   \end{quote}
 %   Within an \cs{int_value:w} \ldots{} \cs{exp_stop_f:} construction,
 %   this expands to $0$ if the two numbers are equal, $-1$ if the first
@@ -296,7 +296,7 @@
 %   first $8$ digits coincide, the next $8$ decide.  Otherwise, the
 %   first $8$ digits are compared.
 %    \begin{macrocode}
-\cs_new:Npn \@@_compare_npos:nwnw #1#2; #3#4;
+\cs_new:Npn \@@_compare_npos:nwnw #1#2\@@_sep: #3#4\@@_sep:
   {
     \if_int_compare:w #1 = #3 \exp_stop_f:
       \@@_compare_significand:nnnnnnnn #2 #4
@@ -427,20 +427,22 @@
 %   progress.  Conversion to decimal is done just before calling the
 %   user's function.
 %    \begin{macrocode}
-\cs_new:Npn \@@_step:wwwN #1#2; #3#4; #5#6; #7
+\cs_new:Npn \@@_step:wwwN #1#2\@@_sep: #3#4\@@_sep: #5#6\@@_sep: #7
   {
     \@@_if_type_fp:NTwFw #1 { } \s_@@ \prg_break: \s_@@_stop
     \@@_if_type_fp:NTwFw #3 { } \s_@@ \prg_break: \s_@@_stop
     \@@_if_type_fp:NTwFw #5 { } \s_@@ \prg_break: \s_@@_stop
-    \use_i:nnnn { \@@_step_fp:wwwN #1#2; #3#4; #5#6; #7 }
+    \use_i:nnnn
+      { \@@_step_fp:wwwN #1#2\@@_sep: #3#4\@@_sep: #5#6\@@_sep: #7 }
     \prg_break_point:
     \use:n
       {
-        \@@_error:nfff { step-tuple } { \fp_to_tl:n { #1#2 ; } }
-          { \fp_to_tl:n { #3#4 ; } } { \fp_to_tl:n { #5#6 ; } }
+        \@@_error:nfff { step-tuple } { \fp_to_tl:n { #1#2 \@@_sep: } }
+          { \fp_to_tl:n { #3#4 \@@_sep: } } { \fp_to_tl:n { #5#6 \@@_sep: } }
       }
   }
-\cs_new:Npn \@@_step_fp:wwwN #1 ; \s_@@ \@@_chk:w #2#3#4 ; #5; #6
+\cs_new:Npn \@@_step_fp:wwwN
+    #1 \@@_sep: \s_@@ \@@_chk:w #2#3#4 \@@_sep: #5\@@_sep: #6
   {
     \token_if_eq_meaning:NNTF #2 1
       {
@@ -456,11 +458,15 @@
           }
           {
             \@@_error:nnfn { bad-step } { }
-              { \fp_to_tl:n { \s_@@ \@@_chk:w #2#3#4 ; } } {#6}
+              { \fp_to_tl:n { \s_@@ \@@_chk:w #2#3#4 \@@_sep: } } {#6}
           }
         \use_none:nnnnn
       }
-      { #1 ; } { \c_nan_fp } { \s_@@ \@@_chk:w #2#3#4 ; } { #5 ; } #6
+        { #1 \@@_sep: }
+        { \c_nan_fp }
+        { \s_@@ \@@_chk:w #2#3#4 \@@_sep: }
+        { #5 \@@_sep: }
+        #6
   }
 \cs_new:Npn \@@_step:NnnnnN #1#2#3#4#5#6
   {
@@ -556,8 +562,8 @@
       \exp_after:wN \@@_minmax_loop:Nww \exp_after:wN -
     \fi:
     #2
-    \s_@@ \@@_chk:w 2 #1 \s_@@_exact ;
-    \s_@@ \@@_chk:w { 3 \@@_minmax_break_o:w } ;
+    \s_@@ \@@_chk:w 2 #1 \s_@@_exact \@@_sep:
+    \s_@@ \@@_chk:w { 3 \@@_minmax_break_o:w } \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -574,7 +580,7 @@
 %   maximum; otherwise we keep the first number.  Then loop.
 %    \begin{macrocode}
 \cs_new:Npn \@@_minmax_loop:Nww
-    #1 \s_@@ \@@_chk:w #2#3; \s_@@ \@@_chk:w #4#5;
+    #1 \s_@@ \@@_chk:w #2#3\@@_sep: \s_@@ \@@_chk:w #4#5\@@_sep:
   {
     \if_meaning:w 3 #4
       \if_meaning:w 3 #2
@@ -585,8 +591,8 @@
     \else:
       \if_int_compare:w
           \@@_compare_back:ww
-            \s_@@ \@@_chk:w #4#5;
-            \s_@@ \@@_chk:w #2#3;
+            \s_@@ \@@_chk:w #4#5\@@_sep:
+            \s_@@ \@@_chk:w #2#3\@@_sep:
           = #1 1 \exp_stop_f:
         \@@_minmax_auxii:ww
       \else:
@@ -594,8 +600,8 @@
       \fi:
     \fi:
     \@@_minmax_loop:Nww #1
-      \s_@@ \@@_chk:w #2#3;
-      \s_@@ \@@_chk:w #4#5;
+      \s_@@ \@@_chk:w #2#3\@@_sep:
+      \s_@@ \@@_chk:w #4#5\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -603,9 +609,10 @@
 % \begin{macro}[EXP]{\@@_minmax_auxi:ww, \@@_minmax_auxii:ww}
 %   Keep the first/second number, and remove the other.
 %    \begin{macrocode}
-\cs_new:Npn \@@_minmax_auxi:ww  #1 \fi: \fi: #2 \s_@@ #3 ; \s_@@ #4;
-  { \fi: \fi: #2 \s_@@ #3 ; }
-\cs_new:Npn \@@_minmax_auxii:ww #1 \fi: \fi: #2 \s_@@ #3 ;
+\cs_new:Npn \@@_minmax_auxi:ww
+    #1 \fi: \fi: #2 \s_@@ #3 \@@_sep: \s_@@ #4\@@_sep:
+  { \fi: \fi: #2 \s_@@ #3 \@@_sep: }
+\cs_new:Npn \@@_minmax_auxii:ww #1 \fi: \fi: #2 \s_@@ #3 \@@_sep:
   { \fi: \fi: #2 }
 %    \end{macrocode}
 % \end{macro}
@@ -615,8 +622,8 @@
 %   to the end of the tests, close the current test with \cs{fi:}, clean
 %   up, and return the appropriate number with one post-expansion.
 %    \begin{macrocode}
-\cs_new:Npn \@@_minmax_break_o:w #1 \fi: \fi: #2 \s_@@ #3; #4;
-  { \fi: \@@_exp_after_o:w \s_@@ #3; }
+\cs_new:Npn \@@_minmax_break_o:w #1 \fi: \fi: #2 \s_@@ #3\@@_sep: #4\@@_sep:
+  { \fi: \@@_exp_after_o:w \s_@@ #3\@@_sep: }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -627,7 +634,7 @@
 %   exit the conditional, and one to please \pkg{l3fp-parse}.  The first
 %   argument is provided by \pkg{l3fp-parse} and is ignored.
 %    \begin{macrocode}
-\cs_new:Npn \@@_not_o:w #1 \s_@@ \@@_chk:w #2#3; @
+\cs_new:Npn \@@_not_o:w #1 \s_@@ \@@_chk:w #2#3\@@_sep: @
   {
     \if_meaning:w 0 #2
       \exp_after:wN \exp_after:wN \exp_after:wN \c_one_fp
@@ -652,30 +659,31 @@
 \group_begin:
   \char_set_catcode_letter:N &
   \char_set_catcode_letter:N |
-  \cs_new:Npn \@@_&_o:ww #1 \s_@@ \@@_chk:w #2#3;
+  \cs_new:Npn \@@_&_o:ww #1 \s_@@ \@@_chk:w #2#3\@@_sep:
     {
       \if_meaning:w 0 #2 #1
-        \@@_and_return:wNw \s_@@ \@@_chk:w #2#3;
+        \@@_and_return:wNw \s_@@ \@@_chk:w #2#3\@@_sep:
       \fi:
       \@@_exp_after_o:w
     }
-  \cs_new:Npn \@@_&_tuple_o:ww #1 \s_@@ \@@_chk:w #2#3;
+  \cs_new:Npn \@@_&_tuple_o:ww #1 \s_@@ \@@_chk:w #2#3\@@_sep:
     {
       \if_meaning:w 0 #2 #1
-        \@@_and_return:wNw \s_@@ \@@_chk:w #2#3;
+        \@@_and_return:wNw \s_@@ \@@_chk:w #2#3\@@_sep:
       \fi:
       \@@_exp_after_tuple_o:w
     }
-  \cs_new:Npn \@@_tuple_&_o:ww #1; { \@@_exp_after_o:w }
-  \cs_new:Npn \@@_tuple_&_tuple_o:ww #1; { \@@_exp_after_tuple_o:w }
+  \cs_new:Npn \@@_tuple_&_o:ww #1\@@_sep: { \@@_exp_after_o:w }
+  \cs_new:Npn \@@_tuple_&_tuple_o:ww #1\@@_sep: { \@@_exp_after_tuple_o:w }
   \cs_new:Npn \@@_|_o:ww { \@@_&_o:ww \else: }
   \cs_new:Npn \@@_|_tuple_o:ww { \@@_&_tuple_o:ww \else: }
-  \cs_new:Npn \@@_tuple_|_o:ww #1; #2; { \@@_exp_after_tuple_o:w #1; }
-  \cs_new:Npn \@@_tuple_|_tuple_o:ww #1; #2;
-    { \@@_exp_after_tuple_o:w #1; }
+  \cs_new:Npn \@@_tuple_|_o:ww #1\@@_sep: #2\@@_sep:
+    { \@@_exp_after_tuple_o:w #1\@@_sep: }
+  \cs_new:Npn \@@_tuple_|_tuple_o:ww #1\@@_sep: #2\@@_sep:
+    { \@@_exp_after_tuple_o:w #1\@@_sep: }
 \group_end:
-\cs_new:Npn \@@_and_return:wNw #1; \fi: #2;
-  { \fi: \@@_exp_after_o:w #1; }
+\cs_new:Npn \@@_and_return:wNw #1\@@_sep: \fi: #2\@@_sep:
+  { \fi: \@@_exp_after_o:w #1\@@_sep: }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp-parse.dtx
 %
-% Copyright (C) 2011-2024 The LaTeX Project
+% Copyright (C) 2011-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -71,7 +71,7 @@
 %
 % In this file at least, a \meta{floating point object} is a floating
 % point number or tuple.  This can be extended to anything that starts
-% with \cs{s_@@} or \cs{s_@@_\meta{type}} and ends with |;| with some
+% with \cs{s_@@} or \cs{s_@@_\meta{type}} and ends with \cs{@@_sep:} with some
 % internal structure that depends on the \meta{type}.
 %
 % \begin{macro}[EXP]{\@@_parse:n}
@@ -215,12 +215,12 @@
 %   |\add:ww| 12345 ; 333444 ;
 % \end{syntax}
 % which can safely perform the addition by grabbing two arguments
-% delimited by~|;|.
+% delimited by~\cs{@@_sep:}.
 %
 % If we were to continue parsing the expression, then the following
 % number should also be cleaned up before the next use of a binary
 % operation such as |\add:ww|.  Just like \cs{int_value:w} |12345|
-% \cs{exp_after:wN}~|;| expanded what follows once, we need |\add:ww|
+% \cs{exp_after:wN}~\cs{@@_sep:} expanded what follows once, we need |\add:ww|
 % to do the calculation, and in the process to expand the following
 % once.  This is also true in our real application: all the functions of
 % the form \cs[no-index]{@@_\ldots_o:ww} expand what follows once.  This comes at the
@@ -643,7 +643,7 @@
 %   expansion.  That turns out to be useful.
 %    \begin{macrocode}
 \cs_new:Npn \@@_parse_return_semicolon:w
-    #1 \fi: \@@_parse_expand:w { \fi: ; #1 }
+    #1 \fi: \@@_parse_expand:w { \fi: \@@_sep: #1 }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -665,7 +665,7 @@
 %   stream, until meeting a non-digit, or up to a number of digits equal
 %   to their index.  The full expansion is
 %   \begin{syntax}
-%     \meta{digits} |;| \meta{filling 0} |;| \meta{length}
+%     \meta{digits} \cs{@@_sep:} \meta{filling 0} \cs{@@_sep:} \meta{length}
 %   \end{syntax}
 %   where \meta{filling 0} is a string of zeros such that \meta{digits}
 %   \meta{filling 0} has the length given by the index of the function,
@@ -687,14 +687,14 @@
         \@@_parse_expand:w
       }
   }
-\@@_tmp:w {vii}  \@@_parse_digits_vi:N   { 0000000 ; 7 }
-\@@_tmp:w {vi}   \@@_parse_digits_v:N    { 000000 ; 6 }
-\@@_tmp:w {v}    \@@_parse_digits_iv:N   { 00000 ; 5 }
-\@@_tmp:w {iv}   \@@_parse_digits_iii:N  { 0000 ; 4 }
-\@@_tmp:w {iii}  \@@_parse_digits_ii:N   { 000 ; 3 }
-\@@_tmp:w {ii}   \@@_parse_digits_i:N    { 00 ; 2 }
-\@@_tmp:w {i}    \@@_parse_digits_:N     { 0 ; 1 }
-\cs_new:Npn \@@_parse_digits_:N { ; ; 0 }
+\@@_tmp:w {vii}  \@@_parse_digits_vi:N   { 0000000 \@@_sep: 7 }
+\@@_tmp:w {vi}   \@@_parse_digits_v:N    { 000000 \@@_sep: 6 }
+\@@_tmp:w {v}    \@@_parse_digits_iv:N   { 00000 \@@_sep: 5 }
+\@@_tmp:w {iv}   \@@_parse_digits_iii:N  { 0000 \@@_sep: 4 }
+\@@_tmp:w {iii}  \@@_parse_digits_ii:N   { 000 \@@_sep: 3 }
+\@@_tmp:w {ii}   \@@_parse_digits_i:N    { 00 \@@_sep: 2 }
+\@@_tmp:w {i}    \@@_parse_digits_:N     { 0 \@@_sep: 1 }
+\cs_new:Npn \@@_parse_digits_:N { \@@_sep: \@@_sep: 0 }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -874,26 +874,26 @@
         \exp_after:wN \@@_parse_one_register_auxii:wwwNw
       }
     \exp_not:N \exp_after:wN { \exp_not:N \tex_the:D #1 }
-      ; \exp_not:N \@@_parse_one_register_dim:ww
-      \tl_to_str:n { pt } ; \exp_not:N \@@_parse_one_register_mu:www
-      . \tl_to_str:n { pt } ; \exp_not:N \@@_parse_one_register_int:www
+      \@@_sep: \exp_not:N \@@_parse_one_register_dim:ww
+      \tl_to_str:n { pt } \@@_sep: \exp_not:N \@@_parse_one_register_mu:www
+      . \tl_to_str:n { pt } \@@_sep: \exp_not:N \@@_parse_one_register_int:www
       \s_@@_stop
   }
 \exp_args:Nno \use:nn
   { \cs_new:Npn \@@_parse_one_register_auxii:wwwNw #1 . #2 }
-    { \tl_to_str:n { pt } #3 ; #4#5 \s_@@_stop }
-    { #4 #1.#2; }
+    { \tl_to_str:n { pt } #3 \@@_sep: #4#5 \s_@@_stop }
+    { #4 #1.#2\@@_sep: }
 \exp_args:Nno \use:nn
   { \cs_new:Npn \@@_parse_one_register_mu:www #1 }
-    { \tl_to_str:n { mu } ; #2 ; }
-    { \@@_parse_one_register_dim:ww #1 ; }
-\cs_new:Npn \@@_parse_one_register_int:www #1; #2.; #3;
+    { \tl_to_str:n { mu } \@@_sep: #2 \@@_sep: }
+    { \@@_parse_one_register_dim:ww #1 \@@_sep: }
+\cs_new:Npn \@@_parse_one_register_int:www #1\@@_sep: #2.\@@_sep: #3\@@_sep:
   { \@@_parse:n { #1 e #3 } }
-\cs_new:Npn \@@_parse_one_register_dim:ww #1; #2;
+\cs_new:Npn \@@_parse_one_register_dim:ww #1\@@_sep: #2\@@_sep:
   {
     \exp_after:wN \@@_from_dim_test:ww
     \int_value:w #2 \exp_after:wN ,
-    \int_value:w \dim_to_decimal_in_sp:n { #1 pt } ;
+    \int_value:w \dim_to_decimal_in_sp:n { #1 pt } \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -942,11 +942,11 @@
     \exp_after:wN \@@_parse_one_register_wd:Nw
     #4 \@@_parse_expand:w e
   }
-\cs_new:Npn \@@_parse_one_register_wd:Nw #1#2 ;
+\cs_new:Npn \@@_parse_one_register_wd:Nw #1#2 \@@_sep:
   {
     \exp_after:wN \@@_from_dim_test:ww
     \exp_after:wN 0 \exp_after:wN ,
-    \int_value:w \dim_to_decimal_in_sp:n { #1 #2 } ;
+    \int_value:w \dim_to_decimal_in_sp:n { #1 #2 } \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1020,7 +1020,7 @@
 %   mixture of lower and upper case, so we test and use a
 %   differently-named control sequence.
 %    \begin{macrocode}
-\cs_new:Npn \@@_parse_word:Nw #1#2;
+\cs_new:Npn \@@_parse_word:Nw #1#2\@@_sep:
   {
     \cs_if_exist_use:cF { @@_parse_word_#2:N }
       {
@@ -1184,7 +1184,7 @@
 %    \begin{macrocode}
 \cs_new:Npn \@@_parse_zero:
   {
-    \exp_after:wN ; \exp_after:wN 1
+    \exp_after:wN \@@_sep: \exp_after:wN 1
     \int_value:w \@@_parse_exponent:N
   }
 %    \end{macrocode}
@@ -1220,7 +1220,7 @@
 %
 % \begin{macro}[rEXP]{\@@_parse_small_leading:wwNN}
 %   \begin{syntax}
-%     \cs{@@_parse_small_leading:wwNN} |1| \meta{digits} |;| \meta{zeros} |;| \meta{number~of~zeros}
+%     \cs{@@_parse_small_leading:wwNN} |1| \meta{digits} \cs{@@_sep:} \meta{zeros} \cs{@@_sep:} \meta{number~of~zeros}
 %   \end{syntax}
 %   We leave \meta{digits} \meta{zeros} in the input stream: the
 %   functions used to grab digits are such that this constitutes digits
@@ -1232,7 +1232,7 @@
 %   Otherwise put $8$~zeros in to complete the significand, then look
 %   for an exponent.
 %    \begin{macrocode}
-\cs_new:Npn \@@_parse_small_leading:wwNN 1 #1 ; #2; #3 #4
+\cs_new:Npn \@@_parse_small_leading:wwNN 1 #1 \@@_sep: #2\@@_sep: #3 #4
   {
     #1 #2
     \exp_after:wN \@@_parse_pack_trailing:NNNNNNww
@@ -1254,7 +1254,7 @@
 %
 % \begin{macro}[rEXP]{\@@_parse_small_trailing:wwNN}
 %   \begin{syntax}
-%     \cs{@@_parse_small_trailing:wwNN} |1| \meta{digits} |;| \meta{zeros} |;| \meta{number~of~zeros} \meta{next~token}
+%     \cs{@@_parse_small_trailing:wwNN} |1| \meta{digits} \cs{@@_sep:} \meta{zeros} \cs{@@_sep:} \meta{number~of~zeros} \meta{next~token}
 %   \end{syntax}
 %   Leave digits $10$ to~$15$ (arguments |#1| and |#2|) in the input
 %   stream.  If the \meta{next~token} is a digit, it is the $16$th
@@ -1264,7 +1264,7 @@
 %   Otherwise, there is no $16$-th digit, so we put a~$0$, and look for
 %   an exponent.
 %    \begin{macrocode}
-\cs_new:Npn \@@_parse_small_trailing:wwNN 1 #1 ; #2; #3 #4
+\cs_new:Npn \@@_parse_small_trailing:wwNN 1 #1 \@@_sep: #2\@@_sep: #3 #4
   {
     #1 #2
     \if_int_compare:w 9 < 1 \token_to_str:N #4 \exp_stop_f:
@@ -1301,19 +1301,20 @@
 %   this is simple because such a carry can only occur to give rise to a
 %   power of~$10$.
 %    \begin{macrocode}
-\cs_new:Npn \@@_parse_pack_trailing:NNNNNNww #1 #2 #3#4#5#6 #7; #8 ;
+\cs_new:Npn \@@_parse_pack_trailing:NNNNNNww
+    #1 #2 #3#4#5#6 #7\@@_sep: #8 \@@_sep:
   {
     \if_meaning:w 2 #2 + 1 \fi:
-    ; #8 + #1 ; {#3#4#5#6} {#7};
+    \@@_sep: #8 + #1 \@@_sep: {#3#4#5#6} {#7}\@@_sep:
   }
-\cs_new:Npn \@@_parse_pack_leading:NNNNNww #1 #2#3#4#5 #6; #7;
+\cs_new:Npn \@@_parse_pack_leading:NNNNNww #1 #2#3#4#5 #6\@@_sep: #7\@@_sep:
   {
     + #7
     \if_meaning:w 2 #1 \@@_parse_pack_carry:w \fi:
-    ; 0 {#2#3#4#5} {#6}
+    \@@_sep: 0 {#2#3#4#5} {#6}
   }
-\cs_new:Npn \@@_parse_pack_carry:w \fi: ; 0 #1
-  { \fi: + 1 ; 0 {1000} }
+\cs_new:Npn \@@_parse_pack_carry:w \fi: \@@_sep: 0 #1
+  { \fi: + 1 \@@_sep: 0 {1000} }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -1344,7 +1345,7 @@
 %
 % \begin{macro}[rEXP]{\@@_parse_large_leading:wwNN}
 %   \begin{syntax}
-%     \cs{@@_parse_large_leading:wwNN} |1| \meta{digits} |;| \meta{zeros} |;| \meta{number~of~zeros} \meta{next~token}
+%     \cs{@@_parse_large_leading:wwNN} |1| \meta{digits} \cs{@@_sep:} \meta{zeros} \cs{@@_sep:} \meta{number~of~zeros} \meta{next~token}
 %   \end{syntax}
 %   We shift the exponent by the number of digits in~|#1|, namely the
 %   target number, $8$, minus the \meta{number of zeros} (number of
@@ -1357,7 +1358,7 @@
 %   complete the $8$~first digits, insert $8$~more, and look for an
 %   exponent.
 %    \begin{macrocode}
-\cs_new:Npn \@@_parse_large_leading:wwNN 1 #1 ; #2; #3 #4
+\cs_new:Npn \@@_parse_large_leading:wwNN 1 #1 \@@_sep: #2\@@_sep: #3 #4
   {
     + \c_@@_half_prec_int - #3
     \exp_after:wN \@@_parse_pack_leading:NNNNNww
@@ -1392,7 +1393,7 @@
 %
 % \begin{macro}[EXP]{\@@_parse_large_trailing:wwNN}
 %   \begin{syntax}
-%     \cs{@@_parse_large_trailing:wwNN} |1| \meta{digits} |;| \meta{zeros} |;| \meta{number~of~zeros} \meta{next~token}
+%     \cs{@@_parse_large_trailing:wwNN} |1| \meta{digits} \cs{@@_sep:} \meta{zeros} \cs{@@_sep:} \meta{number~of~zeros} \meta{next~token}
 %   \end{syntax}
 %   We have just read $15$~digits.  If the \meta{next token} is a digit,
 %   then the exponent shift caused by this block of $8$~digits is~$8$,
@@ -1408,7 +1409,7 @@
 %   for an exponent after using the \meta{zeros} and providing a $16$-th
 %   digit of~$0$.
 %    \begin{macrocode}
-\cs_new:Npn \@@_parse_large_trailing:wwNN 1 #1 ; #2; #3 #4
+\cs_new:Npn \@@_parse_large_trailing:wwNN 1 #1 \@@_sep: #2\@@_sep: #3 #4
   {
     \if_int_compare:w 9 < 1 \token_to_str:N #4 \exp_stop_f:
       \exp_after:wN \@@_parse_pack_trailing:NNNNNNww
@@ -1488,9 +1489,9 @@
 %   time, the result |0| or |1| is added to the
 %   surrounding integer expression.
 %    \begin{macrocode}
-\cs_new:Npn \@@_parse_round_after:wN #1; #2
+\cs_new:Npn \@@_parse_round_after:wN #1\@@_sep: #2
   {
-    + #2 \exp_after:wN ;
+    + #2 \exp_after:wN \@@_sep:
     \int_value:w \@@_int_eval:w #1 + \@@_parse_exponent:N
   }
 %    \end{macrocode}
@@ -1500,8 +1501,8 @@
 %   {\@@_parse_small_round:NN, \@@_parse_round_after:wN}
 %   Here, |#1|~is the digit that we are currently rounding (we only care
 %   whether it is even or odd).  If |#2|~is not a digit, then fetch an
-%   exponent and expand to |;|\meta{exponent} only.  Otherwise, we
-%   expand to |+0| or |+1|, then |;|\meta{exponent}.  To
+%   exponent and expand to \cs{@@_sep:}\meta{exponent} only.  Otherwise, we
+%   expand to |+0| or |+1|, then \cs{@@_sep:}\meta{exponent}.  To
 %   decide which, call \cs{@@_round_s:NNNw} to know whether to round up,
 %   giving it as arguments a sign~$0$ (all explicit numbers are
 %   positive), the digit |#1|~to round, the first following digit~|#2|,
@@ -1581,7 +1582,7 @@
     \fi:
     \@@_parse_expand:w
   }
-\cs_new:Npn \@@_parse_large_round_aux:wNN #1 ; #2 #3
+\cs_new:Npn \@@_parse_large_round_aux:wNN #1 \@@_sep: #2 #3
   {
     + #2
     \exp_after:wN \@@_parse_round_after:wN
@@ -1591,7 +1592,7 @@
           \exp_after:wN \@@_parse_round_loop:N
           \exp:w \exp_after:wN \@@_parse_expand:w
       \else:
-        \exp_after:wN ;
+        \exp_after:wN \@@_sep:
         \exp_after:wN 0
         \exp_after:wN #3
       \fi:
@@ -1618,7 +1619,7 @@
 % two tokens ahead completely would break the third example (unpacking
 % is even worse).  Indeed, in the course of reading $3.2$, \cs{c_pi_fp}
 % is expanded to \cs{s_@@} \cs{@@_chk:w} |1| |0| |{-1}| |{3141}|
-% $\cdots$ |;| and \cs{s_@@} stops the expansion.  Expanding two tokens
+% $\cdots$ \cs{@@_sep:} and \cs{s_@@} stops the expansion.  Expanding two tokens
 % ahead would then force the expansion of \cs{@@_chk:w} (despite it
 % being protected), and that function tries to produce an error.
 %
@@ -1636,7 +1637,7 @@
 %    \begin{macrocode}
 \cs_new:Npn \@@_parse_exponent:Nw #1 #2 \@@_parse_expand:w
   {
-    \exp_after:wN ;
+    \exp_after:wN \@@_sep:
     \int_value:w #2 \@@_parse_exponent:N #1
   }
 %    \end{macrocode}
@@ -1669,7 +1670,7 @@
   {
     \if_int_compare:w \if_catcode:w \scan_stop: \exp_not:N #2
                 0 \else: `#2 \fi: > `9 \exp_stop_f:
-      0 \exp_after:wN ; \exp_after:wN #1
+      0 \exp_after:wN \@@_sep: \exp_after:wN #1
     \else:
       \exp_after:wN \@@_parse_exponent_sign:N
     \fi:
@@ -1708,7 +1709,7 @@
       \@@_parse_exponent_keep:NTF #1
         { \@@_parse_return_semicolon:w #1 }
         {
-          \exp_after:wN ;
+          \exp_after:wN \@@_sep:
           \exp:w
         }
     \fi:
@@ -1820,7 +1821,7 @@
 % \begin{macro}[EXP]{\@@_parse_apply_unary_type:NNN, \@@_parse_apply_unary_error:NNw}
 %   In contrast to \cs{@@_parse_apply_function:NNNwN}, this checks that
 %   the operand |#4| is a single argument (namely there is a single
-%   |;|).  We use the fact that any floating point starts with a
+%   \cs{@@_sep:}).  We use the fact that any floating point starts with a
 %   \enquote{safe} token like \cs{s_@@}.  If there is no argument
 %   produce the |fp-no-arg| error; if there are at least two produce
 %   |fp-multi-arg|.  For the error message extract the mathematical
@@ -1834,12 +1835,12 @@
 %    \begin{macrocode}
 \cs_new:Npn \@@_parse_apply_unary:NNNwN #1#2#3#4@#5
   {
-    \@@_parse_apply_unary_chk:NwNw #4 @ ; . \s_@@_stop
+    \@@_parse_apply_unary_chk:NwNw #4 @ \@@_sep: . \s_@@_stop
     \@@_parse_apply_unary_type:NNN
     #3 #2 #4 @
     \exp:w \exp_end_continue_f:w #5 #1
   }
-\cs_new:Npn \@@_parse_apply_unary_chk:NwNw #1#2 ; #3#4 \s_@@_stop
+\cs_new:Npn \@@_parse_apply_unary_chk:NwNw #1#2 \@@_sep: #3#4 \s_@@_stop
   {
     \if_meaning:w @ #3 \else:
       \token_if_eq_meaning:NNTF . #3
@@ -2043,7 +2044,7 @@
     \cs_new:cpn { @@_parse_word_#1:N }
       {
         \@@_exp_after_f:nw { \@@_parse_infix:NN }
-        \s_@@ \@@_chk:w 10 #2 ;
+        \s_@@ \@@_chk:w 10 #2 \@@_sep:
       }
   }
 \@@_tmp:w {pt} { {1} {1000} {0000} {0000} {0000} }
@@ -2070,7 +2071,7 @@
       {
         \exp_after:wN \@@_from_dim_test:ww
         \exp_after:wN 0 \exp_after:wN ,
-        \int_value:w \dim_to_decimal_in_sp:n { 1 #1 } \exp_after:wN ;
+        \int_value:w \dim_to_decimal_in_sp:n { 1 #1 } \exp_after:wN \@@_sep:
         \exp:w \exp_end_continue_f:w \@@_parse_infix:NN
       }
   }
@@ -2220,7 +2221,7 @@
 %   according to their types, and expands once after the result.
 %   The |rev| version swaps its arguments before doing this.
 %    \begin{macrocode}
-\cs_new:Npn \@@_binary_type_o:Nww #1 #2#3 ; #4
+\cs_new:Npn \@@_binary_type_o:Nww #1 #2#3 \@@_sep: #4
   {
     \exp_after:wN \@@_parse_apply_binary_chk:NN
       \cs:w
@@ -2231,9 +2232,9 @@
         _o:ww
       \cs_end:
       #1
-    #2 #3 ; #4
+    #2 #3 \@@_sep: #4
   }
-\cs_new:Npn \@@_binary_rev_type_o:Nww #1 #2#3 ; #4#5 ;
+\cs_new:Npn \@@_binary_rev_type_o:Nww #1 #2#3 \@@_sep: #4#5 \@@_sep:
   {
     \exp_after:wN \@@_parse_apply_binary_chk:NN
       \cs:w
@@ -2244,7 +2245,7 @@
         _o:ww
       \cs_end:
       #1
-    #4 #5 ; #2 #3 ;
+    #4 #5 \@@_sep: #2 #3 \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -2253,10 +2254,10 @@
 %
 % \begin{macro}[EXP]{\@@_parse_infix_after_operand:NwN}
 %    \begin{macrocode}
-\cs_new:Npn \@@_parse_infix_after_operand:NwN #1 #2;
+\cs_new:Npn \@@_parse_infix_after_operand:NwN #1 #2\@@_sep:
   {
     \@@_exp_after_f:nw { \@@_parse_infix:NN #1 }
-    #2;
+    #2\@@_sep:
   }
 \cs_new:Npn \@@_parse_infix:NN #1 #2
   {
@@ -2430,7 +2431,7 @@
     \exp_after:wN #1
     \exp:w \exp_end_continue_f:w
     \@@_exp_after_tuple_f:nw { }
-      \s_@@_tuple \@@_tuple_chk:w { #2 #4 } ;
+      \s_@@_tuple \@@_tuple_chk:w { #2 #4 } \@@_sep:
     #5 #1
   }
 %    \end{macrocode}
@@ -2688,7 +2689,7 @@
     \fi:
     #1 #8 #9
   }
-\cs_new:Npn \@@_parse_apply_compare_aux:NNwN #1 #2 #3; #4
+\cs_new:Npn \@@_parse_apply_compare_aux:NNwN #1 #2 #3\@@_sep: #4
   {
     \if_meaning:w \@@_parse_compare:NNNNNNN #4
       \exp_after:wN \@@_parse_continue_compare:NNwNN
@@ -2695,7 +2696,7 @@
       \exp_after:wN #1
       \exp_after:wN #2
       \exp:w \exp_end_continue_f:w
-      \@@_exp_after_o:w #3;
+      \@@_exp_after_o:w #3\@@_sep:
       \exp:w \exp_end_continue_f:w
     \else:
       \exp_after:wN \@@_parse_continue:NwN
@@ -2725,7 +2726,7 @@
       {
         \@@_error:nffn { bad-args }
           {#1}
-          { \fp_to_tl:n { \s_@@_tuple \@@_tuple_chk:w {#3} ; } }
+          { \fp_to_tl:n { \s_@@_tuple \@@_tuple_chk:w {#3} \@@_sep: } }
           { }
         \exp_after:wN \c_nan_fp
       }
@@ -2764,11 +2765,11 @@
   {
     \@@_error:nffn { bad-args }
       {#2}
-      { \fp_to_tl:n { \s_@@_tuple \@@_tuple_chk:w {#4} ; } }
+      { \fp_to_tl:n { \s_@@_tuple \@@_tuple_chk:w {#4} \@@_sep: } }
       { }
     \exp_after:wN \c_nan_fp
   }
-\cs_new:Npn \@@_parse_function_one_two_aux:nnw #1#2 #3; #4
+\cs_new:Npn \@@_parse_function_one_two_aux:nnw #1#2 #3\@@_sep: #4
   {
     \@@_if_type_fp:NTwFw
       #4 { }
@@ -2780,14 +2781,14 @@
         \@@_parse_function_one_two_error_o:w
       }
       \s_@@_stop
-    \@@_parse_function_one_two_auxii:nnw {#1} {#2} #3; #4
+    \@@_parse_function_one_two_auxii:nnw {#1} {#2} #3\@@_sep: #4
   }
-\cs_new:Npn \@@_parse_function_one_two_auxii:nnw #1#2#3; #4; #5
+\cs_new:Npn \@@_parse_function_one_two_auxii:nnw #1#2#3\@@_sep: #4\@@_sep: #5
   {
     \if_meaning:w @ #5 \else:
       \exp_after:wN \@@_parse_function_one_two_error_o:w
     \fi:
-    \use_ii:nn {#1} { \use_none:n #2 } #3; #4; #5
+    \use_ii:nn {#1} { \use_none:n #2 } #3\@@_sep: #4\@@_sep: #5
   }
 %    \end{macrocode}
 % \end{macro}
@@ -2798,7 +2799,7 @@
 %   afterwards.  The code |#1| should itself expand once after its
 %   result.
 %    \begin{macrocode}
-\cs_new:Npn \@@_tuple_map_o:nw #1 \s_@@_tuple \@@_tuple_chk:w #2 ;
+\cs_new:Npn \@@_tuple_map_o:nw #1 \s_@@_tuple \@@_tuple_chk:w #2 \@@_sep:
   {
     \exp_after:wN \s_@@_tuple
     \exp_after:wN \@@_tuple_chk:w
@@ -2805,14 +2806,14 @@
     \exp_after:wN {
       \exp:w \exp_end_continue_f:w
       \@@_tuple_map_loop_o:nw {#1} #2
-        { \s_@@ \prg_break: } ;
+        { \s_@@ \prg_break: } \@@_sep:
       \prg_break_point:
-    \exp_after:wN } \exp_after:wN ;
+    \exp_after:wN } \exp_after:wN \@@_sep:
   }
-\cs_new:Npn \@@_tuple_map_loop_o:nw #1#2#3 ;
+\cs_new:Npn \@@_tuple_map_loop_o:nw #1#2#3 \@@_sep:
   {
     \use_none:n #2
-    #1 #2 #3 ;
+    #1 #2 #3 \@@_sep:
     \exp:w \exp_end_continue_f:w
     \@@_tuple_map_loop_o:nw {#1}
   }
@@ -2824,8 +2825,8 @@
 %   afterwards.
 %    \begin{macrocode}
 \cs_new:Npn \@@_tuple_mapthread_o:nww #1
-    \s_@@_tuple \@@_tuple_chk:w #2 ;
-    \s_@@_tuple \@@_tuple_chk:w #3 ;
+    \s_@@_tuple \@@_tuple_chk:w #2 \@@_sep:
+    \s_@@_tuple \@@_tuple_chk:w #3 \@@_sep:
   {
     \exp_after:wN \s_@@_tuple
     \exp_after:wN \@@_tuple_chk:w
@@ -2832,16 +2833,16 @@
     \exp_after:wN {
       \exp:w \exp_end_continue_f:w
       \@@_tuple_mapthread_loop_o:nw {#1}
-        #2 { \s_@@ \prg_break: } ; @
-        #3 { \s_@@ \prg_break: } ;
+        #2 { \s_@@ \prg_break: } \@@_sep: @
+        #3 { \s_@@ \prg_break: } \@@_sep:
       \prg_break_point:
-    \exp_after:wN } \exp_after:wN ;
+    \exp_after:wN } \exp_after:wN \@@_sep:
   }
-\cs_new:Npn \@@_tuple_mapthread_loop_o:nw #1#2#3 ; #4 @ #5#6 ;
+\cs_new:Npn \@@_tuple_mapthread_loop_o:nw #1#2#3 \@@_sep: #4 @ #5#6 \@@_sep:
   {
     \use_none:n #2
     \use_none:n #5
-    #1 #2 #3 ; #5 #6 ;
+    #1 #2 #3 \@@_sep: #5 #6 \@@_sep:
     \exp:w \exp_end_continue_f:w
     \@@_tuple_mapthread_loop_o:nw {#1} #4 @
   }

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp-random.dtx
 %
-% Copyright (C) 2016-2024 The LaTeX Project
+% Copyright (C) 2016-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -266,13 +266,13 @@
 % \begin{macro}[EXP]
 %   {\@@_rand_myriads:n, \@@_rand_myriads_loop:w, \@@_rand_myriads_get:w}
 %   Used as \cs{@@_rand_myriads:n} |{XXX}| with one letter |X|
-%   (specifically) per block of four digit we want; it expands to |;|
+%   (specifically) per block of four digit we want; it expands to \cs{@@_sep:}
 %   followed by the requested number of brace groups, each containing
 %   four (pseudo-random) digits.  Digits are produced as a random number
 %   in $[10000,19999]$ for the usual reason of preserving leading zeros.
 %    \begin{macrocode}
 \cs_new:Npn \@@_rand_myriads:n #1
-  { \@@_rand_myriads_loop:w #1 \prg_break: X \prg_break_point: ; }
+  { \@@_rand_myriads_loop:w #1 \prg_break: X \prg_break_point: \@@_sep: }
 \cs_new:Npn \@@_rand_myriads_loop:w #1 X
   {
     #1
@@ -281,7 +281,7 @@
       \__kernel_randint:n { 10000 }
     \@@_rand_myriads_loop:w
   }
-\cs_new:Npn \@@_rand_myriads_get:w 1 #1 ; { ; {#1} }
+\cs_new:Npn \@@_rand_myriads_get:w 1 #1 \@@_sep: { \@@_sep: {#1} }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -301,7 +301,7 @@
       {
         \exp_after:wN \@@_rand_o:w
         \exp:w \exp_end_continue_f:w
-        \@@_rand_myriads:n { XXXX } { 0000 } { 0000 } ; 0
+        \@@_rand_myriads:n { XXXX } { 0000 } { 0000 } \@@_sep: 0
       }
       {
         \msg_expandable_error:nnnnn
@@ -309,7 +309,7 @@
         \exp_after:wN \c_nan_fp
       }
   }
-\cs_new:Npn \@@_rand_o:w ;
+\cs_new:Npn \@@_rand_o:w \@@_sep:
   {
     \exp_after:wN \@@_sanitize:Nw
     \exp_after:wN 0
@@ -360,13 +360,13 @@
       { \@@_randint_default:w \@@_randint_o:w }
   }
 \cs_new:Npn \@@_randint_default:w #1 { \exp_after:wN #1 \c_one_fp }
-\cs_new:Npn \@@_randint_badarg:w \s_@@ \@@_chk:w #1#2#3;
+\cs_new:Npn \@@_randint_badarg:w \s_@@ \@@_chk:w #1#2#3\@@_sep:
   {
-    \@@_int:wTF \s_@@ \@@_chk:w #1#2#3;
+    \@@_int:wTF \s_@@ \@@_chk:w #1#2#3\@@_sep:
       {
         \if_meaning:w 1 #1
           \if_int_compare:w
-              \@@_use_i_until_s:nw #3 ; > \c_@@_prec_int
+              \@@_use_i_until_s:nw #3 \@@_sep: > \c_@@_prec_int
             \c_one_int
           \fi:
         \fi:
@@ -373,28 +373,28 @@
       }
       { \c_one_int }
   }
-\cs_new:Npn \@@_randint_o:w #1; #2; @
+\cs_new:Npn \@@_randint_o:w #1\@@_sep: #2\@@_sep: @
   {
     \if_case:w
-        \@@_randint_badarg:w #1;
-        \@@_randint_badarg:w #2;
-        \if:w 1 \@@_compare_back:ww #2; #1; \c_one_int \fi:
+        \@@_randint_badarg:w #1\@@_sep:
+        \@@_randint_badarg:w #2\@@_sep:
+        \if:w 1 \@@_compare_back:ww #2\@@_sep: #1\@@_sep: \c_one_int \fi:
         \c_zero_int
-      \@@_randint_auxi_o:ww #1; #2;
+      \@@_randint_auxi_o:ww #1\@@_sep: #2\@@_sep:
     \or:
       \@@_invalid_operation_tl_o:ff
-        { randint } { \@@_array_to_clist:n { #1; #2; } }
+        { randint } { \@@_array_to_clist:n { #1\@@_sep: #2\@@_sep: } }
       \exp:w
     \fi:
     \exp_after:wN \exp_end:
   }
-\cs_new:Npn \@@_randint_auxi_o:ww #1 ; #2 ; #3 \exp_end:
+\cs_new:Npn \@@_randint_auxi_o:ww #1 \@@_sep: #2 \@@_sep: #3 \exp_end:
   {
     \fi:
-    \@@_randint_auxii:wn #2 ;
-    { \@@_randint_auxii:wn #1 ; \@@_randint_auxiii_o:ww }
+    \@@_randint_auxii:wn #2 \@@_sep:
+    { \@@_randint_auxii:wn #1 \@@_sep: \@@_randint_auxiii_o:ww }
   }
-\cs_new:Npn \@@_randint_auxii:wn \s_@@ \@@_chk:w #1#2#3#4 ;
+\cs_new:Npn \@@_randint_auxii:wn \s_@@ \@@_chk:w #1#2#3#4 \@@_sep:
   {
     \if_meaning:w 0 #1
       \exp_after:wN \use_i:nn
@@ -405,7 +405,7 @@
     {
       \exp_after:wN \@@_ep_to_fixed:wwn
       \int_value:w \@@_int_eval:w
-        #3 - \c_@@_prec_int , #4 {0000} {0000} ;
+        #3 - \c_@@_prec_int , #4 {0000} {0000} \@@_sep:
       {
         \if_meaning:w 0 #2
           \exp_after:wN \use_i:nnnn
@@ -416,22 +416,22 @@
       \@@_fixed_continue:wn
     }
   }
-\cs_new:Npn \@@_randint_auxiii_o:ww #1 ; #2 ;
+\cs_new:Npn \@@_randint_auxiii_o:ww #1 \@@_sep: #2 \@@_sep:
   {
-    \@@_fixed_add:wwn #2 ;
-      {0000} {0000} {0000} {0001} {0000} {0000} ;
-    \@@_fixed_sub:wwn #1 ;
+    \@@_fixed_add:wwn #2 \@@_sep:
+      {0000} {0000} {0000} {0001} {0000} {0000} \@@_sep:
+    \@@_fixed_sub:wwn #1 \@@_sep:
     {
       \exp_after:wN \use_i:nn
       \exp_after:wN \@@_fixed_mul_add:wwwn
-      \exp:w \exp_end_continue_f:w \@@_rand_myriads:n { XXXXXX } ;
+      \exp:w \exp_end_continue_f:w \@@_rand_myriads:n { XXXXXX } \@@_sep:
     }
-    #1 ;
+    #1 \@@_sep:
     \@@_randint_auxiv_o:ww
-    #2 ;
-    \@@_randint_auxv_o:w #1 ; @
+    #2 \@@_sep:
+    \@@_randint_auxv_o:w #1 \@@_sep: @
   }
-\cs_new:Npn \@@_randint_auxiv_o:ww #1#2#3#4#5 ; #6#7#8#9
+\cs_new:Npn \@@_randint_auxiv_o:ww #1#2#3#4#5 \@@_sep: #6#7#8#9
   {
     \if_int_compare:w
       \if_int_compare:w #1#2 > #6#7 \exp_stop_f: 1 \else:
@@ -441,7 +441,7 @@
     \fi:
     \@@_randint_auxv_o:w {#1}{#2}{#3}{#4}#5
   }
-\cs_new:Npn \@@_randint_auxv_o:w #1#2#3#4#5 ; #6 @
+\cs_new:Npn \@@_randint_auxv_o:w #1#2#3#4#5 \@@_sep: #6 @
   {
     \exp_after:wN \@@_sanitize:Nw
     \int_value:w
@@ -453,7 +453,7 @@
       \exp_after:wN \@@_reverse_args:Nww
     \fi:
     \exp_after:wN \@@_fixed_sub:wwn \c_@@_one_fixed_tl
-    {#1} {#2} {#3} {#4} {0000} {0000} ;
+    {#1} {#2} {#3} {#4} {0000} {0000} \@@_sep:
     {
       \exp_after:wN \exp_stop_f:
       \int_value:w \@@_int_eval:w \c_@@_prec_int
@@ -480,16 +480,16 @@
     \int_eval:n
       {
         \exp_after:wN \@@_randint:ww
-        \int_value:w \int_eval:n {#1} \exp_after:wN ;
-        \int_value:w \int_eval:n {#2} ;
+        \int_value:w \int_eval:n {#1} \exp_after:wN \@@_sep:
+        \int_value:w \int_eval:n {#2} \@@_sep:
       }
   }
-\cs_new:Npn \@@_randint:ww #1; #2;
+\cs_new:Npn \@@_randint:ww #1\@@_sep: #2\@@_sep:
   {
     \if_int_compare:w #1 > #2 \exp_stop_f:
       \msg_expandable_error:nnnn
         { kernel } { randint-backward-range } {#1} {#2}
-      \@@_randint:ww #2; #1;
+      \@@_randint:ww #2\@@_sep: #1\@@_sep:
     \else:
       \if_int_compare:w \@@_int_eval:w #2
           \if_int_compare:w #1 > \c_zero_int
@@ -517,15 +517,15 @@
 %   }
 %   Any $n\in[-2^{31}+1,2^{31}-1]$ is uniquely written as
 %   $2^{14}n_1+n_2$ with $n_1\in[-2^{17},2^{17}-1]$ and
-%   $n_2\in[0,2^{14}-1]$.  Calling \cs{@@_randint_split_o:Nw} $n$ |;|
-%   gives $n_1$|;| $n_2$|;| and expands the next token once.  We do this
+%   $n_2\in[0,2^{14}-1]$.  Calling \cs{@@_randint_split_o:Nw} $n$ \cs{@@_sep:}
+%   gives $n_1$\cs{@@_sep:} $n_2$\cs{@@_sep:} and expands the next token once.  We do this
 %   for two random numbers and apply \cs{@@_randint_split_o:Nw} twice to
 %   fully decompose the range~$R$.  One subtlety is that we compute
 %   $R-2^{31}=\meta{max}-\meta{min}-(2^{31}-1)\in[-2^{31}+1,2^{31}-1]$
 %   rather than $R$ to avoid overflow.
 %
-%   Then we have \cs{@@_randint_wide_aux:w} \meta{X_1}|;|\meta{X_0}|;|
-%   \meta{Y_1}|;|\meta{Y_0}|;| \meta{R_2}|;|\meta{R_1}|;|\meta{R_0}|;.|
+%   Then we have \cs{@@_randint_wide_aux:w} \meta{X_1}\cs{@@_sep:}\meta{X_0}\cs{@@_sep:}
+%   \meta{Y_1}\cs{@@_sep:}\meta{Y_0}\cs{@@_sep:} \meta{R_2}\cs{@@_sep:}\meta{R_1}\cs{@@_sep:}\meta{R_0}|;.|
 %   and we apply the algorithm described earlier.
 %    \begin{macrocode}
 \cs_new:Npn \__kernel_randint:nn #1#2
@@ -534,35 +534,37 @@
     \exp_after:wN \@@_randint_wide_aux:w
     \int_value:w
       \exp_after:wN \@@_randint_split_o:Nw
-      \tex_uniformdeviate:D 268435456 ;
+      \tex_uniformdeviate:D 268435456 \@@_sep:
     \int_value:w
       \exp_after:wN \@@_randint_split_o:Nw
-      \tex_uniformdeviate:D 268435456 ;
+      \tex_uniformdeviate:D 268435456 \@@_sep:
     \int_value:w
       \exp_after:wN \@@_randint_split_o:Nw
       \int_value:w \@@_int_eval:w 131072 +
         \exp_after:wN \@@_randint_split_o:Nw
         \int_value:w
-          \__kernel_int_add:nnn {#2} { -#1 } { -\c_max_int } ;
+          \__kernel_int_add:nnn {#2} { -#1 } { -\c_max_int } \@@_sep:
     .
   }
-\cs_new:Npn \@@_randint_split_o:Nw #1#2 ;
+\cs_new:Npn \@@_randint_split_o:Nw #1#2 \@@_sep:
   {
     \if_meaning:w 0 #1
-      0 \exp_after:wN ; \int_value:w 0
+      0 \exp_after:wN \@@_sep: \int_value:w 0
     \else:
       \exp_after:wN \@@_randint_split_aux:w
-      \int_value:w \@@_int_eval:w (#1#2 - 8192) / 16384 ;
+      \int_value:w \@@_int_eval:w (#1#2 - 8192) / 16384 \@@_sep:
       + #1#2
     \fi:
-    \exp_after:wN ;
+    \exp_after:wN \@@_sep:
   }
-\cs_new:Npn \@@_randint_split_aux:w #1 ;
+\cs_new:Npn \@@_randint_split_aux:w #1 \@@_sep:
   {
-    #1 \exp_after:wN ;
+    #1 \exp_after:wN \@@_sep:
     \int_value:w \@@_int_eval:w - #1 * 16384
   }
-\cs_new:Npn \@@_randint_wide_aux:w #1;#2; #3;#4; #5;#6;#7; .
+\cs_new:Npn \@@_randint_wide_aux:w
+    #1\@@_sep:#2\@@_sep: #3\@@_sep:#4\@@_sep:
+    #5\@@_sep:#6\@@_sep:#7\@@_sep: .
   {
     \exp_after:wN \@@_randint_wide_auxii:w
     \int_value:w \@@_int_eval:w #5 * #3 + #6 * #1 +
@@ -569,11 +571,12 @@
       (#5 * #4 + #6 * #3 + #7 * #1 +
         (#5 * #2 +           #7 * #3 +
           (16384 * #6 + #7) * (16384 * #4 + #2) / 268435456) / 16384
-      ) / 16384 \exp_after:wN ;
-    \int_value:w \@@_int_eval:w (#5 + #6) * 16384 + #7 ;
-    #1 ; #5 ;
+      ) / 16384 \exp_after:wN \@@_sep:
+    \int_value:w \@@_int_eval:w (#5 + #6) * 16384 + #7 \@@_sep:
+    #1 \@@_sep: #5 \@@_sep:
   }
-\cs_new:Npn \@@_randint_wide_auxii:w #1; #2; #3; #4;
+\cs_new:Npn \@@_randint_wide_auxii:w
+    #1\@@_sep: #2\@@_sep: #3\@@_sep: #4\@@_sep:
   {
     \if_int_odd:w 0
         \if_int_compare:w #1 = #2 \else: \exp_stop_f: \fi:
@@ -606,7 +609,7 @@
     \if_int_compare:w #1 < \c_one_int
       \msg_expandable_error:nnnn
         { kernel } { randint-backward-range } { 1 } {#1}
-      \@@_randint:ww #1; 1;
+      \@@_randint:ww #1\@@_sep: 1\@@_sep:
     \else:
       \if_int_compare:w #1 > \c__kernel_randint_max_int
         \__kernel_randint:nn { 1 } {#1}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp-round.dtx
 %
-% Copyright (C) 2011-2024 The LaTeX Project
+% Copyright (C) 2011-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -144,7 +144,7 @@
 %   \item \cs{@@_round:NNN} \meta{sign} \meta{digit_1} \meta{digit_2}
 %     can expand to |0\exp_stop_f:| or |1\exp_stop_f:|.
 %   \item \cs{@@_round_s:NNNw} \meta{sign} \meta{digit_1} \meta{digit_2}
-%     \meta{more digits}|;| can expand to |0\exp_stop_f:;| or |1\exp_stop_f:;|.
+%     \meta{more digits}\cs{@@_sep:} can expand to |0\exp_stop_f:;| or |1\exp_stop_f:;|.
 %   \item \cs{@@_round_neg:NNN} \meta{sign} \meta{digit_1} \meta{digit_2}
 %     can expand to |0\exp_stop_f:| or |1\exp_stop_f:|.
 % \end{itemize}
@@ -267,7 +267,7 @@
 %
 % \begin{macro}[EXP]{\@@_round_s:NNNw}
 %   \begin{syntax}
-%     \cs{@@_round_s:NNNw} \meta{final sign} \meta{digit} \meta{more digits} |;|
+%     \cs{@@_round_s:NNNw} \meta{final sign} \meta{digit} \meta{more digits} \cs{@@_sep:}
 %   \end{syntax}
 %   Similar to \cs{@@_round:NNN}, but with an extra semicolon, this
 %   function expands to |0\exp_stop_f:;| if rounding $\meta{final sign}
@@ -277,7 +277,7 @@
 %   \cs{@@_int_eval:w} construction.  The only relevant information about
 %   this piece is whether it is zero or not.
 %    \begin{macrocode}
-\cs_new:Npn \@@_round_s:NNNw #1 #2 #3 #4;
+\cs_new:Npn \@@_round_s:NNNw #1 #2 #3 #4\@@_sep:
   {
     \exp_after:wN \@@_round:NNN
     \exp_after:wN #1
@@ -291,7 +291,7 @@
         \fi:
       \fi:
       #3
-    ;
+    \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -298,7 +298,7 @@
 %
 % \begin{macro}[EXP]{\@@_round_digit:Nw}
 %   \begin{syntax}
-%     \cs{int_value:w} \cs{@@_round_digit:Nw} \meta{digit} \meta{int expr} |;|
+%     \cs{int_value:w} \cs{@@_round_digit:Nw} \meta{digit} \meta{int expr} \cs{@@_sep:}
 %   \end{syntax}
 %   This function should always be called within an \cs{int_value:w}
 %   or \cs{@@_int_eval:w} expansion; it may add an extra
@@ -306,7 +306,7 @@
 %   expression should not be ended with a synonym of \tn{relax}, but
 %   with a semi-colon for instance.
 %    \begin{macrocode}
-\cs_new:Npn \@@_round_digit:Nw #1 #2;
+\cs_new:Npn \@@_round_digit:Nw #1 #2\@@_sep:
   {
     \if_int_odd:w \if_meaning:w 0 #1 1 \else:
                   \if_meaning:w 5 #1 1 \else:
@@ -427,7 +427,8 @@
 %   \cs{@@_round_to_nearest_ninf:NNN}, \cs{@@_round_to_nearest_pinf:NNN}
 %   and act accordingly.
 %    \begin{macrocode}
-\cs_new:Npn \@@_round:Nwww #1#2 ; #3 ; \s_@@ \@@_chk:w #4#5#6 ; #7 @
+\cs_new:Npn \@@_round:Nwww
+    #1#2 \@@_sep: #3 \@@_sep: \s_@@ \@@_chk:w #4#5#6 \@@_sep: #7 @
   {
     \cs_if_eq:NNTF #1 \@@_round_to_nearest:NNN
       {
@@ -440,7 +441,7 @@
                 \if_case:w #5 \exp_stop_f: _pinf \or: \else: _ninf \fi: \fi:
                 :NNN
               }
-            #2 ; #3 ;
+            #2 \@@_sep: #3 \@@_sep:
           }
           {
             \@@_error:nnnn { num-args } { round () } { 1 } { 3 }
@@ -488,11 +489,11 @@
 %   otherwise invalid as we have something like |round(1,3.14)| where
 %   the number of digits is not an integer.
 %    \begin{macrocode}
-\cs_new:Npn \@@_round:Nww #1#2 ; #3 ;
+\cs_new:Npn \@@_round:Nww #1#2 \@@_sep: #3 \@@_sep:
   {
-    \@@_small_int:wTF #3; { \@@_round:Nwn #1#2; }
+    \@@_small_int:wTF #3\@@_sep: { \@@_round:Nwn #1#2\@@_sep: }
       {
-        \if:w 3 \@@_kind:w #3 ;
+        \if:w 3 \@@_kind:w #3 \@@_sep:
           \exp_after:wN \use_i:nn
         \else:
           \exp_after:wN \use_ii:nn
@@ -501,11 +502,11 @@
         {
           \@@_invalid_operation_tl_o:ff
             { \@@_round_name_from_cs:N #1 }
-            { \@@_array_to_clist:n { #2; #3; } }
+            { \@@_array_to_clist:n { #2\@@_sep: #3\@@_sep: } }
         }
       }
   }
-\cs_new:Npn \@@_round:Nwn #1 \s_@@ \@@_chk:w #2#3#4; #5
+\cs_new:Npn \@@_round:Nwn #1 \s_@@ \@@_chk:w #2#3#4\@@_sep: #5
   {
     \if_meaning:w 1 #2
       \exp_after:wN \@@_round_normal:NwNNnw
@@ -514,14 +515,14 @@
     \else:
       \exp_after:wN \@@_exp_after_o:w
     \fi:
-    \s_@@ \@@_chk:w #2#3#4;
+    \s_@@ \@@_chk:w #2#3#4\@@_sep:
   }
-\cs_new:Npn \@@_round_normal:NwNNnw #1#2 \s_@@ \@@_chk:w 1#3#4#5;
+\cs_new:Npn \@@_round_normal:NwNNnw #1#2 \s_@@ \@@_chk:w 1#3#4#5\@@_sep:
   {
     \@@_decimate:nNnnnn { \c_@@_prec_int - #4 - #2 }
       \@@_round_normal:NnnwNNnn #5 #1 #3 {#4} {#2}
   }
-\cs_new:Npn \@@_round_normal:NnnwNNnn #1#2#3#4; #5#6
+\cs_new:Npn \@@_round_normal:NnnwNNnn #1#2#3#4\@@_sep: #5#6
   {
     \exp_after:wN \@@_round_normal:NNwNnn
     \int_value:w \@@_int_eval:w
@@ -539,7 +540,7 @@
       \use_none:nnnnnnn #3
       #1
       \@@_int_eval_end:
-      0000 0000 0000 0000 ; #6
+      0000 0000 0000 0000 \@@_sep: #6
   }
 \cs_new:Npn \@@_round_pack:Nw #1
   { \if_meaning:w 2 #1 + 1 \fi: \@@_int_eval_end: }
@@ -552,14 +553,14 @@
     \@@_pack_twice_four:wNNNNNNNN
     \@@_pack_twice_four:wNNNNNNNN
     \@@_round_normal_end:wwNnn
-    ; #2
+    \@@_sep: #2
   }
-\cs_new:Npn \@@_round_normal_end:wwNnn #1;#2;#3#4#5
+\cs_new:Npn \@@_round_normal_end:wwNnn #1\@@_sep:#2\@@_sep:#3#4#5
   {
     \exp_after:wN \@@_exp_after_o:w \exp:w \exp_end_continue_f:w
-    \@@_sanitize:Nw #3 #4 ; #1 ;
+    \@@_sanitize:Nw #3 #4 \@@_sep: #1 \@@_sep:
   }
-\cs_new:Npn \@@_round_special:NwwNnn #1#2;#3;#4#5#6
+\cs_new:Npn \@@_round_special:NwwNnn #1#2\@@_sep:#3\@@_sep:#4#5#6
   {
     \if_meaning:w 0 #1
       \@@_case_return:nw
@@ -570,12 +571,12 @@
       \int_value:w \@@_int_eval:w 1
         \if_meaning:w 1 #1 -#6 \else: +#5 \fi:
     \fi:
-    ;
+    \@@_sep:
   }
-\cs_new:Npn \@@_round_special_aux:Nw #1#2;
+\cs_new:Npn \@@_round_special_aux:Nw #1#2\@@_sep:
   {
     \exp_after:wN \@@_exp_after_o:w \exp:w \exp_end_continue_f:w
-    \@@_sanitize:Nw #1#2; {1000}{0000}{0000}{0000};
+    \@@_sanitize:Nw #1#2\@@_sep: {1000}{0000}{0000}{0000}\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-symbolic.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-symbolic.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-symbolic.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -42,7 +42,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -75,7 +75,7 @@
 %
 % Every symbolic expression has the form \cs{s_@@_symbolic}
 % \cs{@@_symbolic_chk:w} \meta{operation} |,| \Arg{operands} \meta{junk}
-% |;| where the \meta{operation} is a list of \texttt{N}-type tokens,
+% \cs{@@_sep:} where the \meta{operation} is a list of \texttt{N}-type tokens,
 % the \meta{operands} is an array of floating point objects, and the
 % \meta{junk} is to be discarded.  If the outermost operator (last to be
 % evaluated) is unary, the expression has the form
@@ -82,7 +82,7 @@
 % \begin{quote}
 %   \cs{s_@@_symbolic} \cs{@@_symbolic_chk:w} \\
 %   \cs{@@_types_unary:NNw} |\__fp_|\meta{op}|_o:w| \meta{token} |,| \\
-%   |{| \meta{operand} |}| \meta{junk} |;|
+%   |{| \meta{operand} |}| \meta{junk} \cs{@@_sep:}
 % \end{quote}
 % where the \meta{op} is a unary operation (|set_sign|, |cos|,
 % \ldots{}), and the \meta{token} and \meta{operand} are used as
@@ -92,7 +92,7 @@
 % \begin{quote}
 %   \cs{s_@@_symbolic} \cs{@@_symbolic_chk:w} \\
 %   \cs{@@_types_binary:Nww} |\__fp_|\meta{op}|_o:ww| |,| \\
-%   |{| \meta{operand_1} \meta{operand_2} |}| \meta{junk} |;|
+%   |{| \meta{operand_1} \meta{operand_2} |}| \meta{junk} \cs{@@_sep:}
 % \end{quote}
 % where the \meta{op} is an operation (|+|, |&|, \ldots{}), and
 % |\__fp_|\meta{op}|_o:ww| receives the \meta{operands} as arguments.
@@ -100,7 +100,7 @@
 % \begin{quote}
 %   \cs{s_@@_symbolic} \cs{@@_symbolic_chk:w} \\
 %   \cs{@@_variable_o:w} \meta{identifier} |,| \\
-%   |{| |}| \meta{junk} |;|
+%   |{| |}| \meta{junk} \cs{@@_sep:}
 % \end{quote}
 %
 % Symbolic expressions are stored in a prefix form.  When encountering a
@@ -141,12 +141,12 @@
 % \begin{macro}{\@@_symbolic_chk:w}
 %   Analog of \cs{@@_chk:w} for symbolic expressions.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_symbolic_chk:w #1,#2#3;
+\cs_new_protected:Npn \@@_symbolic_chk:w #1,#2#3\@@_sep:
   {
     \msg_error:nne { fp } { misused-fp }
       {
         \@@_to_tl_dispatch:w
-          \s_@@_symbolic \@@_symbolic_chk:w #1,{#2};
+          \s_@@_symbolic \@@_symbolic_chk:w #1,{#2}\@@_sep:
       }
   }
 %    \end{macrocode}
@@ -181,7 +181,7 @@
 %   evaluate all pieces of the expression which can be evaluated.
 %    \begin{macrocode}
 \cs_new:Npn \@@_exp_after_symbolic_f:nw
-    #1 \s_@@_symbolic \@@_symbolic_chk:w #2, #3#4;
+    #1 \s_@@_symbolic \@@_symbolic_chk:w #2, #3#4\@@_sep:
   {
     \exp_after:wN \@@_exp_after_symbolic_aux:w
     \exp:w
@@ -193,13 +193,13 @@
         \@@_exp_after_array_f:w #3 \s_@@_expr_stop
         \exp_after:wN
       }
-    \exp_after:wN ;
+    \exp_after:wN \@@_sep:
     \exp:w \exp_end_continue_f:w #1
   }
-\cs_new:Npn \@@_exp_after_symbolic_aux:w #1, #2;
+\cs_new:Npn \@@_exp_after_symbolic_aux:w #1, #2\@@_sep:
   {
     \@@_if_has_symbolic:nTF {#2}
-      { \s_@@_symbolic \@@_symbolic_chk:w #1, {#2} ; }
+      { \s_@@_symbolic \@@_symbolic_chk:w #1, {#2} \@@_sep: }
       { #1 #2 @ \prg_do_nothing: }
   }
 \cs_new:Npn \@@_exp_after_symbolic_loop:N #1
@@ -218,11 +218,11 @@
 % \begin{macro}[EXP]{\@@_symbolic_binary_o:Nww}
 %   Used when applying infix operators to expressions.
 %    \begin{macrocode}
-\cs_new:Npn \@@_symbolic_binary_o:Nww #1 #2; #3;
+\cs_new:Npn \@@_symbolic_binary_o:Nww #1 #2\@@_sep: #3\@@_sep:
   {
     \@@_exp_after_symbolic_f:nw { \exp_after:wN \exp_stop_f: }
       \s_@@_symbolic \@@_symbolic_chk:w
-      \@@_types_binary:Nww #1 , { #2; #3; } ;
+      \@@_types_binary:Nww #1 , { #2\@@_sep: #3\@@_sep: } \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -280,11 +280,11 @@
 % \begin{macro}[EXP]{\@@_symbolic_unary_o:NNw}
 %   Used when applying infix operators to expressions.
 %    \begin{macrocode}
-\cs_new:Npn \@@_symbolic_unary_o:NNw #1#2#3; @
+\cs_new:Npn \@@_symbolic_unary_o:NNw #1#2#3\@@_sep: @
   {
     \@@_exp_after_symbolic_f:nw { \exp_after:wN \exp_stop_f: }
       \s_@@_symbolic \@@_symbolic_chk:w
-      \@@_types_unary:NNw #1#2 , { #3; } ;
+      \@@_types_unary:NNw #1#2 , { #3\@@_sep: } \@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -346,11 +346,11 @@
 \@@_tmp:w { decimal    } { 0   } \@@_to_decimal_dispatch:w
 \@@_tmp:w { int        } { 0   } \@@_to_int_dispatch:w
 \@@_tmp:w { scientific } { nan } \@@_to_scientific_dispatch:w
-\cs_new:Npn \@@_symbolic_convert:wnnN #1#2; #3#4#5
+\cs_new:Npn \@@_symbolic_convert:wnnN #1#2\@@_sep: #3#4#5
   {
     \str_if_eq:nnTF {#1} { \s_@@_symbolic }
-      { \@@_invalid_operation:nnw {#3} {#4} #1#2; }
-      { #5 #1#2; }
+      { \@@_invalid_operation:nnw {#3} {#4} #1#2\@@_sep: }
+      { #5 #1#2\@@_sep: }
   }
 %    \end{macrocode}
 % \end{macro}
@@ -390,7 +390,7 @@
 %   Converting a symbolic expression to a token list is possible.
 %    \begin{macrocode}
 \cs_new:Npn \@@_symbolic_to_tl:w
-    \s_@@_symbolic \@@_symbolic_chk:w #1#2, #3#4;
+    \s_@@_symbolic \@@_symbolic_chk:w #1#2, #3#4\@@_sep:
   {
     \str_case:nnTF {#1}
       {
@@ -409,13 +409,13 @@
         ( \@@_to_tl_dispatch:w #3 )
       }
   }
-\cs_new:Npn \@@_symbolic_binary_to_tl:Nww #1, #2; #3; @
+\cs_new:Npn \@@_symbolic_binary_to_tl:Nww #1, #2\@@_sep: #3\@@_sep: @
   {
     \use:e
       {
-        ( \@@_to_tl_dispatch:w #2; )
+        ( \@@_to_tl_dispatch:w #2\@@_sep: )
         \@@_types_cs_to_op:N #1
-        ( \@@_to_tl_dispatch:w #3; )
+        ( \@@_to_tl_dispatch:w #3\@@_sep: )
       }
   }
 \cs_new:Npn \@@_symbolic_function_to_tl:Nw #1, #2@
@@ -492,7 +492,7 @@
         \token_if_eq_meaning:NNTF #2 \prg_do_nothing:
           {
             \s_@@_symbolic \@@_symbolic_chk:w
-              \@@_variable_o:w #1 , { } ;
+              \@@_variable_o:w #1 , { } \@@_sep:
           }
           {
             \exp_after:wN \s_@@_symbolic
@@ -502,7 +502,7 @@
             \@@_exp_after_symbolic_loop:N #1
               { , \exp:w \use_none:nn }
             \exp_after:wN \exp_end:
-            \exp_after:wN { \exp_after:wN } \exp_after:wN ;
+            \exp_after:wN { \exp_after:wN } \exp_after:wN \@@_sep:
             #2
           }
       }
@@ -519,7 +519,7 @@
       {
         \@@_exp_after_symbolic_f:nw { \@@_parse_infix:NN }
         \s_@@_symbolic \@@_symbolic_chk:w
-          \@@_variable_o:w #2 , { } ;
+          \@@_variable_o:w #2 , { } \@@_sep:
       }
     \exp_args:NNc \@@_variable_set_parsing_aux:NNn #1
       { @@_parse_word_#2:N } {#2}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp-traps.dtx
 %
-% Copyright (C) 2011-2024 The LaTeX Project
+% Copyright (C) 2011-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 % \maketitle
 %
 % \begin{documentation}
@@ -163,19 +163,21 @@
 \cs_new_protected:Npn \@@_trap_invalid_operation_set:N #1
   {
     \exp_args:Nno \use:n
-      { \cs_set:Npn \@@_invalid_operation:nnw ##1##2##3; }
+      { \cs_set:Npn \@@_invalid_operation:nnw ##1##2##3\@@_sep: }
       {
         #1
-        \@@_error:nnfn { invalid } {##2} { \fp_to_tl:n { ##3; } } { }
+        \@@_error:nnfn { invalid } {##2} { \fp_to_tl:n { ##3\@@_sep: } } { }
         \flag_ensure_raised:N \l_fp_invalid_operation_flag
         ##1
       }
     \exp_args:Nno \use:n
-      { \cs_set:Npn \@@_invalid_operation_o:Nww ##1##2; ##3; }
+      { \cs_set:Npn \@@_invalid_operation_o:Nww ##1##2\@@_sep: ##3\@@_sep: }
       {
         #1
         \@@_error:nffn { invalid-ii }
-          { \fp_to_tl:n { ##2; } } { \fp_to_tl:n { ##3; } } {##1}
+          { \fp_to_tl:n { ##2\@@_sep: } }
+          { \fp_to_tl:n { ##3\@@_sep: } }
+          {##1}
         \flag_ensure_raised:N \l_fp_invalid_operation_flag
         \exp_after:wN \c_nan_fp
       }
@@ -213,19 +215,23 @@
 \cs_new_protected:Npn \@@_trap_division_by_zero_set:N #1
   {
     \exp_args:Nno \use:n
-      { \cs_set:Npn \@@_division_by_zero_o:Nnw ##1##2##3; }
+      { \cs_set:Npn \@@_division_by_zero_o:Nnw ##1##2##3\@@_sep: }
       {
         #1
-        \@@_error:nnfn { zero-div } {##2} { \fp_to_tl:n { ##3; } } { }
+        \@@_error:nnfn { zero-div } {##2} { \fp_to_tl:n { ##3\@@_sep: } } { }
         \flag_ensure_raised:N \l_fp_division_by_zero_flag
         \exp_after:wN ##1
       }
     \exp_args:Nno \use:n
-      { \cs_set:Npn \@@_division_by_zero_o:NNww ##1##2##3; ##4; }
       {
+        \cs_set:Npn \@@_division_by_zero_o:NNww ##1##2##3\@@_sep: ##4\@@_sep:
+      }
+      {
         #1
         \@@_error:nffn { zero-div-ii }
-          { \fp_to_tl:n { ##3; } } { \fp_to_tl:n { ##4; } } {##2}
+          { \fp_to_tl:n { ##3\@@_sep: } }
+          { \fp_to_tl:n { ##4\@@_sep: } }
+          {##2}
         \flag_ensure_raised:N \l_fp_division_by_zero_flag
         \exp_after:wN ##1
       }
@@ -281,12 +287,12 @@
 \cs_new_protected:Npn \@@_trap_overflow_set:NnNn #1#2#3#4
   {
     \exp_args:Nno \use:n
-      { \cs_set:cpn { @@_ #2 :w } \s_@@ \@@_chk:w ##1##2##3; }
+      { \cs_set:cpn { @@_ #2 :w } \s_@@ \@@_chk:w ##1##2##3\@@_sep: }
       {
         #1
         \@@_error:nffn
           { flow \if_meaning:w 1 ##1 -to \fi: }
-          { \fp_to_tl:n { \s_@@ \@@_chk:w ##1##2##3; } }
+          { \fp_to_tl:n { \s_@@ \@@_chk:w ##1##2##3\@@_sep: } }
           { \token_if_eq_meaning:NNF 0 ##2 { - } #4 }
           {#2}
         \flag_ensure_raised:c { l_fp_#2_flag }
@@ -310,11 +316,11 @@
 %   division by zero, overflow, and underflow to act silently on their
 %   flag.
 %    \begin{macrocode}
-\cs_new:Npn \@@_invalid_operation:nnw #1#2#3; { }
-\cs_new:Npn \@@_invalid_operation_o:Nww #1#2; #3; { }
+\cs_new:Npn \@@_invalid_operation:nnw #1#2#3\@@_sep: { }
+\cs_new:Npn \@@_invalid_operation_o:Nww #1#2\@@_sep: #3\@@_sep: { }
 \cs_new:Npn \@@_invalid_operation_tl_o:ff #1 #2 { }
-\cs_new:Npn \@@_division_by_zero_o:Nnw #1#2#3; { }
-\cs_new:Npn \@@_division_by_zero_o:NNww #1#2#3; #4; { }
+\cs_new:Npn \@@_division_by_zero_o:Nnw #1#2#3\@@_sep: { }
+\cs_new:Npn \@@_division_by_zero_o:NNww #1#2#3\@@_sep: #4\@@_sep: { }
 \cs_new:Npn \@@_overflow:w { }
 \cs_new:Npn \@@_underflow:w { }
 \fp_trap:nn { invalid_operation } { error }

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp-trig.dtx
 %
-% Copyright (C) 2011-2024 The LaTeX Project
+% Copyright (C) 2011-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -168,7 +168,7 @@
 %   result of the series to a floating point directly rather than taking
 %   its inverse, since $\sin(x) = \#3 \sin\lvert x\rvert$.
 %    \begin{macrocode}
-\cs_new:Npn \@@_sin_o:w #1 \s_@@ \@@_chk:w #2#3#4; @
+\cs_new:Npn \@@_sin_o:w #1 \s_@@ \@@_chk:w #2#3#4\@@_sep: @
   {
     \if_case:w #2 \exp_stop_f:
            \@@_case_return_same_o:w
@@ -181,7 +181,7 @@
              { \@@_invalid_operation_o:fw { #1 { sin } { sind } } }
     \else: \@@_case_return_same_o:w
     \fi:
-    \s_@@ \@@_chk:w #2 #3 #4;
+    \s_@@ \@@_chk:w #2 #3 #4\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -195,7 +195,7 @@
 %   sign~|0| regardless of the sign of~$x$, and with an initial octant
 %   of~$2$, because $\cos(x) = + \sin(\pi/2 + \lvert x\rvert)$.
 %    \begin{macrocode}
-\cs_new:Npn \@@_cos_o:w #1 \s_@@ \@@_chk:w #2#3; @
+\cs_new:Npn \@@_cos_o:w #1 \s_@@ \@@_chk:w #2#3\@@_sep: @
   {
     \if_case:w #2 \exp_stop_f:
            \@@_case_return_o:Nw \c_one_fp
@@ -208,7 +208,7 @@
              { \@@_invalid_operation_o:fw { #1 { cos } { cosd } } }
     \else: \@@_case_return_same_o:w
     \fi:
-    \s_@@ \@@_chk:w #2 #3;
+    \s_@@ \@@_chk:w #2 #3\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -225,7 +225,7 @@
 %   point sine to the floating point result, because $\csc(x) = \#3
 %   \big( \sin\lvert x\rvert\big)^{-1}$.
 %    \begin{macrocode}
-\cs_new:Npn \@@_csc_o:w #1 \s_@@ \@@_chk:w #2#3#4; @
+\cs_new:Npn \@@_csc_o:w #1 \s_@@ \@@_chk:w #2#3#4\@@_sep: @
   {
     \if_case:w #2 \exp_stop_f:
            \@@_cot_zero_o:Nfw #3 { #1 { csc } { cscd } }
@@ -238,7 +238,7 @@
              { \@@_invalid_operation_o:fw { #1 { csc } { cscd } } }
     \else: \@@_case_return_same_o:w
     \fi:
-    \s_@@ \@@_chk:w #2 #3 #4;
+    \s_@@ \@@_chk:w #2 #3 #4\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -251,7 +251,7 @@
 %   positive sign~$0$, a starting octant of~$2$, and inverting upon
 %   conversion, because $\sec(x) = + 1 / \sin(\pi/2 + \lvert x\rvert)$.
 %    \begin{macrocode}
-\cs_new:Npn \@@_sec_o:w #1 \s_@@ \@@_chk:w #2#3; @
+\cs_new:Npn \@@_sec_o:w #1 \s_@@ \@@_chk:w #2#3\@@_sep: @
   {
     \if_case:w #2 \exp_stop_f:
            \@@_case_return_o:Nw \c_one_fp
@@ -264,7 +264,7 @@
              { \@@_invalid_operation_o:fw { #1 { sec } { secd } } }
     \else: \@@_case_return_same_o:w
     \fi:
-    \s_@@ \@@_chk:w #2 #3;
+    \s_@@ \@@_chk:w #2 #3\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -278,7 +278,7 @@
 %   of~$1$ (this shift is somewhat arbitrary).  See \cs{@@_cot_o:w} for
 %   an explanation of the $0$~argument.
 %    \begin{macrocode}
-\cs_new:Npn \@@_tan_o:w #1 \s_@@ \@@_chk:w #2#3#4; @
+\cs_new:Npn \@@_tan_o:w #1 \s_@@ \@@_chk:w #2#3#4\@@_sep: @
   {
     \if_case:w #2 \exp_stop_f:
            \@@_case_return_same_o:w
@@ -291,7 +291,7 @@
              { \@@_invalid_operation_o:fw { #1 { tan } { tand } } }
     \else: \@@_case_return_same_o:w
     \fi:
-    \s_@@ \@@_chk:w #2 #3 #4;
+    \s_@@ \@@_chk:w #2 #3 #4\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -308,7 +308,7 @@
 %   sign of the argument: the first of those indicates whether we
 %   compute tangent or cotangent.  Those signs are eventually combined.
 %    \begin{macrocode}
-\cs_new:Npn \@@_cot_o:w #1 \s_@@ \@@_chk:w #2#3#4; @
+\cs_new:Npn \@@_cot_o:w #1 \s_@@ \@@_chk:w #2#3#4\@@_sep: @
   {
     \if_case:w #2 \exp_stop_f:
            \@@_cot_zero_o:Nfw #3 { #1 { cot } { cotd } }
@@ -321,7 +321,7 @@
              { \@@_invalid_operation_o:fw { #1 { cot } { cotd } } }
     \else: \@@_case_return_same_o:w
     \fi:
-    \s_@@ \@@_chk:w #2 #3 #4;
+    \s_@@ \@@_chk:w #2 #3 #4\@@_sep:
   }
 \cs_new:Npn \@@_cot_zero_o:Nfw #1#2#3 \fi:
   {
@@ -362,7 +362,7 @@
 %   four \texttt{trig}/\texttt{trigd} auxiliaries receive the operand as
 %   an extended-precision number.
 %    \begin{macrocode}
-\cs_new:Npn \@@_trig:NNNNNwn #1#2#3#4#5 \s_@@ \@@_chk:w 1#6#7#8;
+\cs_new:Npn \@@_trig:NNNNNwn #1#2#3#4#5 \s_@@ \@@_chk:w 1#6#7#8\@@_sep:
   {
     \exp_after:wN #2
     \exp_after:wN #3
@@ -374,7 +374,7 @@
       \else:
         #1 \@@_trig_small:ww \@@_trigd_small:ww
       \fi:
-    #7,#8{0000}{0000};
+    #7,#8{0000}{0000}\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -390,8 +390,8 @@
 %   an extended-precision number) rather than the fixed point number.
 %   The period serves to end the integer expression for the octant.
 %    \begin{macrocode}
-\cs_new:Npn \@@_trig_small:ww #1,#2;
-  { \@@_ep_to_fixed:wwn #1,#2; . #1,#2; }
+\cs_new:Npn \@@_trig_small:ww #1,#2\@@_sep:
+  { \@@_ep_to_fixed:wwn #1,#2\@@_sep: . #1,#2\@@_sep: }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -400,10 +400,10 @@
 %   \cs{@@_trig_small:ww} to massage it in the form appropriate for the
 %   \texttt{_series} auxiliary.
 %    \begin{macrocode}
-\cs_new:Npn \@@_trigd_small:ww #1,#2;
+\cs_new:Npn \@@_trigd_small:ww #1,#2\@@_sep:
   {
     \@@_ep_mul_raw:wwwwN
-      -1,{1745}{3292}{5199}{4329}{5769}{2369}; #1,#2;
+      -1,{1745}{3292}{5199}{4329}{5769}{2369}\@@_sep: #1,#2\@@_sep:
     \@@_trig_small:ww
   }
 %    \end{macrocode}
@@ -444,7 +444,7 @@
 %   those are all~$0$ and no precision is lost (|#6| and~|#7| are
 %   four~$0$ each).
 %    \begin{macrocode}
-\cs_new:Npn \@@_trigd_large:ww #1, #2#3#4#5#6#7;
+\cs_new:Npn \@@_trigd_large:ww #1, #2#3#4#5#6#7\@@_sep:
   {
     \exp_after:wN \@@_pack_eight:wNNNNNNNN
     \exp_after:wN \@@_pack_eight:wNNNNNNNN
@@ -451,27 +451,27 @@
     \exp_after:wN \@@_pack_twice_four:wNNNNNNNN
     \exp_after:wN \@@_pack_twice_four:wNNNNNNNN
     \exp_after:wN \@@_trigd_large_auxi:nnnnwNNNN
-    \exp_after:wN ;
+    \exp_after:wN \@@_sep:
     \exp:w \exp_end_continue_f:w
     \prg_replicate:nn { \int_max:nn { 22 - #1 } { 0 } } { 0 }
     #2#3#4#5#6#7 0000 0000 0000 !
   }
-\cs_new:Npn \@@_trigd_large_auxi:nnnnwNNNN #1#2#3#4#5; #6#7#8#9
+\cs_new:Npn \@@_trigd_large_auxi:nnnnwNNNN #1#2#3#4#5\@@_sep: #6#7#8#9
   {
     \exp_after:wN \@@_trigd_large_auxii:wNw
     \int_value:w \@@_int_eval:w #1 + #2
       - (#1 + #2 - 4) / 9 * 9 \@@_int_eval_end:
-    #3;
-    #4; #5{#6#7#8#9};
+    #3\@@_sep:
+    #4\@@_sep: #5{#6#7#8#9}\@@_sep:
   }
-\cs_new:Npn \@@_trigd_large_auxii:wNw #1; #2#3;
+\cs_new:Npn \@@_trigd_large_auxii:wNw #1\@@_sep: #2#3\@@_sep:
   {
     + (#1#2 - 4) / 9 * 2
     \exp_after:wN \@@_trigd_large_auxiii:www
     \int_value:w \@@_int_eval:w #1#2
-      - (#1#2 - 4) / 9 * 9 \@@_int_eval_end: #3 ;
+      - (#1#2 - 4) / 9 * 9 \@@_int_eval_end: #3 \@@_sep:
   }
-\cs_new:Npn \@@_trigd_large_auxiii:www #1; #2; #3!
+\cs_new:Npn \@@_trigd_large_auxiii:www #1\@@_sep: #2\@@_sep: #3!
   {
     \if_int_compare:w #1 < 4500 \exp_stop_f:
       \exp_after:wN \@@_use_i_until_s:nw
@@ -479,8 +479,8 @@
     \else:
       + 1
     \fi:
-    \@@_fixed_sub:wwn {9000}{0000}{0000}{0000}{0000}{0000};
-      {#1}#2{0000}{0000};
+    \@@_fixed_sub:wwn {9000}{0000}{0000}{0000}{0000}{0000}\@@_sep:
+      {#1}#2{0000}{0000}\@@_sep:
     { \@@_trigd_small:ww 2, }
   }
 %    \end{macrocode}
@@ -768,12 +768,12 @@
 %   between $65$ and $72$ at this point) into groups of~$4$ and the
 %   \texttt{auxv} auxiliary is called.
 %    \begin{macrocode}
-\cs_new:Npn \@@_trig_large:ww #1, #2#3#4#5#6;
+\cs_new:Npn \@@_trig_large:ww #1, #2#3#4#5#6\@@_sep:
   {
     \exp_after:wN \@@_trig_large_auxi:w
     \int_value:w \@@_int_eval:w (#1 - 4) / 8 \exp_after:wN ,
-    \int_value:w #1 , ;
-    {#2}{#3}{#4}{#5} ;
+    \int_value:w #1 , \@@_sep:
+    {#2}{#3}{#4}{#5} \@@_sep:
   }
 \cs_new:Npn \@@_trig_large_auxi:w #1, #2,
   {
@@ -818,7 +818,7 @@
     \@@_pack_twice_four:wNNNNNNNN \@@_pack_twice_four:wNNNNNNNN
     \@@_pack_twice_four:wNNNNNNNN \@@_pack_twice_four:wNNNNNNNN
     \@@_pack_twice_four:wNNNNNNNN \@@_pack_twice_four:wNNNNNNNN
-    \@@_trig_large_auxv:www ;
+    \@@_trig_large_auxv:www \@@_sep:
   }
 \cs_new:Npn \@@_trig_large_auxiii:w 1 { \exp_stop_f: }
 %    \end{macrocode}
@@ -848,7 +848,7 @@
 %   more step in the ladder.  The last semicolon closes the ladder, and
 %   we return control to the \texttt{auxvii} auxiliary.
 %    \begin{macrocode}
-\cs_new:Npn \@@_trig_large_auxv:www #1; #2; #3;
+\cs_new:Npn \@@_trig_large_auxv:www #1\@@_sep: #2\@@_sep: #3\@@_sep:
   {
     \exp_after:wN \@@_use_i_until_s:nw
     \exp_after:wN \@@_trig_large_auxvii:w
@@ -857,17 +857,17 @@
         { \@@_trig_large_auxvi:wnnnnnnnn }
       + \c_@@_trailing_shift_int - \c_@@_middle_shift_int
       \@@_use_i_until_s:nw
-      ; #3 #1 ; ;
+      \@@_sep: #3 #1 \@@_sep: \@@_sep:
   }
-\cs_new:Npn \@@_trig_large_auxvi:wnnnnnnnn #1; #2#3#4#5#6#7#8#9
+\cs_new:Npn \@@_trig_large_auxvi:wnnnnnnnn #1\@@_sep: #2#3#4#5#6#7#8#9
   {
     \exp_after:wN \@@_trig_large_pack:NNNNNw
     \int_value:w \@@_int_eval:w \c_@@_middle_shift_int
       + #2*#9 + #3*#8 + #4*#7 + #5*#6
-      #1; {#2}{#3}{#4}{#5} {#7}{#8}{#9}
+      #1\@@_sep: {#2}{#3}{#4}{#5} {#7}{#8}{#9}
   }
-\cs_new:Npn \@@_trig_large_pack:NNNNNw #1#2#3#4#5#6;
-  { + #1#2#3#4#5 ; #6 }
+\cs_new:Npn \@@_trig_large_pack:NNNNNw #1#2#3#4#5#6\@@_sep:
+  { + #1#2#3#4#5 \@@_sep: #6 }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -900,10 +900,10 @@
 \cs_new:Npn \@@_trig_large_auxvii:w #1#2#3
   {
     \exp_after:wN \@@_trig_large_auxviii:ww
-    \int_value:w \@@_int_eval:w (#1#2#3 - 62) / 125 ;
+    \int_value:w \@@_int_eval:w (#1#2#3 - 62) / 125 \@@_sep:
     #1#2#3
   }
-\cs_new:Npn \@@_trig_large_auxviii:ww #1;
+\cs_new:Npn \@@_trig_large_auxviii:ww #1\@@_sep:
   {
     + #1
     \if_int_odd:w #1 \exp_stop_f:
@@ -922,20 +922,20 @@
       \prg_replicate:nn { 13 }
         { \@@_trig_large_auxx:wNNNNN }
       + \c_@@_trailing_shift_int - \c_@@_middle_shift_int
-      ;
+      \@@_sep:
   }
-\cs_new:Npn \@@_trig_large_auxx:wNNNNN #1; #2 #3#4#5#6
+\cs_new:Npn \@@_trig_large_auxx:wNNNNN #1\@@_sep: #2 #3#4#5#6
   {
     \exp_after:wN \@@_trig_large_pack:NNNNNw
     \int_value:w \@@_int_eval:w \c_@@_middle_shift_int
       #2 8 * #3#4#5#6
-      #1; #2
+      #1\@@_sep: #2
   }
-\cs_new:Npn \@@_trig_large_auxxi:w #1;
+\cs_new:Npn \@@_trig_large_auxxi:w #1\@@_sep:
   {
     \exp_after:wN \@@_ep_mul_raw:wwwwN
-    \int_value:w \@@_int_eval:w 0 \@@_ep_to_ep_loop:N #1 ; ; !
-    0,{7853}{9816}{3397}{4483}{0961}{5661};
+    \int_value:w \@@_int_eval:w 0 \@@_ep_to_ep_loop:N #1 \@@_sep: \@@_sep: !
+    0,{7853}{9816}{3397}{4483}{0961}{5661}\@@_sep:
     \@@_trig_small:ww
   }
 %    \end{macrocode}
@@ -975,9 +975,9 @@
 %   floating point number with the given sign, and \cs{@@_sanitize:Nw}
 %   checks for overflow and underflow.
 %    \begin{macrocode}
-\cs_new:Npn \@@_sin_series_o:NNwwww #1#2#3. #4;
+\cs_new:Npn \@@_sin_series_o:NNwwww #1#2#3. #4\@@_sep:
   {
-    \@@_fixed_mul:wwn #4; #4;
+    \@@_fixed_mul:wwn #4\@@_sep: #4\@@_sep:
     {
       \exp_after:wN \@@_sin_series_aux_o:NNnwww
       \exp_after:wN #1
@@ -990,7 +990,7 @@
       {#3}
     }
   }
-\cs_new:Npn \@@_sin_series_aux_o:NNnwww #1#2#3 #4; #5,#6;
+\cs_new:Npn \@@_sin_series_aux_o:NNnwww #1#2#3 #4\@@_sep: #5,#6\@@_sep:
   {
     \if_int_odd:w \@@_int_eval:w #3 / 2 \@@_int_eval_end:
       \exp_after:wN \use_i:nn
@@ -998,29 +998,46 @@
       \exp_after:wN \use_ii:nn
     \fi:
     { % 1/18!
-      \@@_fixed_mul_sub_back:wwwn    {0000}{0000}{0000}{0001}{5619}{2070};
-                                  #4;{0000}{0000}{0000}{0477}{9477}{3324};
-      \@@_fixed_mul_sub_back:wwwn #4;{0000}{0000}{0011}{4707}{4559}{7730};
-      \@@_fixed_mul_sub_back:wwwn #4;{0000}{0000}{2087}{6756}{9878}{6810};
-      \@@_fixed_mul_sub_back:wwwn #4;{0000}{0027}{5573}{1922}{3985}{8907};
-      \@@_fixed_mul_sub_back:wwwn #4;{0000}{2480}{1587}{3015}{8730}{1587};
-      \@@_fixed_mul_sub_back:wwwn #4;{0013}{8888}{8888}{8888}{8888}{8889};
-      \@@_fixed_mul_sub_back:wwwn #4;{0416}{6666}{6666}{6666}{6666}{6667};
-      \@@_fixed_mul_sub_back:wwwn #4;{5000}{0000}{0000}{0000}{0000}{0000};
-      \@@_fixed_mul_sub_back:wwwn#4;{10000}{0000}{0000}{0000}{0000}{0000};
+      \@@_fixed_mul_sub_back:wwwn {0000}{0000}{0000}{0001}{5619}{2070}\@@_sep:
+                                  #4\@@_sep:
+                                  {0000}{0000}{0000}{0477}{9477}{3324}\@@_sep:
+      \@@_fixed_mul_sub_back:wwwn #4\@@_sep:
+                                  {0000}{0000}{0011}{4707}{4559}{7730}\@@_sep:
+      \@@_fixed_mul_sub_back:wwwn #4\@@_sep:
+                                  {0000}{0000}{2087}{6756}{9878}{6810}\@@_sep:
+      \@@_fixed_mul_sub_back:wwwn #4\@@_sep:
+                                  {0000}{0027}{5573}{1922}{3985}{8907}\@@_sep:
+      \@@_fixed_mul_sub_back:wwwn #4\@@_sep:
+                                  {0000}{2480}{1587}{3015}{8730}{1587}\@@_sep:
+      \@@_fixed_mul_sub_back:wwwn #4\@@_sep:
+                                  {0013}{8888}{8888}{8888}{8888}{8889}\@@_sep:
+      \@@_fixed_mul_sub_back:wwwn #4\@@_sep:
+                                  {0416}{6666}{6666}{6666}{6666}{6667}\@@_sep:
+      \@@_fixed_mul_sub_back:wwwn #4\@@_sep:
+                                  {5000}{0000}{0000}{0000}{0000}{0000}\@@_sep:
+      \@@_fixed_mul_sub_back:wwwn#4\@@_sep:
+                                  {10000}{0000}{0000}{0000}{0000}{0000}\@@_sep:
       { \@@_fixed_continue:wn 0, }
     }
     { % 1/17!
-      \@@_fixed_mul_sub_back:wwwn    {0000}{0000}{0000}{0028}{1145}{7254};
-                                  #4;{0000}{0000}{0000}{7647}{1637}{3182};
-      \@@_fixed_mul_sub_back:wwwn #4;{0000}{0000}{0160}{5904}{3836}{8216};
-      \@@_fixed_mul_sub_back:wwwn #4;{0000}{0002}{5052}{1083}{8544}{1719};
-      \@@_fixed_mul_sub_back:wwwn #4;{0000}{0275}{5731}{9223}{9858}{9065};
-      \@@_fixed_mul_sub_back:wwwn #4;{0001}{9841}{2698}{4126}{9841}{2698};
-      \@@_fixed_mul_sub_back:wwwn #4;{0083}{3333}{3333}{3333}{3333}{3333};
-      \@@_fixed_mul_sub_back:wwwn #4;{1666}{6666}{6666}{6666}{6666}{6667};
-      \@@_fixed_mul_sub_back:wwwn#4;{10000}{0000}{0000}{0000}{0000}{0000};
-      { \@@_ep_mul:wwwwn 0, } #5,#6;
+      \@@_fixed_mul_sub_back:wwwn {0000}{0000}{0000}{0028}{1145}{7254}\@@_sep:
+                                  #4\@@_sep:
+                                  {0000}{0000}{0000}{7647}{1637}{3182}\@@_sep:
+      \@@_fixed_mul_sub_back:wwwn #4\@@_sep:
+                                  {0000}{0000}{0160}{5904}{3836}{8216}\@@_sep:
+      \@@_fixed_mul_sub_back:wwwn #4\@@_sep:
+                                  {0000}{0002}{5052}{1083}{8544}{1719}\@@_sep:
+      \@@_fixed_mul_sub_back:wwwn #4\@@_sep:
+                                  {0000}{0275}{5731}{9223}{9858}{9065}\@@_sep:
+      \@@_fixed_mul_sub_back:wwwn #4\@@_sep:
+                                  {0001}{9841}{2698}{4126}{9841}{2698}\@@_sep:
+      \@@_fixed_mul_sub_back:wwwn #4\@@_sep:
+                                  {0083}{3333}{3333}{3333}{3333}{3333}\@@_sep:
+      \@@_fixed_mul_sub_back:wwwn #4\@@_sep:
+                                  {1666}{6666}{6666}{6666}{6666}{6667}\@@_sep:
+      \@@_fixed_mul_sub_back:wwwn#4\@@_sep:
+                                  {10000}{0000}{0000}{0000}{0000}{0000}\@@_sep:
+      { \@@_ep_mul:wwwwn 0, } #5,#6\@@_sep:
     }
     {
       \exp_after:wN \@@_sanitize:Nw
@@ -1064,9 +1081,9 @@
 %   before computing the ratio.  Note that this \cs{if_int_odd:w} test
 %   relies on the fact that the octant is at least~$1$.
 %    \begin{macrocode}
-\cs_new:Npn \@@_tan_series_o:NNwwww #1#2#3. #4;
+\cs_new:Npn \@@_tan_series_o:NNwwww #1#2#3. #4\@@_sep:
   {
-    \@@_fixed_mul:wwn #4; #4;
+    \@@_fixed_mul:wwn #4\@@_sep: #4\@@_sep:
     {
       \exp_after:wN \@@_tan_series_aux_o:Nnwww
       \int_value:w
@@ -1077,22 +1094,32 @@
       {#3}
     }
   }
-\cs_new:Npn \@@_tan_series_aux_o:Nnwww #1 #2 #3; #4,#5;
+\cs_new:Npn \@@_tan_series_aux_o:Nnwww #1 #2 #3\@@_sep: #4,#5\@@_sep:
   {
-    \@@_fixed_mul_sub_back:wwwn     {0000}{0000}{1527}{3493}{0856}{7059};
-                                #3; {0000}{0159}{6080}{0274}{5257}{6472};
-    \@@_fixed_mul_sub_back:wwwn #3; {0002}{4571}{2320}{0157}{2558}{8481};
-    \@@_fixed_mul_sub_back:wwwn #3; {0115}{5830}{7533}{5397}{3168}{2147};
-    \@@_fixed_mul_sub_back:wwwn #3; {1929}{8245}{6140}{3508}{7719}{2982};
-    \@@_fixed_mul_sub_back:wwwn #3;{10000}{0000}{0000}{0000}{0000}{0000};
-    { \@@_ep_mul:wwwwn 0, } #4,#5;
+    \@@_fixed_mul_sub_back:wwwn {0000}{0000}{1527}{3493}{0856}{7059}\@@_sep:
+                                #3\@@_sep:
+                                {0000}{0159}{6080}{0274}{5257}{6472}\@@_sep:
+    \@@_fixed_mul_sub_back:wwwn #3\@@_sep:
+                                {0002}{4571}{2320}{0157}{2558}{8481}\@@_sep:
+    \@@_fixed_mul_sub_back:wwwn #3\@@_sep:
+                                {0115}{5830}{7533}{5397}{3168}{2147}\@@_sep:
+    \@@_fixed_mul_sub_back:wwwn #3\@@_sep:
+                                {1929}{8245}{6140}{3508}{7719}{2982}\@@_sep:
+    \@@_fixed_mul_sub_back:wwwn #3\@@_sep:
+                                {10000}{0000}{0000}{0000}{0000}{0000}\@@_sep:
+    { \@@_ep_mul:wwwwn 0, } #4,#5\@@_sep:
     {
-      \@@_fixed_mul_sub_back:wwwn    {0000}{0007}{0258}{0681}{9408}{4706};
-                                  #3;{0000}{2343}{7175}{1399}{6151}{7670};
-      \@@_fixed_mul_sub_back:wwwn #3;{0019}{2638}{4588}{9232}{8861}{3691};
-      \@@_fixed_mul_sub_back:wwwn #3;{0536}{6357}{0691}{4344}{6852}{4252};
-      \@@_fixed_mul_sub_back:wwwn #3;{5263}{1578}{9473}{6842}{1052}{6315};
-      \@@_fixed_mul_sub_back:wwwn#3;{10000}{0000}{0000}{0000}{0000}{0000};
+      \@@_fixed_mul_sub_back:wwwn {0000}{0007}{0258}{0681}{9408}{4706}\@@_sep:
+                                  #3\@@_sep:
+                                  {0000}{2343}{7175}{1399}{6151}{7670}\@@_sep:
+      \@@_fixed_mul_sub_back:wwwn #3\@@_sep:
+                                  {0019}{2638}{4588}{9232}{8861}{3691}\@@_sep:
+      \@@_fixed_mul_sub_back:wwwn #3\@@_sep:
+                                  {0536}{6357}{0691}{4344}{6852}{4252}\@@_sep:
+      \@@_fixed_mul_sub_back:wwwn #3\@@_sep:
+                                  {5263}{1578}{9473}{6842}{1052}{6315}\@@_sep:
+      \@@_fixed_mul_sub_back:wwwn#3\@@_sep:
+                                  {10000}{0000}{0000}{0000}{0000}{0000}\@@_sep:
       {
         \reverse_if:N \if_int_odd:w
             \@@_int_eval:w (#2 - 1) / 2 \@@_int_eval_end:
@@ -1220,7 +1247,7 @@
 %   \cs{@@_acotii_o:ww} simply reverses its two arguments.
 %    \begin{macrocode}
 \cs_new:Npn \@@_atanii_o:Nww
-    #1 \s_@@ \@@_chk:w #2#3#4; \s_@@ \@@_chk:w #5 #6 @
+    #1 \s_@@ \@@_chk:w #2#3#4\@@_sep: \s_@@ \@@_chk:w #5 #6 @
   {
     \if_meaning:w 3 #2 \@@_case_return_i_o:ww \fi:
     \if_meaning:w 3 #5 \@@_case_return_ii_o:ww \fi:
@@ -1236,11 +1263,11 @@
     \or: \@@_case_return:nw { \@@_atan_inf_o:NNNw #1 #3 0 }
     \fi:
     \@@_atan_normal_o:NNnwNnw #1
-    \s_@@ \@@_chk:w #2#3#4;
+    \s_@@ \@@_chk:w #2#3#4\@@_sep:
     \s_@@ \@@_chk:w #5 #6
   }
-\cs_new:Npn \@@_acotii_o:Nww #1#2; #3;
-  { \@@_atanii_o:Nww #1#3; #2; }
+\cs_new:Npn \@@_acotii_o:Nww #1#2\@@_sep: #3\@@_sep:
+  { \@@_atanii_o:Nww #1#3\@@_sep: #2\@@_sep: }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -1257,15 +1284,15 @@
 %   is positive, and $[(7-|#3|)/2]\cdot\pi/4$ for negative~$x$, where
 %   the divisions are rounded up.
 %    \begin{macrocode}
-\cs_new:Npn \@@_atan_inf_o:NNNw #1#2#3 \s_@@ \@@_chk:w #4#5#6;
+\cs_new:Npn \@@_atan_inf_o:NNNw #1#2#3 \s_@@ \@@_chk:w #4#5#6\@@_sep:
   {
     \exp_after:wN \@@_atan_combine_o:NwwwwwN
     \exp_after:wN #2
     \int_value:w \@@_int_eval:w
-      \if_meaning:w 2 #5 7 - \fi: #3 \exp_after:wN ;
+      \if_meaning:w 2 #5 7 - \fi: #3 \exp_after:wN \@@_sep:
     \c_@@_one_fixed_tl
-    {0000}{0000}{0000}{0000}{0000}{0000};
-    0,{0000}{0000}{0000}{0000}{0000}{0000}; #1
+    {0000}{0000}{0000}{0000}{0000}{0000}\@@_sep:
+    0,{0000}{0000}{0000}{0000}{0000}{0000}\@@_sep: #1
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1279,11 +1306,11 @@
 %   intermediate rounding errors.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_atan_normal_o:NNnwNnw
-    #1 \s_@@ \@@_chk:w 1#2#3#4; \s_@@ \@@_chk:w 1#5#6#7;
+    #1 \s_@@ \@@_chk:w 1#2#3#4\@@_sep: \s_@@ \@@_chk:w 1#5#6#7\@@_sep:
   {
     \@@_atan_test_o:NwwNwwN
-      #2 #3, #4{0000}{0000};
-      #5 #6, #7{0000}{0000}; #1
+      #2 #3, #4{0000}{0000}\@@_sep:
+      #5 #6, #7{0000}{0000}\@@_sep: #1
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1304,7 +1331,7 @@
 %   two numbers.  The finer test with $0.41421$ is done by
 %   \cs{@@_atan_div:wnwwnw} after the operands have been ordered.
 %    \begin{macrocode}
-\cs_new:Npn \@@_atan_test_o:NwwNwwN #1#2,#3; #4#5,#6;
+\cs_new:Npn \@@_atan_test_o:NwwNwwN #1#2,#3\@@_sep: #4#5,#6\@@_sep:
   {
     \exp_after:wN \@@_atan_combine_o:NwwwwwN
     \exp_after:wN #1
@@ -1313,11 +1340,11 @@
         7 - \@@_int_eval:w
       \fi:
       \if_int_compare:w
-          \@@_ep_compare:wwww #2,#3; #5,#6; > \c_zero_int
+          \@@_ep_compare:wwww #2,#3\@@_sep: #5,#6\@@_sep: > \c_zero_int
         3 -
         \exp_after:wN \@@_reverse_args:Nww
       \fi:
-      \@@_atan_div:wnwwnw #2,#3; #5,#6;
+      \@@_atan_div:wnwwnw #2,#3\@@_sep: #5,#6\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1337,7 +1364,7 @@
 %   followed by~$z$, as a comma-delimited exponent and a fixed point
 %   number.
 %    \begin{macrocode}
-\cs_new:Npn \@@_atan_div:wnwwnw #1,#2#3; #4,#5#6;
+\cs_new:Npn \@@_atan_div:wnwwnw #1,#2#3\@@_sep: #4,#5#6\@@_sep:
   {
     \if_int_compare:w
       \@@_int_eval:w 41421 * #5 < #2 000
@@ -1347,20 +1374,20 @@
       \exp_after:wN \@@_atan_near:wwwn
     \fi:
     0
-    \@@_ep_div:wwwwn #1,{#2}#3; #4,{#5}#6;
+    \@@_ep_div:wwwwn #1,{#2}#3\@@_sep: #4,{#5}#6\@@_sep:
     \@@_atan_auxi:ww
   }
 \cs_new:Npn \@@_atan_near:wwwn
-    0 \@@_ep_div:wwwwn #1,#2; #3,
+    0 \@@_ep_div:wwwwn #1,#2\@@_sep: #3,
   {
     1
-    \@@_ep_to_fixed:wwn #1 - #3, #2;
+    \@@_ep_to_fixed:wwn #1 - #3, #2\@@_sep:
     \@@_atan_near_aux:wwn
   }
-\cs_new:Npn \@@_atan_near_aux:wwn #1; #2;
+\cs_new:Npn \@@_atan_near_aux:wwn #1\@@_sep: #2\@@_sep:
   {
-    \@@_fixed_add:wwn #1; #2;
-    { \@@_fixed_sub:wwn #2; #1; { \@@_ep_div:wwwwn 0, } 0, }
+    \@@_fixed_add:wwn #1\@@_sep: #2\@@_sep:
+    { \@@_fixed_sub:wwn #2\@@_sep: #1\@@_sep: { \@@_ep_div:wwwwn 0, } 0, }
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1372,16 +1399,16 @@
 %   call to \cs{@@_atan_Taylor_loop:www}, followed by the fixed point
 %   representation of~$z$ and the old representation.
 %    \begin{macrocode}
-\cs_new:Npn \@@_atan_auxi:ww #1,#2;
-  { \@@_ep_to_fixed:wwn #1,#2; \@@_atan_auxii:w #1,#2; }
-\cs_new:Npn \@@_atan_auxii:w #1;
+\cs_new:Npn \@@_atan_auxi:ww #1,#2\@@_sep:
+  { \@@_ep_to_fixed:wwn #1,#2\@@_sep: \@@_atan_auxii:w #1,#2\@@_sep: }
+\cs_new:Npn \@@_atan_auxii:w #1\@@_sep:
   {
-    \@@_fixed_mul:wwn #1; #1;
+    \@@_fixed_mul:wwn #1\@@_sep: #1\@@_sep:
     {
-      \@@_atan_Taylor_loop:www 39 ;
-        {0000}{0000}{0000}{0000}{0000}{0000} ;
+      \@@_atan_Taylor_loop:www 39 \@@_sep:
+        {0000}{0000}{0000}{0000}{0000}{0000} \@@_sep:
     }
-    ! #1;
+    ! #1\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1398,22 +1425,22 @@
 %   computing the octant with a semicolon, and leave the result~|#2|
 %   afterwards.
 %    \begin{macrocode}
-\cs_new:Npn \@@_atan_Taylor_loop:www #1; #2; #3;
+\cs_new:Npn \@@_atan_Taylor_loop:www #1\@@_sep: #2\@@_sep: #3\@@_sep:
   {
     \if_int_compare:w #1 = - \c_one_int
       \@@_atan_Taylor_break:w
     \fi:
-    \exp_after:wN \@@_fixed_div_int:wwN \c_@@_one_fixed_tl #1;
-    \@@_rrot:www \@@_fixed_mul_sub_back:wwwn #2; #3;
+    \exp_after:wN \@@_fixed_div_int:wwN \c_@@_one_fixed_tl #1\@@_sep:
+    \@@_rrot:www \@@_fixed_mul_sub_back:wwwn #2\@@_sep: #3\@@_sep:
     {
       \exp_after:wN \@@_atan_Taylor_loop:www
-      \int_value:w \@@_int_eval:w #1 - 2 ;
+      \int_value:w \@@_int_eval:w #1 - 2 \@@_sep:
     }
-    #3;
+    #3\@@_sep:
   }
 \cs_new:Npn \@@_atan_Taylor_break:w
-    \fi: #1 \@@_fixed_mul_sub_back:wwwn #2; #3 !
-  { \fi: ; #2 ; }
+    \fi: #1 \@@_fixed_mul_sub_back:wwwn #2\@@_sep: #3 !
+  { \fi: \@@_sep: #2 \@@_sep: }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -1442,7 +1469,8 @@
 %   both cases, convert to a floating point with
 %   \cs{@@_fixed_to_float_o:wN}.
 %    \begin{macrocode}
-\cs_new:Npn \@@_atan_combine_o:NwwwwwN #1 #2; #3; #4; #5,#6; #7
+\cs_new:Npn \@@_atan_combine_o:NwwwwwN
+    #1 #2\@@_sep: #3\@@_sep: #4\@@_sep: #5,#6\@@_sep: #7
   {
     \exp_after:wN \@@_sanitize:Nw
     \exp_after:wN #1
@@ -1452,22 +1480,22 @@
       \else:
         \exp_after:wN \use_ii:nn
       \fi:
-      { #5 \@@_fixed_mul:wwn #3; #6; }
+      { #5 \@@_fixed_mul:wwn #3\@@_sep: #6\@@_sep: }
       {
-        \@@_fixed_mul:wwn #3; #4;
+        \@@_fixed_mul:wwn #3\@@_sep: #4\@@_sep:
         {
           \exp_after:wN \@@_atan_combine_aux:ww
-          \int_value:w \@@_int_eval:w #2 / 2 ; #2;
+          \int_value:w \@@_int_eval:w #2 / 2 \@@_sep: #2\@@_sep:
         }
       }
       { #7 \@@_fixed_to_float_o:wN \@@_fixed_to_float_rad_o:wN }
       #1
   }
-\cs_new:Npn \@@_atan_combine_aux:ww #1; #2;
+\cs_new:Npn \@@_atan_combine_aux:ww #1\@@_sep: #2\@@_sep:
   {
     \@@_fixed_mul_short:wwn
-      {7853}{9816}{3397}{4483}{0961}{5661};
-      {#1}{0000}{0000};
+      {7853}{9816}{3397}{4483}{0961}{5661}\@@_sep:
+      {#1}{0000}{0000}\@@_sep:
     {
       \if_int_odd:w #2 \exp_stop_f:
         \exp_after:wN \@@_fixed_sub:wwn
@@ -1491,7 +1519,7 @@
 %   about what function is being performed (for \enquote{invalid operation}
 %   exceptions).
 %    \begin{macrocode}
-\cs_new:Npn \@@_asin_o:w #1 \s_@@ \@@_chk:w #2#3; @
+\cs_new:Npn \@@_asin_o:w #1 \s_@@ \@@_chk:w #2#3\@@_sep: @
   {
     \if_case:w #2 \exp_stop_f:
       \@@_case_return_same_o:w
@@ -1504,7 +1532,7 @@
     \else:
       \@@_case_return_same_o:w
     \fi:
-    \s_@@ \@@_chk:w #2 #3;
+    \s_@@ \@@_chk:w #2 #3\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1517,7 +1545,7 @@
 %   \texttt{acos} or \texttt{acosd}, and preparing to swap some
 %   arguments down the line.
 %    \begin{macrocode}
-\cs_new:Npn \@@_acos_o:w #1 \s_@@ \@@_chk:w #2#3; @
+\cs_new:Npn \@@_acos_o:w #1 \s_@@ \@@_chk:w #2#3\@@_sep: @
   {
     \if_case:w #2 \exp_stop_f:
       \@@_case_use:nw { \@@_atan_inf_o:NNNw #1 0 4 }
@@ -1533,7 +1561,7 @@
     \else:
       \@@_case_return_same_o:w
     \fi:
-    \s_@@ \@@_chk:w #2 #3;
+    \s_@@ \@@_chk:w #2 #3\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1550,7 +1578,7 @@
 %   outside the domain of arcsine or arccosine.
 %    \begin{macrocode}
 \cs_new:Npn \@@_asin_normal_o:NfwNnnnnw
-    #1#2#3 \s_@@ \@@_chk:w 1#4#5#6#7#8#9;
+    #1#2#3 \s_@@ \@@_chk:w 1#4#5#6#7#8#9\@@_sep:
   {
     \if_int_compare:w #5 < \c_one_int
       \exp_after:wN \@@_use_none_until_s:w
@@ -1560,9 +1588,9 @@
     \fi:
     \@@_use_i:ww
     \@@_invalid_operation_o:fw {#2}
-      \s_@@ \@@_chk:w 1#4{#5}{#6}{#7}{#8}{#9};
+      \s_@@ \@@_chk:w 1#4{#5}{#6}{#7}{#8}{#9}\@@_sep:
     \@@_asin_auxi_o:NnNww
-      #1 {#3} #4 #5,{#6}{#7}{#8}{#9}{0000}{0000};
+      #1 {#3} #4 #5,{#6}{#7}{#8}{#9}{0000}{0000}\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1585,21 +1613,21 @@
 %   function requires normalized arguments, hence the need for
 %   \texttt{ep_to_ep} and \texttt{continue} after \texttt{ep_mul}.
 %    \begin{macrocode}
-\cs_new:Npn \@@_asin_auxi_o:NnNww #1#2#3#4,#5;
+\cs_new:Npn \@@_asin_auxi_o:NnNww #1#2#3#4,#5\@@_sep:
   {
-    \@@_ep_to_fixed:wwn #4,#5;
+    \@@_ep_to_fixed:wwn #4,#5\@@_sep:
     \@@_asin_isqrt:wn
-    \@@_ep_mul:wwwwn #4,#5;
+    \@@_ep_mul:wwwwn #4,#5\@@_sep:
     \@@_ep_to_ep:wwN
     \@@_fixed_continue:wn
     { #2 \@@_atan_test_o:NwwNwwN #3 }
-    0 1,{1000}{0000}{0000}{0000}{0000}{0000}; #1
+    0 1,{1000}{0000}{0000}{0000}{0000}{0000}\@@_sep: #1
   }
-\cs_new:Npn \@@_asin_isqrt:wn #1;
+\cs_new:Npn \@@_asin_isqrt:wn #1\@@_sep:
   {
-    \exp_after:wN \@@_fixed_sub:wwn \c_@@_one_fixed_tl #1;
+    \exp_after:wN \@@_fixed_sub:wwn \c_@@_one_fixed_tl #1\@@_sep:
     {
-      \@@_fixed_add_one:wN #1;
+      \@@_fixed_add_one:wN #1\@@_sep:
       \@@_fixed_continue:wn { \@@_ep_mul:wwwwn 0, } 0,
     }
     \@@_ep_isqrt:wwn
@@ -1619,7 +1647,7 @@
 %   tests, keeping the function name (\texttt{acsc} or \texttt{acscd})
 %   as an argument for invalid operation exceptions.
 %    \begin{macrocode}
-\cs_new:Npn \@@_acsc_o:w #1 \s_@@ \@@_chk:w #2#3#4; @
+\cs_new:Npn \@@_acsc_o:w #1 \s_@@ \@@_chk:w #2#3#4\@@_sep: @
   {
     \if_case:w \if_meaning:w 2 #2 #3 \fi: #2 \exp_stop_f:
            \@@_case_use:nw
@@ -1630,7 +1658,7 @@
     \or:   \@@_case_return_same_o:w
     \else: \@@_case_return_o:Nw \c_minus_zero_fp
     \fi:
-    \s_@@ \@@_chk:w #2 #3 #4;
+    \s_@@ \@@_chk:w #2 #3 #4\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1644,7 +1672,7 @@
 %   \cs{@@_reverse_args:Nww} following precisely that appearing in
 %   \cs{@@_acos_o:w}.
 %    \begin{macrocode}
-\cs_new:Npn \@@_asec_o:w #1 \s_@@ \@@_chk:w #2#3; @
+\cs_new:Npn \@@_asec_o:w #1 \s_@@ \@@_chk:w #2#3\@@_sep: @
   {
     \if_case:w #2 \exp_stop_f:
       \@@_case_use:nw
@@ -1658,7 +1686,7 @@
     \or:   \@@_case_use:nw { \@@_atan_inf_o:NNNw #1 0 4 }
     \else: \@@_case_return_same_o:w
     \fi:
-    \s_@@ \@@_chk:w #2 #3;
+    \s_@@ \@@_chk:w #2 #3\@@_sep:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1672,17 +1700,17 @@
 %   $\operatorname{acsc}(x)=\operatorname{asin}(1/x)$ and
 %   $\operatorname{asec}(x)=\operatorname{acos}(1/x)$.
 %    \begin{macrocode}
-\cs_new:Npn \@@_acsc_normal_o:NfwNnw #1#2#3 \s_@@ \@@_chk:w 1#4#5#6;
+\cs_new:Npn \@@_acsc_normal_o:NfwNnw #1#2#3 \s_@@ \@@_chk:w 1#4#5#6\@@_sep:
   {
     \int_compare:nNnTF {#5} < 1
       {
         \@@_invalid_operation_o:fw {#2}
-          \s_@@ \@@_chk:w 1#4{#5}#6;
+          \s_@@ \@@_chk:w 1#4{#5}#6\@@_sep:
       }
       {
         \@@_ep_div:wwwwn
-          1,{1000}{0000}{0000}{0000}{0000}{0000};
-          #5,#6{0000}{0000};
+          1,{1000}{0000}{0000}{0000}{0000}{0000}\@@_sep:
+          #5,#6{0000}{0000}\@@_sep:
         { \@@_asin_auxi_o:NnNww #1 {#3} #4 }
       }
   }

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-types.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-types.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-types.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -42,7 +42,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -153,7 +153,7 @@
     \exp_last_unbraced:Nf \@@_types_binary_auxi:Nww
       { \@@_types_cs_to_op:N #1 }
   }
-\cs_new:Npn \@@_types_binary_auxi:Nww #1#2#3; #4#5; @
+\cs_new:Npn \@@_types_binary_auxi:Nww #1#2#3\@@_sep: #4#5\@@_sep: @
   {
     \exp_after:wN \@@_types_binary_auxii:NNww
     \cs:w
@@ -163,7 +163,7 @@
       \@@_type_from_scan:N #4
       _o:ww
     \cs_end:
-    #1 #2#3; #4#5;
+    #1 #2#3\@@_sep: #4#5\@@_sep:
   }
 \cs_new:Npn \@@_types_binary_auxii:NNww #1#2
   {

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3fp.dtx
 %
-% Copyright (C) 2011-2024 The LaTeX Project
+% Copyright (C) 2011-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -49,7 +49,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -59,8 +59,8 @@
 % separate exponent.  The module implements expandably a wide set of
 % arithmetic, trigonometric, and other operations on decimal floating point
 % numbers, to be used within floating point expressions.  \emph{Floating point
-% expressions} (\enquote{\meta{fp expr}}) support the following operations with their usual
-% precedence.
+% expressions} (\enquote{\meta{fp expr}}) support the following operations with
+% their usual precedence.
 % \begin{itemize}
 %   \item Basic arithmetic: addition $x+y$, subtraction $x-y$,
 %     multiplication $x*y$, division $x/y$, square root~$\sqrt{x}$,
@@ -108,7 +108,8 @@
 %     towards $+\infty$ if $t>0$ and towards $-\infty$ if $t<0$. 
 %     \end{itemize}
 %     And \emph{(not yet)} modulo, and \enquote{quantize}.
-%   \item Random numbers: $\operatorname{rand}()$, $\operatorname{randint}(m,n)$.
+%   \item Random numbers: $\operatorname{rand}()$,
+%     $\operatorname{randint}(m,n)$.
 %   \item Constants: \texttt{pi}, \texttt{deg} (one degree in radians).
 %   \item Dimensions, automatically expressed in points, \emph{e.g.},
 %     \texttt{pc} is~$12$.
@@ -124,9 +125,9 @@
 % as |1.234e-34|, or |-.0001|), or as a stored floating point variable,
 % which is automatically replaced by its current value.
 % A \enquote{floating point} is a floating point number or a tuple thereof.  See
-% section~\ref{sec:l3fp:fp-floats} for a description of what a floating point is,
-% section~\ref{sec:l3fp:fp-precedence} for details about how an expression is
-% parsed, and section~\ref{sec:l3fp:fp-operations} to know what the various
+% section~\ref{sec:l3fp:fp-floats} for a description of what a floating point
+% is, section~\ref{sec:l3fp:fp-precedence} for details about how an expression
+% is parsed, and section~\ref{sec:l3fp:fp-operations} to know what the various
 % operations do.  Some operations may raise exceptions (error messages),
 % described in section~\ref{sec:l3fp:fp-exceptions}.
 %
@@ -257,7 +258,8 @@
 %   integers are expressed without a decimal separator.  The values
 %   $\pm\infty$ and \nan{} trigger an \enquote{invalid operation}
 %   exception.
-%   For a tuple, each item is converted using \cs{fp_eval:n} and they are combined as
+%   For a tuple, each item is converted using \cs{fp_eval:n} and they are
+%   combined as
 %   |(|\meta{fp_1}\verb*|, |\meta{fp_2}\verb*|, |\ldots{}\meta{fp_n}|)|
 %   if $n>1$ and |(|\meta{fp_1}|,)| or |()| for fewer items.
 %   This function is identical to \cs{fp_to_decimal:n}.
@@ -288,7 +290,8 @@
 %   integers are expressed without a decimal separator.  The values
 %   $\pm\infty$ and~\nan{} trigger an \enquote{invalid operation}
 %   exception.
-%   For a tuple, each item is converted using \cs{fp_to_decimal:n} and they are combined as
+%   For a tuple, each item is converted using \cs{fp_to_decimal:n} and they are
+%   combined as
 %   |(|\meta{fp_1}\verb*|, |\meta{fp_2}\verb*|, |\ldots{}\meta{fp_n}|)|
 %   if $n>1$ and |(|\meta{fp_1}|,)| or |()| for fewer items.
 % \end{function}
@@ -340,7 +343,8 @@
 %   The values $\pm\infty$ and~\nan{} trigger an \enquote{invalid
 %   operation} exception. Normal category codes apply: thus the |e| is
 %   category code~$11$ (a letter).
-%   For a tuple, each item is converted using \cs{fp_to_scientific:n} and they are combined as
+%   For a tuple, each item is converted using \cs{fp_to_scientific:n} and they
+%   are combined as
 %   |(|\meta{fp_1}\verb*|, |\meta{fp_2}\verb*|, |\ldots{}\meta{fp_n}|)|
 %   if $n>1$ and |(|\meta{fp_1}|,)| or |()| for fewer items.
 % \end{function}
@@ -364,7 +368,8 @@
 %   |0|, |-0|, \texttt{inf}, \texttt{-inf}, and~\texttt{nan}
 %   respectively. Normal category codes apply and thus \texttt{inf} or
 %   \texttt{nan}, if produced, are made up of letters.
-%   For a tuple, each item is converted using \cs{fp_to_tl:n} and they are combined as
+%   For a tuple, each item is converted using \cs{fp_to_tl:n} and they are
+%   combined as
 %   |(|\meta{fp_1}\verb*|, |\meta{fp_2}\verb*|, |\ldots{}\meta{fp_n}|)|
 %   if $n>1$ and |(|\meta{fp_1}|,)| or |()| for fewer items.
 % \end{function}
@@ -380,7 +385,8 @@
 %   exponent.  Non-significant trailing zeros are trimmed.  Integers are
 %   expressed without a decimal separator.  The values $\pm\infty$
 %   and~\nan{} trigger an \enquote{invalid operation} exception.
-%   For a tuple, each item is converted using \cs{fp_to_decimal:n} and they are combined as
+%   For a tuple, each item is converted using \cs{fp_to_decimal:n} and they are
+%   combined as
 %   |(|\meta{fp_1}\verb*|, |\meta{fp_2}\verb*|, |\ldots{}\meta{fp_n}|)|
 %   if $n>1$ and |(|\meta{fp_1}|,)| or |()| for fewer items.
 %   This function is identical to \cs{fp_to_decimal:N}.
@@ -995,7 +1001,8 @@
 % valid floating point numbers.  Note that the latter could be mistaken
 % with the difference of \enquote{\texttt{e}} and $1$.  To avoid
 % confusions, the base of natural logarithms cannot be input as |e| and
-% should be input as \texttt{exp(1)} or \cs[module = fp]{c_e_fp} (which is faster).
+% should be input as \texttt{exp(1)} or \cs[module = fp]{c_e_fp} (which is
+% faster).
 %
 % Special numbers are input as follows:
 % \begin{itemize}
@@ -1024,7 +1031,8 @@
 %   \item Unary |+|, |-|, |!|.
 %   \item Implicit multiplication by juxtaposition (\texttt{2pi})
 %     when neither factor is in parentheses.
-%   \item Binary |*| and |/|, implicit multiplication by juxtaposition with parentheses (for instance \texttt{3(4+5)}).
+%   \item Binary |*| and |/|, implicit multiplication by juxtaposition with
+%     parentheses (for instance \texttt{3(4+5)}).
 %   \item Binary |+| and |-|.
 %   \item Comparisons |>=|, |!=|, |<?|, \emph{etc}.
 %   \item Logical \texttt{and}, denoted by |&&|.
@@ -1061,9 +1069,10 @@
 %     \cs{fp_eval:n} \{ \meta{operand_1} |?| \meta{operand_2} |:| \meta{operand_3} \}
 %   \end{syntax}
 %   The ternary operator |?:| results in \meta{operand_2} if
-%   \meta{operand_1} is true (not $\pm 0$), and \meta{operand_3} if \meta{operand_1}
-%   is false ($\pm 0$).  All three \meta{operands} are evaluated in all
-%   cases; they may be tuples.  The operator is right associative, hence
+%   \meta{operand_1} is true (not $\pm 0$), and \meta{operand_3} if
+%   \meta{operand_1} is false ($\pm 0$).  All three \meta{operands} are
+%   evaluated in all cases; they may be tuples.  The operator is right
+%   associative, hence
 %   \begin{verbatim}
 %     \fp_eval:n
 %       {
@@ -1262,11 +1271,11 @@
 %     \cs{fp_eval:n} \{ |round| |(| \meta{fp expr_1} , \meta{fp expr_2} , \meta{fp expr_3} |)| \}
 %   \end{syntax}
 %   Only |round| accepts a third argument.
-%   Evaluates $\meta{fp expr_1}=x$ and $\meta{fp expr_2}=n$ and $\meta{fp expr_3}=t$ then rounds
-%   $x$~to $n$~places.  If $n$~is an integer, this rounds~$x$ to a
-%   multiple of~$10^{-n}$; if $n=+\infty$, this always yields~$x$; if
-%   $n=-\infty$, this yields one of $\pm 0$, $\pm\infty$, or~\nan{}; if
-%   $n=\nan{}$, this yields \nan{}; if
+%   Evaluates $\meta{fp expr_1}=x$ and $\meta{fp expr_2}=n$ and $\meta{fp
+%   expr_3}=t$ then rounds $x$~to $n$~places.  If $n$~is an integer, this
+%   rounds~$x$ to a multiple of~$10^{-n}$; if $n=+\infty$, this always
+%   yields~$x$; if $n=-\infty$, this yields one of $\pm 0$, $\pm\infty$,
+%   or~\nan{}; if $n=\nan{}$, this yields \nan{}; if
 %   $n$~is neither $\pm\infty$ nor an integer, then an \enquote{invalid
 %     operation} exception is raised.  When \meta{fp expr_2} is omitted,
 %   $n=0$, \emph{i.e.}, \meta{fp expr_1} is rounded to an integer.  The
@@ -1277,8 +1286,8 @@
 %       as follows.  If $t$ is \texttt{nan} (or not given) the even
 %       multiple is chosen (\enquote{ties to even}), if $t=\pm 0$ the
 %       multiple closest to $0$ is chosen (\enquote{ties to zero}),
-%       if $t$ is positive/negative the multiple closest to $\infty$/$-\infty$ is chosen
-%       (\enquote{ties towards positive/negative infinity}).
+%       if $t$ is positive/negative the multiple closest to $\infty$/$-\infty$
+%       is chosen (\enquote{ties towards positive/negative infinity}).
 %     \item |floor| yields the largest
 %       multiple of~$10^{-n}$ smaller or equal to~$x$ (\enquote{round
 %         towards negative infinity});
@@ -1459,8 +1468,8 @@
 %     \cs{fp_eval:n} \{ |sqrt(| \meta{fp expr} |)| \}
 %   \end{syntax}
 %   Computes the square root of the \meta{fp expr}.  The \enquote{invalid
-%     operation} is raised when the \meta{fp expr} is negative or is a tuple; no other
-%   exception can occur.  Special values yield $\sqrt{-0} = -0$,
+%     operation} is raised when the \meta{fp expr} is negative or is a tuple; no
+%   other exception can occur.  Special values yield $\sqrt{-0} = -0$,
 %   $\sqrt{+0} = +0$, $\sqrt{+\infty} = +\infty$ and
 %   $\sqrt{\text{\nan{}}}=\text{\nan{}}$.
 % \end{function}
@@ -1502,8 +1511,9 @@
 %
 % \begin{variable}[tested = m3fp-parse001]{inf, nan}
 %   The special values $+\infty$, $-\infty$, and \nan{} are represented
-%   as \texttt{inf}, \texttt{-inf} and \texttt{nan} (see \cs[module = fp]{c_inf_fp},
-%   \cs[module = fp]{c_minus_inf_fp} and \cs[module = fp]{c_nan_fp}).
+%   as \texttt{inf}, \texttt{-inf} and \texttt{nan} (see
+%   \cs[module = fp]{c_inf_fp}, \cs[module = fp]{c_minus_inf_fp} and
+%   \cs[module = fp]{c_nan_fp}).
 % \end{variable}
 %
 % \begin{variable}[tested = m3fp-parse001]{pi}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3fparray.dtx
 %
-% Copyright (C) 2018-2024 The LaTeX Project
+% Copyright (C) 2018-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -266,25 +266,25 @@
     \exp_after:wN \@@_array_gset:NNNNww
     \exp_after:wN #1
     \exp_after:wN #1
-    \int_value:w \int_eval:n {#2} \exp_after:wN ;
+    \int_value:w \int_eval:n {#2} \exp_after:wN \@@_sep:
     \exp:w \exp_end_continue_f:w \@@_parse:n {#3}
   }
 \cs_generate_variant:Nn \fparray_gset:Nnn { c }
-\cs_new_protected:Npn \@@_array_gset:NNNNww #1#2#3#4#5 ; #6 ;
+\cs_new_protected:Npn \@@_array_gset:NNNNww #1#2#3#4#5 \@@_sep: #6 \@@_sep:
   {
     \@@_array_bounds:NNnTF \msg_error:nneee #4 {#5}
       {
         \exp_after:wN \@@_change_func_type:NNN
-          \@@_use_i_until_s:nw #6 ;
+          \@@_use_i_until_s:nw #6 \@@_sep:
           \@@_array_gset:w
           \@@_array_gset_recover:Nw
-        #6 ; {#5} #1 #2 #3
+        #6 \@@_sep: {#5} #1 #2 #3
       }
       { }
   }
-\cs_new_protected:Npn \@@_array_gset_recover:Nw #1#2 ;
+\cs_new_protected:Npn \@@_array_gset_recover:Nw #1#2 \@@_sep:
   {
-    \@@_error:nffn { unknown-type } { \tl_to_str:n { #2 ; } } { } { }
+    \@@_error:nffn { unknown-type } { \tl_to_str:n { #2 \@@_sep: } } { } { }
     \exp_after:wN #1 \c_nan_fp
   }
 \cs_new_protected:Npn \@@_array_gset:w \s_@@ \@@_chk:w #1#2
@@ -298,7 +298,7 @@
     \s_@@ \@@_chk:w #1 #2
   }
 \cs_new_protected:Npn \@@_array_gset_normal:w
-  \s_@@ \@@_chk:w 1 #1 #2 #3#4#5 ; #6#7#8#9
+  \s_@@ \@@_chk:w 1 #1 #2 #3#4#5 \@@_sep: #6#7#8#9
   {
     \__kernel_intarray_gset:Nnn #7 {#6} {#2}
     \__kernel_intarray_gset:Nnn #8 {#6}
@@ -354,7 +354,7 @@
   {
     \exp_after:wN \@@_array_item:NwN
     \exp_after:wN #1
-    \int_value:w \int_eval:n {#2} ;
+    \int_value:w \int_eval:n {#2} \@@_sep:
     \@@_to_decimal:w
   }
 \cs_generate_variant:Nn \fparray_item:Nn { c }
@@ -362,11 +362,11 @@
   {
     \exp_after:wN \@@_array_item:NwN
     \exp_after:wN #1
-    \int_value:w \int_eval:n {#2} ;
+    \int_value:w \int_eval:n {#2} \@@_sep:
     \@@_to_tl:w
   }
 \cs_generate_variant:Nn \fparray_item_to_tl:Nn { c }
-\cs_new:Npn \@@_array_item:NwN #1#2 ; #3
+\cs_new:Npn \@@_array_item:NwN #1#2 \@@_sep: #3
   {
     \@@_array_bounds:NNnTF \msg_expandable_error:nnfff #1 {#2}
       { \exp_after:wN \@@_array_item:NNNnN #1 {#2} #3 }
@@ -375,9 +375,9 @@
 \cs_new:Npn \@@_array_item:NNNnN #1#2#3#4
   {
     \exp_after:wN \@@_array_item:N
-    \int_value:w \__kernel_intarray_item:Nn #2 {#4} \exp_after:wN ;
-    \int_value:w \__kernel_intarray_item:Nn #3 {#4} \exp_after:wN ;
-    \int_value:w \__kernel_intarray_item:Nn #1 {#4} ;
+    \int_value:w \__kernel_intarray_item:Nn #2 {#4} \exp_after:wN \@@_sep:
+    \int_value:w \__kernel_intarray_item:Nn #3 {#4} \exp_after:wN \@@_sep:
+    \int_value:w \__kernel_intarray_item:Nn #1 {#4} \@@_sep:
   }
 \cs_new:Npn \@@_array_item:N #1
   {
@@ -384,13 +384,13 @@
     \if_meaning:w 0 #1 \exp_after:wN \@@_array_item_special:w \fi:
     \@@_array_item:w #1
   }
-\cs_new:Npn \@@_array_item:w #1 #2#3#4#5 #6 ; 1 #7 ;
+\cs_new:Npn \@@_array_item:w #1 #2#3#4#5 #6 \@@_sep: 1 #7 \@@_sep:
   {
     \exp_after:wN \@@_array_item_normal:w
     \int_value:w \if_meaning:w #1 1 0 \else: 2 \fi: \exp_stop_f:
-    #7 ; {#2#3#4#5} {#6} ;
+    #7 \@@_sep: {#2#3#4#5} {#6} \@@_sep:
   }
-\cs_new:Npn \@@_array_item_special:w #1 ; #2 ; #3 ; #4
+\cs_new:Npn \@@_array_item_special:w #1 \@@_sep: #2 \@@_sep: #3 \@@_sep: #4
   {
     \exp_after:wN #4
     \exp:w \exp_end_continue_f:w
@@ -402,8 +402,9 @@
     \else: \exp_after:wN \c_minus_inf_fp
     \fi:
   }
-\cs_new:Npn \@@_array_item_normal:w #1 #2#3#4#5 #6 ; #7 ; #8 ; #9
-  { #9 \s_@@ \@@_chk:w 1 #1 {#8} #7 {#2#3#4#5} {#6} ; }
+\cs_new:Npn \@@_array_item_normal:w
+    #1 #2#3#4#5 #6 \@@_sep: #7 \@@_sep: #8 \@@_sep: #9
+  { #9 \s_@@ \@@_chk:w 1 #1 {#8} #7 {#2#3#4#5} {#6} \@@_sep: }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3int.dtx
 %
-% Copyright (C) 1990-2024 The LaTeX Project
+% Copyright (C) 1990-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -629,6 +629,32 @@
 %   $1$. These functions are provided as simple short-cuts for code clarity.
 % \end{function}
 %
+% \begin{function}[added = 2025-01-13, rEXP]
+%   {\int_step_tokens:nn, \int_step_tokens:nnn, \int_step_tokens:nnnn} 
+%   \begin{syntax}
+%     \cs{int_step_tokens:nn} \Arg{final value} \Arg{code}
+%     \cs{int_step_tokens:nnn} \Arg{initial value} \Arg{final value} \Arg{code}
+%     \cs{int_step_tokens:nnnn} \Arg{initial value} \Arg{step} \Arg{final value} \Arg{code}
+%   \end{syntax}
+%   This function works just like \cs{int_step_function:nnnN} but
+%   instead of mapping a single function to each stepped \meta{value}
+%   between \meta{initial value} and \meta{final value} this maps
+%   the multiple tokens in \meta{code}, so that it gets the current
+%   \meta{value} as a braced argument following it.  For instance
+%   \begin{verbatim}
+%     \cs_set:Npn \my_product:nn #1#2
+%       { $#1 \times #2 = \int_eval:n { #1 * #2 }$ \quad }
+%     \int_step_tokens:nnnn { 1 } { 1 } { 4 } { \my_product:nn { 2 } }
+%   \end{verbatim}
+%   would print
+%   \begin{quote}
+%     $2 \times 1 = 2$ \quad
+%     $2 \times 2 = 4$ \quad
+%     $2 \times 3 = 6$ \quad
+%     $2 \times 4 = 8$ \quad
+%   \end{quote}
+% \end{function}
+%
 % \begin{function}[added = 2012-06-04, updated = 2018-04-22]
 %   {\int_step_inline:nn, \int_step_inline:nnn, \int_step_inline:nnnn}
 %   \begin{syntax}
@@ -1156,6 +1182,13 @@
 % \end{macro}
 % \end{macro}
 %
+% \begin{macro}{\@@_sep:}
+%   See comments in \texttt{l3fp-aux.dtx} for this idea.
+%    \begin{macrocode}
+\cs_new_eq:NN \@@_sep: \tex_right:D
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}[EXP]{\int_sign:n, \@@_sign:Nw}
 %   See \cs{int_abs:n}.  Evaluate the expression once (and when
 %   debugging is enabled, check that the expression is well-formed),
@@ -1167,10 +1200,10 @@
 \cs_new:Npn \int_sign:n #1
   {
     \int_value:w \exp_after:wN \@@_sign:Nw
-      \int_value:w \@@_eval:w #1 \@@_eval_end: ;
+      \int_value:w \@@_eval:w #1 \@@_eval_end: \@@_sep:
     \exp_stop_f:
   }
-\cs_new:Npn \@@_sign:Nw #1#2 ;
+\cs_new:Npn \@@_sign:Nw #1#2 \@@_sep:
   {
     \if_meaning:w 0 #1
       0
@@ -1204,8 +1237,8 @@
 \cs_new:Npn \int_max:nn #1#2
   {
     \int_value:w \exp_after:wN \@@_maxmin:wwN
-      \int_value:w \@@_eval:w #1 \exp_after:wN ;
-      \int_value:w \@@_eval:w #2 ;
+      \int_value:w \@@_eval:w #1 \exp_after:wN \@@_sep:
+      \int_value:w \@@_eval:w #2 \@@_sep:
       >
     \exp_stop_f:
   }
@@ -1212,12 +1245,12 @@
 \cs_new:Npn \int_min:nn #1#2
   {
     \int_value:w \exp_after:wN \@@_maxmin:wwN
-      \int_value:w \@@_eval:w #1 \exp_after:wN ;
-      \int_value:w \@@_eval:w #2 ;
+      \int_value:w \@@_eval:w #1 \exp_after:wN \@@_sep:
+      \int_value:w \@@_eval:w #2 \@@_sep:
       <
     \exp_stop_f:
   }
-\cs_new:Npn \@@_maxmin:wwN #1 ; #2 ; #3
+\cs_new:Npn \@@_maxmin:wwN #1 \@@_sep: #2 \@@_sep: #3
   {
     \if_int_compare:w #1 #3 #2 ~
       #1
@@ -1257,11 +1290,11 @@
   {
     \int_value:w \@@_eval:w
       \exp_after:wN \@@_div_truncate:NwNw
-      \int_value:w \@@_eval:w #1 \exp_after:wN ;
-      \int_value:w \@@_eval:w #2 ;
+      \int_value:w \@@_eval:w #1 \exp_after:wN \@@_sep:
+      \int_value:w \@@_eval:w #2 \@@_sep:
     \@@_eval_end:
   }
-\cs_new:Npn \@@_div_truncate:NwNw #1#2; #3#4;
+\cs_new:Npn \@@_div_truncate:NwNw #1#2 \@@_sep: #3#4 \@@_sep:
   {
     \if_meaning:w 0 #1
       0
@@ -1285,12 +1318,12 @@
 \cs_new:Npn \int_mod:nn #1#2
   {
     \int_value:w \@@_eval:w \exp_after:wN \@@_mod:ww
-      \int_value:w \@@_eval:w #1 \exp_after:wN ;
-      \int_value:w \@@_eval:w #2 ;
+      \int_value:w \@@_eval:w #1 \exp_after:wN \@@_sep:
+      \int_value:w \@@_eval:w #2 \@@_sep:
     \@@_eval_end:
   }
-\cs_new:Npn \@@_mod:ww #1; #2;
-  { #1 - ( \@@_div_truncate:NwNw #1 ; #2 ; ) * #2 }
+\cs_new:Npn \@@_mod:ww #1 \@@_sep: #2 \@@_sep:
+  { #1 - ( \@@_div_truncate:NwNw #1 \@@_sep: #2 \@@_sep: ) * #2 }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -1944,7 +1977,7 @@
 % \subsection{Integer step functions}
 %
 % \begin{macro}{\int_step_function:nnnN}
-% \begin{macro}{\@@_step:wwwN, \@@_step:NwnnN}
+% \begin{macro}{\@@_step:w, \@@_step:Nw}
 % \begin{macro}{\int_step_function:nN}
 % \begin{macro}{\int_step_function:nnN}
 %   Before all else, evaluate the initial value, step, and final value.
@@ -1952,45 +1985,51 @@
 %   of the steps. After that, do the function for the start value then
 %   step and loop around. It would be more symmetrical to test for a
 %   step size of zero before checking the sign, but we optimize for the
-%   most frequent case (positive step).
+%   most frequent case (positive step). And since when we're doing the
+%   test the step size is the result of \cs{@@_eval:w} we know that only
+%   the value $0$ has a leading token |0| which we can use for a faster
+%   test than \cs{int_compare:nNnTF}.
 %    \begin{macrocode}
 \cs_new:Npn \int_step_function:nnnN #1#2#3
   {
-    \exp_after:wN \@@_step:wwwN
-    \int_value:w \@@_eval:w #1 \exp_after:wN ;
-    \int_value:w \@@_eval:w #2 \exp_after:wN ;
-    \int_value:w \@@_eval:w #3 ;
+    \exp_after:wN \@@_step:w
+    \int_value:w \@@_eval:w #1 \exp_after:wN \@@_sep:
+    \int_value:w \@@_eval:w #2 \exp_after:wN \@@_sep:
+    \int_value:w \@@_eval:w #3 \@@_sep:
   }
-\cs_new:Npn \@@_step:wwwN #1; #2; #3; #4
+\cs_new:Npn \@@_step:w #1 \@@_sep: #2 \@@_sep: #3 \@@_sep: #4
   {
     \int_compare:nNnTF {#2} > \c_zero_int
-      { \@@_step:NwnnN > }
+      { \@@_step:Nw > }
       {
-        \int_compare:nNnTF {#2} = \c_zero_int
+        \if_meaning:w 0 #2
+          \exp_after:wN \use_ii:nn
+        \fi:
+        \use_none:n
           {
             \msg_expandable_error:nnn
               { kernel } { zero-step } {#4}
             \prg_break:
           }
-          { \@@_step:NwnnN < }
+        \@@_step:Nw <
       }
-      #1 ; {#2} {#3} #4
+      #1 \@@_sep: {#2} {#3} {#4}
     \prg_break_point:
   }
-\cs_new:Npn \@@_step:NwnnN #1#2 ; #3#4#5
+\cs_new:Npn \@@_step:Nw #1#2 \@@_sep: #3#4#5
   {
     \if_int_compare:w #2 #1 #4 \exp_stop_f:
       \prg_break:n
     \fi:
     #5 {#2}
-    \exp_after:wN \@@_step:NwnnN
+    \exp_after:wN \@@_step:Nw
     \exp_after:wN #1
-    \int_value:w \@@_eval:w #2 + #3 ; {#3} {#4} #5
+    \int_value:w \@@_eval:w #2 + #3 \@@_sep: {#3} {#4} {#5}
   }
 \cs_new:Npn \int_step_function:nN
-  { \int_step_function:nnnN { 1 } { 1 } }
+  { \int_step_function:nnnN \c_one_int \c_one_int }
 \cs_new:Npn \int_step_function:nnN #1
-  { \int_step_function:nnnN {#1} { 1 } }
+  { \int_step_function:nnnN {#1} \c_one_int }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -1997,6 +2036,19 @@
 % \end{macro}
 % \end{macro}
 %
+% \begin{macro}
+%   {\int_step_tokens:nn, \int_step_tokens:nnn, \int_step_tokens:nnnn} 
+%   Because the internals \cs{@@_step:wwwn} and \cs{@@_step:Nwnnn} are
+%   defined in such a way that they work with both a single token or a
+%   braced group of tokens these are really the same as the |function|
+%   variants.
+%    \begin{macrocode}
+\cs_new_eq:NN \int_step_tokens:nn   \int_step_function:nN
+\cs_new_eq:NN \int_step_tokens:nnn  \int_step_function:nnN
+\cs_new_eq:NN \int_step_tokens:nnnn \int_step_function:nnnN
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}{\int_step_inline:nn, \int_step_inline:nnn, \int_step_inline:nnnn}
 % \begin{macro}{\int_step_variable:nNn, \int_step_variable:nnNn, \int_step_variable:nnnNn}
 % \UnitTested

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3intarray.dtx
 %
-% Copyright (C) 2017-2024 The LaTeX Project
+% Copyright (C) 2017-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3kernel-functions.dtx
 %
-% Copyright (C) 2018-2024 The LaTeX Project
+% Copyright (C) 2018-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3keys.dtx
 %
-% Copyright (C) 2006-2024 The LaTeX Project
+% Copyright (C) 2006-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -1811,25 +1811,34 @@
 % \subsection{The key defining mechanism}
 %
 % \begin{macro}{\keys_define:nn, \keys_define:ne, \keys_define:nx}
-% \begin{macro}{\@@_define:nnn, \@@_define:onn}
 %   The public function for definitions is just a wrapper for the lower
 %   level mechanism, more or less. The outer function is designed to
 %   keep a track of the current module, to allow safe nesting. The module is set
 %   removing any leading |/| (which is not needed here).
 %    \begin{macrocode}
-\cs_new_protected:Npn \keys_define:nn
-  { \@@_define:onn \l_@@_module_str }
-\cs_generate_variant:Nn \keys_define:nn { ne , nx }
-\cs_new_protected:Npn \@@_define:nnn #1#2#3
+\cs_new_protected:Npn \keys_define:nn #1#2
   {
-    \str_set:Ne \l_@@_module_str { \@@_trim_spaces:n {#2} }
-    \keyval_parse:NNn \@@_define:n \@@_define:nn {#3}
-    \str_set:Nn \l_@@_module_str {#1}
+    \use:e
+      {
+        \exp_not:n
+          {
+            \str_set:Ne \l_@@_module_str { \@@_trim_spaces:n {#1} }
+            \keyval_parse:NNn \@@_define:n \@@_define:nn {#2}
+          }
+        \@@_reset_var:N \l_@@_module_str
+        \@@_reset_var:N \l_@@_inherit_str
+        \@@_reset_var:N \l_keys_choice_tl
+        \@@_reset_var:N \l_keys_key_tl
+        \@@_reset_var:N \l_keys_key_str
+        \@@_reset_var:N \l_keys_path_tl
+        \@@_reset_var:N \l_keys_path_str
+        \@@_reset_var:N \l_keys_value_tl
+        \int_set:Nn \l_keys_choice_int { \int_use:N \l_keys_choice_int }
+      }
   }
-\cs_generate_variant:Nn \@@_define:nnn { o }
+\cs_generate_variant:Nn \keys_define:nn { ne , nx }
 %    \end{macrocode}
 % \end{macro}
-% \end{macro}
 %
 % \begin{macro}{\@@_define:n}
 % \begin{macro}{\@@_define:nn}
@@ -2249,14 +2258,8 @@
 %   function is used here as a meta key should respect the prevailing
 %   filtering, etc.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_meta_make:n #1
-  {
-    \exp_args:NVo \@@_cmd_set_direct:nn \l_keys_path_str
-      {
-        \exp_after:wN \@@_set:nn \exp_after:wN 
-          { \l_@@_module_str } {#1}
-      }
-  }
+\cs_new_protected:Npn \@@_meta_make:n
+  { \exp_args:NV \@@_meta_make:nn \l_@@_module_str }
 \cs_new_protected:Npn \@@_meta_make:nn #1#2
   {
     \exp_args:NV \@@_cmd_set_direct:nn
@@ -2841,7 +2844,6 @@
 % \subsection{Setting keys}
 %
 % \begin{macro}{\@@_set:nnnnNn}
-% \begin{macro}{\@@_set:nnnnnnnNn}
 % \begin{macro}[EXP]{\@@_reset_bool:N, \@@_reset_var:N}
 % \begin{macro}{\@@_set:nn}
 % \begin{macro}{\@@_set:nnn}
@@ -2858,33 +2860,34 @@
 %    \item The code to set up the correct selection approach
 %  \end{enumerate}
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_set:nnnnNn
+\cs_new_protected:Npn \@@_set:nnnnNn #1#2#3#4#5#6
   {
-    \exp_args:Nooo \@@_set:nnnnnnnNn
-      \l_@@_unused_clist
-      \l_@@_selective_clist
-      \l_@@_relative_tl
-  }
-\cs_new_protected:Npn \@@_set:nnnnnnnNn #1#2#3#4#5#6#7#8#9
-  {
-    \clist_clear:N \l_@@_unused_clist
-    \clist_set:Ne \l_@@_selective_clist { \tl_to_str:n {#5} }
-    \tl_set:Nn \l_@@_relative_tl {#7}
     \use:e
       {
         \exp_not:n
           {
-            #9
-            \@@_set:nn {#4} {#6}
+            \clist_clear:N \l_@@_unused_clist
+            \clist_set:Ne \l_@@_selective_clist { \tl_to_str:n {#2} }
+            \tl_set:Nn \l_@@_relative_tl {#4}
+            #6
+            \@@_set:nn {#1} {#3}
+            \clist_set_eq:NN #5 \l_@@_unused_clist
           }
         \@@_reset_bool:N \l_@@_only_known_bool
         \@@_reset_bool:N \l_@@_exclude_bool
         \@@_reset_bool:N \l_@@_selective_bool
+        \@@_reset_var:N \l_@@_unused_clist
+        \@@_reset_var:N \l_@@_selective_clist
+        \@@_reset_var:N \l_@@_relative_tl
+        \@@_reset_var:N \l_@@_inherit_str
+        \@@_reset_var:N \l_keys_choice_tl
+        \@@_reset_var:N \l_keys_key_tl
+        \@@_reset_var:N \l_keys_key_str
+        \@@_reset_var:N \l_keys_path_tl
+        \@@_reset_var:N \l_keys_path_str
+        \@@_reset_var:N \l_keys_value_tl
+        \int_set:Nn \l_keys_choice_int { \int_use:N \l_keys_choice_int }
       }
-    \clist_set_eq:NN #8 \l_@@_unused_clist
-    \__kernel_tl_set:Nx \l_@@_unused_clist { \exp_not:n {#1} }
-    \__kernel_tl_set:Nx \l_@@_selective_clist {#2}
-    \__kernel_tl_set:Nx \l_@@_relative_tl { \exp_not:n {#3} }
   }
 \cs_new:Npn \@@_reset_bool:N #1
   {
@@ -2892,6 +2895,12 @@
       { bool_set_ \bool_if:NTF #1 { true } { false } :N }
         \exp_not:N #1
   }
+\cs_new:Npn \@@_reset_var:N #1
+  {
+    \exp_not:n
+      { \__kernel_tl_set:Nx #1 }
+        { \exp_not:N \exp_not:n { \exp_not:o { #1 } } }
+  }
 \cs_new_protected:Npn \@@_set:nn #1#2
   { \exp_args:No \@@_set:nnn \l_@@_module_str {#1} {#2} }
 \cs_new_protected:Npn \@@_set:nnn #1#2#3
@@ -2905,7 +2914,6 @@
 % \end{macro}
 % \end{macro}
 % \end{macro}
-% \end{macro}
 %
 % \begin{macro}
 %   {

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3legacy.dtx
 %
-% Copyright (C) 2019-2024 The LaTeX Project
+% Copyright (C) 2019-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3luatex.dtx
 %
-% Copyright (C) 2010-2024 The LaTeX Project
+% Copyright (C) 2010-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -123,7 +123,7 @@
 %
 %   \cs{lua_now:n} passes its \Arg{token list} argument to the Lua interpreter
 %   as a single line, with characters interpreted under the current catcode
-%   regime. These two facts mean that \cs{lua_now:n} rarely behaves as expected
+%   régime. These two facts mean that \cs{lua_now:n} rarely behaves as expected
 %   for larger pieces of code. Therefore, package authors should \textbf{not}
 %   write significant amounts of Lua code in the arguments to \cs{lua_now:n}.
 %   Instead, it is strongly recommended that they write the majorty of their Lua

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3msg.dtx
 %
-% Copyright (C) 2009-2024 The LaTeX Project
+% Copyright (C) 2009-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -2088,6 +2088,13 @@
   }
 \msg_new:nnn { kernel } { randint-backward-range }
   { Wrong~order~of~bounds~in~\iow_char:N\\int_rand:nn{#1}{#2}. }
+\msg_new:nnnn { kernel } { conditional-base-undefined }
+  { Undefined~conditional~base~function~'#1'. }
+  {
+    \c_@@_coding_error_text_tl
+    LaTeX~has~been~asked~to~define~a~variant~of~the~conditional~'#1',~
+    but~the~latter~is~not~defined.
+  }
 \msg_new:nnnn { kernel } { conditional-form-unknown }
   { Conditional~form~'#1'~for~function~'#2'~unknown. }
   {

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3names.dtx
 %
-% Copyright (C) 1990-2024 The LaTeX Project
+% Copyright (C) 1990-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3pdf.dtx
 %
-% Copyright(C) 2019-2024 The LaTeX Project
+% Copyright(C) 2019-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3prg.dtx
 %
-% Copyright (C) 2005-2024 The LaTeX Project
+% Copyright (C) 2005-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3prop.dtx
 %
-% Copyright (C) 1990-2024 The LaTeX Project
+% Copyright (C) 1990-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3quark.dtx
 %
-% Copyright (C) 1990-2024 The LaTeX Project
+% Copyright (C) 1990-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3regex.dtx
 %
-% Copyright (C) 2011-2024 The LaTeX Project
+% Copyright (C) 2011-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -469,12 +469,12 @@
 % the same category codes as in the original token list.
 %
 % By default, the category code of characters inserted by the
-% replacement are determined by the prevailing category code regime at
+% replacement are determined by the prevailing category code régime at
 % the time where the replacement is made, with two exceptions:
 % \begin{itemize}
 % \item space characters (with character code $32$) inserted with
 %   \verb*|\ | or |\x20| or |\x{20}| have category code~$10$ regardless
-%   of the prevailing category code regime;
+%   of the prevailing category code régime;
 % \item if the category code would be $0$~(escape), $5$~(newline),
 %   $9$~(ignore), $14$~(comment) or $15$~(invalid), it is replaced by
 %   $12$~(other) instead.
@@ -5971,7 +5971,7 @@
 %   \cs{l_@@_replacement_category_tl}.
 %   The argument |#1| is a single character (including the case of a catcode-other space).
 %   In case no specific catcode is requested, we take into account the
-%   current catcode regime (at the time the replacement is performed)
+%   current catcode régime (at the time the replacement is performed)
 %   as much as reasonable, with all impossible catcodes (escape,
 %   newline, etc.) being mapped to \enquote{other}.
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3seq.dtx
 %
-% Copyright (C) 1990-2024 The LaTeX Project
+% Copyright (C) 1990-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -145,9 +145,9 @@
 %   \cs{seq_set_split:Nnn}, and can be removed afterwards using
 %   \cs{seq_remove_all:Nn} \meta{seq~var} |{}|.
 %   The \meta{delimiter} may not contain |{|, |}| or |#|
-%   (assuming \TeX{}'s normal category code r\'egime).
+%   (assuming \TeX{}'s normal category code régime).
 %   If the \meta{delimiter} is empty, the \meta{token list} is split
-%   into \meta{items} as a \meta{token list}.
+%   into \meta{items} as described for \cs{tl_map_function:nN}.
 %   See also \cs{seq_set_split_keep_spaces:Nnn}, which omits space stripping.
 % \end{function}
 %
@@ -167,9 +167,10 @@
 %   \cs{seq_set_split_keep_spaces:Nnn}, and can be removed afterwards using
 %   \cs{seq_remove_all:Nn} \meta{seq~var} |{}|.
 %   The \meta{delimiter} may not contain |{|, |}| or |#|
-%   (assuming \TeX{}'s normal category code r\'egime).
+%   (assuming \TeX{}'s normal category code régime).
 %   If the \meta{delimiter} is empty, the \meta{token list} is split
-%   into \meta{items} as a \meta{token list}.
+%   into \meta{items} as described for \cs{tl_map_function:nN}; note in this
+%   case spaces will \emph{not} be preserved.
 %   See also \cs{seq_set_split:Nnn}, which removes spaces around the delimiters.
 % \end{function}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -3,7 +3,7 @@
 %% File: l3skip.dtx
 %
 % Copyright (C) 2004-2011 Frank Mittelbach, The LaTeX Project
-%           (C) 2012-2024 The LaTeX Project
+%           (C) 2012-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File l3sort.dtx
 %
-% Copyright (C) 2012-2024 The LaTeX Project
+% Copyright (C) 2012-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3str-convert.dtx
 %
-% Copyright (C) 2013-2024 The LaTeX Project
+% Copyright (C) 2013-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -2068,7 +2068,7 @@
 %
 % \subsubsection{\textsc{utf-16} support}
 %
-% The definitions are done in a category code regime where the bytes
+% The definitions are done in a category code régime where the bytes
 % $254$ and $255$ used by the byte order mark have catcode~$12$.
 %    \begin{macrocode}
 \group_begin:
@@ -2393,7 +2393,7 @@
 %
 % \subsubsection{\textsc{utf-32} support}
 %
-% The definitions are done in a category code regime where the bytes
+% The definitions are done in a category code régime where the bytes
 % $0$, $254$ and $255$ used by the byte order mark have catcode
 % \enquote{other}.
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3str.dtx
 %
-% Copyright (C) 2011-2024 The LaTeX Project
+% Copyright (C) 2011-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3sys.dtx
 %
-% Copyright (C) 2015-2024 The LaTeX Project
+% Copyright (C) 2015-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3text-case.dtx
 %
-% Copyright (C) 2020-2024 The LaTeX Project
+% Copyright (C) 2020-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3text-map.dtx
 %
-% Copyright (C) 2022-2024 The LaTeX Project
+% Copyright (C) 2022-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3text-purify.dtx
 %
-% Copyright (C) 2020-2024 The LaTeX Project
+% Copyright (C) 2020-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3text.dtx
 %
-% Copyright (C) 2020-2024 The LaTeX Project
+% Copyright (C) 2020-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3tl-analysis.dtx
 %
-% Copyright (C) 2011-2024 The LaTeX Project
+% Copyright (C) 2011-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -1028,22 +1028,25 @@
 %
 % \subsection{Showing the results}
 %
-% \begin{macro}{\tl_analysis_show:N, \tl_analysis_log:N, \@@_analysis_show:NNN}
+% \begin{macro}{\tl_analysis_show:N, \tl_analysis_log:N, \@@_analysis_show:NNnnN}
 %   Add to \cs{@@_analysis:n} a third pass to display tokens to the terminal.
 %   If the token list variable is not defined, throw the same error
 %   as \cs{tl_show:N} by simply calling that function.
 %    \begin{macrocode}
 \cs_new_protected:Npn \tl_analysis_show:N
-  { \@@_analysis_show:NNN \msg_show:nneeee \tl_show:N }
+  { \@@_analysis_show:NNnnN \msg_show:nneeee \tl_show:N {} {} }
 \cs_new_protected:Npn \tl_analysis_log:N
-  { \@@_analysis_show:NNN \msg_log:nneeee \tl_log:N }
-\cs_new_protected:Npn \@@_analysis_show:NNN #1#2#3
   {
-    \tl_if_exist:NTF #3
+    \@@_analysis_show:NNnnN \msg_log:nneeee \tl_log:N
+      { \iow_newline: >~ . } { . }
+  }
+\cs_new_protected:Npn \@@_analysis_show:NNnnN #1#2#3#4#5
+  {
+    \tl_if_exist:NTF #5
       {
-        \exp_args:No \@@_analysis:n {#3}
+        \exp_args:No \@@_analysis:n {#5}
         #1 { tl } { show-analysis }
-          { \token_to_str:N #3 } { \@@_analysis_show: } { } { }
+          { \token_to_str:N #5 } { \@@_analysis_show: } {#3} {#4}
       }
       { #2 #3 }
   }
@@ -1050,17 +1053,17 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\tl_analysis_show:n, \tl_analysis_log:n, \@@_analysis_show:Nn}
+% \begin{macro}{\tl_analysis_show:n, \tl_analysis_log:n, \@@_analysis_show:Nnnn}
 %   No existence test needed here.
 %    \begin{macrocode}
 \cs_new_protected:Npn \tl_analysis_show:n
-  { \@@_analysis_show:Nn \msg_show:nneeee }
+  { \@@_analysis_show:Nnnn \msg_show:nneeee {} {} }
 \cs_new_protected:Npn \tl_analysis_log:n
-  { \@@_analysis_show:Nn \msg_log:nneeee }
-\cs_new_protected:Npn \@@_analysis_show:Nn #1#2
+  { \@@_analysis_show:Nnnn \msg_log:nneeee { \iow_newline: >~ . } { . } }
+\cs_new_protected:Npn \@@_analysis_show:Nnnn #1#2#3#4
   {
-    \@@_analysis:n {#2}
-    #1 { tl } { show-analysis } { } { \@@_analysis_show: } { } { }
+    \@@_analysis:n {#4}
+    #1 { tl } { show-analysis } { } { \@@_analysis_show: } {#2} {#3}
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1654,8 +1657,8 @@
   {
     The~token~list~ \tl_if_empty:nF {#1} { #1 ~ }
     \tl_if_empty:nTF {#2}
-      { is~empty }
-      { contains~the~tokens: #2 }
+      { is~empty #3 }
+      { contains~the~tokens: #2 #4 }
   }
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-build.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-build.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-build.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3tl-build.dtx
 %
-% Copyright (C) 2018-2024 The LaTeX Project
+% Copyright (C) 2018-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3tl.dtx
 %
-% Copyright (C) 1990-2024 The LaTeX Project
+% Copyright (C) 1990-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -1344,7 +1344,7 @@
 %     read from a file.
 %
 %     Contrarily to the \tn{scantokens} \eTeX{} primitive, \cs{tl_rescan:nn}
-%     tokenizes the whole string in the same category code regime rather
+%     tokenizes the whole string in the same category code régime rather
 %     than one token at a time, so that directives such as \tn{verb}
 %     that rely on changing category codes will not function properly.
 %   \end{texnote}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3token.dtx
 %
-% Copyright (C) 2005-2024 The LaTeX Project
+% Copyright (C) 2005-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %
@@ -1012,7 +1012,7 @@
 %     In case the input stream has not yet been tokenized (converted
 %     from characters to tokens), characters are tokenized one by one as
 %     needed by \cs{peek_analysis_map_inline:n} using the current
-%     category code regime.
+%     category code régime.
 %   \end{texnote}
 % \end{function}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -2,7 +2,7 @@
 %
 %% File: l3unicode.dtx
 %
-% Copyright (C) 2018-2024 The LaTeX Project
+% Copyright (C) 2018-2025 The LaTeX Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-12-25}
+% \date{Released 2025-01-18}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex	2025-01-30 21:12:07 UTC (rev 73651)
@@ -62,7 +62,7 @@
 %% l3legacy.dtx  (with options: `package')
 %% l3deprecation.dtx  (with options: `package')
 %% 
-%% Copyright (C) 1990-2024 The LaTeX Project
+%% Copyright (C) 1990-2025 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -75,7 +75,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2024-12-25}%
+\def\ExplFileDate{2025-01-18}%
 \begingroup
   \def\next{\endgroup}%
   \expandafter\ifx\csname PackageError\endcsname\relax
@@ -3073,13 +3073,23 @@
     \__cs_generate_variant:w #2 \s__cs_mark {#3} {#4} {#5}
   }
 \cs_new_protected:Npn \__cs_generate_variant_p_form:nnn #1#2
-  { \cs_generate_variant:cn { #1 _p : #2 } }
+  { \__cs_generate_variant_check:nn { #1 _p : #2 } }
 \cs_new_protected:Npn \__cs_generate_variant_T_form:nnn #1#2
-  { \cs_generate_variant:cn { #1 : #2 T } }
+  { \__cs_generate_variant_check:nn { #1 : #2 T } }
 \cs_new_protected:Npn \__cs_generate_variant_F_form:nnn #1#2
-  { \cs_generate_variant:cn { #1 : #2 F } }
+  { \__cs_generate_variant_check:nn { #1 : #2 F } }
 \cs_new_protected:Npn \__cs_generate_variant_TF_form:nnn #1#2
-  { \cs_generate_variant:cn { #1 : #2 TF } }
+  { \__cs_generate_variant_check:nn { #1 : #2 TF } }
+\cs_new_protected:Npn \__cs_generate_variant_check:nn #1#2
+  {
+    \cs_if_exist:cTF {#1}
+      { \cs_generate_variant:cn {#1} {#2} }
+      {
+        \msg_error:nne
+          { kernel } { conditional-base-undefined }
+            { \token_to_str:c {#1} }
+      }
+  }
 \cs_new_protected:Npn \exp_args_generate:n #1
   {
     \exp_args:No \clist_map_inline:nn { \tl_to_str:n {#1} }
@@ -6379,13 +6389,14 @@
 \cs_new:Npn \int_eval:n #1
   { \tex_the:D \__int_eval:w #1 \__int_eval_end: }
 \cs_new:Npn \int_eval:w { \tex_the:D \__int_eval:w }
+\cs_new_eq:NN \__int_sep: \tex_right:D
 \cs_new:Npn \int_sign:n #1
   {
     \int_value:w \exp_after:wN \__int_sign:Nw
-      \int_value:w \__int_eval:w #1 \__int_eval_end: ;
+      \int_value:w \__int_eval:w #1 \__int_eval_end: \__int_sep:
     \exp_stop_f:
   }
-\cs_new:Npn \__int_sign:Nw #1#2 ;
+\cs_new:Npn \__int_sign:Nw #1#2 \__int_sep:
   {
     \if_meaning:w 0 #1
       0
@@ -6404,8 +6415,8 @@
 \cs_new:Npn \int_max:nn #1#2
   {
     \int_value:w \exp_after:wN \__int_maxmin:wwN
-      \int_value:w \__int_eval:w #1 \exp_after:wN ;
-      \int_value:w \__int_eval:w #2 ;
+      \int_value:w \__int_eval:w #1 \exp_after:wN \__int_sep:
+      \int_value:w \__int_eval:w #2 \__int_sep:
       >
     \exp_stop_f:
   }
@@ -6412,12 +6423,12 @@
 \cs_new:Npn \int_min:nn #1#2
   {
     \int_value:w \exp_after:wN \__int_maxmin:wwN
-      \int_value:w \__int_eval:w #1 \exp_after:wN ;
-      \int_value:w \__int_eval:w #2 ;
+      \int_value:w \__int_eval:w #1 \exp_after:wN \__int_sep:
+      \int_value:w \__int_eval:w #2 \__int_sep:
       <
     \exp_stop_f:
   }
-\cs_new:Npn \__int_maxmin:wwN #1 ; #2 ; #3
+\cs_new:Npn \__int_maxmin:wwN #1 \__int_sep: #2 \__int_sep: #3
   {
     \if_int_compare:w #1 #3 #2 ~
       #1
@@ -6429,11 +6440,11 @@
   {
     \int_value:w \__int_eval:w
       \exp_after:wN \__int_div_truncate:NwNw
-      \int_value:w \__int_eval:w #1 \exp_after:wN ;
-      \int_value:w \__int_eval:w #2 ;
+      \int_value:w \__int_eval:w #1 \exp_after:wN \__int_sep:
+      \int_value:w \__int_eval:w #2 \__int_sep:
     \__int_eval_end:
   }
-\cs_new:Npn \__int_div_truncate:NwNw #1#2; #3#4;
+\cs_new:Npn \__int_div_truncate:NwNw #1#2 \__int_sep: #3#4 \__int_sep:
   {
     \if_meaning:w 0 #1
       0
@@ -6451,12 +6462,12 @@
 \cs_new:Npn \int_mod:nn #1#2
   {
     \int_value:w \__int_eval:w \exp_after:wN \__int_mod:ww
-      \int_value:w \__int_eval:w #1 \exp_after:wN ;
-      \int_value:w \__int_eval:w #2 ;
+      \int_value:w \__int_eval:w #1 \exp_after:wN \__int_sep:
+      \int_value:w \__int_eval:w #2 \__int_sep:
     \__int_eval_end:
   }
-\cs_new:Npn \__int_mod:ww #1; #2;
-  { #1 - ( \__int_div_truncate:NwNw #1 ; #2 ; ) * #2 }
+\cs_new:Npn \__int_mod:ww #1 \__int_sep: #2 \__int_sep:
+  { #1 - ( \__int_div_truncate:NwNw #1 \__int_sep: #2 \__int_sep: ) * #2 }
 \cs_new:Npn \__kernel_int_add:nnn #1#2#3
   {
     \int_value:w \__int_eval:w #1
@@ -6768,41 +6779,47 @@
   }
 \cs_new:Npn \int_step_function:nnnN #1#2#3
   {
-    \exp_after:wN \__int_step:wwwN
-    \int_value:w \__int_eval:w #1 \exp_after:wN ;
-    \int_value:w \__int_eval:w #2 \exp_after:wN ;
-    \int_value:w \__int_eval:w #3 ;
+    \exp_after:wN \__int_step:w
+    \int_value:w \__int_eval:w #1 \exp_after:wN \__int_sep:
+    \int_value:w \__int_eval:w #2 \exp_after:wN \__int_sep:
+    \int_value:w \__int_eval:w #3 \__int_sep:
   }
-\cs_new:Npn \__int_step:wwwN #1; #2; #3; #4
+\cs_new:Npn \__int_step:w #1 \__int_sep: #2 \__int_sep: #3 \__int_sep: #4
   {
     \int_compare:nNnTF {#2} > \c_zero_int
-      { \__int_step:NwnnN > }
+      { \__int_step:Nw > }
       {
-        \int_compare:nNnTF {#2} = \c_zero_int
+        \if_meaning:w 0 #2
+          \exp_after:wN \use_ii:nn
+        \fi:
+        \use_none:n
           {
             \msg_expandable_error:nnn
               { kernel } { zero-step } {#4}
             \prg_break:
           }
-          { \__int_step:NwnnN < }
+        \__int_step:Nw <
       }
-      #1 ; {#2} {#3} #4
+      #1 \__int_sep: {#2} {#3} {#4}
     \prg_break_point:
   }
-\cs_new:Npn \__int_step:NwnnN #1#2 ; #3#4#5
+\cs_new:Npn \__int_step:Nw #1#2 \__int_sep: #3#4#5
   {
     \if_int_compare:w #2 #1 #4 \exp_stop_f:
       \prg_break:n
     \fi:
     #5 {#2}
-    \exp_after:wN \__int_step:NwnnN
+    \exp_after:wN \__int_step:Nw
     \exp_after:wN #1
-    \int_value:w \__int_eval:w #2 + #3 ; {#3} {#4} #5
+    \int_value:w \__int_eval:w #2 + #3 \__int_sep: {#3} {#4} {#5}
   }
 \cs_new:Npn \int_step_function:nN
-  { \int_step_function:nnnN { 1 } { 1 } }
+  { \int_step_function:nnnN \c_one_int \c_one_int }
 \cs_new:Npn \int_step_function:nnN #1
-  { \int_step_function:nnnN {#1} { 1 } }
+  { \int_step_function:nnnN {#1} \c_one_int }
+\cs_new_eq:NN \int_step_tokens:nn   \int_step_function:nN
+\cs_new_eq:NN \int_step_tokens:nnn  \int_step_function:nnN
+\cs_new_eq:NN \int_step_tokens:nnnn \int_step_function:nnnN
 \cs_new_protected:Npn \int_step_inline:nn
   { \int_step_inline:nnnn { 1 } { 1 } }
 \cs_new_protected:Npn \int_step_inline:nnn #1
@@ -11165,6 +11182,13 @@
   }
 \msg_new:nnn { kernel } { randint-backward-range }
   { Wrong~order~of~bounds~in~\iow_char:N\\int_rand:nn{#1}{#2}. }
+\msg_new:nnnn { kernel } { conditional-base-undefined }
+  { Undefined~conditional~base~function~'#1'. }
+  {
+    \c__msg_coding_error_text_tl
+    LaTeX~has~been~asked~to~define~a~variant~of~the~conditional~'#1',~
+    but~the~latter~is~not~defined.
+  }
 \msg_new:nnnn { kernel } { conditional-form-unknown }
   { Conditional~form~'#1'~for~function~'#2'~unknown. }
   {
@@ -13894,16 +13918,27 @@
     \fi:
     \cs_set_eq:cN {#1} \tex_undefined:D
   }
-\cs_new_protected:Npn \keys_define:nn
-  { \__keys_define:onn \l__keys_module_str }
-\cs_generate_variant:Nn \keys_define:nn { ne , nx }
-\cs_new_protected:Npn \__keys_define:nnn #1#2#3
+\cs_new_protected:Npn \keys_define:nn #1#2
   {
-    \str_set:Ne \l__keys_module_str { \__keys_trim_spaces:n {#2} }
-    \keyval_parse:NNn \__keys_define:n \__keys_define:nn {#3}
-    \str_set:Nn \l__keys_module_str {#1}
+    \use:e
+      {
+        \exp_not:n
+          {
+            \str_set:Ne \l__keys_module_str { \__keys_trim_spaces:n {#1} }
+            \keyval_parse:NNn \__keys_define:n \__keys_define:nn {#2}
+          }
+        \__keys_reset_var:N \l__keys_module_str
+        \__keys_reset_var:N \l__keys_inherit_str
+        \__keys_reset_var:N \l_keys_choice_tl
+        \__keys_reset_var:N \l_keys_key_tl
+        \__keys_reset_var:N \l_keys_key_str
+        \__keys_reset_var:N \l_keys_path_tl
+        \__keys_reset_var:N \l_keys_path_str
+        \__keys_reset_var:N \l_keys_value_tl
+        \int_set:Nn \l_keys_choice_int { \int_use:N \l_keys_choice_int }
+      }
   }
-\cs_generate_variant:Nn \__keys_define:nnn { o }
+\cs_generate_variant:Nn \keys_define:nn { ne , nx }
 \cs_new_protected:Npn \__keys_define:n #1
   {
     \bool_set_true:N \l__keys_no_value_bool
@@ -14167,14 +14202,8 @@
           \cs:w if#1 \cs_end:
       }
   }
-\cs_new_protected:Npn \__keys_meta_make:n #1
-  {
-    \exp_args:NVo \__keys_cmd_set_direct:nn \l_keys_path_str
-      {
-        \exp_after:wN \__keys_set:nn \exp_after:wN
-          { \l__keys_module_str } {#1}
-      }
-  }
+\cs_new_protected:Npn \__keys_meta_make:n
+  { \exp_args:NV \__keys_meta_make:nn \l__keys_module_str }
 \cs_new_protected:Npn \__keys_meta_make:nn #1#2
   {
     \exp_args:NV \__keys_cmd_set_direct:nn
@@ -14501,33 +14530,34 @@
   { \__keys_value_requirement:nn { forbidden } {#1} }
 \cs_new_protected:cpn { \c__keys_props_root_str .value_required:n } #1
   { \__keys_value_requirement:nn { required } {#1} }
-\cs_new_protected:Npn \__keys_set:nnnnNn
+\cs_new_protected:Npn \__keys_set:nnnnNn #1#2#3#4#5#6
   {
-    \exp_args:Nooo \__keys_set:nnnnnnnNn
-      \l__keys_unused_clist
-      \l__keys_selective_clist
-      \l__keys_relative_tl
-  }
-\cs_new_protected:Npn \__keys_set:nnnnnnnNn #1#2#3#4#5#6#7#8#9
-  {
-    \clist_clear:N \l__keys_unused_clist
-    \clist_set:Ne \l__keys_selective_clist { \tl_to_str:n {#5} }
-    \tl_set:Nn \l__keys_relative_tl {#7}
     \use:e
       {
         \exp_not:n
           {
-            #9
-            \__keys_set:nn {#4} {#6}
+            \clist_clear:N \l__keys_unused_clist
+            \clist_set:Ne \l__keys_selective_clist { \tl_to_str:n {#2} }
+            \tl_set:Nn \l__keys_relative_tl {#4}
+            #6
+            \__keys_set:nn {#1} {#3}
+            \clist_set_eq:NN #5 \l__keys_unused_clist
           }
         \__keys_reset_bool:N \l__keys_only_known_bool
         \__keys_reset_bool:N \l__keys_exclude_bool
         \__keys_reset_bool:N \l__keys_selective_bool
+        \__keys_reset_var:N \l__keys_unused_clist
+        \__keys_reset_var:N \l__keys_selective_clist
+        \__keys_reset_var:N \l__keys_relative_tl
+        \__keys_reset_var:N \l__keys_inherit_str
+        \__keys_reset_var:N \l_keys_choice_tl
+        \__keys_reset_var:N \l_keys_key_tl
+        \__keys_reset_var:N \l_keys_key_str
+        \__keys_reset_var:N \l_keys_path_tl
+        \__keys_reset_var:N \l_keys_path_str
+        \__keys_reset_var:N \l_keys_value_tl
+        \int_set:Nn \l_keys_choice_int { \int_use:N \l_keys_choice_int }
       }
-    \clist_set_eq:NN #8 \l__keys_unused_clist
-    \__kernel_tl_set:Nx \l__keys_unused_clist { \exp_not:n {#1} }
-    \__kernel_tl_set:Nx \l__keys_selective_clist {#2}
-    \__kernel_tl_set:Nx \l__keys_relative_tl { \exp_not:n {#3} }
   }
 \cs_new:Npn \__keys_reset_bool:N #1
   {
@@ -14535,6 +14565,12 @@
       { bool_set_ \bool_if:NTF #1 { true } { false } :N }
         \exp_not:N #1
   }
+\cs_new:Npn \__keys_reset_var:N #1
+  {
+    \exp_not:n
+      { \__kernel_tl_set:Nx #1 }
+        { \exp_not:N \exp_not:n { \exp_not:o { #1 } } }
+  }
 \cs_new_protected:Npn \__keys_set:nn #1#2
   { \exp_args:No \__keys_set:nnn \l__keys_module_str {#1} {#2} }
 \cs_new_protected:Npn \__keys_set:nnn #1#2#3
@@ -15338,21 +15374,24 @@
 \cs_new_eq:NN \__fp_int_eval:w \tex_numexpr:D
 \cs_new_eq:NN \__fp_int_eval_end: \scan_stop:
 \cs_new_eq:NN \__fp_int_to_roman:w \tex_romannumeral:D
+\cs_new_eq:NN \__fp_sep: \tex_right:D
 \cs_new:Npn \__fp_use_none_stop_f:n #1 { \exp_stop_f: }
-\cs_new:Npn \__fp_use_s:n #1 { #1; }
-\cs_new:Npn \__fp_use_s:nn #1#2 { #1#2; }
-\cs_new:Npn \__fp_use_none_until_s:w #1; { }
-\cs_new:Npn \__fp_use_i_until_s:nw #1#2; {#1}
-\cs_new:Npn \__fp_use_ii_until_s:nnw #1#2#3; {#2}
-\cs_new:Npn \__fp_reverse_args:Nww #1 #2; #3; { #1 #3; #2; }
-\cs_new:Npn \__fp_rrot:www #1; #2; #3; { #2; #3; #1; }
-\cs_new:Npn \__fp_use_i:ww #1; #2; { #1; }
-\cs_new:Npn \__fp_use_i:www #1; #2; #3; { #1; }
+\cs_new:Npn \__fp_use_s:n #1 { #1\__fp_sep: }
+\cs_new:Npn \__fp_use_s:nn #1#2 { #1#2\__fp_sep: }
+\cs_new:Npn \__fp_use_none_until_s:w #1\__fp_sep: { }
+\cs_new:Npn \__fp_use_i_until_s:nw #1#2\__fp_sep: {#1}
+\cs_new:Npn \__fp_use_ii_until_s:nnw #1#2#3\__fp_sep: {#2}
+\cs_new:Npn \__fp_reverse_args:Nww #1 #2\__fp_sep: #3\__fp_sep:
+  { #1 #3\__fp_sep: #2\__fp_sep: }
+\cs_new:Npn \__fp_rrot:www #1\__fp_sep: #2\__fp_sep: #3\__fp_sep:
+  { #2\__fp_sep: #3\__fp_sep: #1\__fp_sep: }
+\cs_new:Npn \__fp_use_i:ww #1\__fp_sep: #2\__fp_sep: { #1\__fp_sep: }
+\cs_new:Npn \__fp_use_i:www #1\__fp_sep: #2\__fp_sep: #3\__fp_sep: { #1\__fp_sep: }
 \cs_new_protected:Npn \__fp_misused:n #1
   { \msg_error:nne { fp } { misused } { \fp_to_tl:n {#1} } }
 \scan_new:N \s__fp
-\cs_new_protected:Npn \__fp_chk:w #1 ;
-  { \__fp_misused:n { \s__fp \__fp_chk:w #1 ; } }
+\cs_new_protected:Npn \__fp_chk:w #1 \__fp_sep:
+  { \__fp_misused:n { \s__fp \__fp_chk:w #1 \__fp_sep: } }
 \scan_new:N \s__fp_expr_mark
 \scan_new:N \s__fp_expr_stop
 \scan_new:N \s__fp_mark
@@ -15363,11 +15402,11 @@
 \scan_new:N \s__fp_overflow
 \scan_new:N \s__fp_division
 \scan_new:N \s__fp_exact
-\tl_const:Nn \c_zero_fp       { \s__fp \__fp_chk:w 0 0 \s__fp_exact ; }
-\tl_const:Nn \c_minus_zero_fp { \s__fp \__fp_chk:w 0 2 \s__fp_exact ; }
-\tl_const:Nn \c_inf_fp        { \s__fp \__fp_chk:w 2 0 \s__fp_exact ; }
-\tl_const:Nn \c_minus_inf_fp  { \s__fp \__fp_chk:w 2 2 \s__fp_exact ; }
-\tl_const:Nn \c_nan_fp        { \s__fp \__fp_chk:w 3 1 \s__fp_exact ; }
+\tl_const:Nn \c_zero_fp       { \s__fp \__fp_chk:w 0 0 \s__fp_exact \__fp_sep: }
+\tl_const:Nn \c_minus_zero_fp { \s__fp \__fp_chk:w 0 2 \s__fp_exact \__fp_sep: }
+\tl_const:Nn \c_inf_fp        { \s__fp \__fp_chk:w 2 0 \s__fp_exact \__fp_sep: }
+\tl_const:Nn \c_minus_inf_fp  { \s__fp \__fp_chk:w 2 2 \s__fp_exact \__fp_sep: }
+\tl_const:Nn \c_nan_fp        { \s__fp \__fp_chk:w 3 1 \s__fp_exact \__fp_sep: }
 \int_const:Nn \c__fp_prec_int { 16 }
 \int_const:Nn \c__fp_half_prec_int { 8 }
 \int_const:Nn \c__fp_block_int { 4 }
@@ -15379,12 +15418,12 @@
   {
     \s__fp \__fp_chk:w 1 0
       { \int_eval:n { \c__fp_max_exponent_int + 1 } }
-      {1000} {0000} {0000} {0000} ;
+      {1000} {0000} {0000} {0000} \__fp_sep:
   }
 \cs_new:Npn \__fp_zero_fp:N #1
-  { \s__fp \__fp_chk:w 0 #1 \s__fp_underflow ; }
+  { \s__fp \__fp_chk:w 0 #1 \s__fp_underflow \__fp_sep: }
 \cs_new:Npn \__fp_inf_fp:N #1
-  { \s__fp \__fp_chk:w 2 #1 \s__fp_overflow ; }
+  { \s__fp \__fp_chk:w 2 #1 \s__fp_overflow \__fp_sep: }
 \cs_new:Npn \__fp_exponent:w \s__fp \__fp_chk:w #1
   {
     \if_meaning:w 1 #1
@@ -15403,7 +15442,7 @@
       \s__fp { \__fp_use_i_until_s:nw 4 }
       \s__fp_stop
   }
-\cs_new:Npn \__fp_sanitize:Nw #1 #2;
+\cs_new:Npn \__fp_sanitize:Nw #1 #2\__fp_sep:
   {
     \if_case:w
         \if_int_compare:w #2 > \c__fp_max_exponent_int 1 ~ \else:
@@ -15415,8 +15454,8 @@
     \fi:
     \s__fp \__fp_chk:w 1 #1 {#2}
   }
-\cs_new:Npn \__fp_sanitize:wN #1; #2 { \__fp_sanitize:Nw #2 #1; }
-\cs_new:Npn \__fp_sanitize_zero:w \s__fp \__fp_chk:w #1 #2 #3;
+\cs_new:Npn \__fp_sanitize:wN #1\__fp_sep: #2 { \__fp_sanitize:Nw #2 #1\__fp_sep: }
+\cs_new:Npn \__fp_sanitize_zero:w \s__fp \__fp_chk:w #1 #2 #3\__fp_sep:
   { \c_zero_fp }
 \cs_new:Npn \__fp_exp_after_o:w \s__fp \__fp_chk:w #1
   {
@@ -15438,7 +15477,7 @@
     { \exp:w \exp_end_continue_f:w #1 }
     #2
   }
-\cs_new:Npn \__fp_exp_after_special:nNNw #1#2#3#4;
+\cs_new:Npn \__fp_exp_after_special:nNNw #1#2#3#4\__fp_sep:
   {
     \exp_after:wN \s__fp
     \exp_after:wN \__fp_chk:w
@@ -15445,45 +15484,45 @@
     \exp_after:wN #2
     \exp_after:wN #3
     \exp_after:wN #4
-    \exp_after:wN ;
+    \exp_after:wN \__fp_sep:
     #1
   }
-\cs_new:Npn \__fp_exp_after_normal:nNNw #1 1 #2 #3 #4#5#6#7;
+\cs_new:Npn \__fp_exp_after_normal:nNNw #1 1 #2 #3 #4#5#6#7\__fp_sep:
   {
     \exp_after:wN \__fp_exp_after_normal:Nwwwww
     \exp_after:wN #2
-    \int_value:w #3   \exp_after:wN ;
-    \int_value:w 1 #4 \exp_after:wN ;
-    \int_value:w 1 #5 \exp_after:wN ;
-    \int_value:w 1 #6 \exp_after:wN ;
-    \int_value:w 1 #7 \exp_after:wN ; #1
+    \int_value:w #3   \exp_after:wN \__fp_sep:
+    \int_value:w 1 #4 \exp_after:wN \__fp_sep:
+    \int_value:w 1 #5 \exp_after:wN \__fp_sep:
+    \int_value:w 1 #6 \exp_after:wN \__fp_sep:
+    \int_value:w 1 #7 \exp_after:wN \__fp_sep: #1
   }
 \cs_new:Npn \__fp_exp_after_normal:Nwwwww
-    #1 #2; 1 #3 ; 1 #4 ; 1 #5 ; 1 #6 ;
-  { \s__fp \__fp_chk:w 1 #1 {#2} {#3} {#4} {#5} {#6} ; }
+    #1 #2\__fp_sep: 1 #3 \__fp_sep: 1 #4 \__fp_sep: 1 #5 \__fp_sep: 1 #6 \__fp_sep:
+  { \s__fp \__fp_chk:w 1 #1 {#2} {#3} {#4} {#5} {#6} \__fp_sep: }
 \scan_new:N \s__fp_tuple
-\cs_new_protected:Npn \__fp_tuple_chk:w #1 ;
-  { \__fp_misused:n { \s__fp_tuple \__fp_tuple_chk:w #1 ; } }
+\cs_new_protected:Npn \__fp_tuple_chk:w #1 \__fp_sep:
+  { \__fp_misused:n { \s__fp_tuple \__fp_tuple_chk:w #1 \__fp_sep: } }
 \tl_const:Nn \c__fp_empty_tuple_fp
-  { \s__fp_tuple \__fp_tuple_chk:w { } ; }
+  { \s__fp_tuple \__fp_tuple_chk:w { } \__fp_sep: }
 \cs_new:Npn \__fp_array_count:n #1
-  { \__fp_tuple_count:w \s__fp_tuple \__fp_tuple_chk:w {#1} ; }
-\cs_new:Npn \__fp_tuple_count:w \s__fp_tuple \__fp_tuple_chk:w #1 ;
+  { \__fp_tuple_count:w \s__fp_tuple \__fp_tuple_chk:w {#1} \__fp_sep: }
+\cs_new:Npn \__fp_tuple_count:w \s__fp_tuple \__fp_tuple_chk:w #1 \__fp_sep:
   {
     \int_value:w \__fp_int_eval:w 0
-      \__fp_tuple_count_loop:Nw #1 { ? \prg_break: } ;
+      \__fp_tuple_count_loop:Nw #1 { ? \prg_break: } \__fp_sep:
       \prg_break_point:
     \__fp_int_eval_end:
   }
-\cs_new:Npn \__fp_tuple_count_loop:Nw #1#2;
+\cs_new:Npn \__fp_tuple_count_loop:Nw #1#2\__fp_sep:
   { \use_none:n #1 + 1 \__fp_tuple_count_loop:Nw }
 \cs_new:Npn \__fp_if_type_fp:NTwFw #1 \s__fp #2 #3 \s__fp_stop {#2}
 \cs_new:Npn \__fp_array_if_all_fp:nTF #1
   {
-    \__fp_array_if_all_fp_loop:w #1 { \s__fp \prg_break: } ;
+    \__fp_array_if_all_fp_loop:w #1 { \s__fp \prg_break: } \__fp_sep:
     \prg_break_point: \use_i:nn
   }
-\cs_new:Npn \__fp_array_if_all_fp_loop:w #1#2 ;
+\cs_new:Npn \__fp_array_if_all_fp_loop:w #1#2 \__fp_sep:
   {
     \__fp_if_type_fp:NTwFw
       #1 \__fp_array_if_all_fp_loop:w
@@ -15545,7 +15584,7 @@
 \cs_new:Npn \__fp_exp_after_tuple_o:w
   { \__fp_exp_after_tuple_f:nw { \exp_after:wN \exp_stop_f: } }
 \cs_new:Npn \__fp_exp_after_tuple_f:nw
-  #1 \s__fp_tuple \__fp_tuple_chk:w #2 ;
+  #1 \s__fp_tuple \__fp_tuple_chk:w #2 \__fp_sep:
   {
     \exp_after:wN \s__fp_tuple
     \exp_after:wN \__fp_tuple_chk:w
@@ -15553,7 +15592,7 @@
       \exp:w \exp_end_continue_f:w
       \__fp_exp_after_array_f:w #2 \s__fp_expr_stop
     \exp_after:wN }
-    \exp_after:wN ;
+    \exp_after:wN \__fp_sep:
     \exp:w \exp_end_continue_f:w #1
   }
 \cs_new:Npn \__fp_exp_after_array_f:w
@@ -15561,42 +15600,43 @@
 \int_const:Nn \c__fp_leading_shift_int  { - 5 0000 }
 \int_const:Nn \c__fp_middle_shift_int   { 5 0000 *  9999 }
 \int_const:Nn \c__fp_trailing_shift_int { 5 0000 * 10000 }
-\cs_new:Npn \__fp_pack:NNNNNw #1 #2#3#4#5 #6; { + #1#2#3#4#5 ; {#6} }
+\cs_new:Npn \__fp_pack:NNNNNw #1 #2#3#4#5 #6\__fp_sep:
+  { + #1#2#3#4#5 \__fp_sep: {#6} }
 \int_const:Nn \c__fp_big_leading_shift_int  { - 15 2374 }
 \int_const:Nn \c__fp_big_middle_shift_int   { 15 2374 *  9999 }
 \int_const:Nn \c__fp_big_trailing_shift_int { 15 2374 * 10000 }
-\cs_new:Npn \__fp_pack_big:NNNNNNw #1#2 #3#4#5#6 #7;
-  { + #1#2#3#4#5#6 ; {#7} }
+\cs_new:Npn \__fp_pack_big:NNNNNNw #1#2 #3#4#5#6 #7\__fp_sep:
+  { + #1#2#3#4#5#6 \__fp_sep: {#7} }
 \int_const:Nn \c__fp_Bigg_leading_shift_int  { - 20 0000 }
 \int_const:Nn \c__fp_Bigg_middle_shift_int   { 20 0000 *  9999 }
 \int_const:Nn \c__fp_Bigg_trailing_shift_int { 20 0000 * 10000 }
-\cs_new:Npn \__fp_pack_Bigg:NNNNNNw #1#2 #3#4#5#6 #7;
-  { + #1#2#3#4#5#6 ; {#7} }
-\cs_new:Npn \__fp_pack_twice_four:wNNNNNNNN #1; #2#3#4#5 #6#7#8#9
-  { #1 {#2#3#4#5} {#6#7#8#9} ; }
-\cs_new:Npn \__fp_pack_eight:wNNNNNNNN #1; #2#3#4#5 #6#7#8#9
-  { #1 {#2#3#4#5#6#7#8#9} ; }
-\cs_new:Npn \__fp_basics_pack_low:NNNNNw #1 #2#3#4#5 #6;
-  { + #1 - 1 ; {#2#3#4#5} {#6} ; }
-\cs_new:Npn \__fp_basics_pack_high:NNNNNw #1 #2#3#4#5 #6;
+\cs_new:Npn \__fp_pack_Bigg:NNNNNNw #1#2 #3#4#5#6 #7\__fp_sep:
+  { + #1#2#3#4#5#6 \__fp_sep: {#7} }
+\cs_new:Npn \__fp_pack_twice_four:wNNNNNNNN #1\__fp_sep: #2#3#4#5 #6#7#8#9
+  { #1 {#2#3#4#5} {#6#7#8#9} \__fp_sep: }
+\cs_new:Npn \__fp_pack_eight:wNNNNNNNN #1\__fp_sep: #2#3#4#5 #6#7#8#9
+  { #1 {#2#3#4#5#6#7#8#9} \__fp_sep: }
+\cs_new:Npn \__fp_basics_pack_low:NNNNNw #1 #2#3#4#5 #6\__fp_sep:
+  { + #1 - 1 \__fp_sep: {#2#3#4#5} {#6} \__fp_sep: }
+\cs_new:Npn \__fp_basics_pack_high:NNNNNw #1 #2#3#4#5 #6\__fp_sep:
   {
     \if_meaning:w 2 #1
       \__fp_basics_pack_high_carry:w
     \fi:
-    ; {#2#3#4#5} {#6}
+    \__fp_sep: {#2#3#4#5} {#6}
   }
-\cs_new:Npn \__fp_basics_pack_high_carry:w \fi: ; #1
-  { \fi: + 1 ; {1000} }
-\cs_new:Npn \__fp_basics_pack_weird_low:NNNNw #1 #2#3#4 #5;
+\cs_new:Npn \__fp_basics_pack_high_carry:w \fi: \__fp_sep: #1
+  { \fi: + 1 \__fp_sep: {1000} }
+\cs_new:Npn \__fp_basics_pack_weird_low:NNNNw #1 #2#3#4 #5\__fp_sep:
   {
     \if_meaning:w 2 #1
       + 1
     \fi:
     \__fp_int_eval_end:
-    #2#3#4; {#5} ;
+    #2#3#4\__fp_sep: {#5} \__fp_sep:
   }
 \cs_new:Npn \__fp_basics_pack_weird_high:NNNNNNNNw
-  1 #1#2#3#4 #5#6#7#8 #9; { ; {#1#2#3#4} {#5#6#7#8} {#9} }
+  1 #1#2#3#4 #5#6#7#8 #9\__fp_sep: { \__fp_sep: {#1#2#3#4} {#5#6#7#8} {#9} }
 \cs_new:Npn \__fp_decimate:nNnnnn #1
   {
     \cs:w
@@ -15610,9 +15650,9 @@
     \cs_end:
   }
 \cs_new:Npn \__fp_decimate_:Nnnnn #1 #2#3#4#5
-  { #1 0 {#2#3} {#4#5} ; }
+  { #1 0 {#2#3} {#4#5} \__fp_sep: }
 \cs_new:Npn \__fp_decimate_tiny:Nnnnn #1 #2#3#4#5
-  { #1 1 { 0000 0000 } { 0000 0000 } 0 #2#3#4#5 ; }
+  { #1 1 { 0000 0000 } { 0000 0000 } 0 #2#3#4#5 \__fp_sep: }
 \cs_new:Npn \__fp_tmp:w #1 #2 #3
   {
     \cs_new:cpn { __fp_decimate_ #1 :Nnnnn } ##1 ##2##3##4##5
@@ -15619,8 +15659,8 @@
       {
         \exp_after:wN ##1
         \int_value:w
-          \exp_after:wN \__fp_round_digit:Nw #2 ;
-        \__fp_decimate_pack:nnnnnnnnnnw #3 ;
+          \exp_after:wN \__fp_round_digit:Nw #2 \__fp_sep:
+        \__fp_decimate_pack:nnnnnnnnnnw #3 \__fp_sep:
       }
   }
 \__fp_tmp:w {i}   {\use_none:nnn      #50}{    0{#2}#3{#4}#5               }
@@ -15644,18 +15684,19 @@
 \cs_new:Npn \__fp_decimate_pack:nnnnnnw #1 #2#3#4#5#6
   { {#1} {#2#3#4#5#6} }
 \cs_new:Npn \__fp_case_use:nw #1#2 \fi: #3 \s__fp { \fi: #1 \s__fp }
-\cs_new:Npn \__fp_case_return:nw #1#2 \fi: #3 ; { \fi: #1 }
-\cs_new:Npn \__fp_case_return_o:Nw #1#2 \fi: #3 \s__fp #4 ;
+\cs_new:Npn \__fp_case_return:nw #1#2 \fi: #3 \__fp_sep: { \fi: #1 }
+\cs_new:Npn \__fp_case_return_o:Nw #1#2 \fi: #3 \s__fp #4 \__fp_sep:
   { \fi: \exp_after:wN #1 }
 \cs_new:Npn \__fp_case_return_same_o:w #1 \fi: #2 \s__fp
   { \fi: \__fp_exp_after_o:w \s__fp }
-\cs_new:Npn \__fp_case_return_o:Nww #1#2 \fi: #3 \s__fp #4 ; #5 ;
+\cs_new:Npn \__fp_case_return_o:Nww #1#2 \fi: #3 \s__fp #4 \__fp_sep: #5 \__fp_sep:
   { \fi: \exp_after:wN #1 }
-\cs_new:Npn \__fp_case_return_i_o:ww #1 \fi: #2 \s__fp #3 ; \s__fp #4 ;
-  { \fi: \__fp_exp_after_o:w \s__fp #3 ; }
-\cs_new:Npn \__fp_case_return_ii_o:ww #1 \fi: #2 \s__fp #3 ;
+\cs_new:Npn \__fp_case_return_i_o:ww
+    #1 \fi: #2 \s__fp #3 \__fp_sep: \s__fp #4 \__fp_sep:
+  { \fi: \__fp_exp_after_o:w \s__fp #3 \__fp_sep: }
+\cs_new:Npn \__fp_case_return_ii_o:ww #1 \fi: #2 \s__fp #3 \__fp_sep:
   { \fi: \__fp_exp_after_o:w }
-\prg_new_conditional:Npnn \__fp_int:w \s__fp \__fp_chk:w #1 #2 #3 #4;
+\prg_new_conditional:Npnn \__fp_int:w \s__fp \__fp_chk:w #1 #2 #3 #4\__fp_sep:
   { TF , T , F , p }
   {
     \if_case:w #1 \exp_stop_f:
@@ -15674,26 +15715,26 @@
 \cs_new:Npn \__fp_small_int:wTF \s__fp \__fp_chk:w #1#2
   {
     \if_case:w #1 \exp_stop_f:
-           \__fp_case_return:nw { \__fp_small_int_true:wTF 0 ; }
+           \__fp_case_return:nw { \__fp_small_int_true:wTF 0 \__fp_sep: }
     \or:   \exp_after:wN \__fp_small_int_normal:NnwTF
     \or:
       \__fp_case_return:nw
         {
           \exp_after:wN \__fp_small_int_true:wTF \int_value:w
-            \if_meaning:w 2 #2 - \fi: 1 0000 0000 ;
+            \if_meaning:w 2 #2 - \fi: 1 0000 0000 \__fp_sep:
         }
     \else: \__fp_case_return:nw \use_ii:nn
     \fi:
     #2
   }
-\cs_new:Npn \__fp_small_int_true:wTF #1; #2#3 { #2 {#1} }
-\cs_new:Npn \__fp_small_int_normal:NnwTF #1#2#3;
+\cs_new:Npn \__fp_small_int_true:wTF #1\__fp_sep: #2#3 { #2 {#1} }
+\cs_new:Npn \__fp_small_int_normal:NnwTF #1#2#3\__fp_sep:
   {
     \__fp_decimate:nNnnnn { \c__fp_prec_int - #2 }
       \__fp_small_int_test:NnnwNw
       #3 #1
   }
-\cs_new:Npn \__fp_small_int_test:NnnwNw #1#2#3#4; #5
+\cs_new:Npn \__fp_small_int_test:NnnwNw #1#2#3#4\__fp_sep: #5
   {
     \if_meaning:w 0 #1
       \exp_after:wN \__fp_small_int_true:wTF
@@ -15703,7 +15744,7 @@
         \else:
           #3
         \fi:
-      \exp_after:wN ;
+      \exp_after:wN \__fp_sep:
     \else:
       \exp_after:wN \use_ii:nn
     \fi:
@@ -15759,19 +15800,21 @@
 \cs_new_protected:Npn \__fp_trap_invalid_operation_set:N #1
   {
     \exp_args:Nno \use:n
-      { \cs_set:Npn \__fp_invalid_operation:nnw ##1##2##3; }
+      { \cs_set:Npn \__fp_invalid_operation:nnw ##1##2##3\__fp_sep: }
       {
         #1
-        \__fp_error:nnfn { invalid } {##2} { \fp_to_tl:n { ##3; } } { }
+        \__fp_error:nnfn { invalid } {##2} { \fp_to_tl:n { ##3\__fp_sep: } } { }
         \flag_ensure_raised:N \l_fp_invalid_operation_flag
         ##1
       }
     \exp_args:Nno \use:n
-      { \cs_set:Npn \__fp_invalid_operation_o:Nww ##1##2; ##3; }
+      { \cs_set:Npn \__fp_invalid_operation_o:Nww ##1##2\__fp_sep: ##3\__fp_sep: }
       {
         #1
         \__fp_error:nffn { invalid-ii }
-          { \fp_to_tl:n { ##2; } } { \fp_to_tl:n { ##3; } } {##1}
+          { \fp_to_tl:n { ##2\__fp_sep: } }
+          { \fp_to_tl:n { ##3\__fp_sep: } }
+          {##1}
         \flag_ensure_raised:N \l_fp_invalid_operation_flag
         \exp_after:wN \c_nan_fp
       }
@@ -15793,19 +15836,23 @@
 \cs_new_protected:Npn \__fp_trap_division_by_zero_set:N #1
   {
     \exp_args:Nno \use:n
-      { \cs_set:Npn \__fp_division_by_zero_o:Nnw ##1##2##3; }
+      { \cs_set:Npn \__fp_division_by_zero_o:Nnw ##1##2##3\__fp_sep: }
       {
         #1
-        \__fp_error:nnfn { zero-div } {##2} { \fp_to_tl:n { ##3; } } { }
+        \__fp_error:nnfn { zero-div } {##2} { \fp_to_tl:n { ##3\__fp_sep: } } { }
         \flag_ensure_raised:N \l_fp_division_by_zero_flag
         \exp_after:wN ##1
       }
     \exp_args:Nno \use:n
-      { \cs_set:Npn \__fp_division_by_zero_o:NNww ##1##2##3; ##4; }
       {
+        \cs_set:Npn \__fp_division_by_zero_o:NNww ##1##2##3\__fp_sep: ##4\__fp_sep:
+      }
+      {
         #1
         \__fp_error:nffn { zero-div-ii }
-          { \fp_to_tl:n { ##3; } } { \fp_to_tl:n { ##4; } } {##2}
+          { \fp_to_tl:n { ##3\__fp_sep: } }
+          { \fp_to_tl:n { ##4\__fp_sep: } }
+          {##2}
         \flag_ensure_raised:N \l_fp_division_by_zero_flag
         \exp_after:wN ##1
       }
@@ -15829,12 +15876,12 @@
 \cs_new_protected:Npn \__fp_trap_overflow_set:NnNn #1#2#3#4
   {
     \exp_args:Nno \use:n
-      { \cs_set:cpn { __fp_ #2 :w } \s__fp \__fp_chk:w ##1##2##3; }
+      { \cs_set:cpn { __fp_ #2 :w } \s__fp \__fp_chk:w ##1##2##3\__fp_sep: }
       {
         #1
         \__fp_error:nffn
           { flow \if_meaning:w 1 ##1 -to \fi: }
-          { \fp_to_tl:n { \s__fp \__fp_chk:w ##1##2##3; } }
+          { \fp_to_tl:n { \s__fp \__fp_chk:w ##1##2##3\__fp_sep: } }
           { \token_if_eq_meaning:NNF 0 ##2 { - } #4 }
           {#2}
         \flag_ensure_raised:c { l_fp_#2_flag }
@@ -15841,11 +15888,11 @@
         #3 ##2
       }
   }
-\cs_new:Npn \__fp_invalid_operation:nnw #1#2#3; { }
-\cs_new:Npn \__fp_invalid_operation_o:Nww #1#2; #3; { }
+\cs_new:Npn \__fp_invalid_operation:nnw #1#2#3\__fp_sep: { }
+\cs_new:Npn \__fp_invalid_operation_o:Nww #1#2\__fp_sep: #3\__fp_sep: { }
 \cs_new:Npn \__fp_invalid_operation_tl_o:ff #1 #2 { }
-\cs_new:Npn \__fp_division_by_zero_o:Nnw #1#2#3; { }
-\cs_new:Npn \__fp_division_by_zero_o:NNww #1#2#3; #4; { }
+\cs_new:Npn \__fp_division_by_zero_o:Nnw #1#2#3\__fp_sep: { }
+\cs_new:Npn \__fp_division_by_zero_o:NNww #1#2#3\__fp_sep: #4\__fp_sep: { }
 \cs_new:Npn \__fp_overflow:w { }
 \cs_new:Npn \__fp_underflow:w { }
 \fp_trap:nn { invalid_operation } { error }
@@ -15983,7 +16030,7 @@
     \c_zero_int
   }
 \cs_new_eq:NN \__fp_round:NNN \__fp_round_to_nearest:NNN
-\cs_new:Npn \__fp_round_s:NNNw #1 #2 #3 #4;
+\cs_new:Npn \__fp_round_s:NNNw #1 #2 #3 #4\__fp_sep:
   {
     \exp_after:wN \__fp_round:NNN
     \exp_after:wN #1
@@ -15997,9 +16044,9 @@
         \fi:
       \fi:
       #3
-    ;
+    \__fp_sep:
   }
-\cs_new:Npn \__fp_round_digit:Nw #1 #2;
+\cs_new:Npn \__fp_round_digit:Nw #1 #2\__fp_sep:
   {
     \if_int_odd:w \if_meaning:w 0 #1 1 \else:
                   \if_meaning:w 5 #1 1 \else:
@@ -16059,7 +16106,8 @@
       }
     \exp_after:wN \c_nan_fp
   }
-\cs_new:Npn \__fp_round:Nwww #1#2 ; #3 ; \s__fp \__fp_chk:w #4#5#6 ; #7 @
+\cs_new:Npn \__fp_round:Nwww
+    #1#2 \__fp_sep: #3 \__fp_sep: \s__fp \__fp_chk:w #4#5#6 \__fp_sep: #7 @
   {
     \cs_if_eq:NNTF #1 \__fp_round_to_nearest:NNN
       {
@@ -16072,7 +16120,7 @@
                 \if_case:w #5 \exp_stop_f: _pinf \or: \else: _ninf \fi: \fi:
                 :NNN
               }
-            #2 ; #3 ;
+            #2 \__fp_sep: #3 \__fp_sep:
           }
           {
             \__fp_error:nnnn { num-args } { round () } { 1 } { 3 }
@@ -16096,11 +16144,11 @@
           }
       }
   }
-\cs_new:Npn \__fp_round:Nww #1#2 ; #3 ;
+\cs_new:Npn \__fp_round:Nww #1#2 \__fp_sep: #3 \__fp_sep:
   {
-    \__fp_small_int:wTF #3; { \__fp_round:Nwn #1#2; }
+    \__fp_small_int:wTF #3\__fp_sep: { \__fp_round:Nwn #1#2\__fp_sep: }
       {
-        \if:w 3 \__fp_kind:w #3 ;
+        \if:w 3 \__fp_kind:w #3 \__fp_sep:
           \exp_after:wN \use_i:nn
         \else:
           \exp_after:wN \use_ii:nn
@@ -16109,11 +16157,11 @@
         {
           \__fp_invalid_operation_tl_o:ff
             { \__fp_round_name_from_cs:N #1 }
-            { \__fp_array_to_clist:n { #2; #3; } }
+            { \__fp_array_to_clist:n { #2\__fp_sep: #3\__fp_sep: } }
         }
       }
   }
-\cs_new:Npn \__fp_round:Nwn #1 \s__fp \__fp_chk:w #2#3#4; #5
+\cs_new:Npn \__fp_round:Nwn #1 \s__fp \__fp_chk:w #2#3#4\__fp_sep: #5
   {
     \if_meaning:w 1 #2
       \exp_after:wN \__fp_round_normal:NwNNnw
@@ -16122,14 +16170,14 @@
     \else:
       \exp_after:wN \__fp_exp_after_o:w
     \fi:
-    \s__fp \__fp_chk:w #2#3#4;
+    \s__fp \__fp_chk:w #2#3#4\__fp_sep:
   }
-\cs_new:Npn \__fp_round_normal:NwNNnw #1#2 \s__fp \__fp_chk:w 1#3#4#5;
+\cs_new:Npn \__fp_round_normal:NwNNnw #1#2 \s__fp \__fp_chk:w 1#3#4#5\__fp_sep:
   {
     \__fp_decimate:nNnnnn { \c__fp_prec_int - #4 - #2 }
       \__fp_round_normal:NnnwNNnn #5 #1 #3 {#4} {#2}
   }
-\cs_new:Npn \__fp_round_normal:NnnwNNnn #1#2#3#4; #5#6
+\cs_new:Npn \__fp_round_normal:NnnwNNnn #1#2#3#4\__fp_sep: #5#6
   {
     \exp_after:wN \__fp_round_normal:NNwNnn
     \int_value:w \__fp_int_eval:w
@@ -16147,7 +16195,7 @@
       \use_none:nnnnnnn #3
       #1
       \__fp_int_eval_end:
-      0000 0000 0000 0000 ; #6
+      0000 0000 0000 0000 \__fp_sep: #6
   }
 \cs_new:Npn \__fp_round_pack:Nw #1
   { \if_meaning:w 2 #1 + 1 \fi: \__fp_int_eval_end: }
@@ -16160,14 +16208,14 @@
     \__fp_pack_twice_four:wNNNNNNNN
     \__fp_pack_twice_four:wNNNNNNNN
     \__fp_round_normal_end:wwNnn
-    ; #2
+    \__fp_sep: #2
   }
-\cs_new:Npn \__fp_round_normal_end:wwNnn #1;#2;#3#4#5
+\cs_new:Npn \__fp_round_normal_end:wwNnn #1\__fp_sep:#2\__fp_sep:#3#4#5
   {
     \exp_after:wN \__fp_exp_after_o:w \exp:w \exp_end_continue_f:w
-    \__fp_sanitize:Nw #3 #4 ; #1 ;
+    \__fp_sanitize:Nw #3 #4 \__fp_sep: #1 \__fp_sep:
   }
-\cs_new:Npn \__fp_round_special:NwwNnn #1#2;#3;#4#5#6
+\cs_new:Npn \__fp_round_special:NwwNnn #1#2\__fp_sep:#3\__fp_sep:#4#5#6
   {
     \if_meaning:w 0 #1
       \__fp_case_return:nw
@@ -16178,12 +16226,12 @@
       \int_value:w \__fp_int_eval:w 1
         \if_meaning:w 1 #1 -#6 \else: +#5 \fi:
     \fi:
-    ;
+    \__fp_sep:
   }
-\cs_new:Npn \__fp_round_special_aux:Nw #1#2;
+\cs_new:Npn \__fp_round_special_aux:Nw #1#2\__fp_sep:
   {
     \exp_after:wN \__fp_exp_after_o:w \exp:w \exp_end_continue_f:w
-    \__fp_sanitize:Nw #1#2; {1000}{0000}{0000}{0000};
+    \__fp_sanitize:Nw #1#2\__fp_sep: {1000}{0000}{0000}{0000}\__fp_sep:
   }
 %% File: l3fp-parse.dtx
 \int_const:Nn \c__fp_prec_func_int   { 16 }
@@ -16203,7 +16251,7 @@
 \int_const:Nn \c__fp_prec_end_int    { 0 }
 \cs_new:Npn \__fp_parse_expand:w #1 { \exp_end_continue_f:w #1 }
 \cs_new:Npn \__fp_parse_return_semicolon:w
-    #1 \fi: \__fp_parse_expand:w { \fi: ; #1 }
+    #1 \fi: \__fp_parse_expand:w { \fi: \__fp_sep: #1 }
 \cs_set_protected:Npn \__fp_tmp:w #1 #2 #3
   {
     \cs_new:cpn { __fp_parse_digits_ #1 :N } ##1
@@ -16216,14 +16264,14 @@
         \__fp_parse_expand:w
       }
   }
-\__fp_tmp:w {vii}  \__fp_parse_digits_vi:N   { 0000000 ; 7 }
-\__fp_tmp:w {vi}   \__fp_parse_digits_v:N    { 000000 ; 6 }
-\__fp_tmp:w {v}    \__fp_parse_digits_iv:N   { 00000 ; 5 }
-\__fp_tmp:w {iv}   \__fp_parse_digits_iii:N  { 0000 ; 4 }
-\__fp_tmp:w {iii}  \__fp_parse_digits_ii:N   { 000 ; 3 }
-\__fp_tmp:w {ii}   \__fp_parse_digits_i:N    { 00 ; 2 }
-\__fp_tmp:w {i}    \__fp_parse_digits_:N     { 0 ; 1 }
-\cs_new:Npn \__fp_parse_digits_:N { ; ; 0 }
+\__fp_tmp:w {vii}  \__fp_parse_digits_vi:N   { 0000000 \__fp_sep: 7 }
+\__fp_tmp:w {vi}   \__fp_parse_digits_v:N    { 000000 \__fp_sep: 6 }
+\__fp_tmp:w {v}    \__fp_parse_digits_iv:N   { 00000 \__fp_sep: 5 }
+\__fp_tmp:w {iv}   \__fp_parse_digits_iii:N  { 0000 \__fp_sep: 4 }
+\__fp_tmp:w {iii}  \__fp_parse_digits_ii:N   { 000 \__fp_sep: 3 }
+\__fp_tmp:w {ii}   \__fp_parse_digits_i:N    { 00 \__fp_sep: 2 }
+\__fp_tmp:w {i}    \__fp_parse_digits_:N     { 0 \__fp_sep: 1 }
+\cs_new:Npn \__fp_parse_digits_:N { \__fp_sep: \__fp_sep: 0 }
 \cs_new:Npn \__fp_parse_one:Nw #1 #2
   {
     \if_catcode:w \scan_stop: \exp_not:N #2
@@ -16323,26 +16371,26 @@
         \exp_after:wN \__fp_parse_one_register_auxii:wwwNw
       }
     \exp_not:N \exp_after:wN { \exp_not:N \tex_the:D #1 }
-      ; \exp_not:N \__fp_parse_one_register_dim:ww
-      \tl_to_str:n { pt } ; \exp_not:N \__fp_parse_one_register_mu:www
-      . \tl_to_str:n { pt } ; \exp_not:N \__fp_parse_one_register_int:www
+      \__fp_sep: \exp_not:N \__fp_parse_one_register_dim:ww
+      \tl_to_str:n { pt } \__fp_sep: \exp_not:N \__fp_parse_one_register_mu:www
+      . \tl_to_str:n { pt } \__fp_sep: \exp_not:N \__fp_parse_one_register_int:www
       \s__fp_stop
   }
 \exp_args:Nno \use:nn
   { \cs_new:Npn \__fp_parse_one_register_auxii:wwwNw #1 . #2 }
-    { \tl_to_str:n { pt } #3 ; #4#5 \s__fp_stop }
-    { #4 #1.#2; }
+    { \tl_to_str:n { pt } #3 \__fp_sep: #4#5 \s__fp_stop }
+    { #4 #1.#2\__fp_sep: }
 \exp_args:Nno \use:nn
   { \cs_new:Npn \__fp_parse_one_register_mu:www #1 }
-    { \tl_to_str:n { mu } ; #2 ; }
-    { \__fp_parse_one_register_dim:ww #1 ; }
-\cs_new:Npn \__fp_parse_one_register_int:www #1; #2.; #3;
+    { \tl_to_str:n { mu } \__fp_sep: #2 \__fp_sep: }
+    { \__fp_parse_one_register_dim:ww #1 \__fp_sep: }
+\cs_new:Npn \__fp_parse_one_register_int:www #1\__fp_sep: #2.\__fp_sep: #3\__fp_sep:
   { \__fp_parse:n { #1 e #3 } }
-\cs_new:Npn \__fp_parse_one_register_dim:ww #1; #2;
+\cs_new:Npn \__fp_parse_one_register_dim:ww #1\__fp_sep: #2\__fp_sep:
   {
     \exp_after:wN \__fp_from_dim_test:ww
     \int_value:w #2 \exp_after:wN ,
-    \int_value:w \dim_to_decimal_in_sp:n { #1 pt } ;
+    \int_value:w \dim_to_decimal_in_sp:n { #1 pt } \__fp_sep:
   }
 \cs_new:Npn \__fp_parse_one_register_special:N #1
   {
@@ -16375,11 +16423,11 @@
     \exp_after:wN \__fp_parse_one_register_wd:Nw
     #4 \__fp_parse_expand:w e
   }
-\cs_new:Npn \__fp_parse_one_register_wd:Nw #1#2 ;
+\cs_new:Npn \__fp_parse_one_register_wd:Nw #1#2 \__fp_sep:
   {
     \exp_after:wN \__fp_from_dim_test:ww
     \exp_after:wN 0 \exp_after:wN ,
-    \int_value:w \dim_to_decimal_in_sp:n { #1 #2 } ;
+    \int_value:w \dim_to_decimal_in_sp:n { #1 #2 } \__fp_sep:
   }
 \cs_new:Npn \__fp_parse_one_digit:NN #1
   {
@@ -16412,7 +16460,7 @@
     \fi:
     \__fp_parse_expand:w
   }
-\cs_new:Npn \__fp_parse_word:Nw #1#2;
+\cs_new:Npn \__fp_parse_word:Nw #1#2\__fp_sep:
   {
     \cs_if_exist_use:cF { __fp_parse_word_#2:N }
       {
@@ -16517,7 +16565,7 @@
   }
 \cs_new:Npn \__fp_parse_zero:
   {
-    \exp_after:wN ; \exp_after:wN 1
+    \exp_after:wN \__fp_sep: \exp_after:wN 1
     \int_value:w \__fp_parse_exponent:N
   }
 \cs_new:Npn \__fp_parse_small:N #1
@@ -16529,7 +16577,7 @@
         \exp_after:wN \__fp_parse_digits_vii:N
         \exp:w \__fp_parse_expand:w
   }
-\cs_new:Npn \__fp_parse_small_leading:wwNN 1 #1 ; #2; #3 #4
+\cs_new:Npn \__fp_parse_small_leading:wwNN 1 #1 \__fp_sep: #2\__fp_sep: #3 #4
   {
     #1 #2
     \exp_after:wN \__fp_parse_pack_trailing:NNNNNNww
@@ -16546,7 +16594,7 @@
       \fi:
       \__fp_parse_expand:w
   }
-\cs_new:Npn \__fp_parse_small_trailing:wwNN 1 #1 ; #2; #3 #4
+\cs_new:Npn \__fp_parse_small_trailing:wwNN 1 #1 \__fp_sep: #2\__fp_sep: #3 #4
   {
     #1 #2
     \if_int_compare:w 9 < 1 \token_to_str:N #4 \exp_stop_f:
@@ -16559,19 +16607,20 @@
     \fi:
     \__fp_parse_expand:w
   }
-\cs_new:Npn \__fp_parse_pack_trailing:NNNNNNww #1 #2 #3#4#5#6 #7; #8 ;
+\cs_new:Npn \__fp_parse_pack_trailing:NNNNNNww
+    #1 #2 #3#4#5#6 #7\__fp_sep: #8 \__fp_sep:
   {
     \if_meaning:w 2 #2 + 1 \fi:
-    ; #8 + #1 ; {#3#4#5#6} {#7};
+    \__fp_sep: #8 + #1 \__fp_sep: {#3#4#5#6} {#7}\__fp_sep:
   }
-\cs_new:Npn \__fp_parse_pack_leading:NNNNNww #1 #2#3#4#5 #6; #7;
+\cs_new:Npn \__fp_parse_pack_leading:NNNNNww #1 #2#3#4#5 #6\__fp_sep: #7\__fp_sep:
   {
     + #7
     \if_meaning:w 2 #1 \__fp_parse_pack_carry:w \fi:
-    ; 0 {#2#3#4#5} {#6}
+    \__fp_sep: 0 {#2#3#4#5} {#6}
   }
-\cs_new:Npn \__fp_parse_pack_carry:w \fi: ; 0 #1
-  { \fi: + 1 ; 0 {1000} }
+\cs_new:Npn \__fp_parse_pack_carry:w \fi: \__fp_sep: 0 #1
+  { \fi: + 1 \__fp_sep: 0 {1000} }
 \cs_new:Npn \__fp_parse_large:N #1
   {
     \exp_after:wN \__fp_parse_large_leading:wwNN
@@ -16579,7 +16628,7 @@
       \exp_after:wN \__fp_parse_digits_vii:N
       \exp:w \__fp_parse_expand:w
   }
-\cs_new:Npn \__fp_parse_large_leading:wwNN 1 #1 ; #2; #3 #4
+\cs_new:Npn \__fp_parse_large_leading:wwNN 1 #1 \__fp_sep: #2\__fp_sep: #3 #4
   {
     + \c__fp_half_prec_int - #3
     \exp_after:wN \__fp_parse_pack_leading:NNNNNww
@@ -16609,7 +16658,7 @@
       \fi:
       \__fp_parse_expand:w
   }
-\cs_new:Npn \__fp_parse_large_trailing:wwNN 1 #1 ; #2; #3 #4
+\cs_new:Npn \__fp_parse_large_trailing:wwNN 1 #1 \__fp_sep: #2\__fp_sep: #3 #4
   {
     \if_int_compare:w 9 < 1 \token_to_str:N #4 \exp_stop_f:
       \exp_after:wN \__fp_parse_pack_trailing:NNNNNNww
@@ -16664,9 +16713,9 @@
     \fi:
     \__fp_parse_expand:w
   }
-\cs_new:Npn \__fp_parse_round_after:wN #1; #2
+\cs_new:Npn \__fp_parse_round_after:wN #1\__fp_sep: #2
   {
-    + #2 \exp_after:wN ;
+    + #2 \exp_after:wN \__fp_sep:
     \int_value:w \__fp_int_eval:w #1 + \__fp_parse_exponent:N
   }
 \cs_new:Npn \__fp_parse_small_round:NN #1#2
@@ -16716,7 +16765,7 @@
     \fi:
     \__fp_parse_expand:w
   }
-\cs_new:Npn \__fp_parse_large_round_aux:wNN #1 ; #2 #3
+\cs_new:Npn \__fp_parse_large_round_aux:wNN #1 \__fp_sep: #2 #3
   {
     + #2
     \exp_after:wN \__fp_parse_round_after:wN
@@ -16726,7 +16775,7 @@
           \exp_after:wN \__fp_parse_round_loop:N
           \exp:w \exp_after:wN \__fp_parse_expand:w
       \else:
-        \exp_after:wN ;
+        \exp_after:wN \__fp_sep:
         \exp_after:wN 0
         \exp_after:wN #3
       \fi:
@@ -16733,7 +16782,7 @@
   }
 \cs_new:Npn \__fp_parse_exponent:Nw #1 #2 \__fp_parse_expand:w
   {
-    \exp_after:wN ;
+    \exp_after:wN \__fp_sep:
     \int_value:w #2 \__fp_parse_exponent:N #1
   }
 \cs_new:Npn \__fp_parse_exponent:N #1
@@ -16751,7 +16800,7 @@
   {
     \if_int_compare:w \if_catcode:w \scan_stop: \exp_not:N #2
                 0 \else: `#2 \fi: > `9 \exp_stop_f:
-      0 \exp_after:wN ; \exp_after:wN #1
+      0 \exp_after:wN \__fp_sep: \exp_after:wN #1
     \else:
       \exp_after:wN \__fp_parse_exponent_sign:N
     \fi:
@@ -16777,7 +16826,7 @@
       \__fp_parse_exponent_keep:NTF #1
         { \__fp_parse_return_semicolon:w #1 }
         {
-          \exp_after:wN ;
+          \exp_after:wN \__fp_sep:
           \exp:w
         }
     \fi:
@@ -16834,12 +16883,12 @@
   }
 \cs_new:Npn \__fp_parse_apply_unary:NNNwN #1#2#3#4@#5
   {
-    \__fp_parse_apply_unary_chk:NwNw #4 @ ; . \s__fp_stop
+    \__fp_parse_apply_unary_chk:NwNw #4 @ \__fp_sep: . \s__fp_stop
     \__fp_parse_apply_unary_type:NNN
     #3 #2 #4 @
     \exp:w \exp_end_continue_f:w #5 #1
   }
-\cs_new:Npn \__fp_parse_apply_unary_chk:NwNw #1#2 ; #3#4 \s__fp_stop
+\cs_new:Npn \__fp_parse_apply_unary_chk:NwNw #1#2 \__fp_sep: #3#4 \s__fp_stop
   {
     \if_meaning:w @ #3 \else:
       \token_if_eq_meaning:NNTF . #3
@@ -16953,7 +17002,7 @@
     \cs_new:cpn { __fp_parse_word_#1:N }
       {
         \__fp_exp_after_f:nw { \__fp_parse_infix:NN }
-        \s__fp \__fp_chk:w 10 #2 ;
+        \s__fp \__fp_chk:w 10 #2 \__fp_sep:
       }
   }
 \__fp_tmp:w {pt} { {1} {1000} {0000} {0000} {0000} }
@@ -16973,7 +17022,7 @@
       {
         \exp_after:wN \__fp_from_dim_test:ww
         \exp_after:wN 0 \exp_after:wN ,
-        \int_value:w \dim_to_decimal_in_sp:n { 1 #1 } \exp_after:wN ;
+        \int_value:w \dim_to_decimal_in_sp:n { 1 #1 } \exp_after:wN \__fp_sep:
         \exp:w \exp_end_continue_f:w \__fp_parse_infix:NN
       }
   }
@@ -17062,7 +17111,7 @@
     #2
     \__fp_invalid_operation_o:Nww #1
   }
-\cs_new:Npn \__fp_binary_type_o:Nww #1 #2#3 ; #4
+\cs_new:Npn \__fp_binary_type_o:Nww #1 #2#3 \__fp_sep: #4
   {
     \exp_after:wN \__fp_parse_apply_binary_chk:NN
       \cs:w
@@ -17073,9 +17122,9 @@
         _o:ww
       \cs_end:
       #1
-    #2 #3 ; #4
+    #2 #3 \__fp_sep: #4
   }
-\cs_new:Npn \__fp_binary_rev_type_o:Nww #1 #2#3 ; #4#5 ;
+\cs_new:Npn \__fp_binary_rev_type_o:Nww #1 #2#3 \__fp_sep: #4#5 \__fp_sep:
   {
     \exp_after:wN \__fp_parse_apply_binary_chk:NN
       \cs:w
@@ -17086,12 +17135,12 @@
         _o:ww
       \cs_end:
       #1
-    #4 #5 ; #2 #3 ;
+    #4 #5 \__fp_sep: #2 #3 \__fp_sep:
   }
-\cs_new:Npn \__fp_parse_infix_after_operand:NwN #1 #2;
+\cs_new:Npn \__fp_parse_infix_after_operand:NwN #1 #2\__fp_sep:
   {
     \__fp_exp_after_f:nw { \__fp_parse_infix:NN #1 }
-    #2;
+    #2\__fp_sep:
   }
 \cs_new:Npn \__fp_parse_infix:NN #1 #2
   {
@@ -17215,7 +17264,7 @@
     \exp_after:wN #1
     \exp:w \exp_end_continue_f:w
     \__fp_exp_after_tuple_f:nw { }
-      \s__fp_tuple \__fp_tuple_chk:w { #2 #4 } ;
+      \s__fp_tuple \__fp_tuple_chk:w { #2 #4 } \__fp_sep:
     #5 #1
   }
 \cs_set_protected:Npn \__fp_tmp:w #1#2#3#4
@@ -17400,7 +17449,7 @@
     \fi:
     #1 #8 #9
   }
-\cs_new:Npn \__fp_parse_apply_compare_aux:NNwN #1 #2 #3; #4
+\cs_new:Npn \__fp_parse_apply_compare_aux:NNwN #1 #2 #3\__fp_sep: #4
   {
     \if_meaning:w \__fp_parse_compare:NNNNNNN #4
       \exp_after:wN \__fp_parse_continue_compare:NNwNN
@@ -17407,7 +17456,7 @@
       \exp_after:wN #1
       \exp_after:wN #2
       \exp:w \exp_end_continue_f:w
-      \__fp_exp_after_o:w #3;
+      \__fp_exp_after_o:w #3\__fp_sep:
       \exp:w \exp_end_continue_f:w
     \else:
       \exp_after:wN \__fp_parse_continue:NwN
@@ -17427,7 +17476,7 @@
       {
         \__fp_error:nffn { bad-args }
           {#1}
-          { \fp_to_tl:n { \s__fp_tuple \__fp_tuple_chk:w {#3} ; } }
+          { \fp_to_tl:n { \s__fp_tuple \__fp_tuple_chk:w {#3} \__fp_sep: } }
           { }
         \exp_after:wN \c_nan_fp
       }
@@ -17442,11 +17491,11 @@
   {
     \__fp_error:nffn { bad-args }
       {#2}
-      { \fp_to_tl:n { \s__fp_tuple \__fp_tuple_chk:w {#4} ; } }
+      { \fp_to_tl:n { \s__fp_tuple \__fp_tuple_chk:w {#4} \__fp_sep: } }
       { }
     \exp_after:wN \c_nan_fp
   }
-\cs_new:Npn \__fp_parse_function_one_two_aux:nnw #1#2 #3; #4
+\cs_new:Npn \__fp_parse_function_one_two_aux:nnw #1#2 #3\__fp_sep: #4
   {
     \__fp_if_type_fp:NTwFw
       #4 { }
@@ -17458,16 +17507,16 @@
         \__fp_parse_function_one_two_error_o:w
       }
       \s__fp_stop
-    \__fp_parse_function_one_two_auxii:nnw {#1} {#2} #3; #4
+    \__fp_parse_function_one_two_auxii:nnw {#1} {#2} #3\__fp_sep: #4
   }
-\cs_new:Npn \__fp_parse_function_one_two_auxii:nnw #1#2#3; #4; #5
+\cs_new:Npn \__fp_parse_function_one_two_auxii:nnw #1#2#3\__fp_sep: #4\__fp_sep: #5
   {
     \if_meaning:w @ #5 \else:
       \exp_after:wN \__fp_parse_function_one_two_error_o:w
     \fi:
-    \use_ii:nn {#1} { \use_none:n #2 } #3; #4; #5
+    \use_ii:nn {#1} { \use_none:n #2 } #3\__fp_sep: #4\__fp_sep: #5
   }
-\cs_new:Npn \__fp_tuple_map_o:nw #1 \s__fp_tuple \__fp_tuple_chk:w #2 ;
+\cs_new:Npn \__fp_tuple_map_o:nw #1 \s__fp_tuple \__fp_tuple_chk:w #2 \__fp_sep:
   {
     \exp_after:wN \s__fp_tuple
     \exp_after:wN \__fp_tuple_chk:w
@@ -17474,20 +17523,20 @@
     \exp_after:wN {
       \exp:w \exp_end_continue_f:w
       \__fp_tuple_map_loop_o:nw {#1} #2
-        { \s__fp \prg_break: } ;
+        { \s__fp \prg_break: } \__fp_sep:
       \prg_break_point:
-    \exp_after:wN } \exp_after:wN ;
+    \exp_after:wN } \exp_after:wN \__fp_sep:
   }
-\cs_new:Npn \__fp_tuple_map_loop_o:nw #1#2#3 ;
+\cs_new:Npn \__fp_tuple_map_loop_o:nw #1#2#3 \__fp_sep:
   {
     \use_none:n #2
-    #1 #2 #3 ;
+    #1 #2 #3 \__fp_sep:
     \exp:w \exp_end_continue_f:w
     \__fp_tuple_map_loop_o:nw {#1}
   }
 \cs_new:Npn \__fp_tuple_mapthread_o:nww #1
-    \s__fp_tuple \__fp_tuple_chk:w #2 ;
-    \s__fp_tuple \__fp_tuple_chk:w #3 ;
+    \s__fp_tuple \__fp_tuple_chk:w #2 \__fp_sep:
+    \s__fp_tuple \__fp_tuple_chk:w #3 \__fp_sep:
   {
     \exp_after:wN \s__fp_tuple
     \exp_after:wN \__fp_tuple_chk:w
@@ -17494,16 +17543,16 @@
     \exp_after:wN {
       \exp:w \exp_end_continue_f:w
       \__fp_tuple_mapthread_loop_o:nw {#1}
-        #2 { \s__fp \prg_break: } ; @
-        #3 { \s__fp \prg_break: } ;
+        #2 { \s__fp \prg_break: } \__fp_sep: @
+        #3 { \s__fp \prg_break: } \__fp_sep:
       \prg_break_point:
-    \exp_after:wN } \exp_after:wN ;
+    \exp_after:wN } \exp_after:wN \__fp_sep:
   }
-\cs_new:Npn \__fp_tuple_mapthread_loop_o:nw #1#2#3 ; #4 @ #5#6 ;
+\cs_new:Npn \__fp_tuple_mapthread_loop_o:nw #1#2#3 \__fp_sep: #4 @ #5#6 \__fp_sep:
   {
     \use_none:n #2
     \use_none:n #5
-    #1 #2 #3 ; #5 #6 ;
+    #1 #2 #3 \__fp_sep: #5 #6 \__fp_sep:
     \exp:w \exp_end_continue_f:w
     \__fp_tuple_mapthread_loop_o:nw {#1} #4 @
   }
@@ -17591,9 +17640,9 @@
   {
     \__fp_show_validate:nn { #1 }
       {
-        \s__fp \__fp_chk:w ??? ;~ or \iow_newline:
-        \s__fp_tuple \__fp_tuple_chk:w ? ;~ or \iow_newline:
-        \s__fp_symbolic \__fp_symbolic_chk:w ? , ? ;
+        \s__fp \__fp_chk:w ??? \__fp_sep: or \iow_newline:
+        \s__fp_tuple \__fp_tuple_chk:w ? \__fp_sep: or \iow_newline:
+        \s__fp_symbolic \__fp_symbolic_chk:w ? , ? \__fp_sep:
       }
   }
 \cs_new:Npn \__fp_show_validate_aux:n #1
@@ -17609,17 +17658,17 @@
             { \s__fp }
               {
                 \__fp_show_validate:w #1 \s__fp
-                \__fp_chk:w ??? ; \s__fp_stop
+                \__fp_chk:w ??? \__fp_sep: \s__fp_stop
               }
             { \s__fp_tuple }
               {
                 \__fp_tuple_show_validate:w #1
-                \s__fp_tuple \__fp_tuple_chk:w ?? ; \s__fp_stop
+                \s__fp_tuple \__fp_tuple_chk:w ?? \__fp_sep: \s__fp_stop
               }
             { \s__fp_symbolic }
               {
                 \__fp_symbolic_show_validate:w #1
-                \s__fp_symbolic \__fp_symbolic_chk:w ? , ?? ; \s__fp_stop
+                \s__fp_symbolic \__fp_symbolic_chk:w ? , ?? \__fp_sep: \s__fp_stop
               }
           }
           { #2 }
@@ -17626,29 +17675,32 @@
       }
   }
 \cs_new:Npn \__fp_show_validate:w
-    #1 \s__fp \__fp_chk:w #2#3#4#5 ; #6 \s__fp_stop
+    #1 \s__fp \__fp_chk:w #2#3#4#5 \__fp_sep: #6 \s__fp_stop
   {
     \str_if_eq:nnF { #2 } {?}
       {
         \token_if_eq_meaning:NNTF #2 1
-          { \s__fp \__fp_chk:w #2 #3 { #4 } #5 ; }
-          { \s__fp \__fp_chk:w #2 #3 #4 #5 ; }
+          { \s__fp \__fp_chk:w #2 #3 { #4 } #5 \__fp_sep: }
+          { \s__fp \__fp_chk:w #2 #3 #4 #5 \__fp_sep: }
         \__fp_show_validate_aux:n { #6 }
       }
   }
 \cs_new:Npn \__fp_tuple_show_validate:w
-    #1 \s__fp_tuple \__fp_tuple_chk:w #2#3 ; #4 \s__fp_stop
+    #1 \s__fp_tuple \__fp_tuple_chk:w #2#3 \__fp_sep: #4 \s__fp_stop
   {
     \str_if_eq:nnF { #2 } {?}
-      { \s__fp_tuple \__fp_tuple_chk:w { \__fp_show_validate_aux:n { #2 } } ; }
+      {
+        \s__fp_tuple \__fp_tuple_chk:w { \__fp_show_validate_aux:n { #2 } }
+          \__fp_sep:
+      }
   }
 \cs_new:Npn \__fp_symbolic_show_validate:w
-    #1 \s__fp_symbolic \__fp_symbolic_chk:w #2 , #3#4 ; #5 \s__fp_stop
+    #1 \s__fp_symbolic \__fp_symbolic_chk:w #2 , #3#4 \__fp_sep: #5 \s__fp_stop
   {
     \str_if_eq:nnF { #2 } {?}
       {
         \s__fp_symbolic \__fp_symbolic_chk:w \exp_not:n { #2 } ,
-        { \__fp_show_validate_aux:n { #3 } };
+        { \__fp_show_validate_aux:n { #3 } }\__fp_sep:
         \__fp_show_validate_aux:n { #5 }
       }
   }
@@ -17684,7 +17736,7 @@
     \exp_after:wN \__fp_compare_return:w
     \exp:w \exp_end_continue_f:w \__fp_parse:n {#1}
   }
-\cs_new:Npn \__fp_compare_return:w #1#2#3;
+\cs_new:Npn \__fp_compare_return:w #1#2#3\__fp_sep:
   {
     \if_charcode:w 0
           \__fp_if_type_fp:NTwFw
@@ -17706,12 +17758,12 @@
       \prg_return_false:
     \fi:
   }
-\cs_new:Npn \__fp_compare_aux:wn #1; #2
+\cs_new:Npn \__fp_compare_aux:wn #1\__fp_sep: #2
   {
     \exp_after:wN \__fp_compare_back_any:ww
-      \exp:w \exp_end_continue_f:w \__fp_parse:n {#2} #1;
+      \exp:w \exp_end_continue_f:w \__fp_parse:n {#2} #1\__fp_sep:
   }
-\cs_new:Npn \__fp_compare_back:ww #1#2; #3#4;
+\cs_new:Npn \__fp_compare_back:ww #1#2\__fp_sep: #3#4\__fp_sep:
   {
     \cs:w
       __fp
@@ -17720,9 +17772,9 @@
       \__fp_type_from_scan:N #3
       :ww
     \cs_end:
-    #1#2; #3#4;
+    #1#2\__fp_sep: #3#4\__fp_sep:
   }
-\cs_new:Npn \__fp_compare_back_any:ww #1#2; #3
+\cs_new:Npn \__fp_compare_back_any:ww #1#2\__fp_sep: #3
   {
     \__fp_if_type_fp:NTwFw
       #1 { \__fp_if_type_fp:NTwFw #3 \use_i:nn \s__fp \use_ii:nn \s__fp_stop }
@@ -17737,11 +17789,11 @@
         :ww
       \cs_end:
     }
-    #1#2 ; #3
+    #1#2 \__fp_sep: #3
   }
 \cs_new:Npn \__fp_bcmp:ww
-    \s__fp \__fp_chk:w #1 #2 #3;
-    \s__fp \__fp_chk:w #4 #5 #6;
+    \s__fp \__fp_chk:w #1 #2 #3\__fp_sep:
+    \s__fp \__fp_chk:w #4 #5 #6\__fp_sep:
   {
     \int_value:w
       \if_meaning:w 3 #1 \exp_after:wN \__fp_compare_nan:w \fi:
@@ -17750,7 +17802,7 @@
       \if_meaning:w #2 #5
         \if_meaning:w #1 #4
           \if_meaning:w 1 #1
-            \__fp_compare_npos:nwnw #6; #3;
+            \__fp_compare_npos:nwnw #6\__fp_sep: #3\__fp_sep:
           \else:
             0
           \fi:
@@ -17767,11 +17819,11 @@
     \exp_stop_f:
   }
 \cs_new:Npn \__fp_compare_nan:w #1 \fi: \exp_stop_f: { 2 \exp_stop_f: }
-\cs_new:Npn \__fp_compare_back_tuple:ww #1; #2; { 2 }
-\cs_new:Npn \__fp_tuple_compare_back:ww #1; #2; { 2 }
+\cs_new:Npn \__fp_compare_back_tuple:ww #1\__fp_sep: #2\__fp_sep: { 2 }
+\cs_new:Npn \__fp_tuple_compare_back:ww #1\__fp_sep: #2\__fp_sep: { 2 }
 \cs_new:Npn \__fp_tuple_compare_back_tuple:ww
-  \s__fp_tuple \__fp_tuple_chk:w #1;
-  \s__fp_tuple \__fp_tuple_chk:w #2;
+  \s__fp_tuple \__fp_tuple_chk:w #1\__fp_sep:
+  \s__fp_tuple \__fp_tuple_chk:w #2\__fp_sep:
   {
     \int_compare:nNnTF { \__fp_array_count:n {#1} } =
       { \__fp_array_count:n {#2} }
@@ -17778,25 +17830,25 @@
       {
         \int_value:w 0
           \__fp_tuple_compare_back_loop:w
-              #1 { \s__fp \prg_break: } ; @
-              #2 { \s__fp \prg_break: } ;
+              #1 { \s__fp \prg_break: } \__fp_sep: @
+              #2 { \s__fp \prg_break: } \__fp_sep:
             \prg_break_point:
         \exp_stop_f:
       }
       { 2 }
   }
-\cs_new:Npn \__fp_tuple_compare_back_loop:w #1#2 ; #3 @ #4#5 ;
+\cs_new:Npn \__fp_tuple_compare_back_loop:w #1#2 \__fp_sep: #3 @ #4#5 \__fp_sep:
   {
     \use_none:n #1
     \use_none:n #4
     \if_int_compare:w
-        \__fp_compare_back_any:ww #1 #2 ; #4 #5 ; = \c_zero_int
+        \__fp_compare_back_any:ww #1 #2 \__fp_sep: #4 #5 \__fp_sep: = \c_zero_int
     \else:
       2 \exp_after:wN \prg_break:
     \fi:
     \__fp_tuple_compare_back_loop:w #3 @
   }
-\cs_new:Npn \__fp_compare_npos:nwnw #1#2; #3#4;
+\cs_new:Npn \__fp_compare_npos:nwnw #1#2\__fp_sep: #3#4\__fp_sep:
   {
     \if_int_compare:w #1 = #3 \exp_stop_f:
       \__fp_compare_significand:nnnnnnnn #2 #4
@@ -17880,20 +17932,22 @@
       \exp:w \exp_end_continue_f:w \__fp_parse:n {#3}
   }
 \cs_generate_variant:Nn \fp_step_function:nnnN { nnnc }
-\cs_new:Npn \__fp_step:wwwN #1#2; #3#4; #5#6; #7
+\cs_new:Npn \__fp_step:wwwN #1#2\__fp_sep: #3#4\__fp_sep: #5#6\__fp_sep: #7
   {
     \__fp_if_type_fp:NTwFw #1 { } \s__fp \prg_break: \s__fp_stop
     \__fp_if_type_fp:NTwFw #3 { } \s__fp \prg_break: \s__fp_stop
     \__fp_if_type_fp:NTwFw #5 { } \s__fp \prg_break: \s__fp_stop
-    \use_i:nnnn { \__fp_step_fp:wwwN #1#2; #3#4; #5#6; #7 }
+    \use_i:nnnn
+      { \__fp_step_fp:wwwN #1#2\__fp_sep: #3#4\__fp_sep: #5#6\__fp_sep: #7 }
     \prg_break_point:
     \use:n
       {
-        \__fp_error:nfff { step-tuple } { \fp_to_tl:n { #1#2 ; } }
-          { \fp_to_tl:n { #3#4 ; } } { \fp_to_tl:n { #5#6 ; } }
+        \__fp_error:nfff { step-tuple } { \fp_to_tl:n { #1#2 \__fp_sep: } }
+          { \fp_to_tl:n { #3#4 \__fp_sep: } } { \fp_to_tl:n { #5#6 \__fp_sep: } }
       }
   }
-\cs_new:Npn \__fp_step_fp:wwwN #1 ; \s__fp \__fp_chk:w #2#3#4 ; #5; #6
+\cs_new:Npn \__fp_step_fp:wwwN
+    #1 \__fp_sep: \s__fp \__fp_chk:w #2#3#4 \__fp_sep: #5\__fp_sep: #6
   {
     \token_if_eq_meaning:NNTF #2 1
       {
@@ -17909,11 +17963,15 @@
           }
           {
             \__fp_error:nnfn { bad-step } { }
-              { \fp_to_tl:n { \s__fp \__fp_chk:w #2#3#4 ; } } {#6}
+              { \fp_to_tl:n { \s__fp \__fp_chk:w #2#3#4 \__fp_sep: } } {#6}
           }
         \use_none:nnnnn
       }
-      { #1 ; } { \c_nan_fp } { \s__fp \__fp_chk:w #2#3#4 ; } { #5 ; } #6
+        { #1 \__fp_sep: }
+        { \c_nan_fp }
+        { \s__fp \__fp_chk:w #2#3#4 \__fp_sep: }
+        { #5 \__fp_sep: }
+        #6
   }
 \cs_new:Npn \__fp_step:NnnnnN #1#2#3#4#5#6
   {
@@ -17977,11 +18035,11 @@
       \exp_after:wN \__fp_minmax_loop:Nww \exp_after:wN -
     \fi:
     #2
-    \s__fp \__fp_chk:w 2 #1 \s__fp_exact ;
-    \s__fp \__fp_chk:w { 3 \__fp_minmax_break_o:w } ;
+    \s__fp \__fp_chk:w 2 #1 \s__fp_exact \__fp_sep:
+    \s__fp \__fp_chk:w { 3 \__fp_minmax_break_o:w } \__fp_sep:
   }
 \cs_new:Npn \__fp_minmax_loop:Nww
-    #1 \s__fp \__fp_chk:w #2#3; \s__fp \__fp_chk:w #4#5;
+    #1 \s__fp \__fp_chk:w #2#3\__fp_sep: \s__fp \__fp_chk:w #4#5\__fp_sep:
   {
     \if_meaning:w 3 #4
       \if_meaning:w 3 #2
@@ -17992,8 +18050,8 @@
     \else:
       \if_int_compare:w
           \__fp_compare_back:ww
-            \s__fp \__fp_chk:w #4#5;
-            \s__fp \__fp_chk:w #2#3;
+            \s__fp \__fp_chk:w #4#5\__fp_sep:
+            \s__fp \__fp_chk:w #2#3\__fp_sep:
           = #1 1 \exp_stop_f:
         \__fp_minmax_auxii:ww
       \else:
@@ -18001,16 +18059,17 @@
       \fi:
     \fi:
     \__fp_minmax_loop:Nww #1
-      \s__fp \__fp_chk:w #2#3;
-      \s__fp \__fp_chk:w #4#5;
+      \s__fp \__fp_chk:w #2#3\__fp_sep:
+      \s__fp \__fp_chk:w #4#5\__fp_sep:
   }
-\cs_new:Npn \__fp_minmax_auxi:ww  #1 \fi: \fi: #2 \s__fp #3 ; \s__fp #4;
-  { \fi: \fi: #2 \s__fp #3 ; }
-\cs_new:Npn \__fp_minmax_auxii:ww #1 \fi: \fi: #2 \s__fp #3 ;
+\cs_new:Npn \__fp_minmax_auxi:ww
+    #1 \fi: \fi: #2 \s__fp #3 \__fp_sep: \s__fp #4\__fp_sep:
+  { \fi: \fi: #2 \s__fp #3 \__fp_sep: }
+\cs_new:Npn \__fp_minmax_auxii:ww #1 \fi: \fi: #2 \s__fp #3 \__fp_sep:
   { \fi: \fi: #2 }
-\cs_new:Npn \__fp_minmax_break_o:w #1 \fi: \fi: #2 \s__fp #3; #4;
-  { \fi: \__fp_exp_after_o:w \s__fp #3; }
-\cs_new:Npn \__fp_not_o:w #1 \s__fp \__fp_chk:w #2#3; @
+\cs_new:Npn \__fp_minmax_break_o:w #1 \fi: \fi: #2 \s__fp #3\__fp_sep: #4\__fp_sep:
+  { \fi: \__fp_exp_after_o:w \s__fp #3\__fp_sep: }
+\cs_new:Npn \__fp_not_o:w #1 \s__fp \__fp_chk:w #2#3\__fp_sep: @
   {
     \if_meaning:w 0 #2
       \exp_after:wN \exp_after:wN \exp_after:wN \c_one_fp
@@ -18022,30 +18081,31 @@
 \group_begin:
   \char_set_catcode_letter:N &
   \char_set_catcode_letter:N |
-  \cs_new:Npn \__fp_&_o:ww #1 \s__fp \__fp_chk:w #2#3;
+  \cs_new:Npn \__fp_&_o:ww #1 \s__fp \__fp_chk:w #2#3\__fp_sep:
     {
       \if_meaning:w 0 #2 #1
-        \__fp_and_return:wNw \s__fp \__fp_chk:w #2#3;
+        \__fp_and_return:wNw \s__fp \__fp_chk:w #2#3\__fp_sep:
       \fi:
       \__fp_exp_after_o:w
     }
-  \cs_new:Npn \__fp_&_tuple_o:ww #1 \s__fp \__fp_chk:w #2#3;
+  \cs_new:Npn \__fp_&_tuple_o:ww #1 \s__fp \__fp_chk:w #2#3\__fp_sep:
     {
       \if_meaning:w 0 #2 #1
-        \__fp_and_return:wNw \s__fp \__fp_chk:w #2#3;
+        \__fp_and_return:wNw \s__fp \__fp_chk:w #2#3\__fp_sep:
       \fi:
       \__fp_exp_after_tuple_o:w
     }
-  \cs_new:Npn \__fp_tuple_&_o:ww #1; { \__fp_exp_after_o:w }
-  \cs_new:Npn \__fp_tuple_&_tuple_o:ww #1; { \__fp_exp_after_tuple_o:w }
+  \cs_new:Npn \__fp_tuple_&_o:ww #1\__fp_sep: { \__fp_exp_after_o:w }
+  \cs_new:Npn \__fp_tuple_&_tuple_o:ww #1\__fp_sep: { \__fp_exp_after_tuple_o:w }
   \cs_new:Npn \__fp_|_o:ww { \__fp_&_o:ww \else: }
   \cs_new:Npn \__fp_|_tuple_o:ww { \__fp_&_tuple_o:ww \else: }
-  \cs_new:Npn \__fp_tuple_|_o:ww #1; #2; { \__fp_exp_after_tuple_o:w #1; }
-  \cs_new:Npn \__fp_tuple_|_tuple_o:ww #1; #2;
-    { \__fp_exp_after_tuple_o:w #1; }
+  \cs_new:Npn \__fp_tuple_|_o:ww #1\__fp_sep: #2\__fp_sep:
+    { \__fp_exp_after_tuple_o:w #1\__fp_sep: }
+  \cs_new:Npn \__fp_tuple_|_tuple_o:ww #1\__fp_sep: #2\__fp_sep:
+    { \__fp_exp_after_tuple_o:w #1\__fp_sep: }
 \group_end:
-\cs_new:Npn \__fp_and_return:wNw #1; \fi: #2;
-  { \fi: \__fp_exp_after_o:w #1; }
+\cs_new:Npn \__fp_and_return:wNw #1\__fp_sep: \fi: #2\__fp_sep:
+  { \fi: \__fp_exp_after_o:w #1\__fp_sep: }
 \cs_new:Npn \__fp_ternary:NwwN #1 #2#3@ #4@ #5
   {
     \if_meaning:w \__fp_parse_infix_::N #5
@@ -18106,7 +18166,7 @@
     \exp_not:n { \s__fp \__fp_neg_sign:N }
   }
 \cs_new:cpn { __fp_+_o:ww }
-    \s__fp #1 \__fp_chk:w #2 #3 ; \s__fp \__fp_chk:w #4 #5
+    \s__fp #1 \__fp_chk:w #2 #3 \__fp_sep: \s__fp \__fp_chk:w #4 #5
   {
     \if_case:w
       \if_meaning:w #2 #4
@@ -18126,10 +18186,10 @@
     \else: \exp_after:wN \__fp_add_return_ii_o:Nww \int_value:w
     \fi:
     #1 #5
-    \s__fp \__fp_chk:w #2 #3 ;
+    \s__fp \__fp_chk:w #2 #3 \__fp_sep:
     \s__fp \__fp_chk:w #4 #5
   }
-\cs_new:Npn \__fp_add_return_ii_o:Nww #1 #2 ; \s__fp \__fp_chk:w #3 #4
+\cs_new:Npn \__fp_add_return_ii_o:Nww #1 #2 \__fp_sep: \s__fp \__fp_chk:w #3 #4
   { \__fp_exp_after_o:w \s__fp \__fp_chk:w #3 #1 }
 \cs_new:Npn \__fp_add_zeros_o:Nww #1 \s__fp \__fp_chk:w 0 #2
   {
@@ -18142,7 +18202,7 @@
     \s__fp \__fp_chk:w 0 #2
   }
 \cs_new:Npn \__fp_add_inf_o:Nww
-    #1 \s__fp \__fp_chk:w 2 #2 #3; \s__fp \__fp_chk:w 2 #4
+    #1 \s__fp \__fp_chk:w 2 #2 #3\__fp_sep: \s__fp \__fp_chk:w 2 #4
   {
     \if_meaning:w #1 #2
       \__fp_case_return_i_o:ww
@@ -18153,7 +18213,7 @@
             { \token_if_eq_meaning:NNTF #1 #4 + - }
         }
     \fi:
-    \s__fp \__fp_chk:w 2 #2 #3;
+    \s__fp \__fp_chk:w 2 #2 #3\__fp_sep:
     \s__fp \__fp_chk:w 2 #4
   }
 \cs_new:Npn \__fp_add_normal_o:Nww #1 \s__fp \__fp_chk:w 1 #2
@@ -18165,7 +18225,7 @@
     \fi:
     #2
   }
-\cs_new:Npn \__fp_add_npos_o:NnwNnw #1#2#3 ; \s__fp \__fp_chk:w 1 #4 #5
+\cs_new:Npn \__fp_add_npos_o:NnwNnw #1#2#3 \__fp_sep: \s__fp \__fp_chk:w 1 #4 #5
   {
     \exp_after:wN \__fp_sanitize:Nw
     \exp_after:wN #1
@@ -18177,9 +18237,9 @@
         #5
         \exp_after:wN \__fp_add_big_ii_o:wNww \int_value:w
       \fi:
-      \__fp_int_eval:w #5 - #2 ; #1 #3;
+      \__fp_int_eval:w #5 - #2 \__fp_sep: #1 #3\__fp_sep:
   }
-\cs_new:Npn \__fp_add_big_i_o:wNww #1; #2 #3; #4;
+\cs_new:Npn \__fp_add_big_i_o:wNww #1\__fp_sep: #2 #3\__fp_sep: #4\__fp_sep:
   {
     \__fp_decimate:nNnnnn {#1}
       \__fp_add_significand_o:NnnwnnnnN
@@ -18187,7 +18247,7 @@
     #3
     #2
   }
-\cs_new:Npn \__fp_add_big_ii_o:wNww #1; #2 #3; #4;
+\cs_new:Npn \__fp_add_big_ii_o:wNww #1\__fp_sep: #2 #3\__fp_sep: #4\__fp_sep:
   {
     \__fp_decimate:nNnnnn {#1}
       \__fp_add_significand_o:NnnwnnnnN
@@ -18195,12 +18255,12 @@
     #4
     #2
   }
-\cs_new:Npn \__fp_add_significand_o:NnnwnnnnN #1 #2#3 #4; #5#6#7#8
+\cs_new:Npn \__fp_add_significand_o:NnnwnnnnN #1 #2#3 #4\__fp_sep: #5#6#7#8
   {
     \exp_after:wN \__fp_add_significand_test_o:N
     \int_value:w \__fp_int_eval:w 1#5#6 + #2
       \exp_after:wN \__fp_add_significand_pack:NNNNNNN
-      \int_value:w \__fp_int_eval:w 1#7#8 + #3 ; #1
+      \int_value:w \__fp_int_eval:w 1#7#8 + #3 \__fp_sep: #1
   }
 \cs_new:Npn \__fp_add_significand_pack:NNNNNNN #1 #2#3#4#5#6#7
   {
@@ -18207,7 +18267,7 @@
     \if_meaning:w 2 #1
       + 1
     \fi:
-    ; #2 #3 #4 #5 #6 #7 ;
+    \__fp_sep: #2 #3 #4 #5 #6 #7 \__fp_sep:
   }
 \cs_new:Npn \__fp_add_significand_test_o:N #1
   {
@@ -18218,7 +18278,7 @@
     \fi:
   }
 \cs_new:Npn \__fp_add_significand_no_carry_o:wwwNN
-    #1; #2; #3#4 ; #5#6
+    #1\__fp_sep: #2\__fp_sep: #3#4 \__fp_sep: #5#6
   {
     \exp_after:wN \__fp_basics_pack_high:NNNNNw
     \int_value:w \__fp_int_eval:w 1 #1
@@ -18225,10 +18285,10 @@
       \exp_after:wN \__fp_basics_pack_low:NNNNNw
       \int_value:w \__fp_int_eval:w 1 #2 #3#4
         + \__fp_round:NNN #6 #4 #5
-        \exp_after:wN ;
+        \exp_after:wN \__fp_sep:
   }
 \cs_new:Npn \__fp_add_significand_carry_o:wwwNN
-    #1; #2; #3#4; #5#6
+    #1\__fp_sep: #2\__fp_sep: #3#4\__fp_sep: #5#6
   {
     + 1
     \exp_after:wN \__fp_basics_pack_weird_high:NNNNNNNNw
@@ -18238,12 +18298,14 @@
         \exp_after:wN \__fp_round:NNN
         \exp_after:wN #6
         \exp_after:wN #3
-        \int_value:w \__fp_round_digit:Nw #4 #5 ;
-        \exp_after:wN ;
+        \int_value:w \__fp_round_digit:Nw #4 #5 \__fp_sep:
+        \exp_after:wN \__fp_sep:
   }
-\cs_new:Npn \__fp_sub_npos_o:NnwNnw #1#2#3; \s__fp \__fp_chk:w 1 #4#5#6;
+\cs_new:Npn \__fp_sub_npos_o:NnwNnw
+    #1#2#3\__fp_sep: \s__fp \__fp_chk:w 1 #4#5#6\__fp_sep:
   {
-    \if_case:w \__fp_compare_npos:nwnw {#2} #3; {#5} #6; \exp_stop_f:
+    \if_case:w
+        \__fp_compare_npos:nwnw {#2} #3\__fp_sep: {#5} #6\__fp_sep: \exp_stop_f:
       \exp_after:wN \__fp_sub_eq_o:Nnwnw
     \or:
       \exp_after:wN \__fp_sub_npos_i_o:Nnwnw
@@ -18250,16 +18312,17 @@
     \else:
       \exp_after:wN \__fp_sub_npos_ii_o:Nnwnw
     \fi:
-    #1 {#2} #3; {#5} #6;
+    #1 {#2} #3\__fp_sep: {#5} #6\__fp_sep:
   }
-\cs_new:Npn \__fp_sub_eq_o:Nnwnw #1#2; #3; { \exp_after:wN \c_zero_fp }
-\cs_new:Npn \__fp_sub_npos_ii_o:Nnwnw #1 #2; #3;
+\cs_new:Npn \__fp_sub_eq_o:Nnwnw #1#2\__fp_sep: #3\__fp_sep:
+  { \exp_after:wN \c_zero_fp }
+\cs_new:Npn \__fp_sub_npos_ii_o:Nnwnw #1 #2\__fp_sep: #3\__fp_sep:
   {
     \exp_after:wN \__fp_sub_npos_i_o:Nnwnw
       \int_value:w \__fp_neg_sign:N #1
-      #3; #2;
+      #3\__fp_sep: #2\__fp_sep:
   }
-\cs_new:Npn \__fp_sub_npos_i_o:Nnwnw #1 #2#3; #4#5;
+\cs_new:Npn \__fp_sub_npos_i_o:Nnwnw #1 #2#3\__fp_sep: #4#5\__fp_sep:
   {
     \exp_after:wN \__fp_sanitize:Nw
     \exp_after:wN #1
@@ -18281,42 +18344,43 @@
     \exp_after:wN \__fp_sub_back_near_after:wNNNNw
     \int_value:w \__fp_int_eval:w 10#5#6 - #1#2 - 11
       \exp_after:wN \__fp_sub_back_near_pack:NNNNNNw
-      \int_value:w \__fp_int_eval:w 11#7#8 - #3#4 \exp_after:wN ;
+      \int_value:w \__fp_int_eval:w 11#7#8 - #3#4 \exp_after:wN \__fp_sep:
   }
-\cs_new:Npn \__fp_sub_back_near_pack:NNNNNNw #1#2#3#4#5#6#7 ;
-  { + #1#2 ; {#3#4#5#6} {#7} ; }
-\cs_new:Npn \__fp_sub_back_near_after:wNNNNw 10 #1#2#3#4 #5 ;
+\cs_new:Npn \__fp_sub_back_near_pack:NNNNNNw #1#2#3#4#5#6#7 \__fp_sep:
+  { + #1#2 \__fp_sep: {#3#4#5#6} {#7} \__fp_sep: }
+\cs_new:Npn \__fp_sub_back_near_after:wNNNNw 10 #1#2#3#4 #5 \__fp_sep:
   {
     \if_meaning:w 0 #1
       \exp_after:wN \__fp_sub_back_shift:wnnnn
     \fi:
-    ; {#1#2#3#4} {#5}
+    \__fp_sep: {#1#2#3#4} {#5}
   }
-\cs_new:Npn \__fp_sub_back_shift:wnnnn ; #1#2
+\cs_new:Npn \__fp_sub_back_shift:wnnnn \__fp_sep: #1#2
   {
     \exp_after:wN \__fp_sub_back_shift_ii:ww
-    \int_value:w #1 #2 0 ;
+    \int_value:w #1 #2 0 \__fp_sep:
   }
-\cs_new:Npn \__fp_sub_back_shift_ii:ww #1 0 ; #2#3 ;
+\cs_new:Npn \__fp_sub_back_shift_ii:ww #1 0 \__fp_sep: #2#3 \__fp_sep:
   {
     \if_meaning:w @ #1 @
       - 7
       - \exp_after:wN \use_i:nnn
         \exp_after:wN \__fp_sub_back_shift_iii:NNNNNNNNw
-        \int_value:w #2#3 0 ~ 123456789;
+        \int_value:w #2#3 0 ~ 123456789\__fp_sep:
     \else:
-      - \__fp_sub_back_shift_iii:NNNNNNNNw #1 123456789;
+      - \__fp_sub_back_shift_iii:NNNNNNNNw #1 123456789\__fp_sep:
     \fi:
     \exp_after:wN \__fp_pack_twice_four:wNNNNNNNN
     \exp_after:wN \__fp_pack_twice_four:wNNNNNNNN
     \exp_after:wN \__fp_sub_back_shift_iv:nnnnw
-    \exp_after:wN ;
+    \exp_after:wN \__fp_sep:
     \int_value:w
-    #1 ~ #2#3 0 ~ 0000 0000 0000 000 ;
+    #1 ~ #2#3 0 ~ 0000 0000 0000 000 \__fp_sep:
   }
-\cs_new:Npn \__fp_sub_back_shift_iii:NNNNNNNNw #1#2#3#4#5#6#7#8#9; {#8}
-\cs_new:Npn \__fp_sub_back_shift_iv:nnnnw #1 ; #2 ; { ; #1 ; }
-\cs_new:Npn \__fp_sub_back_far_o:NnnwnnnnN #1 #2#3 #4; #5#6#7#8
+\cs_new:Npn \__fp_sub_back_shift_iii:NNNNNNNNw #1#2#3#4#5#6#7#8#9\__fp_sep: {#8}
+\cs_new:Npn \__fp_sub_back_shift_iv:nnnnw #1 \__fp_sep: #2 \__fp_sep:
+  { \__fp_sep: #1 \__fp_sep: }
+\cs_new:Npn \__fp_sub_back_far_o:NnnwnnnnN #1 #2#3 #4\__fp_sep: #5#6#7#8
   {
     \if_case:w
       \if_int_compare:w 1 #2 = #5#6 \use_i:nnnn #7 \exp_stop_f:
@@ -18333,9 +18397,9 @@
     \or:   \exp_after:wN \__fp_sub_back_very_far_o:wwwwNN
     \else: \exp_after:wN \__fp_sub_back_not_far_o:wwwwNN
     \fi:
-    #2 ~ #3 ; #5 #6 ~ #7 #8 ; #1
+    #2 ~ #3 \__fp_sep: #5 #6 ~ #7 #8 \__fp_sep: #1
   }
-\cs_new:Npn \__fp_sub_back_quite_far_o:wwNN #1; #2; #3#4
+\cs_new:Npn \__fp_sub_back_quite_far_o:wwNN #1\__fp_sep: #2\__fp_sep: #3#4
   {
     \exp_after:wN \__fp_sub_back_quite_far_ii:NN
     \exp_after:wN #3
@@ -18348,10 +18412,10 @@
     \else:
       \exp_after:wN \use_ii:nn
     \fi:
-      { ; {1000} {0000} {0000} {0000} ; }
-      { - 1 ; {9999} {9999} {9999} {9999} ; }
+      { \__fp_sep: {1000} {0000} {0000} {0000} \__fp_sep: }
+      { - 1 \__fp_sep: {9999} {9999} {9999} {9999} \__fp_sep: }
   }
-\cs_new:Npn \__fp_sub_back_not_far_o:wwwwNN #1 ~ #2; #3 ~ #4; #5#6
+\cs_new:Npn \__fp_sub_back_not_far_o:wwwwNN #1 ~ #2\__fp_sep: #3 ~ #4\__fp_sep: #5#6
   {
     - 1
     \exp_after:wN \__fp_sub_back_near_after:wNNNNw
@@ -18361,7 +18425,7 @@
         - \exp_after:wN \__fp_round_neg:NNN
           \exp_after:wN #6
           \use_none:nnnnnnn #2 #5
-        \exp_after:wN ;
+        \exp_after:wN \__fp_sep:
   }
 \cs_new:Npn \__fp_sub_back_very_far_o:wwwwNN #1#2#3#4#5#6#7
   {
@@ -18368,9 +18432,10 @@
     \__fp_pack_eight:wNNNNNNNN
     \__fp_sub_back_very_far_ii_o:nnNwwNN
     { 0 #1#2#3 #4#5#6#7 }
-    ;
+    \__fp_sep:
   }
-\cs_new:Npn \__fp_sub_back_very_far_ii_o:nnNwwNN #1#2 ; #3 ; #4 ~ #5; #6#7
+\cs_new:Npn \__fp_sub_back_very_far_ii_o:nnNwwNN
+    #1#2 \__fp_sep: #3 \__fp_sep: #4 ~ #5\__fp_sep: #6#7
   {
     \exp_after:wN \__fp_basics_pack_high:NNNNNw
     \int_value:w \__fp_int_eval:w 1#4 - #1 - 1
@@ -18381,8 +18446,8 @@
           \int_value:w
             \if_int_odd:w \__fp_int_eval:w #5 - #2 \__fp_int_eval_end:
               1 \else: 2 \fi:
-          \int_value:w \__fp_round_digit:Nw #3 #6 ;
-      \exp_after:wN ;
+          \int_value:w \__fp_round_digit:Nw #3 #6 \__fp_sep:
+      \exp_after:wN \__fp_sep:
   }
 \cs_new:cpn { __fp_*_o:ww }
   {
@@ -18393,7 +18458,7 @@
       { }
   }
 \cs_new:Npn \__fp_mul_cases_o:NnNnww
-    #1#2#3#4 \s__fp \__fp_chk:w #5#6#7; \s__fp \__fp_chk:w #8#9
+    #1#2#3#4 \s__fp \__fp_chk:w #5#6#7\__fp_sep: \s__fp \__fp_chk:w #8#9
   {
     \if_case:w \__fp_int_eval:w
                  \if_int_compare:w #5 #8 = 11 ~
@@ -18427,11 +18492,12 @@
     \or: \__fp_case_return_o:Nww \c_minus_inf_fp
     #4
     \fi:
-    \s__fp \__fp_chk:w #5 #6 #7;
+    \s__fp \__fp_chk:w #5 #6 #7\__fp_sep:
     \s__fp \__fp_chk:w #8 #9
   }
 \cs_new:Npn \__fp_mul_npos_o:Nww
-    #1 \s__fp \__fp_chk:w #2 #3 #4 #5 ; \s__fp \__fp_chk:w #6 #7 #8 #9 ;
+    #1 \s__fp \__fp_chk:w #2 #3 #4 #5 \__fp_sep:
+       \s__fp \__fp_chk:w #6 #7 #8 #9 \__fp_sep:
   {
     \exp_after:wN \__fp_sanitize:Nw
     \exp_after:wN #1
@@ -18457,13 +18523,13 @@
               \exp_after:wN \__fp_mul_significand_drop:NNNNNw
               \int_value:w \__fp_int_eval:w 99990000 + #3*#9 + #4*#8 +
                 \exp_after:wN \__fp_mul_significand_drop:NNNNNw
-                \int_value:w \__fp_int_eval:w 100000000 + #4*#9 ;
-    ; \exp_after:wN ;
+                \int_value:w \__fp_int_eval:w 100000000 + #4*#9 \__fp_sep:
+    \__fp_sep: \exp_after:wN \__fp_sep:
   }
-\cs_new:Npn \__fp_mul_significand_drop:NNNNNw #1#2#3#4#5 #6;
-  { #1#2#3#4#5 ; + #6 }
-\cs_new:Npn \__fp_mul_significand_keep:NNNNNw #1#2#3#4#5 #6;
-  { #1#2#3#4#5 ; #6 ; }
+\cs_new:Npn \__fp_mul_significand_drop:NNNNNw #1#2#3#4#5 #6\__fp_sep:
+  { #1#2#3#4#5 \__fp_sep: + #6 }
+\cs_new:Npn \__fp_mul_significand_keep:NNNNNw #1#2#3#4#5 #6\__fp_sep:
+  { #1#2#3#4#5 \__fp_sep: #6 \__fp_sep: }
 \cs_new:Npn \__fp_mul_significand_test_f:NNN #1 #2 #3
   {
     \if_meaning:w 0 #3
@@ -18473,7 +18539,8 @@
     \fi:
     #1 #3
   }
-\cs_new:Npn \__fp_mul_significand_large_f:NwwNNNN #1 #2; #3; #4#5#6#7; +
+\cs_new:Npn \__fp_mul_significand_large_f:NwwNNNN
+    #1 #2\__fp_sep: #3\__fp_sep: #4#5#6#7\__fp_sep: +
   {
     \exp_after:wN \__fp_basics_pack_high:NNNNNw
     \int_value:w \__fp_int_eval:w 1#2
@@ -18484,7 +18551,8 @@
           \exp_after:wN #7
           \int_value:w \__fp_round_digit:Nw
   }
-\cs_new:Npn \__fp_mul_significand_small_f:NNwwwN #1 #2#3; #4#5; #6; + #7
+\cs_new:Npn \__fp_mul_significand_small_f:NNwwwN
+    #1 #2#3\__fp_sep: #4#5\__fp_sep: #6\__fp_sep: + #7
   {
     - 1
     \exp_after:wN \__fp_basics_pack_high:NNNNNw
@@ -18512,7 +18580,8 @@
       }
   }
 \cs_new:Npn \__fp_div_npos_o:Nww
-    #1 \s__fp \__fp_chk:w 1 #2 #3 #4 ; \s__fp \__fp_chk:w 1 #5 #6 #7#8#9;
+    #1 \s__fp \__fp_chk:w 1 #2 #3 #4 \__fp_sep:
+       \s__fp \__fp_chk:w 1 #5 #6 #7#8#9\__fp_sep:
   {
     \exp_after:wN \__fp_sanitize:Nw
     \exp_after:wN #1
@@ -18519,18 +18588,18 @@
     \int_value:w \__fp_int_eval:w
       #3 - #6
       \exp_after:wN \__fp_div_significand_i_o:wnnw
-        \int_value:w \__fp_int_eval:w #7 \use_i:nnnn #8 + 1 ;
+        \int_value:w \__fp_int_eval:w #7 \use_i:nnnn #8 + 1 \__fp_sep:
         #4
-        {#7}{#8}#9 ;
+        {#7}{#8}#9 \__fp_sep:
         #1
   }
-\cs_new:Npn \__fp_div_significand_i_o:wnnw #1 ; #2#3 #4 ;
+\cs_new:Npn \__fp_div_significand_i_o:wnnw #1 \__fp_sep: #2#3 #4 \__fp_sep:
   {
     \exp_after:wN \__fp_div_significand_test_o:w
     \int_value:w \__fp_int_eval:w
       \exp_after:wN \__fp_div_significand_calc:wwnnnnnnn
-      \int_value:w \__fp_int_eval:w 999999 + #2 #3 0 / #1 ;
-        #2 #3 ;
+      \int_value:w \__fp_int_eval:w 999999 + #2 #3 0 / #1 \__fp_sep:
+        #2 #3 \__fp_sep:
         #4
         { \exp_after:wN \__fp_div_significand_ii:wwn \int_value:w #1 }
         { \exp_after:wN \__fp_div_significand_ii:wwn \int_value:w #1 }
@@ -18546,10 +18615,10 @@
     \fi:
   }
 \cs_new:Npn \__fp_div_significand_calc_i:wwnnnnnnn
-  #1; #2;#3#4 #5#6#7#8 #9
+  #1\__fp_sep: #2\__fp_sep:#3#4 #5#6#7#8 #9
   {
     1 1 #1
-    #9 \exp_after:wN ;
+    #9 \exp_after:wN \__fp_sep:
     \int_value:w \__fp_int_eval:w \c__fp_Bigg_leading_shift_int
       + #2 - #1 * #5 - #5#60
       \exp_after:wN \__fp_pack_Bigg:NNNNNNw
@@ -18560,14 +18629,14 @@
           + #4 - #1 * #7 - #80
           \exp_after:wN \__fp_pack_Bigg:NNNNNNw
           \int_value:w \__fp_int_eval:w \c__fp_Bigg_trailing_shift_int
-            - #1 * #8 ;
+            - #1 * #8 \__fp_sep:
     {#5}{#6}{#7}{#8}
   }
 \cs_new:Npn \__fp_div_significand_calc_ii:wwnnnnnnn
-  #1; #2;#3#4 #5#6#7#8 #9
+  #1\__fp_sep: #2\__fp_sep:#3#4 #5#6#7#8 #9
   {
     1 0 #1
-    #9 \exp_after:wN ;
+    #9 \exp_after:wN \__fp_sep:
     \int_value:w \__fp_int_eval:w \c__fp_Bigg_leading_shift_int
       + #2 - #1 * #5
       \exp_after:wN \__fp_pack_Bigg:NNNNNNw
@@ -18578,25 +18647,27 @@
           + #4 - #1 * #7
           \exp_after:wN \__fp_pack_Bigg:NNNNNNw
           \int_value:w \__fp_int_eval:w \c__fp_Bigg_trailing_shift_int
-            - #1 * #8 ;
+            - #1 * #8 \__fp_sep:
     {#5}{#6}{#7}{#8}
   }
-\cs_new:Npn \__fp_div_significand_ii:wwn #1; #2;#3
+\cs_new:Npn \__fp_div_significand_ii:wwn #1\__fp_sep: #2\__fp_sep:#3
   {
     \exp_after:wN \__fp_div_significand_pack:NNN
     \int_value:w \__fp_int_eval:w
       \exp_after:wN \__fp_div_significand_calc:wwnnnnnnn
-      \int_value:w \__fp_int_eval:w 999999 + #2 #3 0 / #1 ; #2 #3 ;
+      \int_value:w \__fp_int_eval:w
+        999999 + #2 #3 0 / #1 \__fp_sep: #2 #3 \__fp_sep:
   }
-\cs_new:Npn \__fp_div_significand_iii:wwnnnnn #1; #2;#3#4#5 #6#7
+\cs_new:Npn \__fp_div_significand_iii:wwnnnnn #1\__fp_sep: #2\__fp_sep:#3#4#5 #6#7
   {
     0
     \exp_after:wN \__fp_div_significand_iv:wwnnnnnnn
-    \int_value:w \__fp_int_eval:w ( 2 * #2 #3) / #6 #7 ; % <- P
-      #2 ; {#3} {#4} {#5}
+    \int_value:w \__fp_int_eval:w ( 2 * #2 #3) / #6 #7 \__fp_sep: % <- P
+      #2 \__fp_sep: {#3} {#4} {#5}
       {#6} {#7}
   }
-\cs_new:Npn \__fp_div_significand_iv:wwnnnnnnn #1; #2;#3#4#5 #6#7#8#9
+\cs_new:Npn \__fp_div_significand_iv:wwnnnnnnn
+    #1\__fp_sep: #2\__fp_sep:#3#4#5 #6#7#8#9
   {
     + 5 * #1
     \exp_after:wN \__fp_div_significand_vi:Nw
@@ -18604,10 +18675,10 @@
       \exp_after:wN \__fp_div_significand_v:NN
       \int_value:w \__fp_int_eval:w 499950 + 2*#4 - #1*#8 +
         \exp_after:wN \__fp_div_significand_v:NN
-        \int_value:w \__fp_int_eval:w 500000 + 2*#5 - #1*#9 ;
+        \int_value:w \__fp_int_eval:w 500000 + 2*#5 - #1*#9 \__fp_sep:
   }
 \cs_new:Npn \__fp_div_significand_v:NN #1#2 { #1#2 \__fp_int_eval_end: + }
-\cs_new:Npn \__fp_div_significand_vi:Nw #1#2;
+\cs_new:Npn \__fp_div_significand_vi:Nw #1#2\__fp_sep:
   {
     \if_meaning:w 0 #1
       \if_int_compare:w \__fp_int_eval:w #2 > 0 + 1 \fi:
@@ -18614,9 +18685,9 @@
     \else:
       \if_meaning:w - #1 - \else: + \fi: 1
     \fi:
-    ;
+    \__fp_sep:
   }
-\cs_new:Npn \__fp_div_significand_pack:NNN 1 #1 #2 { + #1 #2 ; }
+\cs_new:Npn \__fp_div_significand_pack:NNN 1 #1 #2 { + #1 #2 \__fp_sep: }
 \cs_new:Npn \__fp_div_significand_test_o:w 10 #1
   {
     \if_meaning:w 0 #1
@@ -18627,7 +18698,7 @@
     #1
   }
 \cs_new:Npn \__fp_div_significand_small_o:wwwNNNNwN
-    0 #1; #2; #3; #4#5#6#7#8; #9
+    0 #1\__fp_sep: #2\__fp_sep: #3\__fp_sep: #4#5#6#7#8\__fp_sep: #9
   {
     \exp_after:wN \__fp_basics_pack_high:NNNNNw
     \int_value:w \__fp_int_eval:w 1 #1#2
@@ -18634,10 +18705,10 @@
       \exp_after:wN \__fp_basics_pack_low:NNNNNw
       \int_value:w \__fp_int_eval:w 1 #3#4#5#6#7
         + \__fp_round:NNN #9 #7 #8
-        \exp_after:wN ;
+        \exp_after:wN \__fp_sep:
   }
 \cs_new:Npn \__fp_div_significand_large_o:wwwNNNNwN
-    #1; #2; #3; #4#5#6#7#8; #9
+    #1\__fp_sep: #2\__fp_sep: #3\__fp_sep: #4#5#6#7#8\__fp_sep: #9
   {
     + 1
     \exp_after:wN \__fp_basics_pack_weird_high:NNNNNNNNw
@@ -18647,10 +18718,10 @@
         \exp_after:wN \__fp_round:NNN
         \exp_after:wN #9
         \exp_after:wN #6
-        \int_value:w \__fp_round_digit:Nw #7 #8 ;
-      \exp_after:wN ;
+        \int_value:w \__fp_round_digit:Nw #7 #8 \__fp_sep:
+      \exp_after:wN \__fp_sep:
   }
-\cs_new:Npn \__fp_sqrt_o:w #1 \s__fp \__fp_chk:w #2#3#4; @
+\cs_new:Npn \__fp_sqrt_o:w #1 \s__fp \__fp_chk:w #2#3#4\__fp_sep: @
   {
     \if_meaning:w 0 #2 \__fp_case_return_same_o:w \fi:
     \if_meaning:w 2 #3
@@ -18658,9 +18729,9 @@
     \fi:
     \if_meaning:w 1 #2 \else: \__fp_case_return_same_o:w \fi:
     \__fp_sqrt_npos_o:w
-    \s__fp \__fp_chk:w #2 #3 #4;
+    \s__fp \__fp_chk:w #2 #3 #4\__fp_sep:
   }
-\cs_new:Npn \__fp_sqrt_npos_o:w \s__fp \__fp_chk:w 1 0 #1#2#3#4#5;
+\cs_new:Npn \__fp_sqrt_npos_o:w \s__fp \__fp_chk:w 1 0 #1#2#3#4#5\__fp_sep:
   {
     \exp_after:wN \__fp_sanitize:Nw
     \exp_after:wN 0
@@ -18669,19 +18740,19 @@
         \exp_after:wN \__fp_sqrt_npos_auxi_o:wwnnN
       \fi:
       #1 / 2
-      \__fp_sqrt_Newton_o:wwn 56234133; 0; {#2#3} {#4#5} 0
+      \__fp_sqrt_Newton_o:wwn 56234133\__fp_sep: 0\__fp_sep: {#2#3} {#4#5} 0
   }
-\cs_new:Npn \__fp_sqrt_npos_auxi_o:wwnnN #1 / 2 #2; 0; #3#4#5
+\cs_new:Npn \__fp_sqrt_npos_auxi_o:wwnnN #1 / 2 #2\__fp_sep: 0\__fp_sep: #3#4#5
   {
     ( #1 + 1 ) / 2
     \__fp_pack_eight:wNNNNNNNN
     \__fp_sqrt_npos_auxii_o:wNNNNNNNN
-    ;
+    \__fp_sep:
     0 #3 #4
   }
-\cs_new:Npn \__fp_sqrt_npos_auxii_o:wNNNNNNNN #1; #2#3#4#5#6#7#8#9
-  { \__fp_sqrt_Newton_o:wwn 17782794; 0; {#1} {#2#3#4#5#6#7#8#9} }
-\cs_new:Npn \__fp_sqrt_Newton_o:wwn #1; #2; #3
+\cs_new:Npn \__fp_sqrt_npos_auxii_o:wNNNNNNNN #1\__fp_sep: #2#3#4#5#6#7#8#9
+  { \__fp_sqrt_Newton_o:wwn 17782794\__fp_sep: 0\__fp_sep: {#1} {#2#3#4#5#6#7#8#9} }
+\cs_new:Npn \__fp_sqrt_Newton_o:wwn #1\__fp_sep: #2\__fp_sep: #3
   {
     \if_int_compare:w #1 = #2 \exp_stop_f:
       \exp_after:wN \__fp_sqrt_auxi_o:NNNNwnnN
@@ -18689,10 +18760,10 @@
         \exp_after:wN \__fp_use_none_until_s:w
     \fi:
     \exp_after:wN \__fp_sqrt_Newton_o:wwn
-    \int_value:w \__fp_int_eval:w (#1 + #3 * 1 0000 0000 / #1) / 2 ;
-    #1; {#3}
+    \int_value:w \__fp_int_eval:w (#1 + #3 * 1 0000 0000 / #1) / 2 \__fp_sep:
+    #1\__fp_sep: {#3}
   }
-\cs_new:Npn \__fp_sqrt_auxi_o:NNNNwnnN 1 #1#2#3#4#5;
+\cs_new:Npn \__fp_sqrt_auxi_o:NNNNwnnN 1 #1#2#3#4#5\__fp_sep:
   {
     \__fp_sqrt_auxii_o:NnnnnnnnN
       \__fp_sqrt_auxiii_o:wnnnnnnnn
@@ -18728,13 +18799,13 @@
                     \exp_after:wN \__fp_pack_big:NNNNNNw
                     \int_value:w \__fp_int_eval:w
                       \c__fp_big_trailing_shift_int
-                      - #6 * #6 ;
+                      - #6 * #6 \__fp_sep:
     % (
-    - 257 ) * 5000 0000 / (#2#3 + 1) + 10 0000 0000 ;
+    - 257 ) * 5000 0000 / (#2#3 + 1) + 10 0000 0000 \__fp_sep:
     {#2}{#3}{#4}{#5}{#6} {#7}{#8}#9
   }
 \cs_new:Npn \__fp_sqrt_auxiii_o:wnnnnnnnn
-    #1; #2#3#4#5#6#7#8#9
+    #1\__fp_sep: #2#3#4#5#6#7#8#9
   {
     \if_int_compare:w #1 > \c_one_int
       \exp_after:wN \__fp_sqrt_auxiv_o:NNNNNw
@@ -18754,13 +18825,13 @@
       \fi:
     \fi:
   }
-\cs_new:Npn \__fp_sqrt_auxiv_o:NNNNNw 1#1#2#3#4#5#6;
+\cs_new:Npn \__fp_sqrt_auxiv_o:NNNNNw 1#1#2#3#4#5#6\__fp_sep:
   { \__fp_sqrt_auxviii_o:nnnnnnn {#1#2#3#4#5#6} {00000000} }
-\cs_new:Npn \__fp_sqrt_auxv_o:NNNNNw 1#1#2#3#4#5#6;
+\cs_new:Npn \__fp_sqrt_auxv_o:NNNNNw 1#1#2#3#4#5#6\__fp_sep:
   { \__fp_sqrt_auxviii_o:nnnnnnn {000#1#2#3#4#5} {#60000} }
-\cs_new:Npn \__fp_sqrt_auxvi_o:NNNNNw 1#1#2#3#4#5#6;
+\cs_new:Npn \__fp_sqrt_auxvi_o:NNNNNw 1#1#2#3#4#5#6\__fp_sep:
   { \__fp_sqrt_auxviii_o:nnnnnnn {0000000#1} {#2#3#4#5#6} }
-\cs_new:Npn \__fp_sqrt_auxvii_o:NNNNNw 1#1#2#3#4#5#6;
+\cs_new:Npn \__fp_sqrt_auxvii_o:NNNNNw 1#1#2#3#4#5#6\__fp_sep:
   {
     \if_int_compare:w #1#2 = \c_zero_int
       \exp_after:wN \__fp_sqrt_auxx_o:Nnnnnnnn
@@ -18774,9 +18845,9 @@
       \exp_after:wN \__fp_basics_pack_low:NNNNNw
       \int_value:w \__fp_int_eval:w #1 + 1#4#5
         \exp_after:wN \__fp_basics_pack_low:NNNNNw
-        \int_value:w \__fp_int_eval:w #2 + 1#6#7 ;
+        \int_value:w \__fp_int_eval:w #2 + 1#6#7 \__fp_sep:
   }
-\cs_new:Npn \__fp_sqrt_auxix_o:wnwnw #1; #2#3; #4#5;
+\cs_new:Npn \__fp_sqrt_auxix_o:wnwnw #1\__fp_sep: #2#3\__fp_sep: #4#5\__fp_sep:
   {
     \__fp_sqrt_auxii_o:NnnnnnnnN
       \__fp_sqrt_auxiii_o:wnnnnnnnn {#1}{#2}{#3}{#4}{#5}
@@ -18785,10 +18856,10 @@
   {
     \exp_after:wN \__fp_sqrt_auxxi_o:wwnnN
     \int_value:w \__fp_int_eval:w
-      (#8 + 2499) / 5000 * 5000 ;
-      {#4} {#5} {#6} {#7} ;
+      (#8 + 2499) / 5000 * 5000 \__fp_sep:
+      {#4} {#5} {#6} {#7} \__fp_sep:
   }
-\cs_new:Npn \__fp_sqrt_auxxi_o:wwnnN #1; #2; #3#4#5
+\cs_new:Npn \__fp_sqrt_auxxi_o:wwnnN #1\__fp_sep: #2\__fp_sep: #3#4#5
   {
     \__fp_sqrt_auxii_o:NnnnnnnnN
       \__fp_sqrt_auxxii_o:nnnnnnnnw
@@ -18795,7 +18866,7 @@
       #2 {#1}
       {#3} { #4 + 1 } #5
   }
-\cs_new:Npn \__fp_sqrt_auxxii_o:nnnnnnnnw 0; #1#2#3#4#5#6#7#8 #9;
+\cs_new:Npn \__fp_sqrt_auxxii_o:nnnnnnnnw 0\__fp_sep: #1#2#3#4#5#6#7#8 #9\__fp_sep:
   {
     \if_int_compare:w #1#2 > \c_zero_int
       \if_int_compare:w #1#2 = \c_one_int
@@ -18813,14 +18884,14 @@
       \exp_after:wN \__fp_sqrt_auxxiv_o:wnnnnnnnN
       \int_value:w 10000
     \fi:
-    ;
+    \__fp_sep:
   }
-\cs_new:Npn \__fp_sqrt_auxxiii_o:w \fi: \fi: \fi: \fi: #1 \fi: ;
+\cs_new:Npn \__fp_sqrt_auxxiii_o:w \fi: \fi: \fi: \fi: #1 \fi: \__fp_sep:
   {
     \fi: \fi: \fi: \fi: \fi:
-    \__fp_sqrt_auxxiv_o:wnnnnnnnN 9999 ;
+    \__fp_sqrt_auxxiv_o:wnnnnnnnN 9999 \__fp_sep:
   }
-\cs_new:Npn \__fp_sqrt_auxxiv_o:wnnnnnnnN #1; #2#3#4#5#6 #7#8#9
+\cs_new:Npn \__fp_sqrt_auxxiv_o:wnnnnnnnN #1\__fp_sep: #2#3#4#5#6 #7#8#9
   {
     \exp_after:wN \__fp_basics_pack_high:NNNNNw
     \int_value:w \__fp_int_eval:w 1 0000 0000 + #2#3
@@ -18834,10 +18905,10 @@
           \int_value:w
             \exp_after:wN \use_i:nn
             \exp_after:wN \__fp_round_digit:Nw
-            \int_value:w \__fp_int_eval:w #6 + 19999 - #1 ;
-    \exp_after:wN ;
+            \int_value:w \__fp_int_eval:w #6 + 19999 - #1 \__fp_sep:
+    \exp_after:wN \__fp_sep:
   }
-\cs_new:Npn \__fp_logb_o:w ? \s__fp \__fp_chk:w #1#2; @
+\cs_new:Npn \__fp_logb_o:w ? \s__fp \__fp_chk:w #1#2\__fp_sep: @
   {
     \if_case:w #1 \exp_stop_f:
            \__fp_case_use:nw
@@ -18846,14 +18917,14 @@
     \or:   \__fp_case_return_o:Nw \c_inf_fp
     \else: \__fp_case_return_same_o:w
     \fi:
-    \s__fp \__fp_chk:w #1 #2;
+    \s__fp \__fp_chk:w #1 #2\__fp_sep:
   }
-\cs_new:Npn \__fp_logb_aux_o:w \s__fp \__fp_chk:w #1 #2 #3 #4 ;
+\cs_new:Npn \__fp_logb_aux_o:w \s__fp \__fp_chk:w #1 #2 #3 #4 \__fp_sep:
   {
     \exp_after:wN \__fp_parse:n \exp_after:wN
       { \int_value:w \int_eval:w #3 - 1 \exp_after:wN }
   }
-\cs_new:Npn \__fp_sign_o:w ? \s__fp \__fp_chk:w #1#2; @
+\cs_new:Npn \__fp_sign_o:w ? \s__fp \__fp_chk:w #1#2\__fp_sep: @
   {
     \if_case:w #1 \exp_stop_f:
            \__fp_case_return_same_o:w
@@ -18861,11 +18932,11 @@
     \or:   \exp_after:wN \__fp_sign_aux_o:w
     \else: \__fp_case_return_same_o:w
     \fi:
-    \s__fp \__fp_chk:w #1 #2;
+    \s__fp \__fp_chk:w #1 #2\__fp_sep:
   }
-\cs_new:Npn \__fp_sign_aux_o:w \s__fp \__fp_chk:w #1 #2 #3 ;
+\cs_new:Npn \__fp_sign_aux_o:w \s__fp \__fp_chk:w #1 #2 #3 \__fp_sep:
   { \exp_after:wN \__fp_set_sign_o:w \exp_after:wN #2 \c_one_fp @ }
-\cs_new:Npn \__fp_set_sign_o:w #1 \s__fp \__fp_chk:w #2#3#4; @
+\cs_new:Npn \__fp_set_sign_o:w #1 \s__fp \__fp_chk:w #2#3#4\__fp_sep: @
   {
     \exp_after:wN \__fp_exp_after_o:w
     \exp_after:wN \s__fp
@@ -18873,7 +18944,7 @@
     \exp_after:wN #2
     \int_value:w
       \if_case:w #3 \exp_stop_f: #1 \or: 1 \or: 0 \fi: \exp_stop_f:
-    #4;
+    #4\__fp_sep:
   }
 \cs_new:Npn \__fp_tuple_set_sign_o:w #1#2 @
   {
@@ -18885,30 +18956,36 @@
   }
 \cs_new:Npn \__fp_tuple_set_sign_aux_o:Nnw #1#2
   { \__fp_tuple_map_o:nw \__fp_tuple_set_sign_aux_o:w }
-\cs_new:Npn \__fp_tuple_set_sign_aux_o:w #1#2 ;
+\cs_new:Npn \__fp_tuple_set_sign_aux_o:w #1#2 \__fp_sep:
   {
     \__fp_change_func_type:NNN #1 \__fp_set_sign_o:w
       \__fp_parse_apply_unary_error:NNw
-    2 #1 #2 ; @
+    2 #1 #2 \__fp_sep: @
   }
-\cs_new:cpn { __fp_*_tuple_o:ww } #1 ;
-  { \__fp_tuple_map_o:nw { \__fp_binary_type_o:Nww * #1 ; } }
-\cs_new:cpn { __fp_tuple_*_o:ww } #1 ; #2 ;
-  { \__fp_tuple_map_o:nw { \__fp_binary_rev_type_o:Nww * #2 ; } #1 ; }
-\cs_new:cpn { __fp_tuple_/_o:ww } #1 ; #2 ;
-  { \__fp_tuple_map_o:nw { \__fp_binary_rev_type_o:Nww / #2 ; } #1 ; }
+\cs_new:cpn { __fp_*_tuple_o:ww } #1 \__fp_sep:
+  { \__fp_tuple_map_o:nw { \__fp_binary_type_o:Nww * #1 \__fp_sep: } }
+\cs_new:cpn { __fp_tuple_*_o:ww } #1 \__fp_sep: #2 \__fp_sep:
+  {
+    \__fp_tuple_map_o:nw { \__fp_binary_rev_type_o:Nww * #2 \__fp_sep: }
+      #1 \__fp_sep:
+  }
+\cs_new:cpn { __fp_tuple_/_o:ww } #1 \__fp_sep: #2 \__fp_sep:
+  {
+    \__fp_tuple_map_o:nw { \__fp_binary_rev_type_o:Nww / #2 \__fp_sep: }
+      #1 \__fp_sep:
+  }
 \cs_set_protected:Npn \__fp_tmp:w #1
   {
     \cs_new:cpn { __fp_tuple_#1_tuple_o:ww }
-        \s__fp_tuple \__fp_tuple_chk:w ##1 ;
-        \s__fp_tuple \__fp_tuple_chk:w ##2 ;
+        \s__fp_tuple \__fp_tuple_chk:w ##1 \__fp_sep:
+        \s__fp_tuple \__fp_tuple_chk:w ##2 \__fp_sep:
       {
         \int_compare:nNnTF
           { \__fp_array_count:n {##1} } = { \__fp_array_count:n {##2} }
           { \__fp_tuple_mapthread_o:nww { \__fp_binary_type_o:Nww #1 } }
           { \__fp_invalid_operation_o:nww #1 }
-        \s__fp_tuple \__fp_tuple_chk:w {##1} ;
-        \s__fp_tuple \__fp_tuple_chk:w {##2} ;
+        \s__fp_tuple \__fp_tuple_chk:w {##1} \__fp_sep:
+        \s__fp_tuple \__fp_tuple_chk:w {##2} \__fp_sep:
       }
   }
 \__fp_tmp:w +
@@ -18915,23 +18992,24 @@
 \__fp_tmp:w -
 %% File: l3fp-extended.dtx
 \tl_const:Nn \c__fp_one_fixed_tl
-  { {10000} {0000} {0000} {0000} {0000} {0000} ; }
-\cs_new:Npn \__fp_fixed_continue:wn #1; #2 { #2 #1; }
-\cs_new:Npn \__fp_fixed_add_one:wN #1#2; #3
+  { {10000} {0000} {0000} {0000} {0000} {0000} \__fp_sep: }
+\cs_new:Npn \__fp_fixed_continue:wn #1\__fp_sep: #2 { #2 #1\__fp_sep: }
+\cs_new:Npn \__fp_fixed_add_one:wN #1#2\__fp_sep: #3
   {
     \exp_after:wN #3 \exp_after:wN
-      { \int_value:w \__fp_int_eval:w \c__fp_myriad_int + #1 } #2 ;
+      { \int_value:w \__fp_int_eval:w \c__fp_myriad_int + #1 } #2 \__fp_sep:
   }
-\cs_new:Npn \__fp_fixed_div_myriad:wn #1#2#3#4#5#6;
+\cs_new:Npn \__fp_fixed_div_myriad:wn #1#2#3#4#5#6\__fp_sep:
   {
     \exp_after:wN \__fp_fixed_mul_after:wwn
     \int_value:w \__fp_int_eval:w \c__fp_leading_shift_int
       \exp_after:wN \__fp_pack:NNNNNw
       \int_value:w \__fp_int_eval:w \c__fp_trailing_shift_int
-        + #1 ; {#2}{#3}{#4}{#5};
+        + #1 \__fp_sep: {#2}{#3}{#4}{#5}\__fp_sep:
   }
-\cs_new:Npn \__fp_fixed_mul_after:wwn #1; #2; #3 { #3 {#1} #2; }
-\cs_new:Npn \__fp_fixed_mul_short:wwn #1#2#3#4#5#6; #7#8#9;
+\cs_new:Npn \__fp_fixed_mul_after:wwn #1\__fp_sep: #2\__fp_sep: #3
+  { #3 {#1} #2\__fp_sep: }
+\cs_new:Npn \__fp_fixed_mul_short:wwn #1#2#3#4#5#6\__fp_sep: #7#8#9\__fp_sep:
   {
     \exp_after:wN \__fp_fixed_mul_after:wwn
     \int_value:w \__fp_int_eval:w \c__fp_leading_shift_int
@@ -18952,29 +19030,29 @@
               \int_value:w \__fp_int_eval:w \c__fp_trailing_shift_int
                 + #4*#9 + #5*#8 + #6*#7
                 + ( #5*#9 + #6*#8 + #6*#9 / \c__fp_myriad_int )
-                / \c__fp_myriad_int ; ;
+                / \c__fp_myriad_int \__fp_sep: \__fp_sep:
   }
-\cs_new:Npn \__fp_fixed_div_int:wwN #1#2#3#4#5#6 ; #7 ; #8
+\cs_new:Npn \__fp_fixed_div_int:wwN #1#2#3#4#5#6 \__fp_sep: #7 \__fp_sep: #8
   {
     \exp_after:wN \__fp_fixed_div_int_after:Nw
     \exp_after:wN #8
     \int_value:w \__fp_int_eval:w - 1
       \__fp_fixed_div_int:wnN
-      #1; {#7} \__fp_fixed_div_int_auxi:wnn
-      #2; {#7} \__fp_fixed_div_int_auxi:wnn
-      #3; {#7} \__fp_fixed_div_int_auxi:wnn
-      #4; {#7} \__fp_fixed_div_int_auxi:wnn
-      #5; {#7} \__fp_fixed_div_int_auxi:wnn
-      #6; {#7} \__fp_fixed_div_int_auxii:wnn ;
+      #1\__fp_sep: {#7} \__fp_fixed_div_int_auxi:wnn
+      #2\__fp_sep: {#7} \__fp_fixed_div_int_auxi:wnn
+      #3\__fp_sep: {#7} \__fp_fixed_div_int_auxi:wnn
+      #4\__fp_sep: {#7} \__fp_fixed_div_int_auxi:wnn
+      #5\__fp_sep: {#7} \__fp_fixed_div_int_auxi:wnn
+      #6\__fp_sep: {#7} \__fp_fixed_div_int_auxii:wnn \__fp_sep:
   }
-\cs_new:Npn \__fp_fixed_div_int:wnN #1; #2 #3
+\cs_new:Npn \__fp_fixed_div_int:wnN #1\__fp_sep: #2 #3
   {
     \exp_after:wN #3
-    \int_value:w \__fp_int_eval:w #1 / #2 - 1 ;
+    \int_value:w \__fp_int_eval:w #1 / #2 - 1 \__fp_sep:
     {#2}
     {#1}
   }
-\cs_new:Npn \__fp_fixed_div_int_auxi:wnn #1; #2 #3
+\cs_new:Npn \__fp_fixed_div_int_auxi:wnn #1\__fp_sep: #2 #3
   {
     + #1
     \exp_after:wN \__fp_fixed_div_int_pack:Nw
@@ -18982,12 +19060,12 @@
       \exp_after:wN \__fp_fixed_div_int:wnN
       \int_value:w \__fp_int_eval:w #3 - #1*#2 \__fp_int_eval_end:
   }
-\cs_new:Npn \__fp_fixed_div_int_auxii:wnn #1; #2 #3 { + #1 + 2 ; }
-\cs_new:Npn \__fp_fixed_div_int_pack:Nw #1 #2; { + #1; {#2} }
-\cs_new:Npn \__fp_fixed_div_int_after:Nw #1 #2; { #1 {#2} }
+\cs_new:Npn \__fp_fixed_div_int_auxii:wnn #1\__fp_sep: #2 #3 { + #1 + 2 \__fp_sep: }
+\cs_new:Npn \__fp_fixed_div_int_pack:Nw #1 #2\__fp_sep: { + #1\__fp_sep: {#2} }
+\cs_new:Npn \__fp_fixed_div_int_after:Nw #1 #2\__fp_sep: { #1 {#2} }
 \cs_new:Npn \__fp_fixed_add:wwn { \__fp_fixed_add:Nnnnnwnn + }
 \cs_new:Npn \__fp_fixed_sub:wwn { \__fp_fixed_add:Nnnnnwnn - }
-\cs_new:Npn \__fp_fixed_add:Nnnnnwnn #1 #2#3#4#5 #6; #7#8
+\cs_new:Npn \__fp_fixed_add:Nnnnnwnn #1 #2#3#4#5 #6\__fp_sep: #7#8
   {
     \exp_after:wN \__fp_fixed_add_after:NNNNNwn
     \int_value:w \__fp_int_eval:w 9 9999 9998 + #2#3 #1 #7#8
@@ -18995,17 +19073,18 @@
       \int_value:w \__fp_int_eval:w 1 9999 9998 + #4#5
         \__fp_fixed_add:nnNnnnwn #6 #1
   }
-\cs_new:Npn \__fp_fixed_add:nnNnnnwn #1#2 #3 #4#5 #6#7 ; #8
+\cs_new:Npn \__fp_fixed_add:nnNnnnwn #1#2 #3 #4#5 #6#7 \__fp_sep: #8
   {
     #3 #4#5
     \exp_after:wN \__fp_fixed_add_pack:NNNNNwn
-    \int_value:w \__fp_int_eval:w 2 0000 0000 #3 #6#7 + #1#2 ; {#8} ;
+    \int_value:w \__fp_int_eval:w
+      2 0000 0000 #3 #6#7 + #1#2 \__fp_sep: {#8} \__fp_sep:
   }
-\cs_new:Npn \__fp_fixed_add_pack:NNNNNwn #1 #2#3#4#5 #6; #7
-  { + #1 ; {#7} {#2#3#4#5} {#6} }
-\cs_new:Npn \__fp_fixed_add_after:NNNNNwn 1 #1 #2#3#4#5 #6; #7
+\cs_new:Npn \__fp_fixed_add_pack:NNNNNwn #1 #2#3#4#5 #6\__fp_sep: #7
+  { + #1 \__fp_sep: {#7} {#2#3#4#5} {#6} }
+\cs_new:Npn \__fp_fixed_add_after:NNNNNwn 1 #1 #2#3#4#5 #6\__fp_sep: #7
   { #7 {#1#2#3#4#5} {#6} }
-\cs_new:Npn \__fp_fixed_mul:wwn #1#2#3#4 #5; #6#7#8#9
+\cs_new:Npn \__fp_fixed_mul:wwn #1#2#3#4 #5\__fp_sep: #6#7#8#9
   {
     \exp_after:wN \__fp_fixed_mul_after:wwn
     \int_value:w \__fp_int_eval:w \c__fp_leading_shift_int
@@ -19027,12 +19106,12 @@
                 + ( #3*#9 + #4*#8
                   + \__fp_fixed_mul:nnnnnnnw #5 {#6}{#7}  {#1}{#2}
   }
-\cs_new:Npn \__fp_fixed_mul:nnnnnnnw #1#2 #3#4 #5#6 #7#8 ;
+\cs_new:Npn \__fp_fixed_mul:nnnnnnnw #1#2 #3#4 #5#6 #7#8 \__fp_sep:
   {
     #1*#4 + #2*#3 + #5*#8 + #6*#7 ) / \c__fp_myriad_int
-    + #1*#3 + #5*#7 ; ;
+    + #1*#3 + #5*#7 \__fp_sep: \__fp_sep:
   }
-\cs_new:Npn \__fp_fixed_mul_add:wwwn #1; #2; #3#4#5#6#7#8;
+\cs_new:Npn \__fp_fixed_mul_add:wwwn #1\__fp_sep: #2\__fp_sep: #3#4#5#6#7#8\__fp_sep:
   {
     \exp_after:wN \__fp_fixed_mul_after:wwn
     \int_value:w \__fp_int_eval:w \c__fp_big_leading_shift_int
@@ -19039,10 +19118,11 @@
       \exp_after:wN \__fp_pack_big:NNNNNNw
       \int_value:w \__fp_int_eval:w \c__fp_big_middle_shift_int + #3 #4
         \__fp_fixed_mul_add:Nwnnnwnnn +
-          + #5 #6 ; #2 ; #1 ; #2 ; +
-          + #7 #8 ; ;
+          + #5 #6 \__fp_sep: #2 \__fp_sep: #1 \__fp_sep: #2 \__fp_sep: +
+          + #7 #8 \__fp_sep: \__fp_sep:
   }
-\cs_new:Npn \__fp_fixed_mul_sub_back:wwwn #1; #2; #3#4#5#6#7#8;
+\cs_new:Npn \__fp_fixed_mul_sub_back:wwwn
+    #1\__fp_sep: #2\__fp_sep: #3#4#5#6#7#8\__fp_sep:
   {
     \exp_after:wN \__fp_fixed_mul_after:wwn
     \int_value:w \__fp_int_eval:w \c__fp_big_leading_shift_int
@@ -19049,10 +19129,10 @@
       \exp_after:wN \__fp_pack_big:NNNNNNw
       \int_value:w \__fp_int_eval:w \c__fp_big_middle_shift_int + #3 #4
         \__fp_fixed_mul_add:Nwnnnwnnn -
-          + #5 #6 ; #2 ; #1 ; #2 ; -
-          + #7 #8 ; ;
+          + #5 #6 \__fp_sep: #2 \__fp_sep: #1 \__fp_sep: #2 \__fp_sep: -
+          + #7 #8 \__fp_sep: \__fp_sep:
   }
-\cs_new:Npn \__fp_fixed_one_minus_mul:wwn #1; #2;
+\cs_new:Npn \__fp_fixed_one_minus_mul:wwn #1\__fp_sep: #2\__fp_sep:
   {
     \exp_after:wN \__fp_fixed_mul_after:wwn
     \int_value:w \__fp_int_eval:w \c__fp_big_leading_shift_int
@@ -19060,10 +19140,10 @@
       \int_value:w \__fp_int_eval:w \c__fp_big_middle_shift_int +
         1 0000 0000
         \__fp_fixed_mul_add:Nwnnnwnnn -
-          ; #2 ; #1 ; #2 ; -
-          ; ;
+          \__fp_sep: #2 \__fp_sep: #1 \__fp_sep: #2 \__fp_sep: -
+          \__fp_sep: \__fp_sep:
   }
-\cs_new:Npn \__fp_fixed_mul_add:Nwnnnwnnn #1 #2; #3#4#5#6; #7#8#9
+\cs_new:Npn \__fp_fixed_mul_add:Nwnnnwnnn #1 #2\__fp_sep: #3#4#5#6\__fp_sep: #7#8#9
   {
     #1 #7*#3
     \exp_after:wN \__fp_pack_big:NNNNNNw
@@ -19076,7 +19156,7 @@
         \int_value:w \__fp_int_eval:w \c__fp_big_middle_shift_int
           #1 \__fp_fixed_mul_add:nnnnwnnnn {#7}{#8}{#9}
   }
-\cs_new:Npn \__fp_fixed_mul_add:nnnnwnnnn #1#2#3#4#5; #6#7#8#9
+\cs_new:Npn \__fp_fixed_mul_add:nnnnwnnnn #1#2#3#4#5\__fp_sep: #6#7#8#9
   {
     ( #1*#9 + #2*#8 + #3*#7 + #4*#6 )
     \exp_after:wN \__fp_pack_big:NNNNNNw
@@ -19084,10 +19164,10 @@
       \__fp_fixed_mul_add:nnnnwnnwN
         { #6 + #4*#7 + #3*#8 + #2*#9 + #1 }
         { #7 + #4*#8 + #3*#9 + #2 }
-        {#1} #5;
+        {#1} #5\__fp_sep:
         {#6}
   }
-\cs_new:Npn \__fp_fixed_mul_add:nnnnwnnwN #1#2 #3#4#5; #6#7#8; #9
+\cs_new:Npn \__fp_fixed_mul_add:nnnnwnnwN #1#2 #3#4#5\__fp_sep: #6#7#8\__fp_sep: #9
   {
     #9 (#4* #1 *#7)
     #9 (#5*#6+#4* #2 *#7+#3*#8) / \c__fp_myriad_int
@@ -19095,22 +19175,23 @@
 \cs_new:Npn \__fp_ep_to_fixed:wwn #1,#2
   {
     \exp_after:wN \__fp_ep_to_fixed_auxi:www
-    \int_value:w \__fp_int_eval:w 1 0000 0000 + #2 \exp_after:wN ;
+    \int_value:w \__fp_int_eval:w 1 0000 0000 + #2 \exp_after:wN \__fp_sep:
     \exp:w \exp_end_continue_f:w
-    \prg_replicate:nn { 4 - \int_max:nn {#1} { -32 } } { 0 } ;
+    \prg_replicate:nn { 4 - \int_max:nn {#1} { -32 } } { 0 } \__fp_sep:
   }
-\cs_new:Npn \__fp_ep_to_fixed_auxi:www 1#1; #2; #3#4#5#6#7;
+\cs_new:Npn \__fp_ep_to_fixed_auxi:www
+    1#1\__fp_sep: #2\__fp_sep: #3#4#5#6#7\__fp_sep:
   {
     \__fp_pack_eight:wNNNNNNNN
     \__fp_pack_twice_four:wNNNNNNNN
     \__fp_pack_twice_four:wNNNNNNNN
     \__fp_pack_twice_four:wNNNNNNNN
-    \__fp_ep_to_fixed_auxii:nnnnnnnwn ;
+    \__fp_ep_to_fixed_auxii:nnnnnnnwn \__fp_sep:
     #2 #1#3#4#5#6#7 0000 !
   }
-\cs_new:Npn \__fp_ep_to_fixed_auxii:nnnnnnnwn #1#2#3#4#5#6#7; #8! #9
-  { #9 {#1#2}{#3}{#4}{#5}{#6}{#7}; }
-\cs_new:Npn \__fp_ep_to_ep:wwN #1,#2#3#4#5#6#7; #8
+\cs_new:Npn \__fp_ep_to_fixed_auxii:nnnnnnnwn #1#2#3#4#5#6#7\__fp_sep: #8! #9
+  { #9 {#1#2}{#3}{#4}{#5}{#6}{#7}\__fp_sep: }
+\cs_new:Npn \__fp_ep_to_ep:wwN #1,#2#3#4#5#6#7\__fp_sep: #8
   {
     \exp_after:wN #8
     \int_value:w \__fp_int_eval:w #1 + 4
@@ -19117,7 +19198,7 @@
       \exp_after:wN \use_i:nn
       \exp_after:wN \__fp_ep_to_ep_loop:N
       \int_value:w \__fp_int_eval:w 1 0000 0000 + #2 \__fp_int_eval_end:
-      #3#4#5#6#7 ; ; !
+      #3#4#5#6#7 \__fp_sep: \__fp_sep: !
   }
 \cs_new:Npn \__fp_ep_to_ep_loop:N #1
   {
@@ -19129,10 +19210,10 @@
     \__fp_ep_to_ep_loop:N
   }
 \cs_new:Npn \__fp_ep_to_ep_end:www
-    #1 \fi: \__fp_ep_to_ep_loop:N #2; #3!
+    #1 \fi: \__fp_ep_to_ep_loop:N #2\__fp_sep: #3!
   {
     \fi:
-    \if_meaning:w ; #1
+    \if_meaning:w \__fp_sep: #1
       - 2 * \c__fp_max_exponent_int
       \__fp_ep_to_ep_zero:ww
     \fi:
@@ -19139,17 +19220,19 @@
     \__fp_pack_twice_four:wNNNNNNNN
     \__fp_pack_twice_four:wNNNNNNNN
     \__fp_pack_twice_four:wNNNNNNNN
-    \__fp_use_i:ww , ;
-    #1 #2 0000 0000 0000 0000 0000 0000 ;
+    \__fp_use_i:ww , \__fp_sep:
+    #1 #2 0000 0000 0000 0000 0000 0000 \__fp_sep:
   }
-\cs_new:Npn \__fp_ep_to_ep_zero:ww \fi: #1; #2; #3;
-  { \fi: , {1000}{0000}{0000}{0000}{0000}{0000} ; }
-\cs_new:Npn \__fp_ep_compare:wwww #1,#2#3#4#5#6#7;
-  { \__fp_ep_compare_aux:wwww {#1}{#2}{#3}{#4}{#5}; #6#7; }
-\cs_new:Npn \__fp_ep_compare_aux:wwww #1;#2;#3,#4#5#6#7#8#9;
+\cs_new:Npn \__fp_ep_to_ep_zero:ww \fi: #1\__fp_sep: #2\__fp_sep: #3\__fp_sep:
+  { \fi: , {1000}{0000}{0000}{0000}{0000}{0000} \__fp_sep: }
+\cs_new:Npn \__fp_ep_compare:wwww #1,#2#3#4#5#6#7\__fp_sep:
+  { \__fp_ep_compare_aux:wwww {#1}{#2}{#3}{#4}{#5}\__fp_sep: #6#7\__fp_sep: }
+\cs_new:Npn \__fp_ep_compare_aux:wwww
+    #1\__fp_sep:#2\__fp_sep:#3,#4#5#6#7#8#9\__fp_sep:
   {
     \if_case:w
-      \__fp_compare_npos:nwnw #1; {#3}{#4}{#5}{#6}{#7}; \exp_stop_f:
+      \__fp_compare_npos:nwnw
+        #1\__fp_sep: {#3}{#4}{#5}{#6}{#7}\__fp_sep: \exp_stop_f:
             \if_int_compare:w #2 = #8#9 \exp_stop_f:
               0
             \else:
@@ -19159,52 +19242,53 @@
     \else: -1
     \fi:
   }
-\cs_new:Npn \__fp_ep_mul:wwwwn #1,#2; #3,#4;
+\cs_new:Npn \__fp_ep_mul:wwwwn #1,#2\__fp_sep: #3,#4\__fp_sep:
   {
-    \__fp_ep_to_ep:wwN #3,#4;
+    \__fp_ep_to_ep:wwN #3,#4\__fp_sep:
     \__fp_fixed_continue:wn
     {
-      \__fp_ep_to_ep:wwN #1,#2;
+      \__fp_ep_to_ep:wwN #1,#2\__fp_sep:
       \__fp_ep_mul_raw:wwwwN
     }
     \__fp_fixed_continue:wn
   }
-\cs_new:Npn \__fp_ep_mul_raw:wwwwN #1,#2; #3,#4; #5
+\cs_new:Npn \__fp_ep_mul_raw:wwwwN #1,#2\__fp_sep: #3,#4\__fp_sep: #5
   {
-    \__fp_fixed_mul:wwn #2; #4;
+    \__fp_fixed_mul:wwn #2\__fp_sep: #4\__fp_sep:
     { \exp_after:wN #5 \int_value:w \__fp_int_eval:w #1 + #3 , }
   }
-\cs_new:Npn \__fp_ep_div:wwwwn #1,#2; #3,#4;
+\cs_new:Npn \__fp_ep_div:wwwwn #1,#2\__fp_sep: #3,#4\__fp_sep:
   {
-    \__fp_ep_to_ep:wwN #1,#2;
+    \__fp_ep_to_ep:wwN #1,#2\__fp_sep:
     \__fp_fixed_continue:wn
     {
-      \__fp_ep_to_ep:wwN #3,#4;
+      \__fp_ep_to_ep:wwN #3,#4\__fp_sep:
       \__fp_ep_div_esti:wwwwn
     }
   }
-\cs_new:Npn \__fp_ep_div_esti:wwwwn #1,#2#3; #4,
+\cs_new:Npn \__fp_ep_div_esti:wwwwn #1,#2#3\__fp_sep: #4,
   {
     \exp_after:wN \__fp_ep_div_estii:wwnnwwn
     \int_value:w \__fp_int_eval:w 10 0000 0000 / ( #2 + 1 )
-      \exp_after:wN ;
+      \exp_after:wN \__fp_sep:
     \int_value:w \__fp_int_eval:w #4 - #1 + 1 ,
-    {#2} #3;
+    {#2} #3\__fp_sep:
   }
-\cs_new:Npn \__fp_ep_div_estii:wwnnwwn #1; #2,#3#4#5; #6; #7
+\cs_new:Npn \__fp_ep_div_estii:wwnnwwn
+    #1\__fp_sep: #2,#3#4#5\__fp_sep: #6\__fp_sep: #7
   {
     \exp_after:wN \__fp_ep_div_estiii:NNNNNwwwn
     \int_value:w \__fp_int_eval:w 10 0000 0000 - 1750
-      + #1 000 + (10 0000 0000 / #3 - #1) * (1000 - #4 / 10) ;
-    {#3}{#4}#5; #6; { #7 #2, }
+      + #1 000 + (10 0000 0000 / #3 - #1) * (1000 - #4 / 10) \__fp_sep:
+    {#3}{#4}#5\__fp_sep: #6\__fp_sep: { #7 #2, }
   }
-\cs_new:Npn \__fp_ep_div_estiii:NNNNNwwwn 1#1#2#3#4#5#6; #7;
+\cs_new:Npn \__fp_ep_div_estiii:NNNNNwwwn 1#1#2#3#4#5#6\__fp_sep: #7\__fp_sep:
   {
-    \__fp_fixed_mul_short:wwn #7; {#1}{#2#3#4#5}{#6};
+    \__fp_fixed_mul_short:wwn #7\__fp_sep: {#1}{#2#3#4#5}{#6}\__fp_sep:
     \__fp_ep_div_epsi:wnNNNNNn {#1#2#3#4}#5#6
     \__fp_fixed_mul:wwn
   }
-\cs_new:Npn \__fp_ep_div_epsi:wnNNNNNn #1#2#3#4#5#6;
+\cs_new:Npn \__fp_ep_div_epsi:wnNNNNNn #1#2#3#4#5#6\__fp_sep:
   {
     \exp_after:wN \__fp_ep_div_epsii:wwnNNNNNn
     \int_value:w \__fp_int_eval:w 1 9998 - #2
@@ -19211,25 +19295,26 @@
       \exp_after:wN \__fp_ep_div_eps_pack:NNNNNw
       \int_value:w \__fp_int_eval:w 1 9999 9998 - #3#4
         \exp_after:wN \__fp_ep_div_eps_pack:NNNNNw
-        \int_value:w \__fp_int_eval:w 2 0000 0000 - #5#6 ; ;
+        \int_value:w \__fp_int_eval:w 2 0000 0000 - #5#6 \__fp_sep: \__fp_sep:
   }
-\cs_new:Npn \__fp_ep_div_eps_pack:NNNNNw #1#2#3#4#5#6;
-  { + #1 ; {#2#3#4#5} {#6} }
-\cs_new:Npn \__fp_ep_div_epsii:wwnNNNNNn 1#1; #2; #3#4#5#6#7#8
+\cs_new:Npn \__fp_ep_div_eps_pack:NNNNNw #1#2#3#4#5#6\__fp_sep:
+  { + #1 \__fp_sep: {#2#3#4#5} {#6} }
+\cs_new:Npn \__fp_ep_div_epsii:wwnNNNNNn 1#1\__fp_sep: #2\__fp_sep: #3#4#5#6#7#8
   {
-    \__fp_fixed_mul:wwn {0000}{#1}#2; {0000}{#1}#2;
+    \__fp_fixed_mul:wwn {0000}{#1}#2\__fp_sep: {0000}{#1}#2\__fp_sep:
     \__fp_fixed_add_one:wN
-    \__fp_fixed_mul:wwn {10000} {#1} #2 ;
+    \__fp_fixed_mul:wwn {10000} {#1} #2 \__fp_sep:
     {
-      \__fp_fixed_mul_short:wwn {0000}{#1}#2; {#3}{#4#5#6#7}{#8000};
+      \__fp_fixed_mul_short:wwn
+        {0000}{#1}#2\__fp_sep: {#3}{#4#5#6#7}{#8000}\__fp_sep:
       \__fp_fixed_div_myriad:wn
       \__fp_fixed_mul:wwn
     }
-    \__fp_fixed_add:wwn {#3}{#4#5#6#7}{#8000}{0000}{0000}{0000};
+    \__fp_fixed_add:wwn {#3}{#4#5#6#7}{#8000}{0000}{0000}{0000}\__fp_sep:
   }
-\cs_new:Npn \__fp_ep_isqrt:wwn #1,#2;
+\cs_new:Npn \__fp_ep_isqrt:wwn #1,#2\__fp_sep:
   {
-    \__fp_ep_to_ep:wwN #1,#2;
+    \__fp_ep_to_ep:wwN #1,#2\__fp_sep:
     \__fp_ep_isqrt_auxi:wwn
   }
 \cs_new:Npn \__fp_ep_isqrt_auxi:wwn #1,
@@ -19240,10 +19325,10 @@
         { (1 - #1) / 2 , 535 , { 0 } { } }
         { 1 - #1 / 2 , 168 , { } { 0 } }
   }
-\cs_new:Npn \__fp_ep_isqrt_auxii:wwnnnwn #1, #2, #3#4 #5#6; #7
+\cs_new:Npn \__fp_ep_isqrt_auxii:wwnnnwn #1, #2, #3#4 #5#6\__fp_sep: #7
   {
     \__fp_ep_isqrt_esti:wwwnnwn #2, 0, #5, {#3} {#4}
-      {#5} #6 ; { #7 #1 , }
+      {#5} #6 \__fp_sep: { #7 #1 , }
   }
 \cs_new:Npn \__fp_ep_isqrt_esti:wwwnnwn #1, #2, #3, #4
   {
@@ -19259,45 +19344,47 @@
   {
     \exp_after:wN \__fp_ep_isqrt_estiii:NNNNNwwwn
     \int_value:w \__fp_int_eval:w 1000 0000 + #2 * #2 #5 * 5
-      \exp_after:wN , \int_value:w \__fp_int_eval:w 10000 + #2 ;
+      \exp_after:wN , \int_value:w \__fp_int_eval:w 10000 + #2 \__fp_sep:
   }
-\cs_new:Npn \__fp_ep_isqrt_estiii:NNNNNwwwn 1#1#2#3#4#5#6, 1#7#8; #9;
+\cs_new:Npn \__fp_ep_isqrt_estiii:NNNNNwwwn
+    1#1#2#3#4#5#6, 1#7#8\__fp_sep: #9\__fp_sep:
   {
-    \__fp_fixed_mul_short:wwn #9; {#1} {#2#3#4#5} {#600} ;
+    \__fp_fixed_mul_short:wwn #9\__fp_sep: {#1} {#2#3#4#5} {#600} \__fp_sep:
     \__fp_ep_isqrt_epsi:wN
-    \__fp_fixed_mul_short:wwn {#7} {#80} {0000} ;
+    \__fp_fixed_mul_short:wwn {#7} {#80} {0000} \__fp_sep:
   }
-\cs_new:Npn \__fp_ep_isqrt_epsi:wN #1;
+\cs_new:Npn \__fp_ep_isqrt_epsi:wN #1\__fp_sep:
   {
-    \__fp_fixed_sub:wwn {15000}{0000}{0000}{0000}{0000}{0000}; #1;
-    \__fp_ep_isqrt_epsii:wwN #1;
-    \__fp_ep_isqrt_epsii:wwN #1;
-    \__fp_ep_isqrt_epsii:wwN #1;
+    \__fp_fixed_sub:wwn {15000}{0000}{0000}{0000}{0000}{0000}\__fp_sep: #1\__fp_sep:
+    \__fp_ep_isqrt_epsii:wwN #1\__fp_sep:
+    \__fp_ep_isqrt_epsii:wwN #1\__fp_sep:
+    \__fp_ep_isqrt_epsii:wwN #1\__fp_sep:
   }
-\cs_new:Npn \__fp_ep_isqrt_epsii:wwN #1; #2;
+\cs_new:Npn \__fp_ep_isqrt_epsii:wwN #1\__fp_sep: #2\__fp_sep:
   {
-    \__fp_fixed_mul:wwn #1; #1;
-    \__fp_fixed_mul_sub_back:wwwn #2;
-      {15000}{0000}{0000}{0000}{0000}{0000};
-    \__fp_fixed_mul:wwn #1;
+    \__fp_fixed_mul:wwn #1\__fp_sep: #1\__fp_sep:
+    \__fp_fixed_mul_sub_back:wwwn #2\__fp_sep:
+      {15000}{0000}{0000}{0000}{0000}{0000}\__fp_sep:
+    \__fp_fixed_mul:wwn #1\__fp_sep:
   }
 \cs_new:Npn \__fp_ep_to_float_o:wwN #1,
   { + \__fp_int_eval:w #1 \__fp_fixed_to_float_o:wN }
-\cs_new:Npn \__fp_ep_inv_to_float_o:wwN #1,#2;
+\cs_new:Npn \__fp_ep_inv_to_float_o:wwN #1,#2\__fp_sep:
   {
-    \__fp_ep_div:wwwwn 1,{1000}{0000}{0000}{0000}{0000}{0000}; #1,#2;
+    \__fp_ep_div:wwwwn
+      1,{1000}{0000}{0000}{0000}{0000}{0000}\__fp_sep: #1,#2\__fp_sep:
     \__fp_ep_to_float_o:wwN
   }
 \cs_new:Npn \__fp_fixed_inv_to_float_o:wN
   { \__fp_ep_inv_to_float_o:wwN 0, }
-\cs_new:Npn \__fp_fixed_to_float_rad_o:wN #1;
+\cs_new:Npn \__fp_fixed_to_float_rad_o:wN #1\__fp_sep:
   {
-    \__fp_fixed_mul:wwn #1; {5729}{5779}{5130}{8232}{0876}{7981};
+    \__fp_fixed_mul:wwn #1\__fp_sep: {5729}{5779}{5130}{8232}{0876}{7981}\__fp_sep:
     { \__fp_ep_to_float_o:wwN 2, }
   }
-\cs_new:Npn \__fp_fixed_to_float_o:Nw #1#2;
-  { \__fp_fixed_to_float_o:wN #2; #1 }
-\cs_new:Npn \__fp_fixed_to_float_o:wN #1#2#3#4#5#6; #7
+\cs_new:Npn \__fp_fixed_to_float_o:Nw #1#2\__fp_sep:
+  { \__fp_fixed_to_float_o:wN #2\__fp_sep: #1 }
+\cs_new:Npn \__fp_fixed_to_float_o:wN #1#2#3#4#5#6\__fp_sep: #7
   { % for the 8-digit-at-the-start thing
     + \__fp_int_eval:w \c__fp_block_int
     \exp_after:wN \exp_after:wN
@@ -19308,8 +19395,8 @@
       \int_value:w   1#2 \exp_after:wN \__fp_use_none_stop_f:n
       \int_value:w 1#3#4 \exp_after:wN \__fp_use_none_stop_f:n
       \int_value:w 1#5#6
-    \exp_after:wN ;
-    \exp_after:wN ;
+    \exp_after:wN \__fp_sep:
+    \exp_after:wN \__fp_sep:
   }
 \cs_new:Npn \__fp_fixed_to_loop:N #1
   {
@@ -19321,36 +19408,36 @@
       \exp_after:wN #1
     \fi:
   }
-\cs_new:Npn \__fp_fixed_to_loop_end:w #1 #2 ;
+\cs_new:Npn \__fp_fixed_to_loop_end:w #1 #2 \__fp_sep:
   {
-    \if_meaning:w ; #1
+    \if_meaning:w \__fp_sep: #1
       \exp_after:wN \__fp_fixed_to_float_zero:w
     \else:
       \exp_after:wN \__fp_pack_twice_four:wNNNNNNNN
       \exp_after:wN \__fp_pack_twice_four:wNNNNNNNN
       \exp_after:wN \__fp_fixed_to_float_pack:ww
-      \exp_after:wN ;
+      \exp_after:wN \__fp_sep:
     \fi:
-    #1 #2 0000 0000 0000 0000 ;
+    #1 #2 0000 0000 0000 0000 \__fp_sep:
   }
-\cs_new:Npn \__fp_fixed_to_float_zero:w ; 0000 0000 0000 0000 ;
+\cs_new:Npn \__fp_fixed_to_float_zero:w \__fp_sep: 0000 0000 0000 0000 \__fp_sep:
   {
-    - 2 * \c__fp_max_exponent_int ;
-    {0000} {0000} {0000} {0000} ;
+    - 2 * \c__fp_max_exponent_int \__fp_sep:
+    {0000} {0000} {0000} {0000} \__fp_sep:
   }
-\cs_new:Npn \__fp_fixed_to_float_pack:ww #1 ; #2#3 ; ;
+\cs_new:Npn \__fp_fixed_to_float_pack:ww #1 \__fp_sep: #2#3 \__fp_sep: \__fp_sep:
   {
     \if_int_compare:w #2 > 4 \exp_stop_f:
       \exp_after:wN \__fp_fixed_to_float_round_up:wnnnnw
     \fi:
-    ; #1 ;
+    \__fp_sep: #1 \__fp_sep:
   }
-\cs_new:Npn \__fp_fixed_to_float_round_up:wnnnnw ; #1#2#3#4 ;
+\cs_new:Npn \__fp_fixed_to_float_round_up:wnnnnw \__fp_sep: #1#2#3#4 \__fp_sep:
   {
     \exp_after:wN \__fp_basics_pack_high:NNNNNw
     \int_value:w \__fp_int_eval:w 1 #1#2
       \exp_after:wN \__fp_basics_pack_low:NNNNNw
-      \int_value:w \__fp_int_eval:w 1 #3#4 + 1 ;
+      \int_value:w \__fp_int_eval:w 1 #3#4 + 1 \__fp_sep:
   }
 %% File: l3fp-expo.dtx
 \cs_new:Npn \__fp_parse_word_exp:N
@@ -19359,16 +19446,25 @@
   { \__fp_parse_unary_function:NNN \__fp_ln_o:w ? }
 \cs_new:Npn \__fp_parse_word_fact:N
   { \__fp_parse_unary_function:NNN \__fp_fact_o:w ? }
-\tl_const:Nn \c__fp_ln_i_fixed_tl   { {0000}{0000}{0000}{0000}{0000}{0000};}
-\tl_const:Nn \c__fp_ln_ii_fixed_tl  { {6931}{4718}{0559}{9453}{0941}{7232};}
-\tl_const:Nn \c__fp_ln_iii_fixed_tl {{10986}{1228}{8668}{1096}{9139}{5245};}
-\tl_const:Nn \c__fp_ln_iv_fixed_tl  {{13862}{9436}{1119}{8906}{1883}{4464};}
-\tl_const:Nn \c__fp_ln_vi_fixed_tl  {{17917}{5946}{9228}{0550}{0081}{2477};}
-\tl_const:Nn \c__fp_ln_vii_fixed_tl {{19459}{1014}{9055}{3133}{0510}{5353};}
-\tl_const:Nn \c__fp_ln_viii_fixed_tl{{20794}{4154}{1679}{8359}{2825}{1696};}
-\tl_const:Nn \c__fp_ln_ix_fixed_tl  {{21972}{2457}{7336}{2193}{8279}{0490};}
-\tl_const:Nn \c__fp_ln_x_fixed_tl   {{23025}{8509}{2994}{0456}{8401}{7991};}
-\cs_new:Npn \__fp_ln_o:w #1 \s__fp \__fp_chk:w #2#3#4; @
+\tl_const:Nn \c__fp_ln_i_fixed_tl
+  { {0000}{0000}{0000}{0000}{0000}{0000}\__fp_sep:}
+\tl_const:Nn \c__fp_ln_ii_fixed_tl
+  { {6931}{4718}{0559}{9453}{0941}{7232}\__fp_sep:}
+\tl_const:Nn \c__fp_ln_iii_fixed_tl
+  {{10986}{1228}{8668}{1096}{9139}{5245}\__fp_sep:}
+\tl_const:Nn \c__fp_ln_iv_fixed_tl
+  {{13862}{9436}{1119}{8906}{1883}{4464}\__fp_sep:}
+\tl_const:Nn \c__fp_ln_vi_fixed_tl
+  {{17917}{5946}{9228}{0550}{0081}{2477}\__fp_sep:}
+\tl_const:Nn \c__fp_ln_vii_fixed_tl
+  {{19459}{1014}{9055}{3133}{0510}{5353}\__fp_sep:}
+\tl_const:Nn \c__fp_ln_viii_fixed_tl
+  {{20794}{4154}{1679}{8359}{2825}{1696}\__fp_sep:}
+\tl_const:Nn \c__fp_ln_ix_fixed_tl
+  {{21972}{2457}{7336}{2193}{8279}{0490}\__fp_sep:}
+\tl_const:Nn \c__fp_ln_x_fixed_tl
+  {{23025}{8509}{2994}{0456}{8401}{7991}\__fp_sep:}
+\cs_new:Npn \__fp_ln_o:w #1 \s__fp \__fp_chk:w #2#3#4\__fp_sep: @
   {
     \if_meaning:w 2 #3
       \__fp_case_use:nw { \__fp_invalid_operation_o:nw { ln } }
@@ -19380,9 +19476,9 @@
     \else:
       \__fp_case_return_same_o:w
     \fi:
-    \__fp_ln_npos_o:w \s__fp \__fp_chk:w #2#3#4;
+    \__fp_ln_npos_o:w \s__fp \__fp_chk:w #2#3#4\__fp_sep:
   }
-\cs_new:Npn \__fp_ln_npos_o:w \s__fp \__fp_chk:w 10#1#2#3;
+\cs_new:Npn \__fp_ln_npos_o:w \s__fp \__fp_chk:w 10#1#2#3\__fp_sep:
   { %^^A todo: ln(1) should be "exact zero", not "underflow"
     \exp_after:wN \__fp_sanitize:Nw
     \int_value:w % for the overall sign
@@ -19414,9 +19510,9 @@
       \or: 2
       \else: 1
       \fi:
-    ; { #1 #2 #3 #4 }
+    \__fp_sep: { #1 #2 #3 #4 }
   }
-\cs_new:Npn \__fp_ln_x_ii:wnnnn #1; #2#3#4#5
+\cs_new:Npn \__fp_ln_x_ii:wnnnn #1\__fp_sep: #2#3#4#5
   {
     \exp_after:wN \__fp_ln_div_after:Nw
     \cs:w c__fp_ln_ \__fp_int_to_roman:w #1 _fixed_tl \exp_after:wN \cs_end:
@@ -19426,22 +19522,22 @@
         \exp_after:wN \__fp_ln_x_iii_var:NNNNNw
         \int_value:w \__fp_int_eval:w 9999 9990 + #1*#2#3 +
           \exp_after:wN \__fp_ln_x_iii:NNNNNNw
-          \int_value:w \__fp_int_eval:w 10 0000 0000 + #1*#4#5 ;
+          \int_value:w \__fp_int_eval:w 10 0000 0000 + #1*#4#5 \__fp_sep:
     {20000} {0000} {0000} {0000}
   } %^^A todo: reoptimize (a generalization attempt failed).
-\cs_new:Npn \__fp_ln_x_iii:NNNNNNw #1#2 #3#4#5#6 #7;
-  { #1#2; {#3#4#5#6} {#7} }
-\cs_new:Npn \__fp_ln_x_iii_var:NNNNNw #1 #2#3#4#5 #6;
+\cs_new:Npn \__fp_ln_x_iii:NNNNNNw #1#2 #3#4#5#6 #7\__fp_sep:
+  { #1#2\__fp_sep: {#3#4#5#6} {#7} }
+\cs_new:Npn \__fp_ln_x_iii_var:NNNNNw #1 #2#3#4#5 #6\__fp_sep:
   {
-    #1#2#3#4#5 + 1 ;
+    #1#2#3#4#5 + 1 \__fp_sep:
     {#1#2#3#4#5} {#6}
   }
-\cs_new:Npn \__fp_ln_x_iv:wnnnnnnnn #1; #2#3#4#5 #6#7#8#9
+\cs_new:Npn \__fp_ln_x_iv:wnnnnnnnn #1\__fp_sep: #2#3#4#5 #6#7#8#9
   {
     \exp_after:wN \__fp_div_significand_pack:NNN
     \int_value:w \__fp_int_eval:w
-    \__fp_ln_div_i:w #1 ;
-      #6 #7 ; {#8} {#9}
+    \__fp_ln_div_i:w #1 \__fp_sep:
+      #6 #7 \__fp_sep: {#8} {#9}
       {#2} {#3} {#4} {#5}
       { \exp_after:wN \__fp_ln_div_ii:wwn \int_value:w #1 }
       { \exp_after:wN \__fp_ln_div_ii:wwn \int_value:w #1 }
@@ -19449,25 +19545,27 @@
       { \exp_after:wN \__fp_ln_div_ii:wwn \int_value:w #1 }
       { \exp_after:wN \__fp_ln_div_vi:wwn \int_value:w #1 }
   }
-\cs_new:Npn \__fp_ln_div_i:w #1;
+\cs_new:Npn \__fp_ln_div_i:w #1\__fp_sep:
   {
     \exp_after:wN \__fp_div_significand_calc:wwnnnnnnn
-    \int_value:w \__fp_int_eval:w 999999 + 2 0000 0000 / #1 ; % Q1
+    \int_value:w \__fp_int_eval:w 999999 + 2 0000 0000 / #1 \__fp_sep: % Q1
   }
-\cs_new:Npn \__fp_ln_div_ii:wwn #1; #2;#3 % y; B1;B2 <- for k=1
+\cs_new:Npn \__fp_ln_div_ii:wwn
+    #1\__fp_sep: #2\__fp_sep:#3 % y\__fp_sep: B1\__fp_sep:B2 <- for k=1
   {
     \exp_after:wN \__fp_div_significand_pack:NNN
     \int_value:w \__fp_int_eval:w
       \exp_after:wN \__fp_div_significand_calc:wwnnnnnnn
-      \int_value:w \__fp_int_eval:w 999999 + #2 #3 / #1 ; % Q2
-      #2 #3 ;
+      \int_value:w \__fp_int_eval:w 999999 + #2 #3 / #1 \__fp_sep: % Q2
+      #2 #3 \__fp_sep:
   }
-\cs_new:Npn \__fp_ln_div_vi:wwn #1; #2;#3#4#5 #6#7#8#9 %y;F1;F2F3F4x1x2x3x4
+\cs_new:Npn \__fp_ln_div_vi:wwn
+    #1\__fp_sep: #2\__fp_sep:#3#4#5 #6#7#8#9 %y\__fp_sep:F1\__fp_sep:F2F3F4x1x2x3x4
   {
     \exp_after:wN \__fp_div_significand_pack:NNN
-    \int_value:w \__fp_int_eval:w 1000000 + #2 #3 / #1 ; % Q6
+    \int_value:w \__fp_int_eval:w 1000000 + #2 #3 / #1 \__fp_sep: % Q6
   }
-\cs_new:Npn \__fp_ln_div_after:Nw #1#2;
+\cs_new:Npn \__fp_ln_div_after:Nw #1#2\__fp_sep:
   {
     \if_meaning:w 0 #2
       \exp_after:wN \__fp_ln_t_small:Nw
@@ -19477,19 +19575,22 @@
     \fi:
     #1
   }
-\cs_new:Npn \__fp_ln_t_small:Nw #1 #2; #3; #4; #5; #6; #7;
+\cs_new:Npn \__fp_ln_t_small:Nw
+    #1 #2\__fp_sep: #3\__fp_sep: #4\__fp_sep: #5\__fp_sep: #6\__fp_sep: #7\__fp_sep:
   {
     \exp_after:wN \__fp_ln_t_large:NNw
     \exp_after:wN + % <sign>
     \exp_after:wN #1
-    \int_value:w \__fp_int_eval:w 9999 - #2 \exp_after:wN ;
-    \int_value:w \__fp_int_eval:w 9999 - #3 \exp_after:wN ;
-    \int_value:w \__fp_int_eval:w 9999 - #4 \exp_after:wN ;
-    \int_value:w \__fp_int_eval:w 9999 - #5 \exp_after:wN ;
-    \int_value:w \__fp_int_eval:w 9999 - #6 \exp_after:wN ;
-    \int_value:w \__fp_int_eval:w 1 0000 - #7 ;
+    \int_value:w \__fp_int_eval:w 9999 - #2 \exp_after:wN \__fp_sep:
+    \int_value:w \__fp_int_eval:w 9999 - #3 \exp_after:wN \__fp_sep:
+    \int_value:w \__fp_int_eval:w 9999 - #4 \exp_after:wN \__fp_sep:
+    \int_value:w \__fp_int_eval:w 9999 - #5 \exp_after:wN \__fp_sep:
+    \int_value:w \__fp_int_eval:w 9999 - #6 \exp_after:wN \__fp_sep:
+    \int_value:w \__fp_int_eval:w 1 0000 - #7 \__fp_sep:
   }
-\cs_new:Npn \__fp_ln_t_large:NNw #1 #2 #3; #4; #5; #6; #7; #8;
+\cs_new:Npn \__fp_ln_t_large:NNw
+    #1 #2
+    #3\__fp_sep: #4\__fp_sep: #5\__fp_sep: #6\__fp_sep: #7\__fp_sep: #8\__fp_sep:
   {
     \exp_after:wN \__fp_ln_square_t_after:w
     \int_value:w \__fp_int_eval:w 9999 0000 + #3*#3
@@ -19503,7 +19604,7 @@
             \int_value:w \__fp_int_eval:w
               1 0000 0000 + 2*#3*#7 + 2*#4*#6 + #5*#5
               + (2*#3*#8 + 2*#4*#7 + 2*#5*#6) / 1 0000
-              % ; ; ;
+              % \__fp_sep: \__fp_sep: \__fp_sep:
     \exp_after:wN \__fp_ln_twice_t_after:w
     \int_value:w \__fp_int_eval:w -1 + 2*#3
       \exp_after:wN \__fp_ln_twice_t_pack:Nw
@@ -19515,39 +19616,44 @@
             \exp_after:wN \__fp_ln_twice_t_pack:Nw
             \int_value:w \__fp_int_eval:w 9999 + 2*#7
               \exp_after:wN \__fp_ln_twice_t_pack:Nw
-              \int_value:w \__fp_int_eval:w 10000 + 2*#8 ; ;
+              \int_value:w \__fp_int_eval:w 10000 + 2*#8 \__fp_sep: \__fp_sep:
     { \__fp_ln_c:NwNw #1 }
     #2
   }
-\cs_new:Npn \__fp_ln_twice_t_pack:Nw #1 #2; { + #1 ; {#2} }
-\cs_new:Npn \__fp_ln_twice_t_after:w #1; { ;;; {#1} }
-\cs_new:Npn \__fp_ln_square_t_pack:NNNNNw #1 #2#3#4#5 #6;
-  { + #1#2#3#4#5 ; {#6} }
-\cs_new:Npn \__fp_ln_square_t_after:w 1 0 #1#2#3 #4;
+\cs_new:Npn \__fp_ln_twice_t_pack:Nw #1 #2\__fp_sep: { + #1 \__fp_sep: {#2} }
+\cs_new:Npn \__fp_ln_twice_t_after:w #1\__fp_sep:
+  { \__fp_sep:\__fp_sep:\__fp_sep: {#1} }
+\cs_new:Npn \__fp_ln_square_t_pack:NNNNNw #1 #2#3#4#5 #6\__fp_sep:
+  { + #1#2#3#4#5 \__fp_sep: {#6} }
+\cs_new:Npn \__fp_ln_square_t_after:w 1 0 #1#2#3 #4\__fp_sep:
   { \__fp_ln_Taylor:wwNw {0#1#2#3} {#4} }
 \cs_new:Npn \__fp_ln_Taylor:wwNw
-  { \__fp_ln_Taylor_loop:www 21 ; {0000}{0000}{0000}{0000}{0000}{0000} ; }
-\cs_new:Npn \__fp_ln_Taylor_loop:www #1; #2; #3;
   {
+    \__fp_ln_Taylor_loop:www
+      21 \__fp_sep: {0000}{0000}{0000}{0000}{0000}{0000} \__fp_sep:
+  }
+\cs_new:Npn \__fp_ln_Taylor_loop:www #1\__fp_sep: #2\__fp_sep: #3\__fp_sep:
+  {
     \if_int_compare:w #1 = \c_one_int
       \__fp_ln_Taylor_break:w
     \fi:
-    \exp_after:wN \__fp_fixed_div_int:wwN \c__fp_one_fixed_tl #1;
-    \__fp_fixed_add:wwn #2;
-    \__fp_fixed_mul:wwn #3;
+    \exp_after:wN \__fp_fixed_div_int:wwN \c__fp_one_fixed_tl #1\__fp_sep:
+    \__fp_fixed_add:wwn #2\__fp_sep:
+    \__fp_fixed_mul:wwn #3\__fp_sep:
     {
       \exp_after:wN \__fp_ln_Taylor_loop:www
-      \int_value:w \__fp_int_eval:w #1 - 2 ;
+      \int_value:w \__fp_int_eval:w #1 - 2 \__fp_sep:
     }
-    #3;
+    #3\__fp_sep:
   }
-\cs_new:Npn \__fp_ln_Taylor_break:w \fi: #1 \__fp_fixed_add:wwn #2#3; #4 ;;
+\cs_new:Npn \__fp_ln_Taylor_break:w
+    \fi: #1 \__fp_fixed_add:wwn #2#3\__fp_sep: #4 \__fp_sep:\__fp_sep:
   {
     \fi:
     \exp_after:wN \__fp_fixed_mul:wwn
-    \exp_after:wN { \int_value:w \__fp_int_eval:w 10000 + #2 } #3;
+    \exp_after:wN { \int_value:w \__fp_int_eval:w 10000 + #2 } #3\__fp_sep:
   }
-\cs_new:Npn \__fp_ln_c:NwNw #1 #2; #3
+\cs_new:Npn \__fp_ln_c:NwNw #1 #2\__fp_sep: #3
   {
     \if_meaning:w + #1
       \exp_after:wN \exp_after:wN \exp_after:wN \__fp_fixed_sub:wwn
@@ -19554,9 +19660,9 @@
     \else:
       \exp_after:wN \exp_after:wN \exp_after:wN \__fp_fixed_add:wwn
     \fi:
-    #3 #2 ;
+    #3 #2 \__fp_sep:
   }
-\cs_new:Npn \__fp_ln_exponent:wn #1; #2
+\cs_new:Npn \__fp_ln_exponent:wn #1\__fp_sep: #2
   {
     \if_case:w #2 \exp_stop_f:
       0 \__fp_case_return:nw { \__fp_fixed_to_float_o:Nw 2 }
@@ -19573,25 +19679,25 @@
         \exp_after:wN \__fp_fixed_add:wwn \int_value:w -
       \fi:
     \fi:
-    #2; #1;
+    #2\__fp_sep: #1\__fp_sep:
   }
-\cs_new:Npn \__fp_ln_exponent_one:ww 1; #1;
+\cs_new:Npn \__fp_ln_exponent_one:ww 1\__fp_sep: #1\__fp_sep:
   {
     0
-    \exp_after:wN \__fp_fixed_sub:wwn \c__fp_ln_x_fixed_tl #1;
+    \exp_after:wN \__fp_fixed_sub:wwn \c__fp_ln_x_fixed_tl #1\__fp_sep:
     \__fp_fixed_to_float_o:wN 0
   }
-\cs_new:Npn \__fp_ln_exponent_small:NNww #1#2#3; #4#5#6#7#8#9;
+\cs_new:Npn \__fp_ln_exponent_small:NNww #1#2#3\__fp_sep: #4#5#6#7#8#9\__fp_sep:
   {
     4
     \exp_after:wN \__fp_fixed_mul:wwn
       \c__fp_ln_x_fixed_tl
-      {#3}{0000}{0000}{0000}{0000}{0000} ;
+      {#3}{0000}{0000}{0000}{0000}{0000} \__fp_sep:
     #2
-      {0000}{#4}{#5}{#6}{#7}{#8};
+      {0000}{#4}{#5}{#6}{#7}{#8}\__fp_sep:
     \__fp_fixed_to_float_o:wN #1
   }
-\cs_new:Npn \__fp_exp_o:w #1 \s__fp \__fp_chk:w #2#3#4; @
+\cs_new:Npn \__fp_exp_o:w #1 \s__fp \__fp_chk:w #2#3#4\__fp_sep: @
   {
     \if_case:w #2 \exp_stop_f:
       \__fp_case_return_o:Nw \c_one_fp
@@ -19608,7 +19714,7 @@
     \or:
       \__fp_case_return_same_o:w
     \fi:
-    \s__fp \__fp_chk:w #2#3#4;
+    \s__fp \__fp_chk:w #2#3#4\__fp_sep:
   }
 \cs_new:Npn \__fp_exp_normal_o:w \s__fp \__fp_chk:w 1#1
   {
@@ -19618,7 +19724,7 @@
       \__fp_exp_pos_o:NNwnw - \__fp_fixed_inv_to_float_o:wN
     \fi:
   }
-\cs_new:Npn \__fp_exp_pos_o:NNwnw #1#2#3 \fi: #4#5;
+\cs_new:Npn \__fp_exp_pos_o:NNwnw #1#2#3 \fi: #4#5\__fp_sep:
   {
     \fi:
     \if_int_compare:w #4 > \c__fp_max_exp_exponent_int
@@ -19657,7 +19763,7 @@
     \exp_after:wN #1
     \exp_after:wN #2
   }
-\cs_new:Npn \__fp_exp_Taylor:Nnnwn #1#2#3 #4; #5 #6
+\cs_new:Npn \__fp_exp_Taylor:Nnnwn #1#2#3 #4\__fp_sep: #5 #6
   {
     #6
     \__fp_pack_twice_four:wNNNNNNNN
@@ -19664,26 +19770,26 @@
     \__fp_pack_twice_four:wNNNNNNNN
     \__fp_pack_twice_four:wNNNNNNNN
     \__fp_exp_Taylor_ii:ww
-    ; #2#3#4 0000 0000 ;
+    \__fp_sep: #2#3#4 0000 0000 \__fp_sep:
   }
-\cs_new:Npn \__fp_exp_Taylor_ii:ww #1; #2;
-  { \__fp_exp_Taylor_loop:www 10 ; #1 ; #1 ; \s__fp_stop }
-\cs_new:Npn \__fp_exp_Taylor_loop:www #1; #2; #3;
+\cs_new:Npn \__fp_exp_Taylor_ii:ww #1\__fp_sep: #2\__fp_sep:
+  { \__fp_exp_Taylor_loop:www 10 \__fp_sep: #1 \__fp_sep: #1 \__fp_sep: \s__fp_stop }
+\cs_new:Npn \__fp_exp_Taylor_loop:www #1\__fp_sep: #2\__fp_sep: #3\__fp_sep:
   {
     \if_int_compare:w #1 = \c_one_int
       \exp_after:wN \__fp_exp_Taylor_break:Nww
     \fi:
-    \__fp_fixed_div_int:wwN #3 ; #1 ;
+    \__fp_fixed_div_int:wwN #3 \__fp_sep: #1 \__fp_sep:
     \__fp_fixed_add_one:wN
-    \__fp_fixed_mul:wwn #2 ;
+    \__fp_fixed_mul:wwn #2 \__fp_sep:
     {
       \exp_after:wN \__fp_exp_Taylor_loop:www
-      \int_value:w \__fp_int_eval:w #1 - 1 ;
-      #2 ;
+      \int_value:w \__fp_int_eval:w #1 - 1 \__fp_sep:
+      #2 \__fp_sep:
     }
   }
-\cs_new:Npn \__fp_exp_Taylor_break:Nww #1 #2; #3 \s__fp_stop
-  { \__fp_fixed_add_one:wN #2 ; }
+\cs_new:Npn \__fp_exp_Taylor_break:Nww #1 #2\__fp_sep: #3 \s__fp_stop
+  { \__fp_fixed_add_one:wN #2 \__fp_sep: }
 \intarray_const_from_clist:Nn \c__fp_exp_intarray
   {
          1 , 1 1105 1709 , 1 1807 5647 , 1 6248 1171 ,
@@ -19741,23 +19847,23 @@
      34744 , 1 3618 6973 , 1 3140 0875 , 1 3856 4102 ,
      39087 , 1 3186 9209 , 1 6113 3900 , 1 6705 9685 ,
   }
-\cs_new:Npn \__fp_exp_pos_large:NnnNwn #1#2#3 #4#5; #6
+\cs_new:Npn \__fp_exp_pos_large:NnnNwn #1#2#3 #4#5\__fp_sep: #6
   {
     \exp_after:wN \exp_after:wN \exp_after:wN \__fp_exp_large:NwN
     \exp_after:wN \exp_after:wN \exp_after:wN #6
     \exp_after:wN \c__fp_one_fixed_tl
     \int_value:w #3 #4 \exp_stop_f:
-    #5 00000 ;
+    #5 00000 \__fp_sep:
   }
-\cs_new:Npn \__fp_exp_large:NwN #1#2; #3
+\cs_new:Npn \__fp_exp_large:NwN #1#2\__fp_sep: #3
   {
     \if_case:w #3 ~
       \exp_after:wN \__fp_fixed_continue:wn
     \else:
       \exp_after:wN \__fp_exp_intarray:w
-      \int_value:w \__fp_int_eval:w 36 * #1 + 4 * #3 \exp_after:wN ;
+      \int_value:w \__fp_int_eval:w 36 * #1 + 4 * #3 \exp_after:wN \__fp_sep:
     \fi:
-    #2;
+    #2\__fp_sep:
     {
       \if_meaning:w 0 #1
         \exp_after:wN \__fp_exp_large_after:wwn
@@ -19767,7 +19873,7 @@
       \fi:
     }
   }
-\cs_new:Npn \__fp_exp_intarray:w #1 ;
+\cs_new:Npn \__fp_exp_intarray:w #1 \__fp_sep:
   {
     +
     \__kernel_intarray_item:Nn \c__fp_exp_intarray
@@ -19782,16 +19888,18 @@
     \int_value:w \__kernel_intarray_item:Nn
                    \c__fp_exp_intarray { \__fp_int_eval:w #1 - 1 }
     \exp_after:wN \__fp_exp_intarray_aux:w
-    \int_value:w \__kernel_intarray_item:Nn \c__fp_exp_intarray {#1} ; ;
+    \int_value:w \__kernel_intarray_item:Nn
+                   \c__fp_exp_intarray {#1} \__fp_sep: \__fp_sep:
   }
-\cs_new:Npn \__fp_exp_intarray_aux:w 1 #1#2#3#4#5 ; { ; {#1#2#3#4} {#5} }
-\cs_new:Npn \__fp_exp_large_after:wwn #1; #2; #3
+\cs_new:Npn \__fp_exp_intarray_aux:w 1 #1#2#3#4#5 \__fp_sep:
+  { \__fp_sep: {#1#2#3#4} {#5} }
+\cs_new:Npn \__fp_exp_large_after:wwn #1\__fp_sep: #2\__fp_sep: #3
   {
-    \__fp_exp_Taylor:Nnnwn ? { } { } 0 #2; {} #3
-    \__fp_fixed_mul:wwn #1;
+    \__fp_exp_Taylor:Nnnwn ? { } { } 0 #2\__fp_sep: {} #3
+    \__fp_fixed_mul:wwn #1\__fp_sep:
   }
 \cs_new:cpn { __fp_ \iow_char:N \^ _o:ww }
-    \s__fp \__fp_chk:w #1#2#3; \s__fp \__fp_chk:w #4#5#6;
+    \s__fp \__fp_chk:w #1#2#3\__fp_sep: \s__fp \__fp_chk:w #4#5#6\__fp_sep:
   {
     \if_meaning:w 0 #4
       \__fp_case_return_o:Nw \c_one_fp
@@ -19810,13 +19918,13 @@
       \else:
         \exp_after:wN \__fp_pow_zero_or_inf:ww
       \fi:
-      \s__fp \__fp_chk:w #1#2#3;
+      \s__fp \__fp_chk:w #1#2#3\__fp_sep:
     }
-    { \s__fp \__fp_chk:w #4#5#6; \s__fp \__fp_chk:w #1#2#3; }
-    \s__fp \__fp_chk:w #4#5#6;
+    { \s__fp \__fp_chk:w #4#5#6\__fp_sep: \s__fp \__fp_chk:w #1#2#3\__fp_sep: }
+    \s__fp \__fp_chk:w #4#5#6\__fp_sep:
   }
 \cs_new:Npn \__fp_pow_zero_or_inf:ww
-    \s__fp \__fp_chk:w #1#2; \s__fp \__fp_chk:w #3#4
+    \s__fp \__fp_chk:w #1#2\__fp_sep: \s__fp \__fp_chk:w #3#4
   {
     \if_meaning:w 1 #4
       \__fp_case_return_same_o:w
@@ -19833,13 +19941,13 @@
       \__fp_case_use:nw
         {
           \__fp_division_by_zero_o:NNww \c_inf_fp ^
-            \s__fp \__fp_chk:w #1 #2 ;
+            \s__fp \__fp_chk:w #1 #2 \__fp_sep:
         }
     \fi:
     \s__fp \__fp_chk:w #3#4
   }
 \cs_new:Npn \__fp_pow_normal_o:ww
-    \s__fp \__fp_chk:w 1 #1#2#3; \s__fp \__fp_chk:w #4#5
+    \s__fp \__fp_chk:w 1 #1#2#3\__fp_sep: \s__fp \__fp_chk:w #4#5
   {
     \if:w 0 \__fp_str_if_eq:nn { #2 #3 } { 1 {1000} {0000} {0000} {0000} }
       \if_int_compare:w #4 #1 = 32 \exp_stop_f:
@@ -19863,7 +19971,7 @@
     \or:
       \__fp_case_return_ii_o:ww
     \fi:
-    \s__fp \__fp_chk:w 1 #1 {#2} #3 ;
+    \s__fp \__fp_chk:w 1 #1 {#2} #3 \__fp_sep:
     \s__fp \__fp_chk:w #4 #5
   }
 \cs_new:Npn \__fp_pow_npos_o:Nww #1 \s__fp \__fp_chk:w 1#2#3
@@ -19882,17 +19990,18 @@
       \fi:
       {#3}
   }
-\cs_new:Npn \__fp_pow_npos_aux:NNnww #1#2#3#4#5; \s__fp \__fp_chk:w 1#6#7#8;
+\cs_new:Npn \__fp_pow_npos_aux:NNnww
+    #1#2#3#4#5\__fp_sep: \s__fp \__fp_chk:w 1#6#7#8\__fp_sep:
   {
     #1
     \__fp_int_eval:w
       \__fp_ln_significand:NNNNnnnN #4#5
       \__fp_pow_exponent:wnN {#3}
-      \__fp_fixed_mul:wwn #8 {0000}{0000} ;
-      \__fp_pow_B:wwN #7;
+      \__fp_fixed_mul:wwn #8 {0000}{0000} \__fp_sep:
+      \__fp_pow_B:wwN #7\__fp_sep:
       #1 #2 0 % fixed_to_float_o:wN
   }
-\cs_new:Npn \__fp_pow_exponent:wnN #1; #2
+\cs_new:Npn \__fp_pow_exponent:wnN #1\__fp_sep: #2
   {
     \if_int_compare:w #2 > \c_zero_int
       \exp_after:wN \__fp_pow_exponent:Nwnnnnnw % n\ln(10) - (-\ln(x))
@@ -19901,9 +20010,9 @@
       \exp_after:wN \__fp_pow_exponent:Nwnnnnnw % -(|n|\ln(10) + (-\ln(x)))
       \exp_after:wN -
     \fi:
-    #2; #1;
+    #2\__fp_sep: #1\__fp_sep:
   }
-\cs_new:Npn \__fp_pow_exponent:Nwnnnnnw #1#2; #3#4#5#6#7#8;
+\cs_new:Npn \__fp_pow_exponent:Nwnnnnnw #1#2\__fp_sep: #3#4#5#6#7#8\__fp_sep:
   { %^^A todo: use that in ln.
     \exp_after:wN \__fp_fixed_mul_after:wwn
     \int_value:w \__fp_int_eval:w \c__fp_leading_shift_int
@@ -19922,9 +20031,9 @@
               \exp_after:wN \__fp_pack:NNNNNw
               \int_value:w \__fp_int_eval:w \c__fp_trailing_shift_int
                 #1 #2*8401 - #1 #7
-                #1 ( #2*7991 - #8 ) / 1 0000 ; ;
+                #1 ( #2*7991 - #8 ) / 1 0000 \__fp_sep: \__fp_sep:
   }
-\cs_new:Npn \__fp_pow_B:wwN #1#2#3#4#5#6; #7;
+\cs_new:Npn \__fp_pow_B:wwN #1#2#3#4#5#6\__fp_sep: #7\__fp_sep:
   {
     \if_int_compare:w #7 < \c_zero_int
       \exp_after:wN \__fp_pow_C_neg:w \int_value:w -
@@ -19935,23 +20044,23 @@
         \exp_after:wN \__fp_pow_C_overflow:w \int_value:w
       \fi:
     \fi:
-    #7 \exp_after:wN ;
+    #7 \exp_after:wN \__fp_sep:
     \int_value:w \__fp_int_eval:w 10 0000 + #1 \__fp_int_eval_end:
-    #2#3#4#5#6 0000 0000 0000 0000 0000 0000 ; %^^A todo: how many 0?
+    #2#3#4#5#6 0000 0000 0000 0000 0000 0000 \__fp_sep: %^^A todo: how many 0?
   }
-\cs_new:Npn \__fp_pow_C_overflow:w #1; #2; #3
+\cs_new:Npn \__fp_pow_C_overflow:w #1\__fp_sep: #2\__fp_sep: #3
   {
     + 2 * \c__fp_max_exponent_int
     \exp_after:wN \__fp_fixed_continue:wn \c__fp_one_fixed_tl
   }
-\cs_new:Npn \__fp_pow_C_neg:w #1 ; 1
+\cs_new:Npn \__fp_pow_C_neg:w #1 \__fp_sep: 1
   {
     \exp_after:wN \exp_after:wN \exp_after:wN \__fp_pow_C_pack:w
     \prg_replicate:nn {#1} {0}
   }
-\cs_new:Npn \__fp_pow_C_pos:w #1; 1
-  { \__fp_pow_C_pos_loop:wN #1; }
-\cs_new:Npn \__fp_pow_C_pos_loop:wN #1; #2
+\cs_new:Npn \__fp_pow_C_pos:w #1\__fp_sep: 1
+  { \__fp_pow_C_pos_loop:wN #1\__fp_sep: }
+\cs_new:Npn \__fp_pow_C_pos_loop:wN #1\__fp_sep: #2
   {
     \if_meaning:w 0 #1
       \exp_after:wN \__fp_pow_C_pack:w
@@ -19962,7 +20071,7 @@
       \else:
         \exp_after:wN \__fp_pow_C_overflow:w \int_value:w
       \fi:
-      \__fp_int_eval:w #1 - 1 \exp_after:wN ;
+      \__fp_int_eval:w #1 - 1 \exp_after:wN \__fp_sep:
     \fi:
   }
 \cs_new:Npn \__fp_pow_C_pack:w
@@ -19971,13 +20080,14 @@
     \exp_after:wN 5
     \c__fp_one_fixed_tl
   }
-\cs_new:Npn \__fp_pow_neg:www \s__fp \__fp_chk:w #1#2; #3; #4;
+\cs_new:Npn \__fp_pow_neg:www
+    \s__fp \__fp_chk:w #1#2\__fp_sep: #3\__fp_sep: #4\__fp_sep:
   {
-    \if_case:w \__fp_pow_neg_case:w #4 ;
+    \if_case:w \__fp_pow_neg_case:w #4 \__fp_sep:
       \exp_after:wN \__fp_pow_neg_aux:wNN
     \or:
       \if_int_compare:w \__fp_int_eval:w #1 / 2 = \c_one_int
-        \__fp_invalid_operation_o:Nww ^ #3; #4;
+        \__fp_invalid_operation_o:Nww ^ #3\__fp_sep: #4\__fp_sep:
         \exp:w \exp_end_continue_f:w
         \exp_after:wN \exp_after:wN
         \exp_after:wN \__fp_use_none_until_s:w
@@ -19984,7 +20094,7 @@
       \fi:
     \fi:
     \__fp_exp_after_o:w
-    \s__fp \__fp_chk:w #1#2;
+    \s__fp \__fp_chk:w #1#2\__fp_sep:
   }
 \cs_new:Npn \__fp_pow_neg_aux:wNN #1 \s__fp \__fp_chk:w #2#3
   {
@@ -19994,7 +20104,7 @@
     \exp_after:wN #2
     \int_value:w \__fp_int_eval:w 2 - #3 \__fp_int_eval_end:
   }
-\cs_new:Npn \__fp_pow_neg_case:w \s__fp \__fp_chk:w #1#2#3;
+\cs_new:Npn \__fp_pow_neg_case:w \s__fp \__fp_chk:w #1#2#3\__fp_sep:
   {
     \if_case:w #1 \exp_stop_f:
            -1
@@ -20014,7 +20124,7 @@
         {#2} {#3} {#4} {#5}
     \fi:
   }
-\cs_new:Npn \__fp_pow_neg_case_aux:Nnnw #1#2#3#4 ;
+\cs_new:Npn \__fp_pow_neg_case_aux:Nnnw #1#2#3#4 \__fp_sep:
   {
     \if_meaning:w 0 #1
       \if_int_odd:w #3 \exp_stop_f:
@@ -20027,7 +20137,7 @@
     \fi:
   }
 \int_const:Nn \c__fp_fact_max_arg_int { 3248 }
-\cs_new:Npn \__fp_fact_o:w #1 \s__fp \__fp_chk:w #2#3#4; @
+\cs_new:Npn \__fp_fact_o:w #1 \s__fp \__fp_chk:w #2#3#4\__fp_sep: @
   {
     \if_case:w #2 \exp_stop_f:
       \__fp_case_return_o:Nw \c_one_fp
@@ -20043,13 +20153,13 @@
       \__fp_case_use:nw { \__fp_invalid_operation_o:fw { fact } }
     \fi:
     \__fp_fact_pos_o:w
-    \s__fp \__fp_chk:w #2 #3 #4 ;
+    \s__fp \__fp_chk:w #2 #3 #4 \__fp_sep:
   }
-\cs_new:Npn \__fp_fact_pos_o:w #1;
+\cs_new:Npn \__fp_fact_pos_o:w #1\__fp_sep:
   {
-    \__fp_small_int:wTF #1;
+    \__fp_small_int:wTF #1\__fp_sep:
       { \__fp_fact_int_o:n }
-      { \__fp_invalid_operation_o:fw { fact } #1; }
+      { \__fp_invalid_operation_o:fw { fact } #1\__fp_sep: }
   }
 \cs_new:Npn \__fp_fact_int_o:n #1
   {
@@ -20063,9 +20173,9 @@
     \exp_after:wN \__fp_sanitize:Nw
     \exp_after:wN 0
     \int_value:w \__fp_int_eval:w
-    \__fp_fact_loop_o:w #1 . 4 , { 1 } { } { } { } { } { } ;
+    \__fp_fact_loop_o:w #1 . 4 , { 1 } { } { } { } { } { } \__fp_sep:
   }
-\cs_new:Npn \__fp_fact_loop_o:w #1 . #2 ;
+\cs_new:Npn \__fp_fact_loop_o:w #1 . #2 \__fp_sep:
   {
     \if_int_compare:w #1 < 12 \exp_stop_f:
       \__fp_fact_small_o:w #1
@@ -20073,14 +20183,14 @@
     \exp_after:wN \__fp_ep_mul:wwwwn
     \exp_after:wN 4 \exp_after:wN ,
     \exp_after:wN { \int_value:w \__fp_int_eval:w #1 * (#1 - 1) }
-    { } { } { } { } { } ;
-    #2 ;
+    { } { } { } { } { } \__fp_sep:
+    #2 \__fp_sep:
     {
       \exp_after:wN \__fp_fact_loop_o:w
       \int_value:w \__fp_int_eval:w #1 - 2 .
     }
   }
-\cs_new:Npn \__fp_fact_small_o:w #1 \fi: #2 ; #3 ; #4
+\cs_new:Npn \__fp_fact_small_o:w #1 \fi: #2 \__fp_sep: #3 \__fp_sep: #4
   {
     \fi:
     \exp_after:wN \__fp_ep_mul:wwwwn
@@ -20092,8 +20202,8 @@
         1 \or: 1 \or: 2 \or: 6 \or: 24 \or: 120 \or: 720 \or: 5040
         \or: 40320 \or: 362880 \or: 3628800 \or: 39916800
         \fi:
-      } { } { } { } { } { } ;
-    #3 ;
+      } { } { } { } { } { } \__fp_sep:
+    #3 \__fp_sep:
     \__fp_ep_to_float_o:wwN 0
   }
 %% File: l3fp-trig.dtx
@@ -20124,7 +20234,7 @@
   { \__fp_parse_function:NNN \__fp_atan_o:Nw \use_i:nn }
 \cs_new:Npn \__fp_parse_word_atand:N
   { \__fp_parse_function:NNN \__fp_atan_o:Nw \use_ii:nn }
-\cs_new:Npn \__fp_sin_o:w #1 \s__fp \__fp_chk:w #2#3#4; @
+\cs_new:Npn \__fp_sin_o:w #1 \s__fp \__fp_chk:w #2#3#4\__fp_sep: @
   {
     \if_case:w #2 \exp_stop_f:
            \__fp_case_return_same_o:w
@@ -20137,9 +20247,9 @@
              { \__fp_invalid_operation_o:fw { #1 { sin } { sind } } }
     \else: \__fp_case_return_same_o:w
     \fi:
-    \s__fp \__fp_chk:w #2 #3 #4;
+    \s__fp \__fp_chk:w #2 #3 #4\__fp_sep:
   }
-\cs_new:Npn \__fp_cos_o:w #1 \s__fp \__fp_chk:w #2#3; @
+\cs_new:Npn \__fp_cos_o:w #1 \s__fp \__fp_chk:w #2#3\__fp_sep: @
   {
     \if_case:w #2 \exp_stop_f:
            \__fp_case_return_o:Nw \c_one_fp
@@ -20152,9 +20262,9 @@
              { \__fp_invalid_operation_o:fw { #1 { cos } { cosd } } }
     \else: \__fp_case_return_same_o:w
     \fi:
-    \s__fp \__fp_chk:w #2 #3;
+    \s__fp \__fp_chk:w #2 #3\__fp_sep:
   }
-\cs_new:Npn \__fp_csc_o:w #1 \s__fp \__fp_chk:w #2#3#4; @
+\cs_new:Npn \__fp_csc_o:w #1 \s__fp \__fp_chk:w #2#3#4\__fp_sep: @
   {
     \if_case:w #2 \exp_stop_f:
            \__fp_cot_zero_o:Nfw #3 { #1 { csc } { cscd } }
@@ -20167,9 +20277,9 @@
              { \__fp_invalid_operation_o:fw { #1 { csc } { cscd } } }
     \else: \__fp_case_return_same_o:w
     \fi:
-    \s__fp \__fp_chk:w #2 #3 #4;
+    \s__fp \__fp_chk:w #2 #3 #4\__fp_sep:
   }
-\cs_new:Npn \__fp_sec_o:w #1 \s__fp \__fp_chk:w #2#3; @
+\cs_new:Npn \__fp_sec_o:w #1 \s__fp \__fp_chk:w #2#3\__fp_sep: @
   {
     \if_case:w #2 \exp_stop_f:
            \__fp_case_return_o:Nw \c_one_fp
@@ -20182,9 +20292,9 @@
              { \__fp_invalid_operation_o:fw { #1 { sec } { secd } } }
     \else: \__fp_case_return_same_o:w
     \fi:
-    \s__fp \__fp_chk:w #2 #3;
+    \s__fp \__fp_chk:w #2 #3\__fp_sep:
   }
-\cs_new:Npn \__fp_tan_o:w #1 \s__fp \__fp_chk:w #2#3#4; @
+\cs_new:Npn \__fp_tan_o:w #1 \s__fp \__fp_chk:w #2#3#4\__fp_sep: @
   {
     \if_case:w #2 \exp_stop_f:
            \__fp_case_return_same_o:w
@@ -20197,9 +20307,9 @@
              { \__fp_invalid_operation_o:fw { #1 { tan } { tand } } }
     \else: \__fp_case_return_same_o:w
     \fi:
-    \s__fp \__fp_chk:w #2 #3 #4;
+    \s__fp \__fp_chk:w #2 #3 #4\__fp_sep:
   }
-\cs_new:Npn \__fp_cot_o:w #1 \s__fp \__fp_chk:w #2#3#4; @
+\cs_new:Npn \__fp_cot_o:w #1 \s__fp \__fp_chk:w #2#3#4\__fp_sep: @
   {
     \if_case:w #2 \exp_stop_f:
            \__fp_cot_zero_o:Nfw #3 { #1 { cot } { cotd } }
@@ -20212,7 +20322,7 @@
              { \__fp_invalid_operation_o:fw { #1 { cot } { cotd } } }
     \else: \__fp_case_return_same_o:w
     \fi:
-    \s__fp \__fp_chk:w #2 #3 #4;
+    \s__fp \__fp_chk:w #2 #3 #4\__fp_sep:
   }
 \cs_new:Npn \__fp_cot_zero_o:Nfw #1#2#3 \fi:
   {
@@ -20222,7 +20332,7 @@
       { \exp_args:NNf \__fp_division_by_zero_o:Nnw \c_minus_inf_fp }
     {#2}
   }
-\cs_new:Npn \__fp_trig:NNNNNwn #1#2#3#4#5 \s__fp \__fp_chk:w 1#6#7#8;
+\cs_new:Npn \__fp_trig:NNNNNwn #1#2#3#4#5 \s__fp \__fp_chk:w 1#6#7#8\__fp_sep:
   {
     \exp_after:wN #2
     \exp_after:wN #3
@@ -20234,17 +20344,17 @@
       \else:
         #1 \__fp_trig_small:ww \__fp_trigd_small:ww
       \fi:
-    #7,#8{0000}{0000};
+    #7,#8{0000}{0000}\__fp_sep:
   }
-\cs_new:Npn \__fp_trig_small:ww #1,#2;
-  { \__fp_ep_to_fixed:wwn #1,#2; . #1,#2; }
-\cs_new:Npn \__fp_trigd_small:ww #1,#2;
+\cs_new:Npn \__fp_trig_small:ww #1,#2\__fp_sep:
+  { \__fp_ep_to_fixed:wwn #1,#2\__fp_sep: . #1,#2\__fp_sep: }
+\cs_new:Npn \__fp_trigd_small:ww #1,#2\__fp_sep:
   {
     \__fp_ep_mul_raw:wwwwN
-      -1,{1745}{3292}{5199}{4329}{5769}{2369}; #1,#2;
+      -1,{1745}{3292}{5199}{4329}{5769}{2369}\__fp_sep: #1,#2\__fp_sep:
     \__fp_trig_small:ww
   }
-\cs_new:Npn \__fp_trigd_large:ww #1, #2#3#4#5#6#7;
+\cs_new:Npn \__fp_trigd_large:ww #1, #2#3#4#5#6#7\__fp_sep:
   {
     \exp_after:wN \__fp_pack_eight:wNNNNNNNN
     \exp_after:wN \__fp_pack_eight:wNNNNNNNN
@@ -20251,27 +20361,27 @@
     \exp_after:wN \__fp_pack_twice_four:wNNNNNNNN
     \exp_after:wN \__fp_pack_twice_four:wNNNNNNNN
     \exp_after:wN \__fp_trigd_large_auxi:nnnnwNNNN
-    \exp_after:wN ;
+    \exp_after:wN \__fp_sep:
     \exp:w \exp_end_continue_f:w
     \prg_replicate:nn { \int_max:nn { 22 - #1 } { 0 } } { 0 }
     #2#3#4#5#6#7 0000 0000 0000 !
   }
-\cs_new:Npn \__fp_trigd_large_auxi:nnnnwNNNN #1#2#3#4#5; #6#7#8#9
+\cs_new:Npn \__fp_trigd_large_auxi:nnnnwNNNN #1#2#3#4#5\__fp_sep: #6#7#8#9
   {
     \exp_after:wN \__fp_trigd_large_auxii:wNw
     \int_value:w \__fp_int_eval:w #1 + #2
       - (#1 + #2 - 4) / 9 * 9 \__fp_int_eval_end:
-    #3;
-    #4; #5{#6#7#8#9};
+    #3\__fp_sep:
+    #4\__fp_sep: #5{#6#7#8#9}\__fp_sep:
   }
-\cs_new:Npn \__fp_trigd_large_auxii:wNw #1; #2#3;
+\cs_new:Npn \__fp_trigd_large_auxii:wNw #1\__fp_sep: #2#3\__fp_sep:
   {
     + (#1#2 - 4) / 9 * 2
     \exp_after:wN \__fp_trigd_large_auxiii:www
     \int_value:w \__fp_int_eval:w #1#2
-      - (#1#2 - 4) / 9 * 9 \__fp_int_eval_end: #3 ;
+      - (#1#2 - 4) / 9 * 9 \__fp_int_eval_end: #3 \__fp_sep:
   }
-\cs_new:Npn \__fp_trigd_large_auxiii:www #1; #2; #3!
+\cs_new:Npn \__fp_trigd_large_auxiii:www #1\__fp_sep: #2\__fp_sep: #3!
   {
     \if_int_compare:w #1 < 4500 \exp_stop_f:
       \exp_after:wN \__fp_use_i_until_s:nw
@@ -20279,8 +20389,8 @@
     \else:
       + 1
     \fi:
-    \__fp_fixed_sub:wwn {9000}{0000}{0000}{0000}{0000}{0000};
-      {#1}#2{0000}{0000};
+    \__fp_fixed_sub:wwn {9000}{0000}{0000}{0000}{0000}{0000}\__fp_sep:
+      {#1}#2{0000}{0000}\__fp_sep:
     { \__fp_trigd_small:ww 2, }
   }
 \intarray_const_from_clist:Nn \c__fp_trig_intarray
@@ -20497,12 +20607,12 @@
     159592267, 181172796, 144388537, 196763139, 127431422, 179531145,
     100064922, 112650013, 132686230, 121550837,
   }
-\cs_new:Npn \__fp_trig_large:ww #1, #2#3#4#5#6;
+\cs_new:Npn \__fp_trig_large:ww #1, #2#3#4#5#6\__fp_sep:
   {
     \exp_after:wN \__fp_trig_large_auxi:w
     \int_value:w \__fp_int_eval:w (#1 - 4) / 8 \exp_after:wN ,
-    \int_value:w #1 , ;
-    {#2}{#3}{#4}{#5} ;
+    \int_value:w #1 , \__fp_sep:
+    {#2}{#3}{#4}{#5} \__fp_sep:
   }
 \cs_new:Npn \__fp_trig_large_auxi:w #1, #2,
   {
@@ -20547,10 +20657,10 @@
     \__fp_pack_twice_four:wNNNNNNNN \__fp_pack_twice_four:wNNNNNNNN
     \__fp_pack_twice_four:wNNNNNNNN \__fp_pack_twice_four:wNNNNNNNN
     \__fp_pack_twice_four:wNNNNNNNN \__fp_pack_twice_four:wNNNNNNNN
-    \__fp_trig_large_auxv:www ;
+    \__fp_trig_large_auxv:www \__fp_sep:
   }
 \cs_new:Npn \__fp_trig_large_auxiii:w 1 { \exp_stop_f: }
-\cs_new:Npn \__fp_trig_large_auxv:www #1; #2; #3;
+\cs_new:Npn \__fp_trig_large_auxv:www #1\__fp_sep: #2\__fp_sep: #3\__fp_sep:
   {
     \exp_after:wN \__fp_use_i_until_s:nw
     \exp_after:wN \__fp_trig_large_auxvii:w
@@ -20559,24 +20669,24 @@
         { \__fp_trig_large_auxvi:wnnnnnnnn }
       + \c__fp_trailing_shift_int - \c__fp_middle_shift_int
       \__fp_use_i_until_s:nw
-      ; #3 #1 ; ;
+      \__fp_sep: #3 #1 \__fp_sep: \__fp_sep:
   }
-\cs_new:Npn \__fp_trig_large_auxvi:wnnnnnnnn #1; #2#3#4#5#6#7#8#9
+\cs_new:Npn \__fp_trig_large_auxvi:wnnnnnnnn #1\__fp_sep: #2#3#4#5#6#7#8#9
   {
     \exp_after:wN \__fp_trig_large_pack:NNNNNw
     \int_value:w \__fp_int_eval:w \c__fp_middle_shift_int
       + #2*#9 + #3*#8 + #4*#7 + #5*#6
-      #1; {#2}{#3}{#4}{#5} {#7}{#8}{#9}
+      #1\__fp_sep: {#2}{#3}{#4}{#5} {#7}{#8}{#9}
   }
-\cs_new:Npn \__fp_trig_large_pack:NNNNNw #1#2#3#4#5#6;
-  { + #1#2#3#4#5 ; #6 }
+\cs_new:Npn \__fp_trig_large_pack:NNNNNw #1#2#3#4#5#6\__fp_sep:
+  { + #1#2#3#4#5 \__fp_sep: #6 }
 \cs_new:Npn \__fp_trig_large_auxvii:w #1#2#3
   {
     \exp_after:wN \__fp_trig_large_auxviii:ww
-    \int_value:w \__fp_int_eval:w (#1#2#3 - 62) / 125 ;
+    \int_value:w \__fp_int_eval:w (#1#2#3 - 62) / 125 \__fp_sep:
     #1#2#3
   }
-\cs_new:Npn \__fp_trig_large_auxviii:ww #1;
+\cs_new:Npn \__fp_trig_large_auxviii:ww #1\__fp_sep:
   {
     + #1
     \if_int_odd:w #1 \exp_stop_f:
@@ -20595,25 +20705,25 @@
       \prg_replicate:nn { 13 }
         { \__fp_trig_large_auxx:wNNNNN }
       + \c__fp_trailing_shift_int - \c__fp_middle_shift_int
-      ;
+      \__fp_sep:
   }
-\cs_new:Npn \__fp_trig_large_auxx:wNNNNN #1; #2 #3#4#5#6
+\cs_new:Npn \__fp_trig_large_auxx:wNNNNN #1\__fp_sep: #2 #3#4#5#6
   {
     \exp_after:wN \__fp_trig_large_pack:NNNNNw
     \int_value:w \__fp_int_eval:w \c__fp_middle_shift_int
       #2 8 * #3#4#5#6
-      #1; #2
+      #1\__fp_sep: #2
   }
-\cs_new:Npn \__fp_trig_large_auxxi:w #1;
+\cs_new:Npn \__fp_trig_large_auxxi:w #1\__fp_sep:
   {
     \exp_after:wN \__fp_ep_mul_raw:wwwwN
-    \int_value:w \__fp_int_eval:w 0 \__fp_ep_to_ep_loop:N #1 ; ; !
-    0,{7853}{9816}{3397}{4483}{0961}{5661};
+    \int_value:w \__fp_int_eval:w 0 \__fp_ep_to_ep_loop:N #1 \__fp_sep: \__fp_sep: !
+    0,{7853}{9816}{3397}{4483}{0961}{5661}\__fp_sep:
     \__fp_trig_small:ww
   }
-\cs_new:Npn \__fp_sin_series_o:NNwwww #1#2#3. #4;
+\cs_new:Npn \__fp_sin_series_o:NNwwww #1#2#3. #4\__fp_sep:
   {
-    \__fp_fixed_mul:wwn #4; #4;
+    \__fp_fixed_mul:wwn #4\__fp_sep: #4\__fp_sep:
     {
       \exp_after:wN \__fp_sin_series_aux_o:NNnwww
       \exp_after:wN #1
@@ -20626,7 +20736,7 @@
       {#3}
     }
   }
-\cs_new:Npn \__fp_sin_series_aux_o:NNnwww #1#2#3 #4; #5,#6;
+\cs_new:Npn \__fp_sin_series_aux_o:NNnwww #1#2#3 #4\__fp_sep: #5,#6\__fp_sep:
   {
     \if_int_odd:w \__fp_int_eval:w #3 / 2 \__fp_int_eval_end:
       \exp_after:wN \use_i:nn
@@ -20634,29 +20744,46 @@
       \exp_after:wN \use_ii:nn
     \fi:
     { % 1/18!
-      \__fp_fixed_mul_sub_back:wwwn    {0000}{0000}{0000}{0001}{5619}{2070};
-                                  #4;{0000}{0000}{0000}{0477}{9477}{3324};
-      \__fp_fixed_mul_sub_back:wwwn #4;{0000}{0000}{0011}{4707}{4559}{7730};
-      \__fp_fixed_mul_sub_back:wwwn #4;{0000}{0000}{2087}{6756}{9878}{6810};
-      \__fp_fixed_mul_sub_back:wwwn #4;{0000}{0027}{5573}{1922}{3985}{8907};
-      \__fp_fixed_mul_sub_back:wwwn #4;{0000}{2480}{1587}{3015}{8730}{1587};
-      \__fp_fixed_mul_sub_back:wwwn #4;{0013}{8888}{8888}{8888}{8888}{8889};
-      \__fp_fixed_mul_sub_back:wwwn #4;{0416}{6666}{6666}{6666}{6666}{6667};
-      \__fp_fixed_mul_sub_back:wwwn #4;{5000}{0000}{0000}{0000}{0000}{0000};
-      \__fp_fixed_mul_sub_back:wwwn#4;{10000}{0000}{0000}{0000}{0000}{0000};
+      \__fp_fixed_mul_sub_back:wwwn {0000}{0000}{0000}{0001}{5619}{2070}\__fp_sep:
+                                  #4\__fp_sep:
+                                  {0000}{0000}{0000}{0477}{9477}{3324}\__fp_sep:
+      \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep:
+                                  {0000}{0000}{0011}{4707}{4559}{7730}\__fp_sep:
+      \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep:
+                                  {0000}{0000}{2087}{6756}{9878}{6810}\__fp_sep:
+      \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep:
+                                  {0000}{0027}{5573}{1922}{3985}{8907}\__fp_sep:
+      \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep:
+                                  {0000}{2480}{1587}{3015}{8730}{1587}\__fp_sep:
+      \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep:
+                                  {0013}{8888}{8888}{8888}{8888}{8889}\__fp_sep:
+      \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep:
+                                  {0416}{6666}{6666}{6666}{6666}{6667}\__fp_sep:
+      \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep:
+                                  {5000}{0000}{0000}{0000}{0000}{0000}\__fp_sep:
+      \__fp_fixed_mul_sub_back:wwwn#4\__fp_sep:
+                                  {10000}{0000}{0000}{0000}{0000}{0000}\__fp_sep:
       { \__fp_fixed_continue:wn 0, }
     }
     { % 1/17!
-      \__fp_fixed_mul_sub_back:wwwn    {0000}{0000}{0000}{0028}{1145}{7254};
-                                  #4;{0000}{0000}{0000}{7647}{1637}{3182};
-      \__fp_fixed_mul_sub_back:wwwn #4;{0000}{0000}{0160}{5904}{3836}{8216};
-      \__fp_fixed_mul_sub_back:wwwn #4;{0000}{0002}{5052}{1083}{8544}{1719};
-      \__fp_fixed_mul_sub_back:wwwn #4;{0000}{0275}{5731}{9223}{9858}{9065};
-      \__fp_fixed_mul_sub_back:wwwn #4;{0001}{9841}{2698}{4126}{9841}{2698};
-      \__fp_fixed_mul_sub_back:wwwn #4;{0083}{3333}{3333}{3333}{3333}{3333};
-      \__fp_fixed_mul_sub_back:wwwn #4;{1666}{6666}{6666}{6666}{6666}{6667};
-      \__fp_fixed_mul_sub_back:wwwn#4;{10000}{0000}{0000}{0000}{0000}{0000};
-      { \__fp_ep_mul:wwwwn 0, } #5,#6;
+      \__fp_fixed_mul_sub_back:wwwn {0000}{0000}{0000}{0028}{1145}{7254}\__fp_sep:
+                                  #4\__fp_sep:
+                                  {0000}{0000}{0000}{7647}{1637}{3182}\__fp_sep:
+      \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep:
+                                  {0000}{0000}{0160}{5904}{3836}{8216}\__fp_sep:
+      \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep:
+                                  {0000}{0002}{5052}{1083}{8544}{1719}\__fp_sep:
+      \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep:
+                                  {0000}{0275}{5731}{9223}{9858}{9065}\__fp_sep:
+      \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep:
+                                  {0001}{9841}{2698}{4126}{9841}{2698}\__fp_sep:
+      \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep:
+                                  {0083}{3333}{3333}{3333}{3333}{3333}\__fp_sep:
+      \__fp_fixed_mul_sub_back:wwwn #4\__fp_sep:
+                                  {1666}{6666}{6666}{6666}{6666}{6667}\__fp_sep:
+      \__fp_fixed_mul_sub_back:wwwn#4\__fp_sep:
+                                  {10000}{0000}{0000}{0000}{0000}{0000}\__fp_sep:
+      { \__fp_ep_mul:wwwwn 0, } #5,#6\__fp_sep:
     }
     {
       \exp_after:wN \__fp_sanitize:Nw
@@ -20665,9 +20792,9 @@
     }
     #2
   }
-\cs_new:Npn \__fp_tan_series_o:NNwwww #1#2#3. #4;
+\cs_new:Npn \__fp_tan_series_o:NNwwww #1#2#3. #4\__fp_sep:
   {
-    \__fp_fixed_mul:wwn #4; #4;
+    \__fp_fixed_mul:wwn #4\__fp_sep: #4\__fp_sep:
     {
       \exp_after:wN \__fp_tan_series_aux_o:Nnwww
       \int_value:w
@@ -20678,22 +20805,32 @@
       {#3}
     }
   }
-\cs_new:Npn \__fp_tan_series_aux_o:Nnwww #1 #2 #3; #4,#5;
+\cs_new:Npn \__fp_tan_series_aux_o:Nnwww #1 #2 #3\__fp_sep: #4,#5\__fp_sep:
   {
-    \__fp_fixed_mul_sub_back:wwwn     {0000}{0000}{1527}{3493}{0856}{7059};
-                                #3; {0000}{0159}{6080}{0274}{5257}{6472};
-    \__fp_fixed_mul_sub_back:wwwn #3; {0002}{4571}{2320}{0157}{2558}{8481};
-    \__fp_fixed_mul_sub_back:wwwn #3; {0115}{5830}{7533}{5397}{3168}{2147};
-    \__fp_fixed_mul_sub_back:wwwn #3; {1929}{8245}{6140}{3508}{7719}{2982};
-    \__fp_fixed_mul_sub_back:wwwn #3;{10000}{0000}{0000}{0000}{0000}{0000};
-    { \__fp_ep_mul:wwwwn 0, } #4,#5;
+    \__fp_fixed_mul_sub_back:wwwn {0000}{0000}{1527}{3493}{0856}{7059}\__fp_sep:
+                                #3\__fp_sep:
+                                {0000}{0159}{6080}{0274}{5257}{6472}\__fp_sep:
+    \__fp_fixed_mul_sub_back:wwwn #3\__fp_sep:
+                                {0002}{4571}{2320}{0157}{2558}{8481}\__fp_sep:
+    \__fp_fixed_mul_sub_back:wwwn #3\__fp_sep:
+                                {0115}{5830}{7533}{5397}{3168}{2147}\__fp_sep:
+    \__fp_fixed_mul_sub_back:wwwn #3\__fp_sep:
+                                {1929}{8245}{6140}{3508}{7719}{2982}\__fp_sep:
+    \__fp_fixed_mul_sub_back:wwwn #3\__fp_sep:
+                                {10000}{0000}{0000}{0000}{0000}{0000}\__fp_sep:
+    { \__fp_ep_mul:wwwwn 0, } #4,#5\__fp_sep:
     {
-      \__fp_fixed_mul_sub_back:wwwn    {0000}{0007}{0258}{0681}{9408}{4706};
-                                  #3;{0000}{2343}{7175}{1399}{6151}{7670};
-      \__fp_fixed_mul_sub_back:wwwn #3;{0019}{2638}{4588}{9232}{8861}{3691};
-      \__fp_fixed_mul_sub_back:wwwn #3;{0536}{6357}{0691}{4344}{6852}{4252};
-      \__fp_fixed_mul_sub_back:wwwn #3;{5263}{1578}{9473}{6842}{1052}{6315};
-      \__fp_fixed_mul_sub_back:wwwn#3;{10000}{0000}{0000}{0000}{0000}{0000};
+      \__fp_fixed_mul_sub_back:wwwn {0000}{0007}{0258}{0681}{9408}{4706}\__fp_sep:
+                                  #3\__fp_sep:
+                                  {0000}{2343}{7175}{1399}{6151}{7670}\__fp_sep:
+      \__fp_fixed_mul_sub_back:wwwn #3\__fp_sep:
+                                  {0019}{2638}{4588}{9232}{8861}{3691}\__fp_sep:
+      \__fp_fixed_mul_sub_back:wwwn #3\__fp_sep:
+                                  {0536}{6357}{0691}{4344}{6852}{4252}\__fp_sep:
+      \__fp_fixed_mul_sub_back:wwwn #3\__fp_sep:
+                                  {5263}{1578}{9473}{6842}{1052}{6315}\__fp_sep:
+      \__fp_fixed_mul_sub_back:wwwn#3\__fp_sep:
+                                  {10000}{0000}{0000}{0000}{0000}{0000}\__fp_sep:
       {
         \reverse_if:N \if_int_odd:w
             \__fp_int_eval:w (#2 - 1) / 2 \__fp_int_eval_end:
@@ -20723,7 +20860,7 @@
   }
 \cs_new:Npe \__fp_atan_default:w #1#2#3 @ { #1 #2 #3 \c_one_fp @ }
 \cs_new:Npn \__fp_atanii_o:Nww
-    #1 \s__fp \__fp_chk:w #2#3#4; \s__fp \__fp_chk:w #5 #6 @
+    #1 \s__fp \__fp_chk:w #2#3#4\__fp_sep: \s__fp \__fp_chk:w #5 #6 @
   {
     \if_meaning:w 3 #2 \__fp_case_return_i_o:ww \fi:
     \if_meaning:w 3 #5 \__fp_case_return_ii_o:ww \fi:
@@ -20739,29 +20876,29 @@
     \or: \__fp_case_return:nw { \__fp_atan_inf_o:NNNw #1 #3 0 }
     \fi:
     \__fp_atan_normal_o:NNnwNnw #1
-    \s__fp \__fp_chk:w #2#3#4;
+    \s__fp \__fp_chk:w #2#3#4\__fp_sep:
     \s__fp \__fp_chk:w #5 #6
   }
-\cs_new:Npn \__fp_acotii_o:Nww #1#2; #3;
-  { \__fp_atanii_o:Nww #1#3; #2; }
-\cs_new:Npn \__fp_atan_inf_o:NNNw #1#2#3 \s__fp \__fp_chk:w #4#5#6;
+\cs_new:Npn \__fp_acotii_o:Nww #1#2\__fp_sep: #3\__fp_sep:
+  { \__fp_atanii_o:Nww #1#3\__fp_sep: #2\__fp_sep: }
+\cs_new:Npn \__fp_atan_inf_o:NNNw #1#2#3 \s__fp \__fp_chk:w #4#5#6\__fp_sep:
   {
     \exp_after:wN \__fp_atan_combine_o:NwwwwwN
     \exp_after:wN #2
     \int_value:w \__fp_int_eval:w
-      \if_meaning:w 2 #5 7 - \fi: #3 \exp_after:wN ;
+      \if_meaning:w 2 #5 7 - \fi: #3 \exp_after:wN \__fp_sep:
     \c__fp_one_fixed_tl
-    {0000}{0000}{0000}{0000}{0000}{0000};
-    0,{0000}{0000}{0000}{0000}{0000}{0000}; #1
+    {0000}{0000}{0000}{0000}{0000}{0000}\__fp_sep:
+    0,{0000}{0000}{0000}{0000}{0000}{0000}\__fp_sep: #1
   }
 \cs_new_protected:Npn \__fp_atan_normal_o:NNnwNnw
-    #1 \s__fp \__fp_chk:w 1#2#3#4; \s__fp \__fp_chk:w 1#5#6#7;
+    #1 \s__fp \__fp_chk:w 1#2#3#4\__fp_sep: \s__fp \__fp_chk:w 1#5#6#7\__fp_sep:
   {
     \__fp_atan_test_o:NwwNwwN
-      #2 #3, #4{0000}{0000};
-      #5 #6, #7{0000}{0000}; #1
+      #2 #3, #4{0000}{0000}\__fp_sep:
+      #5 #6, #7{0000}{0000}\__fp_sep: #1
   }
-\cs_new:Npn \__fp_atan_test_o:NwwNwwN #1#2,#3; #4#5,#6;
+\cs_new:Npn \__fp_atan_test_o:NwwNwwN #1#2,#3\__fp_sep: #4#5,#6\__fp_sep:
   {
     \exp_after:wN \__fp_atan_combine_o:NwwwwwN
     \exp_after:wN #1
@@ -20770,13 +20907,13 @@
         7 - \__fp_int_eval:w
       \fi:
       \if_int_compare:w
-          \__fp_ep_compare:wwww #2,#3; #5,#6; > \c_zero_int
+          \__fp_ep_compare:wwww #2,#3\__fp_sep: #5,#6\__fp_sep: > \c_zero_int
         3 -
         \exp_after:wN \__fp_reverse_args:Nww
       \fi:
-      \__fp_atan_div:wnwwnw #2,#3; #5,#6;
+      \__fp_atan_div:wnwwnw #2,#3\__fp_sep: #5,#6\__fp_sep:
   }
-\cs_new:Npn \__fp_atan_div:wnwwnw #1,#2#3; #4,#5#6;
+\cs_new:Npn \__fp_atan_div:wnwwnw #1,#2#3\__fp_sep: #4,#5#6\__fp_sep:
   {
     \if_int_compare:w
       \__fp_int_eval:w 41421 * #5 < #2 000
@@ -20786,49 +20923,50 @@
       \exp_after:wN \__fp_atan_near:wwwn
     \fi:
     0
-    \__fp_ep_div:wwwwn #1,{#2}#3; #4,{#5}#6;
+    \__fp_ep_div:wwwwn #1,{#2}#3\__fp_sep: #4,{#5}#6\__fp_sep:
     \__fp_atan_auxi:ww
   }
 \cs_new:Npn \__fp_atan_near:wwwn
-    0 \__fp_ep_div:wwwwn #1,#2; #3,
+    0 \__fp_ep_div:wwwwn #1,#2\__fp_sep: #3,
   {
     1
-    \__fp_ep_to_fixed:wwn #1 - #3, #2;
+    \__fp_ep_to_fixed:wwn #1 - #3, #2\__fp_sep:
     \__fp_atan_near_aux:wwn
   }
-\cs_new:Npn \__fp_atan_near_aux:wwn #1; #2;
+\cs_new:Npn \__fp_atan_near_aux:wwn #1\__fp_sep: #2\__fp_sep:
   {
-    \__fp_fixed_add:wwn #1; #2;
-    { \__fp_fixed_sub:wwn #2; #1; { \__fp_ep_div:wwwwn 0, } 0, }
+    \__fp_fixed_add:wwn #1\__fp_sep: #2\__fp_sep:
+    { \__fp_fixed_sub:wwn #2\__fp_sep: #1\__fp_sep: { \__fp_ep_div:wwwwn 0, } 0, }
   }
-\cs_new:Npn \__fp_atan_auxi:ww #1,#2;
-  { \__fp_ep_to_fixed:wwn #1,#2; \__fp_atan_auxii:w #1,#2; }
-\cs_new:Npn \__fp_atan_auxii:w #1;
+\cs_new:Npn \__fp_atan_auxi:ww #1,#2\__fp_sep:
+  { \__fp_ep_to_fixed:wwn #1,#2\__fp_sep: \__fp_atan_auxii:w #1,#2\__fp_sep: }
+\cs_new:Npn \__fp_atan_auxii:w #1\__fp_sep:
   {
-    \__fp_fixed_mul:wwn #1; #1;
+    \__fp_fixed_mul:wwn #1\__fp_sep: #1\__fp_sep:
     {
-      \__fp_atan_Taylor_loop:www 39 ;
-        {0000}{0000}{0000}{0000}{0000}{0000} ;
+      \__fp_atan_Taylor_loop:www 39 \__fp_sep:
+        {0000}{0000}{0000}{0000}{0000}{0000} \__fp_sep:
     }
-    ! #1;
+    ! #1\__fp_sep:
   }
-\cs_new:Npn \__fp_atan_Taylor_loop:www #1; #2; #3;
+\cs_new:Npn \__fp_atan_Taylor_loop:www #1\__fp_sep: #2\__fp_sep: #3\__fp_sep:
   {
     \if_int_compare:w #1 = - \c_one_int
       \__fp_atan_Taylor_break:w
     \fi:
-    \exp_after:wN \__fp_fixed_div_int:wwN \c__fp_one_fixed_tl #1;
-    \__fp_rrot:www \__fp_fixed_mul_sub_back:wwwn #2; #3;
+    \exp_after:wN \__fp_fixed_div_int:wwN \c__fp_one_fixed_tl #1\__fp_sep:
+    \__fp_rrot:www \__fp_fixed_mul_sub_back:wwwn #2\__fp_sep: #3\__fp_sep:
     {
       \exp_after:wN \__fp_atan_Taylor_loop:www
-      \int_value:w \__fp_int_eval:w #1 - 2 ;
+      \int_value:w \__fp_int_eval:w #1 - 2 \__fp_sep:
     }
-    #3;
+    #3\__fp_sep:
   }
 \cs_new:Npn \__fp_atan_Taylor_break:w
-    \fi: #1 \__fp_fixed_mul_sub_back:wwwn #2; #3 !
-  { \fi: ; #2 ; }
-\cs_new:Npn \__fp_atan_combine_o:NwwwwwN #1 #2; #3; #4; #5,#6; #7
+    \fi: #1 \__fp_fixed_mul_sub_back:wwwn #2\__fp_sep: #3 !
+  { \fi: \__fp_sep: #2 \__fp_sep: }
+\cs_new:Npn \__fp_atan_combine_o:NwwwwwN
+    #1 #2\__fp_sep: #3\__fp_sep: #4\__fp_sep: #5,#6\__fp_sep: #7
   {
     \exp_after:wN \__fp_sanitize:Nw
     \exp_after:wN #1
@@ -20838,22 +20976,22 @@
       \else:
         \exp_after:wN \use_ii:nn
       \fi:
-      { #5 \__fp_fixed_mul:wwn #3; #6; }
+      { #5 \__fp_fixed_mul:wwn #3\__fp_sep: #6\__fp_sep: }
       {
-        \__fp_fixed_mul:wwn #3; #4;
+        \__fp_fixed_mul:wwn #3\__fp_sep: #4\__fp_sep:
         {
           \exp_after:wN \__fp_atan_combine_aux:ww
-          \int_value:w \__fp_int_eval:w #2 / 2 ; #2;
+          \int_value:w \__fp_int_eval:w #2 / 2 \__fp_sep: #2\__fp_sep:
         }
       }
       { #7 \__fp_fixed_to_float_o:wN \__fp_fixed_to_float_rad_o:wN }
       #1
   }
-\cs_new:Npn \__fp_atan_combine_aux:ww #1; #2;
+\cs_new:Npn \__fp_atan_combine_aux:ww #1\__fp_sep: #2\__fp_sep:
   {
     \__fp_fixed_mul_short:wwn
-      {7853}{9816}{3397}{4483}{0961}{5661};
-      {#1}{0000}{0000};
+      {7853}{9816}{3397}{4483}{0961}{5661}\__fp_sep:
+      {#1}{0000}{0000}\__fp_sep:
     {
       \if_int_odd:w #2 \exp_stop_f:
         \exp_after:wN \__fp_fixed_sub:wwn
@@ -20862,7 +21000,7 @@
       \fi:
     }
   }
-\cs_new:Npn \__fp_asin_o:w #1 \s__fp \__fp_chk:w #2#3; @
+\cs_new:Npn \__fp_asin_o:w #1 \s__fp \__fp_chk:w #2#3\__fp_sep: @
   {
     \if_case:w #2 \exp_stop_f:
       \__fp_case_return_same_o:w
@@ -20875,9 +21013,9 @@
     \else:
       \__fp_case_return_same_o:w
     \fi:
-    \s__fp \__fp_chk:w #2 #3;
+    \s__fp \__fp_chk:w #2 #3\__fp_sep:
   }
-\cs_new:Npn \__fp_acos_o:w #1 \s__fp \__fp_chk:w #2#3; @
+\cs_new:Npn \__fp_acos_o:w #1 \s__fp \__fp_chk:w #2#3\__fp_sep: @
   {
     \if_case:w #2 \exp_stop_f:
       \__fp_case_use:nw { \__fp_atan_inf_o:NNNw #1 0 4 }
@@ -20893,10 +21031,10 @@
     \else:
       \__fp_case_return_same_o:w
     \fi:
-    \s__fp \__fp_chk:w #2 #3;
+    \s__fp \__fp_chk:w #2 #3\__fp_sep:
   }
 \cs_new:Npn \__fp_asin_normal_o:NfwNnnnnw
-    #1#2#3 \s__fp \__fp_chk:w 1#4#5#6#7#8#9;
+    #1#2#3 \s__fp \__fp_chk:w 1#4#5#6#7#8#9\__fp_sep:
   {
     \if_int_compare:w #5 < \c_one_int
       \exp_after:wN \__fp_use_none_until_s:w
@@ -20906,30 +21044,30 @@
     \fi:
     \__fp_use_i:ww
     \__fp_invalid_operation_o:fw {#2}
-      \s__fp \__fp_chk:w 1#4{#5}{#6}{#7}{#8}{#9};
+      \s__fp \__fp_chk:w 1#4{#5}{#6}{#7}{#8}{#9}\__fp_sep:
     \__fp_asin_auxi_o:NnNww
-      #1 {#3} #4 #5,{#6}{#7}{#8}{#9}{0000}{0000};
+      #1 {#3} #4 #5,{#6}{#7}{#8}{#9}{0000}{0000}\__fp_sep:
   }
-\cs_new:Npn \__fp_asin_auxi_o:NnNww #1#2#3#4,#5;
+\cs_new:Npn \__fp_asin_auxi_o:NnNww #1#2#3#4,#5\__fp_sep:
   {
-    \__fp_ep_to_fixed:wwn #4,#5;
+    \__fp_ep_to_fixed:wwn #4,#5\__fp_sep:
     \__fp_asin_isqrt:wn
-    \__fp_ep_mul:wwwwn #4,#5;
+    \__fp_ep_mul:wwwwn #4,#5\__fp_sep:
     \__fp_ep_to_ep:wwN
     \__fp_fixed_continue:wn
     { #2 \__fp_atan_test_o:NwwNwwN #3 }
-    0 1,{1000}{0000}{0000}{0000}{0000}{0000}; #1
+    0 1,{1000}{0000}{0000}{0000}{0000}{0000}\__fp_sep: #1
   }
-\cs_new:Npn \__fp_asin_isqrt:wn #1;
+\cs_new:Npn \__fp_asin_isqrt:wn #1\__fp_sep:
   {
-    \exp_after:wN \__fp_fixed_sub:wwn \c__fp_one_fixed_tl #1;
+    \exp_after:wN \__fp_fixed_sub:wwn \c__fp_one_fixed_tl #1\__fp_sep:
     {
-      \__fp_fixed_add_one:wN #1;
+      \__fp_fixed_add_one:wN #1\__fp_sep:
       \__fp_fixed_continue:wn { \__fp_ep_mul:wwwwn 0, } 0,
     }
     \__fp_ep_isqrt:wwn
   }
-\cs_new:Npn \__fp_acsc_o:w #1 \s__fp \__fp_chk:w #2#3#4; @
+\cs_new:Npn \__fp_acsc_o:w #1 \s__fp \__fp_chk:w #2#3#4\__fp_sep: @
   {
     \if_case:w \if_meaning:w 2 #2 #3 \fi: #2 \exp_stop_f:
            \__fp_case_use:nw
@@ -20940,9 +21078,9 @@
     \or:   \__fp_case_return_same_o:w
     \else: \__fp_case_return_o:Nw \c_minus_zero_fp
     \fi:
-    \s__fp \__fp_chk:w #2 #3 #4;
+    \s__fp \__fp_chk:w #2 #3 #4\__fp_sep:
   }
-\cs_new:Npn \__fp_asec_o:w #1 \s__fp \__fp_chk:w #2#3; @
+\cs_new:Npn \__fp_asec_o:w #1 \s__fp \__fp_chk:w #2#3\__fp_sep: @
   {
     \if_case:w #2 \exp_stop_f:
       \__fp_case_use:nw
@@ -20956,24 +21094,24 @@
     \or:   \__fp_case_use:nw { \__fp_atan_inf_o:NNNw #1 0 4 }
     \else: \__fp_case_return_same_o:w
     \fi:
-    \s__fp \__fp_chk:w #2 #3;
+    \s__fp \__fp_chk:w #2 #3\__fp_sep:
   }
-\cs_new:Npn \__fp_acsc_normal_o:NfwNnw #1#2#3 \s__fp \__fp_chk:w 1#4#5#6;
+\cs_new:Npn \__fp_acsc_normal_o:NfwNnw #1#2#3 \s__fp \__fp_chk:w 1#4#5#6\__fp_sep:
   {
     \int_compare:nNnTF {#5} < 1
       {
         \__fp_invalid_operation_o:fw {#2}
-          \s__fp \__fp_chk:w 1#4{#5}#6;
+          \s__fp \__fp_chk:w 1#4{#5}#6\__fp_sep:
       }
       {
         \__fp_ep_div:wwwwn
-          1,{1000}{0000}{0000}{0000}{0000}{0000};
-          #5,#6{0000}{0000};
+          1,{1000}{0000}{0000}{0000}{0000}{0000}\__fp_sep:
+          #5,#6{0000}{0000}\__fp_sep:
         { \__fp_asin_auxi_o:NnNww #1 {#3} #4 }
       }
   }
 %% File: l3fp-convert.dtx
-\cs_new:Npn \__fp_tuple_convert:Nw #1 \s__fp_tuple \__fp_tuple_chk:w #2 ;
+\cs_new:Npn \__fp_tuple_convert:Nw #1 \s__fp_tuple \__fp_tuple_chk:w #2 \__fp_sep:
   {
     \int_case:nnF { \__fp_array_count:n {#2} }
       {
@@ -20982,26 +21120,29 @@
       }
       {
         \__fp_tuple_convert_loop:nNw { } #1
-          #2 { ? \__fp_tuple_convert_end:w } ;
+          #2 { ? \__fp_tuple_convert_end:w } \__fp_sep:
           @ { \use_none:nn }
       }
   }
-\cs_new:Npn \__fp_tuple_convert_loop:nNw #1#2#3#4; #5 @ #6
+\cs_new:Npn \__fp_tuple_convert_loop:nNw #1#2#3#4\__fp_sep: #5 @ #6
   {
     \use_none:n #3
-    \exp_args:Nf \__fp_tuple_convert_loop:nNw { #2 #3#4 ; } #2 #5
+    \exp_args:Nf \__fp_tuple_convert_loop:nNw { #2 #3#4 \__fp_sep: } #2 #5
       @ { #6 , ~ #1 }
   }
 \cs_new:Npn \__fp_tuple_convert_end:w #1 @ #2
   { \exp_after:wN ( \exp:w \exp_end_continue_f:w #2 ) }
-\cs_new:Npn \__fp_trim_zeros:w #1 ;
+\cs_new:Npn \__fp_trim_zeros:w #1 \__fp_sep:
   {
-    \__fp_trim_zeros_loop:w #1
-      ; \__fp_trim_zeros_loop:w 0; \__fp_trim_zeros_dot:w .; \s__fp_stop
+    \__fp_trim_zeros_loop:w #1 \__fp_sep:
+      \__fp_trim_zeros_loop:w 0\__fp_sep:
+      \__fp_trim_zeros_dot:w .\__fp_sep:
+      \s__fp_stop
   }
-\cs_new:Npn \__fp_trim_zeros_loop:w #1 0; #2 { #2 #1 ; #2 }
-\cs_new:Npn \__fp_trim_zeros_dot:w #1 .; { \__fp_trim_zeros_end:w #1 ; }
-\cs_new:Npn \__fp_trim_zeros_end:w #1 ; #2 \s__fp_stop { #1 }
+\cs_new:Npn \__fp_trim_zeros_loop:w #1 0\__fp_sep: #2 { #2 #1 \__fp_sep: #2 }
+\cs_new:Npn \__fp_trim_zeros_dot:w #1 .\__fp_sep:
+  { \__fp_trim_zeros_end:w #1 \__fp_sep: }
+\cs_new:Npn \__fp_trim_zeros_end:w #1 \__fp_sep: #2 \s__fp_stop { #1 }
 \cs_new:Npn \fp_to_scientific:N #1
   { \exp_after:wN \__fp_to_scientific_dispatch:w #1 }
 \cs_generate_variant:Nn \fp_to_scientific:N { c }
@@ -21016,9 +21157,9 @@
       #1 \__fp_to_scientific:w \__fp_to_scientific_recover:w
     #1
   }
-\cs_new:Npn \__fp_to_scientific_recover:w #1 #2 ;
+\cs_new:Npn \__fp_to_scientific_recover:w #1 #2 \__fp_sep:
   {
-    \__fp_error:nffn { unknown-type } { \tl_to_str:n { #2 ; } } { } { }
+    \__fp_error:nffn { unknown-type } { \tl_to_str:n { #2 \__fp_sep: } } { } { }
     nan
   }
 \cs_new:Npn \__fp_tuple_to_scientific:w
@@ -21047,14 +21188,14 @@
     \s__fp \__fp_chk:w #1 #2
   }
 \cs_new:Npn \__fp_to_scientific_normal:wnnnnn
-  \s__fp \__fp_chk:w 1 #1 #2 #3#4#5#6 ;
+  \s__fp \__fp_chk:w 1 #1 #2 #3#4#5#6 \__fp_sep:
   {
     \exp_after:wN \__fp_to_scientific_normal:wNw
     \exp_after:wN e
     \int_value:w \__fp_int_eval:w #2 - 1
-    ; #3 #4 #5 #6 ;
+    \__fp_sep: #3 #4 #5 #6 \__fp_sep:
   }
-\cs_new:Npn \__fp_to_scientific_normal:wNw #1 ; #2#3;
+\cs_new:Npn \__fp_to_scientific_normal:wNw #1 \__fp_sep: #2#3\__fp_sep:
   { #2.#3 #1 }
 \cs_new:Npn \fp_to_decimal:N #1
   { \exp_after:wN \__fp_to_decimal_dispatch:w #1 }
@@ -21070,9 +21211,9 @@
       #1 \__fp_to_decimal:w \__fp_to_decimal_recover:w
     #1
   }
-\cs_new:Npn \__fp_to_decimal_recover:w #1 #2 ;
+\cs_new:Npn \__fp_to_decimal_recover:w #1 #2 \__fp_sep:
   {
-    \__fp_error:nffn { unknown-type } { \tl_to_str:n { #2 ; } } { } { }
+    \__fp_error:nffn { unknown-type } { \tl_to_str:n { #2 \__fp_sep: } } { } { }
     nan
   }
 \cs_new:Npn \__fp_tuple_to_decimal:w
@@ -21101,7 +21242,7 @@
     \s__fp \__fp_chk:w #1 #2
   }
 \cs_new:Npn \__fp_to_decimal_normal:wnnnnn
-    \s__fp \__fp_chk:w 1 #1 #2 #3#4#5#6 ;
+    \s__fp \__fp_chk:w 1 #1 #2 #3#4#5#6 \__fp_sep:
   {
     \int_compare:nNnTF {#2} > 0
       {
@@ -21113,7 +21254,7 @@
           {
             \exp_after:wN \exp_after:wN
             \exp_after:wN \__fp_to_decimal_huge:wnnnn
-            \prg_replicate:nn { #2 - \c__fp_prec_int } { 0 } ;
+            \prg_replicate:nn { #2 - \c__fp_prec_int } { 0 } \__fp_sep:
           }
         {#3} {#4} {#5} {#6}
       }
@@ -21122,10 +21263,10 @@
         \exp_after:wN 0
         \exp_after:wN .
         \exp:w \exp_end_continue_f:w \prg_replicate:nn { - #2 } { 0 }
-        #3#4#5#6 ;
+        #3#4#5#6 \__fp_sep:
       }
   }
-\cs_new:Npn \__fp_to_decimal_large:Nnnw #1#2#3#4;
+\cs_new:Npn \__fp_to_decimal_large:Nnnw #1#2#3#4\__fp_sep:
   {
     \exp_after:wN \__fp_trim_zeros:w \int_value:w
       \if_int_compare:w #2 > \c_zero_int
@@ -21132,9 +21273,9 @@
         #2
       \fi:
       \exp_stop_f:
-      #3.#4 ;
+      #3.#4 \__fp_sep:
   }
-\cs_new:Npn \__fp_to_decimal_huge:wnnnn #1; #2#3#4#5 { #2#3#4#5 #1 }
+\cs_new:Npn \__fp_to_decimal_huge:wnnnn #1\__fp_sep: #2#3#4#5 { #2#3#4#5 #1 }
 \cs_new:Npn \fp_to_tl:N #1 { \exp_after:wN \__fp_to_tl_dispatch:w #1 }
 \cs_generate_variant:Nn \fp_to_tl:N { c }
 \cs_new:Npn \fp_to_tl:n
@@ -21144,9 +21285,9 @@
   }
 \cs_new:Npn \__fp_to_tl_dispatch:w #1
   { \__fp_change_func_type:NNN #1 \__fp_to_tl:w \__fp_to_tl_recover:w #1 }
-\cs_new:Npn \__fp_to_tl_recover:w #1 #2 ;
+\cs_new:Npn \__fp_to_tl_recover:w #1 #2 \__fp_sep:
   {
-    \__fp_error:nffn { unknown-type } { \tl_to_str:n { #2 ; } } { } { }
+    \__fp_error:nffn { unknown-type } { \tl_to_str:n { #2 \__fp_sep: } } { } { }
     nan
   }
 \cs_new:Npn \__fp_tuple_to_tl:w
@@ -21170,15 +21311,15 @@
     \s__fp \__fp_chk:w 1 0 {#1}
   }
 \cs_new:Npn \__fp_to_tl_scientific:wnnnnn
-  \s__fp \__fp_chk:w 1 #1 #2 #3#4#5#6 ;
+  \s__fp \__fp_chk:w 1 #1 #2 #3#4#5#6 \__fp_sep:
   {
     \exp_after:wN \__fp_to_tl_scientific:wNw
     \exp_after:wN e
     \int_value:w \__fp_int_eval:w #2 - 1
-    ; #3 #4 #5 #6 ;
+    \__fp_sep: #3 #4 #5 #6 \__fp_sep:
   }
-\cs_new:Npn \__fp_to_tl_scientific:wNw #1 ; #2#3;
-  { \__fp_trim_zeros:w #2.#3 ; #1 }
+\cs_new:Npn \__fp_to_tl_scientific:wNw #1 \__fp_sep: #2#3\__fp_sep:
+  { \__fp_trim_zeros:w #2.#3 \__fp_sep: #1 }
 \cs_new:Npn \fp_to_dim:N #1
   { \exp_after:wN \__fp_to_dim_dispatch:w #1 }
 \cs_generate_variant:Nn \fp_to_dim:N { c }
@@ -21187,14 +21328,14 @@
     \exp_after:wN \__fp_to_dim_dispatch:w
     \exp:w \exp_end_continue_f:w \__fp_parse:n
   }
-\cs_new:Npn \__fp_to_dim_dispatch:w #1#2 ;
+\cs_new:Npn \__fp_to_dim_dispatch:w #1#2 \__fp_sep:
   {
     \__fp_change_func_type:NNN #1 \__fp_to_dim:w \__fp_to_dim_recover:w
-    #1 #2 ;
+    #1 #2 \__fp_sep:
   }
 \cs_new:Npn \__fp_to_dim_recover:w #1
   { \__fp_invalid_operation:nnw { 0pt } { fp_to_dim } }
-\cs_new:Npn \__fp_to_dim:w #1 ; { \__fp_to_decimal:w #1 ; pt }
+\cs_new:Npn \__fp_to_dim:w #1 \__fp_sep: { \__fp_to_decimal:w #1 \__fp_sep: pt }
 \cs_new:Npn \fp_to_int:N #1 { \exp_after:wN \__fp_to_int_dispatch:w #1 }
 \cs_generate_variant:Nn \fp_to_int:N { c }
 \cs_new:Npn \fp_to_int:n
@@ -21202,17 +21343,17 @@
     \exp_after:wN \__fp_to_int_dispatch:w
     \exp:w \exp_end_continue_f:w \__fp_parse:n
   }
-\cs_new:Npn \__fp_to_int_dispatch:w #1#2 ;
+\cs_new:Npn \__fp_to_int_dispatch:w #1#2 \__fp_sep:
   {
     \__fp_change_func_type:NNN #1 \__fp_to_int:w \__fp_to_int_recover:w
-    #1 #2 ;
+    #1 #2 \__fp_sep:
   }
 \cs_new:Npn \__fp_to_int_recover:w #1
   { \__fp_invalid_operation:nnw { 0 } { fp_to_int } }
-\cs_new:Npn \__fp_to_int:w #1;
+\cs_new:Npn \__fp_to_int:w #1\__fp_sep:
   {
     \exp_after:wN \__fp_to_decimal:w \exp:w \exp_end_continue_f:w
-    \__fp_round:Nwn \__fp_round_to_nearest:NNN #1; { 0 }
+    \__fp_round:Nwn \__fp_round_to_nearest:NNN #1\__fp_sep: { 0 }
   }
 \cs_new:Npn \dim_to_fp:n #1
   {
@@ -21219,7 +21360,7 @@
     \exp_after:wN \__fp_from_dim_test:ww
     \exp_after:wN 0
     \exp_after:wN ,
-    \int_value:w \tex_glueexpr:D #1 ;
+    \int_value:w \tex_glueexpr:D #1 \__fp_sep:
   }
 \cs_new:Npn \__fp_from_dim_test:ww #1, #2
   {
@@ -21235,18 +21376,18 @@
         \fi:
     \fi:
   }
-\cs_new:Npn \__fp_from_dim:wNw #1,#2#3;
+\cs_new:Npn \__fp_from_dim:wNw #1,#2#3\__fp_sep:
   {
-    \__fp_pack_twice_four:wNNNNNNNN \__fp_from_dim:wNNnnnnnn ;
-    #3 000 0000 00 {10}987654321; #2 {#1}
+    \__fp_pack_twice_four:wNNNNNNNN \__fp_from_dim:wNNnnnnnn \__fp_sep:
+    #3 000 0000 00 {10}987654321\__fp_sep: #2 {#1}
   }
-\cs_new:Npn \__fp_from_dim:wNNnnnnnn #1; #2#3#4#5#6#7#8#9
-  { \__fp_from_dim:wnnnnwNn #1 {#2#300} {0000} ; }
-\cs_new:Npn \__fp_from_dim:wnnnnwNn #1; #2#3#4#5#6; #7#8
+\cs_new:Npn \__fp_from_dim:wNNnnnnnn #1\__fp_sep: #2#3#4#5#6#7#8#9
+  { \__fp_from_dim:wnnnnwNn #1 {#2#300} {0000} \__fp_sep: }
+\cs_new:Npn \__fp_from_dim:wnnnnwNn #1\__fp_sep: #2#3#4#5#6\__fp_sep: #7#8
   {
     \__fp_mul_npos_o:Nww #7
-      \s__fp \__fp_chk:w 1 #7 {#5} #1 ;
-      \s__fp \__fp_chk:w 1 0 {#8} {1525} {8789} {0625} {0000} ;
+      \s__fp \__fp_chk:w 1 #7 {#5} #1 \__fp_sep:
+      \s__fp \__fp_chk:w 1 0 {#8} {1525} {8789} {0625} {0000} \__fp_sep:
       \prg_do_nothing:
   }
 \cs_new_eq:NN \fp_use:N \fp_to_decimal:N
@@ -21266,16 +21407,16 @@
       {
         \exp_last_unbraced:Ne \use_ii:nn
           {
-            \__fp_array_to_clist_loop:Nw #1 { ? \prg_break: } ;
+            \__fp_array_to_clist_loop:Nw #1 { ? \prg_break: } \__fp_sep:
             \prg_break_point:
           }
       }
   }
-\cs_new:Npn \__fp_array_to_clist_loop:Nw #1#2;
+\cs_new:Npn \__fp_array_to_clist_loop:Nw #1#2\__fp_sep:
   {
     \use_none:n #1
     , ~
-    \exp_not:f { \__fp_to_tl_dispatch:w #1 #2 ; }
+    \exp_not:f { \__fp_to_tl_dispatch:w #1 #2 \__fp_sep: }
     \__fp_array_to_clist_loop:Nw
   }
 %% File: l3fp-random.dtx
@@ -21290,7 +21431,7 @@
     + \tex_uniformdeviate:D #1 + 8192 ) / 16384
   }
 \cs_new:Npn \__fp_rand_myriads:n #1
-  { \__fp_rand_myriads_loop:w #1 \prg_break: X \prg_break_point: ; }
+  { \__fp_rand_myriads_loop:w #1 \prg_break: X \prg_break_point: \__fp_sep: }
 \cs_new:Npn \__fp_rand_myriads_loop:w #1 X
   {
     #1
@@ -21299,7 +21440,7 @@
       \__kernel_randint:n { 10000 }
     \__fp_rand_myriads_loop:w
   }
-\cs_new:Npn \__fp_rand_myriads_get:w 1 #1 ; { ; {#1} }
+\cs_new:Npn \__fp_rand_myriads_get:w 1 #1 \__fp_sep: { \__fp_sep: {#1} }
 \cs_new:Npn \__fp_rand_o:Nw ? #1 @
   {
     \tl_if_empty:nTF {#1}
@@ -21306,7 +21447,7 @@
       {
         \exp_after:wN \__fp_rand_o:w
         \exp:w \exp_end_continue_f:w
-        \__fp_rand_myriads:n { XXXX } { 0000 } { 0000 } ; 0
+        \__fp_rand_myriads:n { XXXX } { 0000 } { 0000 } \__fp_sep: 0
       }
       {
         \msg_expandable_error:nnnnn
@@ -21314,7 +21455,7 @@
         \exp_after:wN \c_nan_fp
       }
   }
-\cs_new:Npn \__fp_rand_o:w ;
+\cs_new:Npn \__fp_rand_o:w \__fp_sep:
   {
     \exp_after:wN \__fp_sanitize:Nw
     \exp_after:wN 0
@@ -21328,13 +21469,13 @@
       { \__fp_randint_default:w \__fp_randint_o:w }
   }
 \cs_new:Npn \__fp_randint_default:w #1 { \exp_after:wN #1 \c_one_fp }
-\cs_new:Npn \__fp_randint_badarg:w \s__fp \__fp_chk:w #1#2#3;
+\cs_new:Npn \__fp_randint_badarg:w \s__fp \__fp_chk:w #1#2#3\__fp_sep:
   {
-    \__fp_int:wTF \s__fp \__fp_chk:w #1#2#3;
+    \__fp_int:wTF \s__fp \__fp_chk:w #1#2#3\__fp_sep:
       {
         \if_meaning:w 1 #1
           \if_int_compare:w
-              \__fp_use_i_until_s:nw #3 ; > \c__fp_prec_int
+              \__fp_use_i_until_s:nw #3 \__fp_sep: > \c__fp_prec_int
             \c_one_int
           \fi:
         \fi:
@@ -21341,28 +21482,28 @@
       }
       { \c_one_int }
   }
-\cs_new:Npn \__fp_randint_o:w #1; #2; @
+\cs_new:Npn \__fp_randint_o:w #1\__fp_sep: #2\__fp_sep: @
   {
     \if_case:w
-        \__fp_randint_badarg:w #1;
-        \__fp_randint_badarg:w #2;
-        \if:w 1 \__fp_compare_back:ww #2; #1; \c_one_int \fi:
+        \__fp_randint_badarg:w #1\__fp_sep:
+        \__fp_randint_badarg:w #2\__fp_sep:
+        \if:w 1 \__fp_compare_back:ww #2\__fp_sep: #1\__fp_sep: \c_one_int \fi:
         \c_zero_int
-      \__fp_randint_auxi_o:ww #1; #2;
+      \__fp_randint_auxi_o:ww #1\__fp_sep: #2\__fp_sep:
     \or:
       \__fp_invalid_operation_tl_o:ff
-        { randint } { \__fp_array_to_clist:n { #1; #2; } }
+        { randint } { \__fp_array_to_clist:n { #1\__fp_sep: #2\__fp_sep: } }
       \exp:w
     \fi:
     \exp_after:wN \exp_end:
   }
-\cs_new:Npn \__fp_randint_auxi_o:ww #1 ; #2 ; #3 \exp_end:
+\cs_new:Npn \__fp_randint_auxi_o:ww #1 \__fp_sep: #2 \__fp_sep: #3 \exp_end:
   {
     \fi:
-    \__fp_randint_auxii:wn #2 ;
-    { \__fp_randint_auxii:wn #1 ; \__fp_randint_auxiii_o:ww }
+    \__fp_randint_auxii:wn #2 \__fp_sep:
+    { \__fp_randint_auxii:wn #1 \__fp_sep: \__fp_randint_auxiii_o:ww }
   }
-\cs_new:Npn \__fp_randint_auxii:wn \s__fp \__fp_chk:w #1#2#3#4 ;
+\cs_new:Npn \__fp_randint_auxii:wn \s__fp \__fp_chk:w #1#2#3#4 \__fp_sep:
   {
     \if_meaning:w 0 #1
       \exp_after:wN \use_i:nn
@@ -21373,7 +21514,7 @@
     {
       \exp_after:wN \__fp_ep_to_fixed:wwn
       \int_value:w \__fp_int_eval:w
-        #3 - \c__fp_prec_int , #4 {0000} {0000} ;
+        #3 - \c__fp_prec_int , #4 {0000} {0000} \__fp_sep:
       {
         \if_meaning:w 0 #2
           \exp_after:wN \use_i:nnnn
@@ -21384,22 +21525,22 @@
       \__fp_fixed_continue:wn
     }
   }
-\cs_new:Npn \__fp_randint_auxiii_o:ww #1 ; #2 ;
+\cs_new:Npn \__fp_randint_auxiii_o:ww #1 \__fp_sep: #2 \__fp_sep:
   {
-    \__fp_fixed_add:wwn #2 ;
-      {0000} {0000} {0000} {0001} {0000} {0000} ;
-    \__fp_fixed_sub:wwn #1 ;
+    \__fp_fixed_add:wwn #2 \__fp_sep:
+      {0000} {0000} {0000} {0001} {0000} {0000} \__fp_sep:
+    \__fp_fixed_sub:wwn #1 \__fp_sep:
     {
       \exp_after:wN \use_i:nn
       \exp_after:wN \__fp_fixed_mul_add:wwwn
-      \exp:w \exp_end_continue_f:w \__fp_rand_myriads:n { XXXXXX } ;
+      \exp:w \exp_end_continue_f:w \__fp_rand_myriads:n { XXXXXX } \__fp_sep:
     }
-    #1 ;
+    #1 \__fp_sep:
     \__fp_randint_auxiv_o:ww
-    #2 ;
-    \__fp_randint_auxv_o:w #1 ; @
+    #2 \__fp_sep:
+    \__fp_randint_auxv_o:w #1 \__fp_sep: @
   }
-\cs_new:Npn \__fp_randint_auxiv_o:ww #1#2#3#4#5 ; #6#7#8#9
+\cs_new:Npn \__fp_randint_auxiv_o:ww #1#2#3#4#5 \__fp_sep: #6#7#8#9
   {
     \if_int_compare:w
       \if_int_compare:w #1#2 > #6#7 \exp_stop_f: 1 \else:
@@ -21409,7 +21550,7 @@
     \fi:
     \__fp_randint_auxv_o:w {#1}{#2}{#3}{#4}#5
   }
-\cs_new:Npn \__fp_randint_auxv_o:w #1#2#3#4#5 ; #6 @
+\cs_new:Npn \__fp_randint_auxv_o:w #1#2#3#4#5 \__fp_sep: #6 @
   {
     \exp_after:wN \__fp_sanitize:Nw
     \int_value:w
@@ -21421,7 +21562,7 @@
       \exp_after:wN \__fp_reverse_args:Nww
     \fi:
     \exp_after:wN \__fp_fixed_sub:wwn \c__fp_one_fixed_tl
-    {#1} {#2} {#3} {#4} {0000} {0000} ;
+    {#1} {#2} {#3} {#4} {0000} {0000} \__fp_sep:
     {
       \exp_after:wN \exp_stop_f:
       \int_value:w \__fp_int_eval:w \c__fp_prec_int
@@ -21435,16 +21576,16 @@
     \int_eval:n
       {
         \exp_after:wN \__fp_randint:ww
-        \int_value:w \int_eval:n {#1} \exp_after:wN ;
-        \int_value:w \int_eval:n {#2} ;
+        \int_value:w \int_eval:n {#1} \exp_after:wN \__fp_sep:
+        \int_value:w \int_eval:n {#2} \__fp_sep:
       }
   }
-\cs_new:Npn \__fp_randint:ww #1; #2;
+\cs_new:Npn \__fp_randint:ww #1\__fp_sep: #2\__fp_sep:
   {
     \if_int_compare:w #1 > #2 \exp_stop_f:
       \msg_expandable_error:nnnn
         { kernel } { randint-backward-range } {#1} {#2}
-      \__fp_randint:ww #2; #1;
+      \__fp_randint:ww #2\__fp_sep: #1\__fp_sep:
     \else:
       \if_int_compare:w \__fp_int_eval:w #2
           \if_int_compare:w #1 > \c_zero_int
@@ -21468,35 +21609,37 @@
     \exp_after:wN \__fp_randint_wide_aux:w
     \int_value:w
       \exp_after:wN \__fp_randint_split_o:Nw
-      \tex_uniformdeviate:D 268435456 ;
+      \tex_uniformdeviate:D 268435456 \__fp_sep:
     \int_value:w
       \exp_after:wN \__fp_randint_split_o:Nw
-      \tex_uniformdeviate:D 268435456 ;
+      \tex_uniformdeviate:D 268435456 \__fp_sep:
     \int_value:w
       \exp_after:wN \__fp_randint_split_o:Nw
       \int_value:w \__fp_int_eval:w 131072 +
         \exp_after:wN \__fp_randint_split_o:Nw
         \int_value:w
-          \__kernel_int_add:nnn {#2} { -#1 } { -\c_max_int } ;
+          \__kernel_int_add:nnn {#2} { -#1 } { -\c_max_int } \__fp_sep:
     .
   }
-\cs_new:Npn \__fp_randint_split_o:Nw #1#2 ;
+\cs_new:Npn \__fp_randint_split_o:Nw #1#2 \__fp_sep:
   {
     \if_meaning:w 0 #1
-      0 \exp_after:wN ; \int_value:w 0
+      0 \exp_after:wN \__fp_sep: \int_value:w 0
     \else:
       \exp_after:wN \__fp_randint_split_aux:w
-      \int_value:w \__fp_int_eval:w (#1#2 - 8192) / 16384 ;
+      \int_value:w \__fp_int_eval:w (#1#2 - 8192) / 16384 \__fp_sep:
       + #1#2
     \fi:
-    \exp_after:wN ;
+    \exp_after:wN \__fp_sep:
   }
-\cs_new:Npn \__fp_randint_split_aux:w #1 ;
+\cs_new:Npn \__fp_randint_split_aux:w #1 \__fp_sep:
   {
-    #1 \exp_after:wN ;
+    #1 \exp_after:wN \__fp_sep:
     \int_value:w \__fp_int_eval:w - #1 * 16384
   }
-\cs_new:Npn \__fp_randint_wide_aux:w #1;#2; #3;#4; #5;#6;#7; .
+\cs_new:Npn \__fp_randint_wide_aux:w
+    #1\__fp_sep:#2\__fp_sep: #3\__fp_sep:#4\__fp_sep:
+    #5\__fp_sep:#6\__fp_sep:#7\__fp_sep: .
   {
     \exp_after:wN \__fp_randint_wide_auxii:w
     \int_value:w \__fp_int_eval:w #5 * #3 + #6 * #1 +
@@ -21503,11 +21646,12 @@
       (#5 * #4 + #6 * #3 + #7 * #1 +
         (#5 * #2 +           #7 * #3 +
           (16384 * #6 + #7) * (16384 * #4 + #2) / 268435456) / 16384
-      ) / 16384 \exp_after:wN ;
-    \int_value:w \__fp_int_eval:w (#5 + #6) * 16384 + #7 ;
-    #1 ; #5 ;
+      ) / 16384 \exp_after:wN \__fp_sep:
+    \int_value:w \__fp_int_eval:w (#5 + #6) * 16384 + #7 \__fp_sep:
+    #1 \__fp_sep: #5 \__fp_sep:
   }
-\cs_new:Npn \__fp_randint_wide_auxii:w #1; #2; #3; #4;
+\cs_new:Npn \__fp_randint_wide_auxii:w
+    #1\__fp_sep: #2\__fp_sep: #3\__fp_sep: #4\__fp_sep:
   {
     \if_int_odd:w 0
         \if_int_compare:w #1 = #2 \else: \exp_stop_f: \fi:
@@ -21534,7 +21678,7 @@
     \if_int_compare:w #1 < \c_one_int
       \msg_expandable_error:nnnn
         { kernel } { randint-backward-range } { 1 } {#1}
-      \__fp_randint:ww #1; 1;
+      \__fp_randint:ww #1\__fp_sep: 1\__fp_sep:
     \else:
       \if_int_compare:w #1 > \c__kernel_randint_max_int
         \__kernel_randint:nn { 1 } {#1}
@@ -21582,7 +21726,7 @@
     \exp_last_unbraced:Nf \__fp_types_binary_auxi:Nww
       { \__fp_types_cs_to_op:N #1 }
   }
-\cs_new:Npn \__fp_types_binary_auxi:Nww #1#2#3; #4#5; @
+\cs_new:Npn \__fp_types_binary_auxi:Nww #1#2#3\__fp_sep: #4#5\__fp_sep: @
   {
     \exp_after:wN \__fp_types_binary_auxii:NNww
     \cs:w
@@ -21592,7 +21736,7 @@
       \__fp_type_from_scan:N #4
       _o:ww
     \cs_end:
-    #1 #2#3; #4#5;
+    #1 #2#3\__fp_sep: #4#5\__fp_sep:
   }
 \cs_new:Npn \__fp_types_binary_auxii:NNww #1#2
   {
@@ -21603,12 +21747,12 @@
 %% File l3fp-symbolic.dtx (C) Copyright 2012-2015,2017,2018,2020,2021,2023 The LaTeX Project
 \fp_new:N \l__fp_symbolic_fp
 \scan_new:N \s__fp_symbolic
-\cs_new_protected:Npn \__fp_symbolic_chk:w #1,#2#3;
+\cs_new_protected:Npn \__fp_symbolic_chk:w #1,#2#3\__fp_sep:
   {
     \msg_error:nne { fp } { misused-fp }
       {
         \__fp_to_tl_dispatch:w
-          \s__fp_symbolic \__fp_symbolic_chk:w #1,{#2};
+          \s__fp_symbolic \__fp_symbolic_chk:w #1,{#2}\__fp_sep:
       }
   }
 \cs_new:Npn \__fp_if_has_symbolic:nTF #1
@@ -21621,7 +21765,7 @@
 \cs_new:Npn \__fp_if_has_symbolic_aux:w
     #1 \s__fp_symbolic #2 \s__fp_mark #3#4 \s__fp_stop { #3 }
 \cs_new:Npn \__fp_exp_after_symbolic_f:nw
-    #1 \s__fp_symbolic \__fp_symbolic_chk:w #2, #3#4;
+    #1 \s__fp_symbolic \__fp_symbolic_chk:w #2, #3#4\__fp_sep:
   {
     \exp_after:wN \__fp_exp_after_symbolic_aux:w
     \exp:w
@@ -21633,13 +21777,13 @@
         \__fp_exp_after_array_f:w #3 \s__fp_expr_stop
         \exp_after:wN
       }
-    \exp_after:wN ;
+    \exp_after:wN \__fp_sep:
     \exp:w \exp_end_continue_f:w #1
   }
-\cs_new:Npn \__fp_exp_after_symbolic_aux:w #1, #2;
+\cs_new:Npn \__fp_exp_after_symbolic_aux:w #1, #2\__fp_sep:
   {
     \__fp_if_has_symbolic:nTF {#2}
-      { \s__fp_symbolic \__fp_symbolic_chk:w #1, {#2} ; }
+      { \s__fp_symbolic \__fp_symbolic_chk:w #1, {#2} \__fp_sep: }
       { #1 #2 @ \prg_do_nothing: }
   }
 \cs_new:Npn \__fp_exp_after_symbolic_loop:N #1
@@ -21649,11 +21793,11 @@
     \exp:w
     \__fp_exp_after_symbolic_loop:N
   }
-\cs_new:Npn \__fp_symbolic_binary_o:Nww #1 #2; #3;
+\cs_new:Npn \__fp_symbolic_binary_o:Nww #1 #2\__fp_sep: #3\__fp_sep:
   {
     \__fp_exp_after_symbolic_f:nw { \exp_after:wN \exp_stop_f: }
       \s__fp_symbolic \__fp_symbolic_chk:w
-      \__fp_types_binary:Nww #1 , { #2; #3; } ;
+      \__fp_types_binary:Nww #1 , { #2\__fp_sep: #3\__fp_sep: } \__fp_sep:
   }
 \cs_set_protected:Npn \__fp_tmp:w #1#2
   {
@@ -21669,11 +21813,11 @@
   }
 \tl_map_inline:nn { + - * / ^ & | }
   { \exp_args:Nc \__fp_tmp:w { __fp_#1_o:ww } {#1} }
-\cs_new:Npn \__fp_symbolic_unary_o:NNw #1#2#3; @
+\cs_new:Npn \__fp_symbolic_unary_o:NNw #1#2#3\__fp_sep: @
   {
     \__fp_exp_after_symbolic_f:nw { \exp_after:wN \exp_stop_f: }
       \s__fp_symbolic \__fp_symbolic_chk:w
-      \__fp_types_unary:NNw #1#2 , { #3; } ;
+      \__fp_types_unary:NNw #1#2 , { #3\__fp_sep: } \__fp_sep:
   }
 \tl_map_inline:nn
   {
@@ -21699,11 +21843,11 @@
 \__fp_tmp:w { decimal    } { 0   } \__fp_to_decimal_dispatch:w
 \__fp_tmp:w { int        } { 0   } \__fp_to_int_dispatch:w
 \__fp_tmp:w { scientific } { nan } \__fp_to_scientific_dispatch:w
-\cs_new:Npn \__fp_symbolic_convert:wnnN #1#2; #3#4#5
+\cs_new:Npn \__fp_symbolic_convert:wnnN #1#2\__fp_sep: #3#4#5
   {
     \str_if_eq:nnTF {#1} { \s__fp_symbolic }
-      { \__fp_invalid_operation:nnw {#3} {#4} #1#2; }
-      { #5 #1#2; }
+      { \__fp_invalid_operation:nnw {#3} {#4} #1#2\__fp_sep: }
+      { #5 #1#2\__fp_sep: }
   }
 \cs_new:Npn \__fp_symbolic_cs_arg_to_fn:NN #1
   {
@@ -21724,7 +21868,7 @@
       }
   }
 \cs_new:Npn \__fp_symbolic_to_tl:w
-    \s__fp_symbolic \__fp_symbolic_chk:w #1#2, #3#4;
+    \s__fp_symbolic \__fp_symbolic_chk:w #1#2, #3#4\__fp_sep:
   {
     \str_case:nnTF {#1}
       {
@@ -21743,13 +21887,13 @@
         ( \__fp_to_tl_dispatch:w #3 )
       }
   }
-\cs_new:Npn \__fp_symbolic_binary_to_tl:Nww #1, #2; #3; @
+\cs_new:Npn \__fp_symbolic_binary_to_tl:Nww #1, #2\__fp_sep: #3\__fp_sep: @
   {
     \use:e
       {
-        ( \__fp_to_tl_dispatch:w #2; )
+        ( \__fp_to_tl_dispatch:w #2\__fp_sep: )
         \__fp_types_cs_to_op:N #1
-        ( \__fp_to_tl_dispatch:w #3; )
+        ( \__fp_to_tl_dispatch:w #3\__fp_sep: )
       }
   }
 \cs_new:Npn \__fp_symbolic_function_to_tl:Nw #1, #2@
@@ -21797,7 +21941,7 @@
         \token_if_eq_meaning:NNTF #2 \prg_do_nothing:
           {
             \s__fp_symbolic \__fp_symbolic_chk:w
-              \__fp_variable_o:w #1 , { } ;
+              \__fp_variable_o:w #1 , { } \__fp_sep:
           }
           {
             \exp_after:wN \s__fp_symbolic
@@ -21807,7 +21951,7 @@
             \__fp_exp_after_symbolic_loop:N #1
               { , \exp:w \use_none:nn }
             \exp_after:wN \exp_end:
-            \exp_after:wN { \exp_after:wN } \exp_after:wN ;
+            \exp_after:wN { \exp_after:wN } \exp_after:wN \__fp_sep:
             #2
           }
       }
@@ -21818,7 +21962,7 @@
       {
         \__fp_exp_after_symbolic_f:nw { \__fp_parse_infix:NN }
         \s__fp_symbolic \__fp_symbolic_chk:w
-          \__fp_variable_o:w #2 , { } ;
+          \__fp_variable_o:w #2 , { } \__fp_sep:
       }
     \exp_args:NNc \__fp_variable_set_parsing_aux:NNn #1
       { __fp_parse_word_#2:N } {#2}
@@ -21983,7 +22127,7 @@
           \__fp_exp_after_array_f:w #2 \s__fp_expr_stop
           \exp_after:wN
         }
-        \exp_after:wN ;
+        \exp_after:wN \__fp_sep:
       }
   }
 \int_new:N \l__fp_function_arg_int
@@ -22015,7 +22159,7 @@
                   \exp_not:N \__fp_symbolic_chk:w
                   \exp_not:N \__fp_function_arg_o:w
                   \int_use:N \l__fp_function_arg_int
-                  ########1 , { } ;
+                  ########1 , { } \__fp_sep:
                 }
             }
           \cs_set:Npn \__fp_function_arg_o:w ##1 @
@@ -22027,7 +22171,7 @@
               \__fp_exp_after_symbolic_loop:N ##1
                 { , \tex_romannumeral:D \use_none:nn }
               \exp_after:wN \c_zero_int
-              \exp_after:wN { \exp_after:wN } \exp_after:wN ;
+              \exp_after:wN { \exp_after:wN } \exp_after:wN \__fp_sep:
             }
           \fp_set:Nn \l__fp_symbolic_fp {#4}
           \use:e
@@ -22064,9 +22208,9 @@
       #2
   }
 \cs_new:Npn \__fp_function_arg_few:w #1 @ { \exp_after:wN \c_nan_fp }
-\cs_new:Npn \__fp_function_arg_get:w #1#2#3; #4 @
+\cs_new:Npn \__fp_function_arg_get:w #1#2#3\__fp_sep: #4 @
   {
-    \__fp_exp_after_array_f:w #3; \s__fp_expr_stop
+    \__fp_exp_after_array_f:w #3\__fp_sep: \s__fp_expr_stop
     \exp_after:wN \exp_stop_f:
   }
 \cs_new_protected:Npn \fp_clear_function:n #1
@@ -22141,25 +22285,25 @@
     \exp_after:wN \__fp_array_gset:NNNNww
     \exp_after:wN #1
     \exp_after:wN #1
-    \int_value:w \int_eval:n {#2} \exp_after:wN ;
+    \int_value:w \int_eval:n {#2} \exp_after:wN \__fp_sep:
     \exp:w \exp_end_continue_f:w \__fp_parse:n {#3}
   }
 \cs_generate_variant:Nn \fparray_gset:Nnn { c }
-\cs_new_protected:Npn \__fp_array_gset:NNNNww #1#2#3#4#5 ; #6 ;
+\cs_new_protected:Npn \__fp_array_gset:NNNNww #1#2#3#4#5 \__fp_sep: #6 \__fp_sep:
   {
     \__fp_array_bounds:NNnTF \msg_error:nneee #4 {#5}
       {
         \exp_after:wN \__fp_change_func_type:NNN
-          \__fp_use_i_until_s:nw #6 ;
+          \__fp_use_i_until_s:nw #6 \__fp_sep:
           \__fp_array_gset:w
           \__fp_array_gset_recover:Nw
-        #6 ; {#5} #1 #2 #3
+        #6 \__fp_sep: {#5} #1 #2 #3
       }
       { }
   }
-\cs_new_protected:Npn \__fp_array_gset_recover:Nw #1#2 ;
+\cs_new_protected:Npn \__fp_array_gset_recover:Nw #1#2 \__fp_sep:
   {
-    \__fp_error:nffn { unknown-type } { \tl_to_str:n { #2 ; } } { } { }
+    \__fp_error:nffn { unknown-type } { \tl_to_str:n { #2 \__fp_sep: } } { } { }
     \exp_after:wN #1 \c_nan_fp
   }
 \cs_new_protected:Npn \__fp_array_gset:w \s__fp \__fp_chk:w #1#2
@@ -22173,7 +22317,7 @@
     \s__fp \__fp_chk:w #1 #2
   }
 \cs_new_protected:Npn \__fp_array_gset_normal:w
-  \s__fp \__fp_chk:w 1 #1 #2 #3#4#5 ; #6#7#8#9
+  \s__fp \__fp_chk:w 1 #1 #2 #3#4#5 \__fp_sep: #6#7#8#9
   {
     \__kernel_intarray_gset:Nnn #7 {#6} {#2}
     \__kernel_intarray_gset:Nnn #8 {#6}
@@ -22203,7 +22347,7 @@
   {
     \exp_after:wN \__fp_array_item:NwN
     \exp_after:wN #1
-    \int_value:w \int_eval:n {#2} ;
+    \int_value:w \int_eval:n {#2} \__fp_sep:
     \__fp_to_decimal:w
   }
 \cs_generate_variant:Nn \fparray_item:Nn { c }
@@ -22211,11 +22355,11 @@
   {
     \exp_after:wN \__fp_array_item:NwN
     \exp_after:wN #1
-    \int_value:w \int_eval:n {#2} ;
+    \int_value:w \int_eval:n {#2} \__fp_sep:
     \__fp_to_tl:w
   }
 \cs_generate_variant:Nn \fparray_item_to_tl:Nn { c }
-\cs_new:Npn \__fp_array_item:NwN #1#2 ; #3
+\cs_new:Npn \__fp_array_item:NwN #1#2 \__fp_sep: #3
   {
     \__fp_array_bounds:NNnTF \msg_expandable_error:nnfff #1 {#2}
       { \exp_after:wN \__fp_array_item:NNNnN #1 {#2} #3 }
@@ -22224,9 +22368,9 @@
 \cs_new:Npn \__fp_array_item:NNNnN #1#2#3#4
   {
     \exp_after:wN \__fp_array_item:N
-    \int_value:w \__kernel_intarray_item:Nn #2 {#4} \exp_after:wN ;
-    \int_value:w \__kernel_intarray_item:Nn #3 {#4} \exp_after:wN ;
-    \int_value:w \__kernel_intarray_item:Nn #1 {#4} ;
+    \int_value:w \__kernel_intarray_item:Nn #2 {#4} \exp_after:wN \__fp_sep:
+    \int_value:w \__kernel_intarray_item:Nn #3 {#4} \exp_after:wN \__fp_sep:
+    \int_value:w \__kernel_intarray_item:Nn #1 {#4} \__fp_sep:
   }
 \cs_new:Npn \__fp_array_item:N #1
   {
@@ -22233,13 +22377,13 @@
     \if_meaning:w 0 #1 \exp_after:wN \__fp_array_item_special:w \fi:
     \__fp_array_item:w #1
   }
-\cs_new:Npn \__fp_array_item:w #1 #2#3#4#5 #6 ; 1 #7 ;
+\cs_new:Npn \__fp_array_item:w #1 #2#3#4#5 #6 \__fp_sep: 1 #7 \__fp_sep:
   {
     \exp_after:wN \__fp_array_item_normal:w
     \int_value:w \if_meaning:w #1 1 0 \else: 2 \fi: \exp_stop_f:
-    #7 ; {#2#3#4#5} {#6} ;
+    #7 \__fp_sep: {#2#3#4#5} {#6} \__fp_sep:
   }
-\cs_new:Npn \__fp_array_item_special:w #1 ; #2 ; #3 ; #4
+\cs_new:Npn \__fp_array_item_special:w #1 \__fp_sep: #2 \__fp_sep: #3 \__fp_sep: #4
   {
     \exp_after:wN #4
     \exp:w \exp_end_continue_f:w
@@ -22251,8 +22395,9 @@
     \else: \exp_after:wN \c_minus_inf_fp
     \fi:
   }
-\cs_new:Npn \__fp_array_item_normal:w #1 #2#3#4#5 #6 ; #7 ; #8 ; #9
-  { #9 \s__fp \__fp_chk:w 1 #1 {#8} #7 {#2#3#4#5} {#6} ; }
+\cs_new:Npn \__fp_array_item_normal:w
+    #1 #2#3#4#5 #6 \__fp_sep: #7 \__fp_sep: #8 \__fp_sep: #9
+  { #9 \s__fp \__fp_chk:w 1 #1 {#8} #7 {#2#3#4#5} {#6} \__fp_sep: }
 \prg_new_eq_conditional:NNn \fparray_if_exist:N \cs_if_exist:N
   { TF , T , F , p }
 \prg_new_eq_conditional:NNn \fparray_if_exist:c \cs_if_exist:c
@@ -24995,27 +25140,30 @@
     \__tl_analysis_map:NwNw #1
   }
 \cs_new_protected:Npn \tl_analysis_show:N
-  { \__tl_analysis_show:NNN \msg_show:nneeee \tl_show:N }
+  { \__tl_analysis_show:NNnnN \msg_show:nneeee \tl_show:N {} {} }
 \cs_new_protected:Npn \tl_analysis_log:N
-  { \__tl_analysis_show:NNN \msg_log:nneeee \tl_log:N }
-\cs_new_protected:Npn \__tl_analysis_show:NNN #1#2#3
   {
-    \tl_if_exist:NTF #3
+    \__tl_analysis_show:NNnnN \msg_log:nneeee \tl_log:N
+      { \iow_newline: >~ . } { . }
+  }
+\cs_new_protected:Npn \__tl_analysis_show:NNnnN #1#2#3#4#5
+  {
+    \tl_if_exist:NTF #5
       {
-        \exp_args:No \__tl_analysis:n {#3}
+        \exp_args:No \__tl_analysis:n {#5}
         #1 { tl } { show-analysis }
-          { \token_to_str:N #3 } { \__tl_analysis_show: } { } { }
+          { \token_to_str:N #5 } { \__tl_analysis_show: } {#3} {#4}
       }
       { #2 #3 }
   }
 \cs_new_protected:Npn \tl_analysis_show:n
-  { \__tl_analysis_show:Nn \msg_show:nneeee }
+  { \__tl_analysis_show:Nnnn \msg_show:nneeee {} {} }
 \cs_new_protected:Npn \tl_analysis_log:n
-  { \__tl_analysis_show:Nn \msg_log:nneeee }
-\cs_new_protected:Npn \__tl_analysis_show:Nn #1#2
+  { \__tl_analysis_show:Nnnn \msg_log:nneeee { \iow_newline: >~ . } { . } }
+\cs_new_protected:Npn \__tl_analysis_show:Nnnn #1#2#3#4
   {
-    \__tl_analysis:n {#2}
-    #1 { tl } { show-analysis } { } { \__tl_analysis_show: } { } { }
+    \__tl_analysis:n {#4}
+    #1 { tl } { show-analysis } { } { \__tl_analysis_show: } {#2} {#3}
   }
 \cs_new:Npn \__tl_analysis_show:
   {
@@ -25348,8 +25496,8 @@
   {
     The~token~list~ \tl_if_empty:nF {#1} { #1 ~ }
     \tl_if_empty:nTF {#2}
-      { is~empty }
-      { contains~the~tokens: #2 }
+      { is~empty #3 }
+      { contains~the~tokens: #2 #4 }
   }
 %% File: l3regex.dtx
 \cs_new_eq:NN \__regex_int_eval:w \tex_numexpr:D

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex	2025-01-30 21:12:07 UTC (rev 73651)
@@ -6,7 +6,7 @@
 %%
 %% expl3.dtx  (with options: `generic,loader')
 %% 
-%% Copyright (C) 1990-2024 The LaTeX Project
+%% Copyright (C) 1990-2025 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2024-12-25}%
+\def\ExplFileDate{2025-01-18}%
 \let\ExplLoaderFileDate\ExplFileDate
 \begingroup
   \catcode`\_=11

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx	2025-01-30 21:12:07 UTC (rev 73651)
@@ -6,7 +6,7 @@
 %%
 %% expl3.dtx  (with options: `2ekernel,loader')
 %% 
-%% Copyright (C) 1990-2024 The LaTeX Project
+%% Copyright (C) 1990-2025 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2024-12-25}%
+\def\ExplFileDate{2025-01-18}%
 \let\ExplLoaderFileDate\ExplFileDate
 \begingroup
   \catcode`\_=11

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.lua	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.lua	2025-01-30 21:12:07 UTC (rev 73651)
@@ -11,7 +11,7 @@
 -- l3intarray.dtx  (with options: `package,lua')
 -- l3pdf.dtx  (with options: `package,lua')
 -- 
--- Copyright (C) 1990-2024 The LaTeX Project
+-- Copyright (C) 1990-2025 The LaTeX Project
 -- 
 -- It may be distributed and/or modified under the conditions of
 -- the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty	2025-01-30 21:12:07 UTC (rev 73651)
@@ -6,7 +6,7 @@
 %%
 %% expl3.dtx  (with options: `package,loader')
 %% 
-%% Copyright (C) 1990-2024 The LaTeX Project
+%% Copyright (C) 1990-2025 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2024-12-25}%
+\def\ExplFileDate{2025-01-18}%
 \let\ExplLoaderFileDate\ExplFileDate
 \ProvidesPackage{expl3}
   [%

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3debug.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3debug.def	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3debug.def	2025-01-30 21:12:07 UTC (rev 73651)
@@ -6,7 +6,7 @@
 %%
 %% l3debug.dtx  (with options: `package')
 %% 
-%% Copyright (C) 1990-2024 The LaTeX Project
+%% Copyright (C) 1990-2025 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: l3debug.dtx
-\ProvidesExplFile{l3debug.def}{2024-12-25}{}{L3 Debugging support}
+\ProvidesExplFile{l3debug.def}{2025-01-18}{}{L3 Debugging support}
 \scan_new:N \s__debug_stop
 \cs_new:Npn \__debug_use_i_delimit_by_s_stop:nw #1 #2 \s__debug_stop {#1}
 \quark_new:N \q__debug_recursion_tail

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls	2025-01-30 21:12:07 UTC (rev 73651)
@@ -6,7 +6,7 @@
 %%
 %% l3doc.dtx  (with options: `class')
 %% 
-%% Copyright (C) 1990-2024 The LaTeX Project
+%% Copyright (C) 1990-2025 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -20,7 +20,7 @@
 %% 
 %% File: l3doc.dtx
 \RequirePackage{calc}
-\ProvidesExplClass{l3doc}{2024-12-25}{}
+\ProvidesExplClass{l3doc}{2025-01-18}{}
   {L3 Experimental documentation class}
 \clist_new:N \g_docinput_clist
 \seq_new:N \g_doc_functions_seq

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3docstrip.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3docstrip.tex	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3docstrip.tex	2025-01-30 21:12:07 UTC (rev 73651)
@@ -6,7 +6,7 @@
 %%
 %% l3docstrip.dtx  (with options: `program')
 %% 
-%% Copyright (C) 1990-2024 The LaTeX Project
+%% Copyright (C) 1990-2025 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88591.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88591.def	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88591.def	2025-01-30 21:12:07 UTC (rev 73651)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso88591')
 %% 
-%% Copyright (C) 1990-2024 The LaTeX Project
+%% Copyright (C) 1990-2025 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885910.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885910.def	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885910.def	2025-01-30 21:12:07 UTC (rev 73651)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso885910')
 %% 
-%% Copyright (C) 1990-2024 The LaTeX Project
+%% Copyright (C) 1990-2025 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885911.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885911.def	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885911.def	2025-01-30 21:12:07 UTC (rev 73651)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso885911')
 %% 
-%% Copyright (C) 1990-2024 The LaTeX Project
+%% Copyright (C) 1990-2025 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885913.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885913.def	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885913.def	2025-01-30 21:12:07 UTC (rev 73651)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso885913')
 %% 
-%% Copyright (C) 1990-2024 The LaTeX Project
+%% Copyright (C) 1990-2025 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885914.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885914.def	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885914.def	2025-01-30 21:12:07 UTC (rev 73651)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso885914')
 %% 
-%% Copyright (C) 1990-2024 The LaTeX Project
+%% Copyright (C) 1990-2025 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885915.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885915.def	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885915.def	2025-01-30 21:12:07 UTC (rev 73651)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso885915')
 %% 
-%% Copyright (C) 1990-2024 The LaTeX Project
+%% Copyright (C) 1990-2025 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885916.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885916.def	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885916.def	2025-01-30 21:12:07 UTC (rev 73651)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso885916')
 %% 
-%% Copyright (C) 1990-2024 The LaTeX Project
+%% Copyright (C) 1990-2025 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88592.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88592.def	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88592.def	2025-01-30 21:12:07 UTC (rev 73651)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso88592')
 %% 
-%% Copyright (C) 1990-2024 The LaTeX Project
+%% Copyright (C) 1990-2025 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88593.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88593.def	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88593.def	2025-01-30 21:12:07 UTC (rev 73651)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso88593')
 %% 
-%% Copyright (C) 1990-2024 The LaTeX Project
+%% Copyright (C) 1990-2025 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88594.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88594.def	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88594.def	2025-01-30 21:12:07 UTC (rev 73651)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso88594')
 %% 
-%% Copyright (C) 1990-2024 The LaTeX Project
+%% Copyright (C) 1990-2025 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88595.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88595.def	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88595.def	2025-01-30 21:12:07 UTC (rev 73651)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso88595')
 %% 
-%% Copyright (C) 1990-2024 The LaTeX Project
+%% Copyright (C) 1990-2025 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88596.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88596.def	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88596.def	2025-01-30 21:12:07 UTC (rev 73651)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso88596')
 %% 
-%% Copyright (C) 1990-2024 The LaTeX Project
+%% Copyright (C) 1990-2025 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88597.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88597.def	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88597.def	2025-01-30 21:12:07 UTC (rev 73651)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso88597')
 %% 
-%% Copyright (C) 1990-2024 The LaTeX Project
+%% Copyright (C) 1990-2025 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88598.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88598.def	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88598.def	2025-01-30 21:12:07 UTC (rev 73651)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso88598')
 %% 
-%% Copyright (C) 1990-2024 The LaTeX Project
+%% Copyright (C) 1990-2025 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88599.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88599.def	2025-01-30 21:11:26 UTC (rev 73650)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88599.def	2025-01-30 21:12:07 UTC (rev 73651)
@@ -6,7 +6,7 @@
 %%
 %% l3str-convert.dtx  (with options: `iso88599')
 %% 
-%% Copyright (C) 1990-2024 The LaTeX Project
+%% Copyright (C) 1990-2025 The LaTeX Project
 %% 
 %% It may be distributed and/or modified under the conditions of
 %% the LaTeX Project Public License (LPPL), either version 1.3c of



More information about the tex-live-commits mailing list.