lang/seed7: update to 05_20230529


lang/seed7: update to 05_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.


  • 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.
  • 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.


gahrAuthored on Jun 1 2023, 1:33 PM
R11:8f50bc67ae19: net/ntp: Update 4.2.8p15 --> 4.2.8p16