changeset 33061:3bb4422bd982 bytecode-interpreter

maint: merge default to bytecode-interpreter
author John W. Eaton <jwe@octave.org>
date Tue, 20 Feb 2024 15:07:51 -0500
parents 651bee56d638 (current diff) 50e19b01e111 (diff)
children a2162efd8b80
files build-aux/mk-octave-config-h.sh configure.ac libinterp/corefcn/stack-frame.cc libinterp/corefcn/stack-frame.h libinterp/parse-tree/pt-eval.cc libinterp/parse-tree/pt-eval.h
diffstat 32 files changed, 244 insertions(+), 233 deletions(-) [+]
line wrap: on
line diff
--- a/build-aux/mk-octave-config-h.sh	Sun Feb 18 23:26:02 2024 -0500
+++ b/build-aux/mk-octave-config-h.sh	Tue Feb 20 15:07:51 2024 -0500
@@ -105,7 +105,6 @@
 $SED -n 's/#\(\(undef\|define\) OCTAVE_ENABLE_64.*$\)/#  \1/p' $config_h_file
 $SED -n 's/#\(\(undef\|define\) OCTAVE_ENABLE_BOUNDS_CHECK.*$\)/#  \1/p' $config_h_file
 $SED -n 's/#\(\(undef\|define\) OCTAVE_ENABLE_BYTECODE_EVALUATOR.*$\)/#  \1/p' $config_h_file
-$SED -n 's/#\(\(undef\|define\) OCTAVE_ENABLE_FLOAT_TRUNCATE.*$\)/#  \1/p' $config_h_file
 $SED -n 's/#\(\(undef\|define\) OCTAVE_ENABLE_INTERNAL_CHECKS.*$\)/#  \1/p' $config_h_file
 $SED -n 's/#\(\(undef\|define\) OCTAVE_ENABLE_LIB_VISIBILITY_FLAGS.*$\)/#  \1/p' $config_h_file
 $SED -n 's/#\(\(undef\|define\) OCTAVE_ENABLE_OPENMP.*$\)/#  \1/p' $config_h_file
--- a/configure.ac	Sun Feb 18 23:26:02 2024 -0500
+++ b/configure.ac	Tue Feb 20 15:07:51 2024 -0500
@@ -3382,7 +3382,6 @@
   64-bit BLAS array dims and indexing:  $HAVE_64_BIT_BLAS
   Use std::pmr::polymorphic_allocator:  $ENABLE_STD_PMR_POLYMORPHIC_ALLOCATOR
   OpenMP SMP multithreading:            $ENABLE_OPENMP
-  Truncate intermediate FP results:     $ENABLE_FLOAT_TRUNCATE
   Include support for GNU readline:     $USE_READLINE
   Use push parser in command line REPL: $ENABLE_COMMAND_LINE_PUSH_PARSER
   Build cross tools:                    $cross_tools
--- a/doc/interpreter/basics.txi	Sun Feb 18 23:26:02 2024 -0500
+++ b/doc/interpreter/basics.txi	Tue Feb 20 15:07:51 2024 -0500
@@ -86,7 +86,7 @@
 @cindex @sortas{options, Octave command --doc-cache-file} @ @ @code{--doc-cache-file @var{filename}}
 Specify the name of the documentation cache file to use.  The value of
 @var{filename} specified on the command line will override any value of
-@w{@env{OCTAVE_DOC_CACHE_FILE}} found in the environment, but not any commands
+@w{@env{OCTAVE_DOC_CACHE_FILE}}@ found in the environment, but not any commands
 in the system or user startup files that use the @code{doc_cache_file}
 function.
 
@@ -106,9 +106,9 @@
 @cindex @sortas{options, Octave command --exec-path} @ @ @code{--exec-path @var{path}}
 Specify the path to search for programs to run.  The value of @var{path}
 specified on the command line will override any value of
-@w{@env{OCTAVE_EXEC_PATH}} found in the environment, but not any commands
+@w{@env{OCTAVE_EXEC_PATH}}@ found in the environment, but not any commands
 in the system or user startup files that call the
-@w{@env{EXEC_PATH}} function.
+@w{@env{EXEC_PATH}}@ function.
 
 @item  --gui
 @itemx -g
@@ -125,15 +125,15 @@
 @cindex @sortas{options, Octave command --image-path} @ @ @code{--image-path @var{path}}
 Add path to the head of the search path for images.  The value of
 @var{path} specified on the command line will override any value of
-@w{@env{OCTAVE_IMAGE_PATH}} found in the environment, but not any commands
-in the system or user startup files that call the @w{@env{IMAGE_PATH}}
+@w{@env{OCTAVE_IMAGE_PATH}}@ found in the environment, but not any commands
+in the system or user startup files that call the @w{@env{IMAGE_PATH}}@
 function.
 
 @item --info-file @var{filename}
 @cindex @sortas{options, Octave command --info-file} @ @ @code{--info-file @var{filename}}
 Specify the name of the info file to use.  The value of @var{filename}
 specified on the command line will override any value of
-@w{@env{OCTAVE_INFO_FILE}} found in the environment, but not any commands
+@w{@env{OCTAVE_INFO_FILE}}@ found in the environment, but not any commands
 in the system or user startup files that use the @code{info_file}
 function.
 
@@ -141,7 +141,7 @@
 @cindex @sortas{options, Octave command --info-program} @ @ @code{--info-program @var{program}}
 Specify the name of the info program to use.  The value of @var{program}
 specified on the command line will override any value of
-@w{@env{OCTAVE_INFO_PROGRAM}} found in the environment, but not any
+@w{@env{OCTAVE_INFO_PROGRAM}}@ found in the environment, but not any
 commands in the system or user startup files that use the
 @code{info_program} function.
 
@@ -218,7 +218,7 @@
 @cindex @sortas{options, Octave command -p} @ @ @code{-p @var{path}}
 Add path to the head of the search path for function files.  The
 value of @var{path} specified on the command line will override any value
-of @w{@env{OCTAVE_PATH}} found in the environment, but not any commands in the
+of @w{@env{OCTAVE_PATH}}@ found in the environment, but not any commands in the
 system or user startup files that set the internal load path through one
 of the path functions.
 
--- a/doc/interpreter/expr.txi	Sun Feb 18 23:26:02 2024 -0500
+++ b/doc/interpreter/expr.txi	Tue Feb 20 15:07:51 2024 -0500
@@ -56,7 +56,8 @@
 @ref{XREFLinearIndexing,,Linear Indexing}, and
 @ref{XREFLogicalIndexing,,Logical Indexing}.
 
