Seed7 Release 2019-03-03
Sun, 3 Mar 2019 10:59:32 -0800 (PST)

          From comp.compilers

Related articles
Seed7 Release 2019-03-03 (2019-03-03)
| List of all articles for this month |

Newsgroups: comp.compilers
Date: Sun, 3 Mar 2019 10:59:32 -0800 (PST)
Organization: Compilers Central
Injection-Info:; posting-host=""; logging-data="94293"; mail-complaints-to=""
Keywords: available, OOP
Posted-Date: 03 Mar 2019 18:27:54 EST


I have released a new version of Seed7: seed7_05_20190303.tgz
The download is here:
In the Seed7 programming language new statements and operators can
be declared easily. Types are first class objects and therefore
templates/generics need no special syntax. Object orientation is used
when it brings advantages and not in places when other solutions are
more obvious.

Seed7 is covered by the GPL (and LGPL for the Seed7 runtime library).

- The makefile mk_tcc_l.mak has been added. This makefile supports
    compiling with the tcc C compiler under Linux.
- The makefile mk_tcc_w.mak has been added. This makefile is
    experimental and supports compiling with the tcc C compiler under
- The example program brainf7.sd7 has been added. Brainf7 is a
    Brainfuck interpreter.
- The example program hilbert.sd7 has been added. Hilbert displays a
    Hilbert curve.
- The example program queen.sd7 has been added. Queen solves the n
    queen problem.
- The example program spigotpi.sd7 has been added. Spigotpi writes
    digits of PI with a spigot algorithm.
- The new library csv.s7i has been added. This library supports
    converting to and from comma-separated values (CSV).
- Several improvements in the Seed7 compiler (s7c) have been done:
    - In flt_act.s7i the function to process FLT_ISNAN has been improved
        to make sure, that the argument of the isnan() macro never contains
        preprocessor directives (e.g. #line directives). Some C compilers
        do not allow preprocessor directives in the argument list of a
        macro. Many thanks go to Alexander Vlasov for reporting this
        problem and for his help to find a solution.
    - In comp/str_act.s7i the function optimize_str_cat has been improved
        to assign the constant parts of strConcatN() outside of the actual
        expression. This might open possibilities to optimize the
    - The function process_forward_declaration in the compiler (s7c) has
        been improved to avoid, that a prototype of a forward declared
        function, is written twice.
    - The function process_dynamic_param_implements has been improved to
        generate a switch-statement instead of an if-then-else chain.
        Additionally double entries are avoided now.
    - The function process_const_func_call has been improved to assign
        c_params.temp_assigns to c_expr.temp_assigns instead of
    - The function processFuncValue has been improved to define the type
        and the function of the actual name parameter only once (with
        defineActualFuncParam()). A redefinition could happen when
        functions, that call functions with name parameters, are inlined.
    - The handling of the option -te (trace exceptions) has been
    - The function process_const_func_declaration() has been improved to
        request, that for functions using the result mechanism the result
        is returned, when possible, as c_expr.expr_result. This way
        process_return_value() does not need to copy this string values.
        E.g. When the result of intStrToBuffer(), chrCLitToBuffer(),
        chrStrMacro(), strHeadSlice(), chrStrMacro() or strTailSlice() is
        used as the result value of a user defined function.
    - The function defineFunctype has been added and the function
        getAnyParamToTempAssigns has been improved to provide addresses
        BSTRIOBJECT values. In this case the address is taken from a
        temporary variable.
    - In write_file_head() and init_type_constants() the creation of type
        constants has been improved.
- The functions skip() and copyFile() have been added to file.s7i.
- The function makeParentDirs() has been added to osfiles.s7i.
- In cli_cmds.s7i the function doMkdirCmd has been improved to call
    the new function makeParentDirs().
- In tar_cmds.s7i the functions tarXtract and tarCreate have been
    improved to avoid, that the whole file is read into a string. This
    avoids a MEMORY_ERROR, when the file does not fit into a string.
- The function tarXtract has been improved to extract empty regular
    files and to create non-existing parent directories (with
- In gzip.s7i the functions openGzipFile(), close() and write() have
    been improved, to write the compressed data in blocks with a maximum
    size. This avoids a MEMORY_ERROR, when huge files are compressed.
- In gzip.s7i the function openGunzipFile has been changed to have a
    file as parameter instead of a string. This way it is not necessary
    to read the whole compressed data into a string.
- A variant of the function readGzipHeader has been added to gzip.s7i.
- A variant of the function getAsciiz has been added to bytedata.s7i.
- A variant of the function crc32 has been added to crc32.s7i.
- The program ftp7.sd7 has been improved to support the commands
    !ls -l, !dir, !ls, !pwd, !mkdir and !rmdir.
- The function noCtrlChars has been removed from db7.sd7 and sql7.sd7
    and added to seed7_05.s7i.
- The program chkchr.sd7 has been has been improved to check the
    functions literal() and c_literal().
- Tests for the function str(), when str() assigned to a variable and
    when str() is called via a function, have been added to chkint.sd7.
- Tests for aString[.. pos], aString[pos ..], aString[pos1 .. pos2],
    aString[pos len length], when they are called via a function, have
    been added to chkstr.sd7.
- The example program chkdb.sd7 has been improved to test decimal and
    numeric fields with negative values.
- In x509cert.s7i the constant stdCertificate has been improved to
    have a new validity (until end of 2021).
- The program chkccomp.c has been improved to determine, if
    preprocessor directives are allowed in the argument list of a macro
- In fil_rtl.c the functions filBigLng() and filLng() have been
    improved to determine the file length always with os_fseek and
    os_ftell. This guarantees that the correct length is returned, when
    data is written to a file and it has not been flushed.
- The function ftelli64Ext() has been added to fil_win.c. This
    function is used when fseeki64() is available and ftelli64() is
    missing. Either fgetpos() or _telli64() is used to implement
- Calls of logFunction have been added in ref_data.c and typ_data.c.
- In sql_my.c the function sqlBindDuration() has been improved.
- In sql_odbc.c the function getNumericAsCStri() has been added.
- In sql_odbc.c the function getNumericFloat() has been improved to
    convert a SQL_NUMERIC_STRUCT to a double via the decimal
- In sql_post.c the functions getNumericAsCStri(), getNumericAsStri()
    and getNumericAsFloat have been improved.
- The program chkccomp.c has been improved to define the macros
    'os_isatty' and 'os_fileno', when the functions isatty() and
    fileno() are not available.
- A definition of 'isatty' and 'fileno' has been added to os_decls.h.
- The mechanism to check for stack overflow has been improved. By
    default the mechanism is deactivated.

Thomas Mertes

Seed7 Homepage:
Seed7 - The extensible programming language: User defined statements
and operators, abstract data types, templates without special
syntax, OO with interfaces and multiple dispatch, statically typed,
interpreted or compiled, portable, runs under linux/unix/windows.

Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.