20230529:
- The FAQ concerning break and continue has been improved.
- Chapters about assignment and constants have been added to the
tutorial, which is part of the manual. A description of the function
fraction() has been added to the chapter about predefined types.
- The new library archive_base.s7i has been added. This library
defines common functions for file archives. It currently defines the
function readDir() which is used by the archive libraries ar.s7i,
cpio.s7i, rpm.s7i, tar.s7i and zip.s7i.
- In the zip.s7i library the function readDir() has been improved to
work for absolute paths (by calling readDir() from archive_base.s7i).
- Several improvements have been made in the rpm.s7i library:
- The signature section digests are checked when the RPM file is
opened.
- The payload digests are only checked if the payload is used.
- Provided and required dependencies are read when the RPM file is
opened.
- The compiler (s7c.sd7) has been improved:
- It recognizes if an array index access would always raise
INDEX_ERROR. This is done for a constant array and with the range
of possible index values.
- The optimization of the floating point power operator with an
integer exponent has been improved. There are cases where the base
is constant, and the range of possible exponents allows a
simplification.
- The optimization of the floating point left and right shift
operators has been improved. It considers cases where the number
that needs to be shifted is constant and cases where nothing is
constant. In both situations the range of possible shift amounts
allows simplifications.
- The optimization of A * B ** C with A and B float and C integer,
has been improved. This considers cases where B is a power of two
and the range of possible exponents C allows a simplification.
- It is recognized if the integer left shift operator would always
raise OVERFLOW_ERROR. Depending on the range of possible values
for the shift amount and the value to be shifted, this optimization
is made.
- The number of checks for OVERFLOW_ERROR and NUMERIC_ERROR of the
integer power operator has been reduced. Depending on the range of
possible values for base and exponent, some checks can be omitted.
- Now the range of possible integer values is determined for the
expression ord(aBigInteger mod 2_ ** n).
- Now the range of possible integer values is determined for the
length of a sub-string.
- The generated code for 'elsif FALSE then end if' as been fixed.
- String index checks are optimized away if the range of possible
index values always remains inside a constant string.
- Computing the length of a fixLen substring has been optimized
(e.g.: length(aString[A fixLen B]) will always return B).
- The optimization of the string length function has been changed to
sum up the length of the components as integers.
- The test suite has been improved to increase the code coverage of the
compiler.
- Tests for array assignment, array length and array index access have
been added to chkarr.sd7.
- Tests of the optimization of expressions like ord((A + B) mod C)
(the modulus of a bigInteger sum converted to an integer) have been
added.
- Several tests have been added to chkflt.sd7:
- Tests for float left shift (<<).
- Tests for float right shift (>>).
- Tests for float ** integer.
- Tests for the A * B ** C optimization.
- Tests for float ** float.
- The tests for decompose() have been improved.
- Tests for ceil(), floor() and trigonometric functions have been
added.
- Tests for the power operator (**) and for the integer >>:= operator
have been added to chkint.sd7.
- Tests for the overflow of shift left (<<) and for the power operator
(**) have been added to chkovf.sd7.
- Tests for string head have been added to chkidx.sd7.
- Tests for empty if-, while- and repeat-statements have been added to
chkprc.sd7.
- Tests for card(), rand() and assignment have been added to
chkset.sd7.
- Several tests have been added to chkstr.sd7:
- Tests for string length.
- Tests for string index access.
- Tests for the string head function.
- Tests for string concatenation.
- Tests for string assignment.
- The phrase "works correct" has been replaced with "works correctly"
in the files chk_all.sd7, chkarr.sd7, chkbig.sd7, chkbin.sd7,
chkbigdata.sd7, chkbool.sd7, chkbst.sd7, chkchr.sd7, chkcmd.sd7,
chkexc.sd7, chkfil.sd7, chkflt.sd7, chkhsh.sd7, chkidx.sd7,
chkint.sd7, chkovf.sd7, chkprc.sd7, chkset.sd7 and chkstr.sd7.
- The value STMT_BLOCK_IN_PARENTHESES_OK has been added to confval.sd7.
- The initialization of local variables and constants with a single
local value has been fixed (in dcllib.c).
- In flt_rtl.c the function fltLdexp() has been improved to work
correctly for infinity, even if ldexp() does not.
- The program chkccomp.c has been improved to determine
LDEXP_OF_INFINITY_OKAY (which defines if ldexp() works for infinity).
- Documentation comments have been improved in null_file.s7i.
20230422:
- The compiler option -S to specify the stack size has been added.
Many thanks to Bruce Axtens for pointing out problems with the
Ackermann function at RosettaCode. This triggered the -S improvement.
- Many thanks to Bruce Axtens for adding Seed7 to the Exercism project.
Discussions about that resulted in several improvements:
- Now call-by-name parameters can be specified with 'in' and 'ref'.
- Support for syntax statements without $ (dollar) has been added.
- The error message for an unspecified kind of in-parameter has been
improved.
- Many thanks to Gary Chike for pointing out problems:
- The RosettaCode example "Convert decimal number to rational" did
not work correct. To fix that, the function fraction(), which gets
a fraction as string (e.g. "1/3"), has been added to bigrat.s7i and
rational.s7i.
- Mac OS 13.2.1 had permission problems when installing Seed7. The
copying of manual pages failed. In mk_osx.mak and mk_osxcl.mak, the
copying of the s7 and s7c manual pages to /usr/share/man/man1 has
been changed to allow a failure.
- On some computers, vim syntax highlighting is turned off by
default. The FAQ has been improved to describe the steps for
enabling vim syntax highlighting.
- Explanations about design principles, compiler options, syntax
highlighting, forward declarations, function overloading, function
declarations and declaring break/continue statements have been
added or improved in the FAQ.
- Chapters about function declarations and overloading have been
added to the tutorial (part of the manual).
- In the manual the chapters about types, parameters and expressions
have been improved.
- In seed7_05.s7i the function literal() has been defined for
enumeration types.
- The files panic.sd7, wiz.sd7, savehd7.sd7, cards.s7i, sql_base.s7i
and boolean.s7i have been changed to use the new function literal().
- Support for the ternary operator ?: has been added for enumerations
and for the types 'type' and 'category'.
- The compiler (s7c.sd7) has been improved:
- At several places the function integerLiteral() is used instead of
str() to create integer literals.
- Assignments to temp variables in inline functions have been fixed.
This allows: float parse ("0." & "0" mult 307 & "1")
- If-statements are used in overflow checks for the operators +:=,
-:=, *:=, <<:= and >>:=.
- Generated temporary variables have been renamed in int_act.s7i.
- The code of the factorial function has been optimized.
- Support for the action ENU_LIT has been added.
- The action ENU_LIT has been added to the list of special actions.
- Allocated result data of inlined special actions is now freed.
- Now integer comparisons are checked with -oc3 if they can be
computed at compile time. With -w2, a warning is written if this
is the case.
- The compiler option -S to specify the stack size has been added.
- In zip.s7i the function fileMode() has been fixed to work for short
file names.
- The test program chkflt.sd7 has been improved to have detailed error
messages. Tests for converting between floats to strings in both
directions have been added as well.
- Definitions of LINKER_OPT_STACK_SIZE and DEFAULT_STACK_SIZE have been
added to cc_conf.s7i. The file cmd_rtl.c and the program confval.sd7
have been adjusted accordingly.
- The interpreter has been improved to support the actions DCL_SYNTAX,
ENU_LIT and PRC_BEGIN_NOOP.
- Support for empty func ... end func constructs has been added.
- The error messages "Syntax declared twice", "Associativity expected",
"Dot expression expected" and "Integer literal expected" have been
improved in error.c.
- The functions err_expr_type() and err_expr_obj_stri() have been added
to error.c.
- In fil_rtl.c the function filClose() has been improved to work
correctly if fclose() fails after a previous error.
- In flt_rtl.c the function fltParse() has been improved to consider
STRTOD_ACCEPTS_INF, STRTOD_ACCEPTS_INFINITY, STRTOD_ACCEPTS_NAN and
STRTOD_ACCEPTS_SIGN_WITHOUT_DIGITS.
- In gkb_win.c definitions of XBUTTON1, XBUTTON2, WM_MOUSEWHEEL,
GET_WHEEL_DELTA_WPARAM, VK_OEM_PLUS, VK_OEM_MINUS and VK_OEM_1 to
VK_OEM_8 are added if they are not present in the include files.
- In heaputl.c the function setupStack() has been improved to have the
requested stack size as a parameter.
- In os_decls.h the definition of safe_fileno() has been improved to
use os_fileno() instead of fileno().
- Functions for X11 selection (cut and paste) have been added to
fwd_x11.c and x11_x.h.
- In pcs_unx.c and pcs_win.c the function pcsPipe2() has been improved
to leave *childStdin and *childStdout unchanged if the corresponding
call of os_fdopen() fails.
- The function prc_begin_noop() has been added to prclib.c.
- In soc_rtl.c the functions socInetAddr(), socInetLocalAddr() and
socInetServAddr() have been improved to set 'result' to NULL if
ai_addrlen is negative.
- The function prot_dot_expr() has been added to traceutl.c. This
function is used to write the error message SYNTAX_DECLARED_TWICE.
- The program chkccomp.c has been improved to determine
STRTOD_ACCEPTS_SIGN_WITHOUT_DIGITS, STRTOD_ACCEPTS_INF,
STRTOD_ACCEPTS_INFINITY, STRTOD_ACCEPTS_NAN,
OS_GETCWD_INCLUDE_DIRECT_H, OS_OPENDIR_INCLUDE_DIRECT_H and
FCLOSE_FAILS_AFTER_PREVIOUS_ERROR. The computation of
FLOAT_NAN_COMPARISON_OKAY has been improved.
- In chkccomp.c recent PostgreSQL versions are considered now.
- In cmd_rtl.c and dir_drv.h the file direct.h is now conditionally
included depending on OS_GETCWD_INCLUDE_DIRECT_H respectivily
OS_OPENDIR_INCLUDE_DIRECT_H.
- Includes of stdlib.h have been added to literal.c, sql_rtl.c,
syvarutl.c and tim_rtl.c.
- The makefiles mk_bcc32.mak, mk_bccv5.mak, mk_clangw.mak, mk_cygw.mak,
mk_mingc.mak, mk_mingw.mak, mk_msvc.mak, mk_msys.mak, mk_nmake.mak
and mk_tcc_w.mak have been improved to define DEFAULT_STACK_SIZE and
LINKER_OPT_STACK_SIZE.
- Documentation comments have been added to float.s7i and rational.s7i.