-@anchor{XREFComponentIndexing} @subheading Component Indexing
+@anchor{XREFComponentIndexing}
+@subheading Component Indexing
 @cindex Component Indexing
 Component indices may be scalars, vectors, ranges, or the special operator
 @samp{:}, which selects entire rows, columns, or higher-dimensional slices.
@@ -217,7 +218,8 @@
 
 For more information see the @ref{XREFend, , @qcode{"end" keyword}}.
 
-@anchor{XREFLinearIndexing}@subheading Linear Indexing
+@anchor{XREFLinearIndexing}
+@subheading Linear Indexing
 @cindex Linear Indexing
 It is permissible to use a 1-D index with a multi-dimensional object.  This is
 also called @dfn{linear indexing}.  In this case, the elements of the
@@ -236,7 +238,8 @@
 @end group
 @end example
 
-@anchor{XREFLogicalIndexing}@subheading Logical Indexing
+@anchor{XREFLogicalIndexing}
+@subheading Logical Indexing
 @cindex Logical Indexing
 Logical values can also be used to index matrices and cell arrays.
 When indexing with a logical array the result will be a vector containing
--- a/doc/interpreter/external.txi	Sun Feb 18 23:26:02 2024 -0500
+++ b/doc/interpreter/external.txi	Tue Feb 20 15:07:51 2024 -0500
@@ -158,7 +158,7 @@
 @file{octave/oct.h} is a C++ header and cannot be directly @code{#include}'ed
 in a C source file, nor any other language.
 
-Included by @file{oct.h} is a definition for the macro @w{@code{DEFUN_DLD}}
+Included by @file{oct.h} is a definition for the macro @w{@code{DEFUN_DLD}}@
 which creates a dynamically loaded function.  This macro takes four arguments:
 
 @enumerate 1
@@ -172,14 +172,14 @@
 @item The string to use for the help text of the function.
 @end enumerate
 
-The return type of functions defined with @w{@code{DEFUN_DLD}} is always
+The return type of functions defined with @w{@code{DEFUN_DLD}}@ is always
 @code{octave_value_list}.
 
 There are a couple of important considerations in the choice of function name.
 First, it must be a valid Octave function name and so must be a sequence of
 letters, digits, and underscores not starting with a digit.  Second, as Octave
 uses the function name to define the filename it attempts to find the function
-in, the function name in the @w{@code{DEFUN_DLD}} macro must match the filename
+in, the function name in the @w{@code{DEFUN_DLD}}@ macro must match the filename
 of the oct-file.  Therefore, the above function should be in a file
 @file{helloworld.cc}, and would be compiled to an oct-file using the command
 
@@ -189,9 +189,9 @@
 
 This will create a file called @file{helloworld.oct} that is the compiled
 version of the function.  It should be noted that it is perfectly acceptable to
-have more than one @w{@code{DEFUN_DLD}} function in a source file.  However,
+have more than one @w{@code{DEFUN_DLD}}@ function in a source file.  However,
 there must either be a symbolic link to the oct-file for each of the functions
-defined in the source code with the @w{@code{DEFUN_DLD}} macro or the
+defined in the source code with the @w{@code{DEFUN_DLD}}@ macro or the
 @code{autoload} (@ref{Function Files}) function should be used.
 
 The rest of the function shows how to find the number of input arguments, how
@@ -348,7 +348,7 @@
 @code{solve}, etc.
 
 The typical way to extract a matrix or array from the input arguments of
-@w{@code{DEFUN_DLD}} function is as follows
+@w{@code{DEFUN_DLD}}@ function is as follows
 
 @example
 @group
@@ -874,10 +874,10 @@
 
 Global variables allow variables in the global scope to be accessed.  Global
 variables can be accessed within oct-files by using the support functions
-@w{@code{global_varval}} and @w{@code{global_assign}} from the current
+@w{@code{global_varval}}@ and @w{@code{global_assign}}@ from the current
 interpreter's symbol table.  Both functions take as first argument a string
 representing the variable name to be obtained or assigned.  The second
-argument of @w{@code{global_assign}} is the value to be assigned.  An
+argument of @w{@code{global_assign}}@ is the value to be assigned.  An
 example of the use of these two functions is
 
 @example
@@ -1120,7 +1120,7 @@
 Allocating memory within an oct-file might seem easy, as the C++ new/delete
 operators can be used.  However, in that case great care must be taken to avoid
 memory leaks.  The preferred manner in which to allocate memory for use locally
-is to use the @w{@code{OCTAVE_LOCAL_BUFFER}} macro.  An example of its use is
+is to use the @w{@code{OCTAVE_LOCAL_BUFFER}}@ macro.  An example of its use is
 
 @example
 OCTAVE_LOCAL_BUFFER (double, tmp, len)
@@ -1194,19 +1194,19 @@
 @end group
 @end example
 
-The presence of the @w{@code{OCTAVE_QUIT}} macro in the inner loop allows
+The presence of the @w{@code{OCTAVE_QUIT}}@ macro in the inner loop allows
 Octave to detect and acknowledge a @key{Control-C} key sequence.  Without this
 macro, the user must either wait for the oct-file function to return before the
 interrupt is processed, or the user must press @key{Control-C} three times
 which will force Octave to exit completely.
 
-The @w{@code{OCTAVE_QUIT}} macro does impose a very small performance penalty;
+The @w{@code{OCTAVE_QUIT}}@ macro does impose a very small performance penalty;
 For loops that are known to be small it may not make sense to include
 @w{@code{OCTAVE_QUIT}}.
 
 When creating an oct-file that uses an external library, the function might
 spend a significant portion of its time in the external library.  It is not
-generally possible to use the @w{@code{OCTAVE_QUIT}} macro in this case.  The
+generally possible to use the @w{@code{OCTAVE_QUIT}}@ macro in this case.  The
 alternative code in this case is
 
 @example
@@ -1221,7 +1221,7 @@
 internally, then this memory might be lost during an interrupt, without being
 deallocated.  Therefore, ideally Octave itself should allocate any memory that
 is needed by the foreign code, with either the @nospell{@code{rwdata}}
-method or the @w{@code{OCTAVE_LOCAL_BUFFER}} macro.
+method or the @w{@code{OCTAVE_LOCAL_BUFFER}}@ macro.
 
 The Octave @code{unwind_protect} mechanism (@ref{The unwind_protect Statement})
 can also be used in oct-files.  In conjunction with the exception handling of
@@ -1251,7 +1251,7 @@
 @subsection Documentation and Testing of Oct-Files
 
 The documentation for an oct-file is contained in the fourth string parameter
-of the @w{@code{DEFUN_DLD}} macro.  This string can be formatted in the same
+of the @w{@code{DEFUN_DLD}}@ macro.  This string can be formatted in the same
 manner as the help strings for user functions, however there are some issues
 that are particular to the formatting of help strings within oct-files.
 
@@ -2163,7 +2163,7 @@
 @file{HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\JRE} or
 @file{HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment} on
 Windows.  The default path to the JVM can be overridden by setting the
-environment variable @w{@env{JAVA_HOME}} to the path where the JVM is
+environment variable @w{@env{JAVA_HOME}}@ to the path where the JVM is
 installed.  On Windows that might be, for example,
 @file{C:\Program Files\Java\jre-10.0.2}.  Make sure that you select a directory
 that contains the JVM with a @nospell{bit-ness} that matches Octave's.
--- a/doc/interpreter/func.txi	Sun Feb 18 23:26:02 2024 -0500
+++ b/doc/interpreter/func.txi	Tue Feb 20 15:07:51 2024 -0500
@@ -433,7 +433,6 @@
 @section Variable-length Return Lists
 @cindex variable-length return lists
 @cindex @code{varargout}
-
 @anchor{XREFvarargout}
 
 It is possible to return a variable number of output arguments from a
@@ -478,7 +477,6 @@
 @section Variable-length Argument Lists
 @cindex variable-length argument lists
 @cindex @code{varargin}
-
 @anchor{XREFvarargin}
 
 Sometimes the number of input arguments is not known when the function
--- a/doc/interpreter/genpropdoc.m	Sun Feb 18 23:26:02 2024 -0500
+++ b/doc/interpreter/genpropdoc.m	Tue Feb 20 15:07:51 2024 -0500
@@ -3538,7 +3538,7 @@
   for ii = 1:numel (categories)
     fields = sort (allfields(strcmp (allcategories, categories{ii})));
     nf = numel (fields);
-    str = sprintf ("%s\n\n@anchor{XREF%scategory%s}", str, ...
+    str = sprintf ("%s\n\n@anchor{XREF%scategory%s}\n", str, ...
                    objname, strrep (categories{ii}, " ", ""));
     str = sprintf ("%s@subsubheading %s\n", str, categories{ii});
     str = sprintf ("%s@prindex %s %s\n", str, ...
--- a/doc/interpreter/grammar.txi	Sun Feb 18 23:26:02 2024 -0500
+++ b/doc/interpreter/grammar.txi	Tue Feb 20 15:07:51 2024 -0500
@@ -91,19 +91,22 @@
 @ref{XREFunwind_protect_cleanup,,unwind_protect_cleanup}@: |
 @ref{XREFwhile,,while}@:
 
-@anchor{XREFkwcategoryUtilityFunctions}@subheading Utility Functions:
+@anchor{XREFkwcategoryUtilityFunctions}
+@subheading Utility Functions:
 The function @code{iskeyword} can be used to quickly check whether an
 identifier is reserved by Octave.
 
 @DOCSTRING(iskeyword)
 
-@anchor{XREFkwcategoryVariableDeclaration}@subheading Variable Declaration:
+@anchor{XREFkwcategoryVariableDeclaration}
+@subheading Variable Declaration:
 
 @DOCSTRING(global)
 
 @DOCSTRING(persistent)
 
-@anchor{XREFkwcategoryFunctionDefinition}@subheading Function Definition:
+@anchor{XREFkwcategoryFunctionDefinition}
+@subheading Function Definition:
 
 @DOCSTRING(function)
 
@@ -113,7 +116,8 @@
 
 @DOCSTRING(return)
 
-@anchor{XREFkwcategoryControlStructures}@subheading Control Statements:
+@anchor{XREFkwcategoryControlStructures}
+@subheading Control Statements:
 
 @DOCSTRING(if)
 
@@ -143,7 +147,8 @@
 
 @DOCSTRING(end_unwind_protect)
 
-@anchor{XREFkwcategoryIteratingStructures}@subheading Iterating Structures:
+@anchor{XREFkwcategoryIteratingStructures}
+@subheading Iterating Structures:
 
 @DOCSTRING(for)
 
@@ -165,7 +170,8 @@
 
 @DOCSTRING(continue)
 
-@anchor{XREFkwcategoryClassdefStructures}@subheading Classdef Structures:
+@anchor{XREFkwcategoryClassdefStructures}
+@subheading Classdef Structures:
 
 @DOCSTRING(classdef)
 
@@ -211,7 +217,8 @@
 
 @DOCSTRING(endenumeration)
 
-@anchor{XREFkwcategoryExecutionEnvironment}@subheading Execution Environment:
+@anchor{XREFkwcategoryExecutionEnvironment}
+@subheading Execution Environment:
 
 @DOCSTRING(__FILE__)
 
--- a/doc/interpreter/install.txi	Sun Feb 18 23:26:02 2024 -0500
+++ b/doc/interpreter/install.txi	Tue Feb 20 15:07:51 2024 -0500
@@ -885,7 +885,7 @@
 @itemize @bullet
 @item
 On some @nospell{SCO} systems, @code{info} fails to compile if
-@w{@code{HAVE_TERMIOS_H}} is defined in @file{config.h}.  Simply
+@w{@code{HAVE_TERMIOS_H}}@ is defined in @file{config.h}.  Simply
 removing the definition from @file{info/config.h} should allow it to
 compile.
 
@@ -910,7 +910,7 @@
 library, resulting in floating point errors and/or segmentation faults
 in the linear algebra routines called by Octave.  If you encounter such
 problems, then you should modify the configure script so that
-@w{@code{SPECIAL_MATH_LIB}} is not set to @code{-ldxml}.
+@w{@code{SPECIAL_MATH_LIB}}@ is not set to @code{-ldxml}.
 
 @item
 On FreeBSD systems Octave may hang while initializing some internal
@@ -956,10 +956,10 @@
 while compiling @file{sighandlers.cc}, you may need to edit some files
 in the @code{gcc} include subdirectory to add proper prototypes for
 functions there.  For example, @nospell{Ultrix} 4.2 needs proper declarations
-for the @code{signal} function and the @w{@code{SIG_IGN}} macro in the file
+for the @code{signal} function and the @w{@code{SIG_IGN}}@ macro in the file
 @file{signal.h}.
 
-On some systems the @w{@code{SIG_IGN}} macro is defined to be something
+On some systems the @w{@code{SIG_IGN}}@ macro is defined to be something
 like this:
 
 @example
@@ -975,8 +975,8 @@
 
 @noindent
 to match the prototype declaration for the @code{signal} function.  This
-change should also be made for the @w{@code{SIG_DFL}} and
-@w{@code{SIG_ERR}} symbols.  It may be necessary to change the
+change should also be made for the @w{@code{SIG_DFL}}@ and
+@w{@code{SIG_ERR}}@ symbols.  It may be necessary to change the
 definitions in @file{sys/signal.h} as well.
 
 The @code{gcc} @code{fixincludes} and @code{fixproto} scripts should
@@ -1040,7 +1040,7 @@
 @item
 Some people have reported that calls to system() and the pager do not
 work on @nospell{SunOS} systems.  This is apparently due to having
-@w{@code{G_HAVE_SYS_WAIT}} defined to be 0 instead of 1 when compiling
+@w{@code{G_HAVE_SYS_WAIT}}@ defined to be 0 instead of 1 when compiling
 @code{libg++}.
 
 @item
--- a/doc/interpreter/package.txi	Sun Feb 18 23:26:02 2024 -0500
+++ b/doc/interpreter/package.txi	Tue Feb 20 15:07:51 2024 -0500
@@ -227,7 +227,7 @@
 @anchor{XREFPKG_ADD}
 @item package/PKG_ADD
 An optional file that includes commands that are run when the package
-is added to the users path.  Note that @w{@code{PKG_ADD}} directives in the
+is added to the users path.  Note that @w{@code{PKG_ADD}}@ directives in the
 source code of the package will also be added to this file by the
 Octave package manager.  Note that symbolic links are to be avoided in
 packages, as symbolic links do not exist on some file systems, and so
@@ -245,17 +245,17 @@
 @end example
 
 @noindent
-@xref{PKG_ADD and PKG_DEL Directives}, for details on @w{@code{PKG_ADD}}
+@xref{PKG_ADD and PKG_DEL Directives}, for details on @w{@code{PKG_ADD}}@
 directives.
 
 @cindex PKG_DEL
 @anchor{XREFPKG_DEL}
 @item package/PKG_DEL
 An optional file that includes commands that are run when the package
-is removed from the users path.  Note that @w{@code{PKG_DEL}} directives in
+is removed from the users path.  Note that @w{@code{PKG_DEL}}@ directives in
 the source code of the package will also be added to this file by the
 Octave package manager.
-@xref{PKG_ADD and PKG_DEL Directives}, for details on @w{@code{PKG_DEL}}
+@xref{PKG_ADD and PKG_DEL Directives}, for details on @w{@code{PKG_DEL}}@
 directives.
 
 @item package/pre_install.m
@@ -308,7 +308,7 @@
 
 @item package/bin
 An optional directory containing files that will be added to the
-Octave @w{@env{EXEC_PATH}} when the package is loaded.  This might contain
+Octave @w{@env{EXEC_PATH}}@ when the package is loaded.  This might contain
 external scripts, etc., called by functions within the package.
 @end table
 
@@ -561,15 +561,15 @@
 @node PKG_ADD and PKG_DEL Directives
 @subsection PKG_ADD and PKG_DEL Directives
 
-If the package contains files called @w{@code{PKG_ADD}} or @w{@code{PKG_DEL}}
+If the package contains files called @w{@code{PKG_ADD}}@ or @w{@code{PKG_DEL}}@
 the commands in these files will be executed when the package is
 added or removed from the users path.  In some situations such files
 are a bit cumbersome to maintain, so the package manager supports
 automatic creation of such files.  If a source file in the package
-contains a @w{@code{PKG_ADD}} or @w{@code{PKG_DEL}} directive they will be
-added to either the @w{@code{PKG_ADD}} or @w{@code{PKG_DEL}} files.
+contains a @w{@code{PKG_ADD}}@ or @w{@code{PKG_DEL}}@ directive they will be
+added to either the @w{@code{PKG_ADD}}@ or @w{@code{PKG_DEL}}@ files.
 
-In @code{m}-files a @w{@code{PKG_ADD}} directive looks like this
+In @code{m}-files a @w{@code{PKG_ADD}}@ directive looks like this
 
 @example
 ## PKG_ADD: some_octave_command
@@ -577,7 +577,7 @@
 
 @noindent
 Such lines should be added before the @code{function} keyword.
-In C++ files a @w{@code{PKG_ADD}} directive looks like this
+In C++ files a @w{@code{PKG_ADD}}@ directive looks like this
 
 @example
 // PKG_ADD: some_octave_command
@@ -585,10 +585,10 @@
 
 @noindent
 In both cases @code{some_octave_command} should be replaced by the
-command that should be placed in the @w{@code{PKG_ADD}} file.
-@w{@code{PKG_DEL}} directives work in the same way, except the
-@w{@code{PKG_ADD}} keyword is replaced with @w{@code{PKG_DEL}} and the commands
-get added to the @w{@code{PKG_DEL}} file.
+command that should be placed in the @w{@code{PKG_ADD}}@ file.
+@w{@code{PKG_DEL}}@ directives work in the same way, except the
+@w{@code{PKG_ADD}}@ keyword is replaced with @w{@code{PKG_DEL}}@ and the
+commands get added to the @w{@code{PKG_DEL}}@ file.
 
 @node Missing Components
 @subsection Missing Components
--- a/doc/interpreter/plot.txi	Sun Feb 18 23:26:02 2024 -0500
+++ b/doc/interpreter/plot.txi	Tue Feb 20 15:07:51 2024 -0500
@@ -307,13 +307,12 @@
 The @code{xlim}, @code{ylim}, and @code{zlim} functions may be used to
 get or set individual axis limits.  Each has the same form.
 
-@c Add cross-references and function index entries for other limit functions.
-@anchor{XREFylim}
-@anchor{XREFzlim}
-@findex ylim
-@findex zlim
 @DOCSTRING(xlim)
 
+@DOCSTRING(ylim)
+
+@DOCSTRING(zlim)
+
 The @code{xticks}, @code{yticks}, @code{zticks}, @code{rticks}, and
 @code{thetaticks} functions may be used to get or set the tick mark locations
 and modes on the respective axis.  Each has the same form, although mode
@@ -321,16 +320,16 @@
 
 @c FIXME: Update this section if polarplot and polar axes changes change the
 @c        associated axis properties.
-@anchor{XREFyticks}
-@anchor{XREFzticks}
-@anchor{XREFrticks}
-@anchor{XREFthetaticks}
-@findex yticks
-@findex zticks
-@findex rticks
-@findex thetaticks
 @DOCSTRING(xticks)
 
+@DOCSTRING(yticks)
+
+@DOCSTRING(zticks)
+
+@DOCSTRING(rticks)
+
+@DOCSTRING(thetaticks)
+
 The @code{xticklabels}, @code{yticklabels}, and @code{zticklabels} functions
 may be used to get or set the label assigned to each tick location and the
 labeling mode on the respective axis.  Each has the same form.
@@ -338,22 +337,22 @@
 @c FIXME: Update this section if polarplot and polar axes changes change the
 @c        associated axis properties.
 @c        Matlab also implements rticklabels and thetaticklabels.
-@anchor{XREFyticklabels}
-@anchor{XREFzticklabels}
-@findex yticklabels
-@findex zticklabels
 @DOCSTRING(xticklabels)
 
+@DOCSTRING(yticklabels)
+
+@DOCSTRING(zticklabels)
+
 The @code{xtickangle}, @code{ytickangle}, and @code{ztickangle} functions
 may be used to get or set the rotation angle of labels for the respective axis.
 Each has the same form.
 
-@anchor{XREFytickangle}
-@anchor{XREFztickangle}
-@findex ytickangle
-@findex ztickangle
 @DOCSTRING(xtickangle)
 
+@DOCSTRING(ytickangle)
+
+@DOCSTRING(ztickangle)
+
 @node Two-dimensional Function Plotting
 @subsubsection Two-dimensional Function Plotting
 @cindex plotting, two-dimensional functions
@@ -604,13 +603,12 @@
 
 @DOCSTRING(text)
 
-@c Add cross-references and function index entries for other label functions.
-@anchor{XREFylabel}
-@anchor{XREFzlabel}
-@findex ylabel
-@findex zlabel
 @DOCSTRING(xlabel)
 
+@DOCSTRING(ylabel)
+
+@DOCSTRING(zlabel)
+
 @DOCSTRING(clabel)
 
 @DOCSTRING(box)
@@ -2304,9 +2302,8 @@
 @DOCSTRING(refreshdata)
 
 @anchor{XREFlinkdata}
-@c add the description of the linkdata function here when it is written
-@c remove the explicit anchor when you add the corresponding @DOCSTRING
-@c command
+@c FIXME: Add the description of the linkdata function here when it is written.
+@c Remove the explicit anchor when you add the corresponding @DOCSTRING command.
 
 @node Area Series
 @subsubsection Area Series
--- a/doc/interpreter/testfun.txi	Sun Feb 18 23:26:02 2024 -0500
+++ b/doc/interpreter/testfun.txi	Tue Feb 20 15:07:51 2024 -0500
@@ -340,9 +340,9 @@
 @itemx %!testif HAVE_XXX, HAVE_YYY @dots{}; RUNTIME_COND
 @itemx %!testif @dots{} <MESSAGE>
 Check block only if Octave was compiled with feature @w{@code{HAVE_XXX}}.
-@w{@code{RUNTIME_COND}} is an optional expression to evaluate to check
+@w{@code{RUNTIME_COND}}@ is an optional expression to evaluate to check
 whether some condition is met when the test is executed.  If
-@w{@code{RUNTIME_COND}} is false, the test is skipped.  If @code{<MESSAGE>}
+@w{@code{RUNTIME_COND}}@ is false, the test is skipped.  If @code{<MESSAGE>}
 is present, the test block is interpreted as for @code{xtest}.
 
 @item  %!xtest
--- a/libinterp/corefcn/debug.cc	Sun Feb 18 23:26:02 2024 -0500
+++ b/libinterp/corefcn/debug.cc	Tue Feb 20 15:07:51 2024 -0500
@@ -592,37 +592,6 @@
   return ovl ();
 }
 
-static void
-do_dbtype (std::ostream& os, const std::string& name, int start, int end)
-{
-  std::string ff = octave::fcn_file_in_path (name);
-
-  if (ff.empty ())
-    os << "dbtype: unknown function " << name << "\n";
-  else
-    {
-      std::ifstream fs = octave::sys::ifstream (ff.c_str (), std::ios::in);
-
-      if (! fs)
-        os << "dbtype: unable to open '" << ff << "' for reading!\n";
-      else
-        {
-          int line = 1;
-          std::string text;
-
-          while (std::getline (fs, text) && line <= end)
-            {
-              if (line >= start)
-                os << line << "\t" << text << "\n";
-
-              line++;
-            }
-        }
-    }
-
-  os.flush ();
-}
-
 DEFMETHOD (dbtype, interp, args, ,
            doc: /* -*- texinfo -*-
 @deftypefn  {} {} dbtype
@@ -647,23 +616,17 @@
 @seealso{dblist, dbwhere, dbstatus, dbstop}
 @end deftypefn */)
 {
-  octave_user_code *dbg_fcn;
-
   string_vector argv = args.make_argv ("dbtype");
 
-  octave::tree_evaluator& tw = interp.get_evaluator ();
+  // Empty means current function on call stack.
+  std::string fcn_name;
+
+  int start = 0;
+  int end = std::numeric_limits<int>::max ();
 
   switch (args.length ())
     {
     case 0:  // dbtype
-      dbg_fcn = tw.get_user_code ();
-
-      if (! dbg_fcn)
-        error ("dbtype: must be inside a user function to give no arguments to dbtype\n");
-
-      do_dbtype (octave_stdout, dbg_fcn->fcn_file_name (),
-                 0, std::numeric_limits<int>::max ());
-
       break;
 
     case 1:  // (dbtype start:end) || (dbtype fcn) || (dbtype lineno)
@@ -674,54 +637,34 @@
 
         if (ind != std::string::npos)  // (dbtype start:end)
           {
-            dbg_fcn = tw.get_user_code ();
-
-            if (dbg_fcn)
-              {
-                std::string start_str = arg.substr (0, ind);
-                std::string end_str = arg.substr (ind + 1);
+            std::string start_str = arg.substr (0, ind);
+            std::string end_str = arg.substr (ind + 1);
 
-                int start, end;
-                start = atoi (start_str.c_str ());
-                if (end_str == "end")
-                  end = std::numeric_limits<int>::max ();
-                else
-                  end = atoi (end_str.c_str ());
+            start = atoi (start_str.c_str ());
+            if (end_str == "end")
+              end = std::numeric_limits<int>::max ();
+            else
+              end = atoi (end_str.c_str ());
 
-                if (std::min (start, end) <= 0)
-                  error ("dbtype: start and end lines must be >= 1\n");
+            if (std::min (start, end) <= 0)
+              error ("dbtype: start and end lines must be >= 1\n");
 
-                if (start > end)
-                  error ("dbtype: start line must be less than end line\n");
-
-                do_dbtype (octave_stdout, dbg_fcn->fcn_file_name (),
-                           start, end);
-              }
+            if (start > end)
+              error ("dbtype: start line must be less than end line\n");
           }
         else  // (dbtype fcn) || (dbtype lineno)
           {
             int line = atoi (arg.c_str ());
 
             if (line == 0)  // (dbtype fcn)
-              {
-                dbg_fcn = tw.get_user_code (arg);
-
-                if (! dbg_fcn)
-                  error ("dbtype: function <%s> not found\n", arg.c_str ());
-
-                do_dbtype (octave_stdout, dbg_fcn->fcn_file_name (),
-                           0, std::numeric_limits<int>::max ());
-              }
+              fcn_name = arg;
             else  // (dbtype lineno)
               {
                 if (line <= 0)
                   error ("dbtype: start and end lines must be >= 1\n");
 
-                dbg_fcn = tw.get_user_code ();
-
-                if (dbg_fcn)
-                  do_dbtype (octave_stdout, dbg_fcn->fcn_file_name (),
-                             line, line);
+                start = line;
+                end = line;
               }
           }
       }
@@ -729,13 +672,9 @@
 
     case 2:  // (dbtype fcn start:end) || (dbtype fcn start)
       {
-        dbg_fcn = tw.get_user_code (argv[1]);
-
-        if (! dbg_fcn)
-          error ("dbtype: function <%s> not found\n", argv[1].c_str ());
+        fcn_name = argv[1];
 
         std::string arg = argv[2];
-        int start, end;
         std::size_t ind = arg.find (':');
 
         if (ind != std::string::npos)
@@ -760,8 +699,6 @@
 
         if (start > end)
           error ("dbtype: start line must be less than end line\n");
-
-        do_dbtype (octave_stdout, dbg_fcn->fcn_file_name (), start, end);
       }
       break;
 
@@ -769,6 +706,22 @@
       error ("dbtype: expecting zero, one, or two arguments\n");
     }
 
+  if (fcn_name.empty ())
+    {
+      octave::tree_evaluator& tw = interp.get_evaluator ();
+
+      tw.debug_type (octave_stdout, start, end);
+    }
+  else
+    {
+      std::string file_name = octave::fcn_file_in_path (fcn_name);
+
+      if (file_name.empty ())
+        error ("dbtype: unknown function '%s'", fcn_name.c_str ());
+
+      octave::display_file_lines (octave_stdout, file_name, start, end, -1, "", "dbtype");
+    }
+
   return ovl ();
 }
 
@@ -785,7 +738,12 @@
 {
   int n = 10;
 
-  if (args.length () == 1)
+  int numel = args.length ();
+
+  if (numel > 1)
+    print_usage ();
+
+  if (numel == 1)
     {
       octave_value arg = args(0);
 
@@ -804,44 +762,7 @@
 
   octave::tree_evaluator& tw = interp.get_evaluator ();
 
-  octave_user_code *dbg_fcn = tw.get_user_code ();
-
-  if (! dbg_fcn)
-    error ("dblist: must be inside a user function to use dblist\n");
-
-  bool have_file = true;
-
-  std::string name = dbg_fcn->fcn_file_name ();
-
-  if (name.empty ())
-    {
-      have_file = false;
-      name = dbg_fcn->name ();
-    }
-
-  int l = tw.debug_user_code_line ();
-
-  if (l > 0)
-    {
-      if (have_file)
-        {
-          int l_min = std::max (l - n/2, 0);
-          int l_max = l + n/2;
-          do_dbtype (octave_stdout, name, l_min, l-1);
-
-          std::string line = dbg_fcn->get_code_line (l);
-
-          if (! line.empty ())
-            octave_stdout << l << "-->\t" << line << std::endl;
-
-          do_dbtype (octave_stdout, name, l+1, l_max);
-        }
-    }
-  else
-    {
-      octave_stdout << "dblist: unable to determine source code line"
-                    << std::endl;
-    }
+  tw.debug_list (octave_stdout, n);
 
   return ovl ();
 }
--- a/libinterp/corefcn/environment.cc	Sun Feb 18 23:26:02 2024 -0500
+++ b/libinterp/corefcn/environment.cc	Tue Feb 20 15:07:51 2024 -0500
@@ -164,9 +164,9 @@
 @deftypefnx {} {@var{old_val} =} EDITOR (@var{new_val}, "local")
 Query or set the internal variable that specifies the default text editor.
 
-The default value is taken from the environment variable @w{@env{EDITOR}}
+The default value is taken from the environment variable @w{@env{EDITOR}}@
 when Octave starts.  If the environment variable is not initialized,
-@w{@env{EDITOR}} will be set to @qcode{"emacs"}.
+@w{@env{EDITOR}}@ will be set to @qcode{"emacs"}.
 
 When called from inside a function with the @qcode{"local"} option, the
 variable is changed locally for the function and any subroutines it calls.
--- a/libinterp/corefcn/file-io.cc	Sun Feb 18 23:26:02 2024 -0500
+++ b/libinterp/corefcn/file-io.cc	Tue Feb 20 15:07:51 2024 -0500
@@ -756,10 +756,10 @@
 Set the file pointer to the location @var{offset} within the file @var{fid}.
 
 The pointer is positioned @var{offset} characters from the @var{origin}, which
-may be one of the predefined variables @w{@qcode{SEEK_SET}} (beginning),
-@w{@qcode{SEEK_CUR}} (current position), or @w{@qcode{SEEK_END}} (end of file)
+may be one of the predefined variables @w{@qcode{SEEK_SET}}@ (beginning),
+@w{@qcode{SEEK_CUR}}@ (current position), or @w{@qcode{SEEK_END}}@ (end of file)
 or strings @nospell{@qcode{"bof"}}, @nospell{@qcode{"cof"}}, or
-@nospell{@qcode{"eof"}}.  If @var{origin} is omitted, @w{@qcode{SEEK_SET}} is
+@nospell{@qcode{"eof"}}.  If @var{origin} is omitted, @w{@qcode{SEEK_SET}}@ is
 assumed.  @var{offset} may be positive, negative, or zero but not all
 combinations of @var{origin} and @var{offset} can be realized.
 
@@ -3108,7 +3108,7 @@
 is then created with mode read/write and permissions that are system
 dependent (on GNU/Linux systems, the permissions will be 0600 for versions
 of glibc 2.0.7 and later).  The file is opened in binary mode and with the
-@w{@code{O_EXCL}} flag.
+@w{@code{O_EXCL}}@ flag.
 
 If the optional argument @var{delete} is supplied and is true, the file will
 be deleted automatically when Octave exits.
--- a/libinterp/corefcn/interpreter.cc	Sun Feb 18 23:26:02 2024 -0500
+++ b/libinterp/corefcn/interpreter.cc	Tue Feb 20 15:07:51 2024 -0500
@@ -311,7 +311,7 @@
 DEFMETHOD (__traditional__, interp, , ,
            doc: /* -*- texinfo -*-
 @deftypefn {} {@var{tf} =} __traditional__ ()
-Return true if Octave was invoked with the @w{@env{--traditional}} option.
+Return true if Octave was invoked with the @w{@env{--traditional}}@ option.
 @end deftypefn */)
 {
   return ovl (interp.traditional ());
--- a/libinterp/corefcn/nproc.cc	Sun Feb 18 23:26:02 2024 -0500
+++ b/libinterp/corefcn/nproc.cc	Tue Feb 20 15:07:51 2024 -0500
@@ -55,7 +55,7 @@
 
 @item overridable
 same as @code{current}, but overridable through the
-@w{@env{OMP_NUM_THREADS}} environment variable.
+@w{@env{OMP_NUM_THREADS}}@ environment variable.
 @end table
 @end deftypefn */)
 {
--- a/libinterp/corefcn/stack-frame.cc	Sun Feb 18 23:26:02 2024 -0500
+++ b/libinterp/corefcn/stack-frame.cc	Tue Feb 20 15:07:51 2024 -0500
@@ -30,6 +30,7 @@
 #include <iostream>
 
 #include "lo-regexp.h"
+#include "lo-sysdep.h"
 #include "str-vec.h"
 
 #include "defun.h"
@@ -48,6 +49,7 @@
 #include "syminfo.h"
 #include "symrec.h"
 #include "symscope.h"
+#include "utils.h"
 #include "variables.h"
 
 #if defined (OCTAVE_ENABLE_BYTECODE_EVALUATOR)
@@ -3442,6 +3444,24 @@
 }
 
 void
+stack_frame::debug_list (std::ostream& os, int num_lines) const
+{
+  std::string file_name = fcn_file_name ();
+
+  int target_line = line ();
+  int start = std::max (target_line - num_lines/2, 0);
+  int end = target_line + num_lines/2;
+
+  display_file_lines (os, fcn_file_name (), start, end, target_line, "-->", "dblist");
+}
+
+void
+stack_frame::debug_type (std::ostream& os, int start_line, int end_line) const
+{
+  display_file_lines (os, fcn_file_name (), start_line, end_line, -1, "", "dbtype");
+}
+
+void
 stack_frame::display (bool follow) const
 {
   std::ostream& os = octave_stdout;
--- a/libinterp/corefcn/stack-frame.h	Sun Feb 18 23:26:02 2024 -0500
+++ b/libinterp/corefcn/stack-frame.h	Tue Feb 20 15:07:51 2024 -0500
@@ -627,6 +627,15 @@
 
   void display_stopped_in_message (std::ostream& os) const;
 
+  void debug_where (std::ostream& os) const
+  {
+    display_stopped_in_message (os);
+  }
+
+  void debug_list (std::ostream& os, int num_lines) const;
+
+  void debug_type (std::ostream& os, int start_line, int end_line) const;
+
   virtual void mark_scope (const symbol_record&, scope_flags) = 0;
 
   virtual void display (bool follow = true) const;
--- a/libinterp/corefcn/syscalls.cc	Sun Feb 18 23:26:02 2024 -0500
+++ b/libinterp/corefcn/syscalls.cc	Tue Feb 20 15:07:51 2024 -0500
@@ -426,7 +426,7 @@
 
 @item F_SETFL
 Set the file status flags for @var{fid} to the value specified by @var{arg}.
- The only flags that can be changed are @w{@code{O_APPEND}} and
+The only flags that can be changed are @w{@code{O_APPEND}}@ and
 @w{@code{O_NONBLOCK}}.
 @end vtable
 
@@ -824,7 +824,7 @@
 @item mode
 File mode, as an integer.  Use the functions @w{@code{S_ISREG}},
 @w{@code{S_ISDIR}}, @w{@code{S_ISCHR}}, @w{@code{S_ISBLK}},
-@w{@code{S_ISFIFO}}, @w{@code{S_ISLNK}}, or @w{@code{S_ISSOCK}} to extract
+@w{@code{S_ISFIFO}}, @w{@code{S_ISLNK}}, or @w{@code{S_ISSOCK}}@ to extract
 information from this value.
 
 @item modestr
--- a/libinterp/corefcn/sysdep.cc	Sun Feb 18 23:26:02 2024 -0500
+++ b/libinterp/corefcn/sysdep.cc	Tue Feb 20 15:07:51 2024 -0500
@@ -907,7 +907,7 @@
   if (result != ERROR_SUCCESS)
     return result;
 
-  unwind_action restore_keys ([] () { reg_close_key_wrapper (h_subkey); });
+  unwind_action restore_keys ([h_subkey] () { reg_close_key_wrapper (h_subkey); });
 
   std::wstring wname = sys::u8_to_wstring (name);
   DWORD length = 0;
--- a/libinterp/corefcn/utils.cc	Sun Feb 18 23:26:02 2024 -0500
+++ b/libinterp/corefcn/utils.cc	Tue Feb 20 15:07:51 2024 -0500
@@ -803,6 +803,35 @@
   return retval;
 }
 
+void
+display_file_lines (std::ostream& os, const std::string& file_name, int start, int end, int target_line, const std::string& marker, const std::string& who)
+{
+  std::ifstream fs = octave::sys::ifstream (file_name.c_str (), std::ios::in);
+
+  if (! fs)
+    os << who << ": unable to open '" << file_name << "' for reading!\n";
+  else
+    {
+      int line_num = 1;
+      std::string text;
+
+      while (std::getline (fs, text) && line_num <= end)
+        {
+          if (line_num >= start)
+            {
+              os << line_num;
+
+              if (line_num == target_line)
+                os << marker;
+
+              os << "\t" << text << "\n";
+            }
+
+          line_num++;
+        }
+    }
+}
+
 // Replace backslash escapes in a string with the real values.
 
 std::string
--- a/libinterp/corefcn/utils.h	Sun Feb 18 23:26:02 2024 -0500
+++ b/libinterp/corefcn/utils.h	Tue Feb 20 15:07:51 2024 -0500
@@ -135,6 +135,9 @@
 
 extern OCTINTERP_API std::string fcn_file_in_path (const std::string&);
 
+extern OCTINTERP_API void
+display_file_lines (std::ostream& os, const std::string& file_name, int start, int end, int target_line, const std::string& marker, const std::string& who);
+
 extern OCTINTERP_API std::string do_string_escapes (const std::string& s);
 
 extern OCTINTERP_API const char * undo_string_escape (char c);
--- a/libinterp/parse-tree/pt-eval.cc	Sun Feb 18 23:26:02 2024 -0500
+++ b/libinterp/parse-tree/pt-eval.cc	Tue Feb 20 15:07:51 2024 -0500
@@ -2577,6 +2577,28 @@
   frm->display_stopped_in_message (os);
 }
 
+void
+tree_evaluator::debug_list (std::ostream& os, int num_lines) const
+{
+  std::shared_ptr<stack_frame> frm = m_call_stack.current_user_frame ();
+
+  if (! (frm->is_user_script_frame () || frm->is_user_fcn_frame ()))
+    error ("dblist: must be inside a user function or script to use dblist\n");
+
+  frm->debug_list (os, num_lines);
+}
+
+void
+tree_evaluator::debug_type (std::ostream& os, int start_line, int end_line) const
+{
+  std::shared_ptr<stack_frame> frm = m_call_stack.current_user_frame ();
+
+  if (! (frm->is_user_script_frame () || frm->is_user_fcn_frame ()))
+    error ("dbtype: must be inside a user function or script to use dbtype\n");
+
+  frm->debug_type (os, start_line, end_line);
+}
+
 octave_user_code *
 tree_evaluator::current_user_code () const
 {
--- a/libinterp/parse-tree/pt-eval.h	Sun Feb 18 23:26:02 2024 -0500
+++ b/libinterp/parse-tree/pt-eval.h	Tue Feb 20 15:07:51 2024 -0500
@@ -491,6 +491,10 @@
 
   void debug_where (std::ostream& os) const;
 
+  void debug_list (std::ostream& os, int num_lines) const;
+
+  void debug_type (std::ostream& os, int start_line, int end_line) const;
+
   octave_user_code * current_user_code () const;
 
   unwind_protect * curr_fcn_unwind_protect_frame ();
--- a/liboctave/system/lo-sysdep.cc	Sun Feb 18 23:26:02 2024 -0500
+++ b/liboctave/system/lo-sysdep.cc	Tue Feb 20 15:07:51 2024 -0500
@@ -239,7 +239,7 @@
       return false;
     }
 
-  unwind_action act ([] ()
+  unwind_action act ([fptr, tmpname] ()
   {
     std::fclose (fptr);
     sys::unlink (tmpname);
--- a/liboctave/util/oct-glob.cc	Sun Feb 18 23:26:02 2024 -0500
+++ b/liboctave/util/oct-glob.cc	Tue Feb 20 15:07:51 2024 -0500
@@ -184,7 +184,7 @@
   if (h_find == INVALID_HANDLE_VALUE)
     return;
 
-  unwind_action close_h_find ([] () { FindClose (h_find); });
+  unwind_action close_h_find ([h_find] () { FindClose (h_find); });
 
   // find all files that match pattern
   do
--- a/scripts/general/bitset.m	Sun Feb 18 23:26:02 2024 -0500
+++ b/scripts/general/bitset.m	Tue Feb 20 15:07:51 2024 -0500
@@ -28,8 +28,8 @@
 ## @deftypefnx {} {@var{B} =} bitset (@var{A}, @var{n}, @var{val})
 ## Set or reset bit(s) at position @var{n} of the unsigned integers in @var{A}.
 ##
-## The least significant bit is @var{n} = 1.  @w{@var{val} = 0} resets bits and
-## @w{@var{val} = 1} sets bits.  If no @var{val} is specified it defaults to
+## The least significant bit is @var{n} = 1.  @w{@var{val} = 0}@ resets bits and
+## @w{@var{val} = 1}@ sets bits.  If no @var{val} is specified it defaults to
 ## 1 (set bit).  All inputs must be the same size or scalars.
 ##
 ## Example 1: Set multiple bits
--- a/scripts/miscellaneous/mkoctfile.m	Sun Feb 18 23:26:02 2024 -0500
+++ b/scripts/miscellaneous/mkoctfile.m	Tue Feb 20 15:07:51 2024 -0500
@@ -137,9 +137,9 @@
 ## purposes only.  Except for @samp{OCTAVE_HOME} and @samp{OCTAVE_EXEC_HOME},
 ## users may not override these variables.
 ##
-## If @w{@env{OCTAVE_HOME}} or @w{@env{OCTAVE_EXEC_HOME}} are set in the
+## If @w{@env{OCTAVE_HOME}}@ or @w{@env{OCTAVE_EXEC_HOME}}@ are set in the
 ## environment, then other variables are adjusted accordingly with
-## @w{@env{OCTAVE_HOME}} or @w{@env{OCTAVE_EXEC_HOME}} substituted for the
+## @w{@env{OCTAVE_HOME}}@ or @w{@env{OCTAVE_EXEC_HOME}}@ substituted for the
 ## original value of the directory specified by the @option{--prefix} or
 ## @option{--exec-prefix} options that were used when Octave was configured.
 ##
--- a/scripts/miscellaneous/version.m	Sun Feb 18 23:26:02 2024 -0500
+++ b/scripts/miscellaneous/version.m	Tue Feb 20 15:07:51 2024 -0500
@@ -66,7 +66,7 @@
 ## when Octave was built instead of which library is currently used.
 ##
 ## The variant with no input and output argument is an alias for the function
-## @w{@env{OCTAVE_VERSION}} provided for compatibility.
+## @w{@env{OCTAVE_VERSION}}@ provided for compatibility.
 ## @seealso{OCTAVE_VERSION, ver}
 ## @end deftypefn
 
--- a/scripts/path/matlabroot.m	Sun Feb 18 23:26:02 2024 -0500
+++ b/scripts/path/matlabroot.m	Tue Feb 20 15:07:51 2024 -0500
@@ -27,7 +27,7 @@
 ## @deftypefn {} {@var{dir} =} matlabroot ()
 ## Return the name of the top-level Octave installation directory.
 ##
-## This is an alias for the function @w{@code{OCTAVE_HOME}} provided for
+## This is an alias for the function @w{@code{OCTAVE_HOME}}@ provided for
 ## compatibility.
 ## @seealso{OCTAVE_HOME}
 ## @end deftypefn
--- a/scripts/plot/appearance/view.m	Sun Feb 18 23:26:02 2024 -0500
+++ b/scripts/plot/appearance/view.m	Tue Feb 20 15:07:51 2024 -0500
@@ -37,10 +37,10 @@
 ## arguments or as 2-element vector.  The viewpoint can also be specified with
 ## Cartesian coordinates @var{x}, @var{y}, and @var{z}.
 ##
-## The call @code{view (2)} sets the viewpoint to @w{@var{azimuth} = 0}
+## The call @code{view (2)} sets the viewpoint to @w{@var{azimuth} = 0}@
 ## and @w{@var{elevation} = 90}, which is the default for 2-D graphs.
 ##
-## The call @code{view (3)} sets the viewpoint to @w{@var{azimuth} = -37.5}
+## The call @code{view (3)} sets the viewpoint to @w{@var{azimuth} = -37.5}@
 ## and @w{@var{elevation} = 30}, which is the default for 3-D graphs.
 ##
 ## If the first argument @var{hax} is an axes handle, then operate on