2020-01-20 Jan Nieuwenhuizen Release 0.22. * configure (VERSION): Update to 0.22. (main): Likewise. * build-aux/GNUmakefile.in: Likewise. * configure.sh (VERSION): Likewise. * guix/git/mes.scm (mes, mes.git): Likewise. build: Update release process. * build-aux/GNUmakefile.in: Update documentation. (sign-dist): Rename from `sign'. * configure: Remove version check for Guix; support GUIX=guix ./configure. doc: Release update. * BOOTSTRAP: Release update. * HACKING: Likewise. * INSTALL: Likewise. * NEWS: Likewise. * PORTING: Likewise. * README: Likewise. * ROADMAP: Likewise. * doc/mes.texi: Likewise. * doc/announce/ANNOUNCE-0.22: New file. 2020-01-20 Jan Nieuwenhuizen mescc: Mes C Library: Fix execlp, execvp for file names with slash. Reported by mid-kid. * lib/posix/execlp.c (execlp): Do not use search_path when file name contains a slash (WAS: when file name starts with slash). * lib/posix/execvp.c (execvp): Likewise. 2020-01-20 Jan Nieuwenhuizen build: Support bootstrapping using build.sh. * build-aux/build.sh.in: Oops, use $compiler = bootstrap concept does not exist yet. Gash cp does not support -p; drop it. * configure.sh: Oops, set bootstrap to `true' instead of yes. mescc: Mes C Library: lseek: Be careful clearing read buffer. * lib/linux/lseek.c (_lseek): New function. * lib/linux/lseek.c (lseek): Use it to check if we should reset read buffer. * lib/mes/__buffered_read.c (__read_buffer_max): New variable. (__buffered_read_init): Add environment override: MES_READ_BUFFER. (__buffered_read): Use it. build: Have configure respect GUILE_LOAD_PATH for mes to find Nyacc. * configure: Substitute GUILE_LOAD_PATH from %load-path. * configure.sh: Likewise. * build-aux/config.make.in: Add GUILE_LOAD_PATH as subtitution variable. * build-aux/config.sh.in: Likewise. * mes/module/mes/guile.mes (%load-path): New variable. 2020-01-20 Jan Nieuwenhuizen build: Have configure prefer $CC over gcc; tcc over gcc, gcc over cc. Reported by Vagrant Cascadian. * configure (string->version): Prefer for most-dotted string. Fixes makeinfo version. (check-program-version): Prefer displaying of command, if single word. (main): Check for $CC --version, $CC -v. Prefer $CC over gcc; tcc over gcc, gcc over cc. 2020-01-20 Jan Nieuwenhuizen mescc: Opt for reproducible builds with Guile and Mes. * module/mescc/compile.scm (mes-or-reproducible?): New variable. (ast->comment): Use it. * module/mescc/preprocess.scm (mes-or-reproducible?): New variable. (c99-input->full-ast): Use it. 2020-01-20 Jan Nieuwenhuizen build: Resurrect compiling with TinyCC. ./configure CC=tcc --host=i686-unknown-linux-gnu --with-courage * configure: Cater for tcc. 2019-12-17 Jan Nieuwenhuizen build: Cater for FreeBSD. * build-aux/bootstrap.sh.in: Add test ! -e -o to satisfy FreeBSD test. Fixes skipping over all compilations. * build-aux/cc.sh (compile): Likewise. freebsd: Initial x86 scaffold. * lib/freebsd/x86-mes-gcc/crt1.c: New file. * lib/freebsd/x86-mes-gcc/exit-42.S: New file. * lib/freebsd/x86-mes-gcc/hello-mes.S: New file. * lib/freebsd/x86-mes-gcc/mini.c: New file. * lib/freebsd/x86-mes-mescc/crt1.c: New file. * lib/freebsd/x86-mes-mescc/mini.c: New file. * lib/freebsd/x86-mes/elf32-0exit-42.hex2: New file. * lib/freebsd/x86-mes/elf32-0header.hex2: New file. * lib/freebsd/x86-mes/elf32-0hello-mes.hex2: New file. * lib/freebsd/x86-mes/elf32-body-exit-42.hex2: New file. * lib/freebsd/x86-mes/elf32-body-hello-mes.hex2: New file. * lib/freebsd/x86-mes/elf32-footer-single-main.hex2: New file. * lib/freebsd/x86-mes/elf32-header.hex2: New file. freebsd: Initial configure support. * configure: Initial FreeBSD configure support. * configure.sh: Likewise. Run without bash. build: Prepare for kernel variants. * configure: Fix detection of Arch, FreeBSD. * lib/linux/x86-mes-gcc/exit-42.S: Move from ... * lib/x86-mes-gcc/exit-42.S: ... here. * lib/linux/x86-mes-gcc/hello-mes.S: Move from ... * lib/x86-mes-gcc/hello-mes.S: ... here. * lib/linux/x86-mes-mescc/exit-42.S: Move from ... * lib/x86-mes-mescc/exit-42.S: ... here. * lib/linux/x86-mes-mescc/hello-mes.S: Move from ... * lib/x86-mes-mescc/hello-mes.S: ... here. * lib/linux/x86-mes/elf32-0exit-42.hex2: Move from ... * lib/x86-mes/elf32-0exit-42.hex2: ... here. * lib/linux/x86-mes/elf32-0header.hex2: Move from ... * lib/x86-mes/elf32-0header.hex2: ... here. * lib/linux/x86-mes/elf32-0hello-mes.hex2: Move from ... * lib/x86-mes/elf32-0hello-mes.hex2: ... here. * lib/linux/x86-mes/elf32-body-exit-42.hex2: Move from ... * lib/x86-mes/elf32-body-exit-42.hex2: ... here. * lib/linux/x86-mes/elf32-body-hello-mes.hex2: Move from ... * lib/x86-mes/elf32-body-hello-mes.hex2: ... here. * lib/linux/x86-mes/elf32-footer-single-main.hex2: Move from ... * lib/x86-mes/elf32-footer-single-main.hex2: ... here. * lib/linux/x86-mes/elf32-header.hex2: Move from ... * lib/x86-mes/elf32-header.hex2: ... here. * lib/linux/x86_64-mes-gcc/exit-42.S: Move from ... * lib/x86_64-mes-gcc/exit-42.S: ... here. * lib/linux/x86_64-mes-gcc/hello-mes.S: Move from ... * lib/x86_64-mes-gcc/hello-mes.S: ... here. * lib/linux/x86_64-mes-mescc/exit-42.S: Move from ... * lib/x86_64-mes-mescc/exit-42.S: ... here. * lib/linux/x86_64-mes-mescc/hello-mes.S: Move from ... * lib/x86_64-mes-mescc/hello-mes.S: ... here. * lib/linux/x86_64-mes/elf64-0exit-42.hex2: Move from ... * lib/x86_64-mes/elf64-0exit-42.hex2: ... here. * lib/linux/x86_64-mes/elf64-0header.hex2: Move from ... * lib/x86_64-mes/elf64-0header.hex2: ... here. * lib/linux/x86_64-mes/elf64-0hello-mes.hex2: Move from ... * lib/x86_64-mes/elf64-0hello-mes.hex2: ... here. * lib/linux/x86_64-mes/elf64-body-exit-42.hex2: Move from ... * lib/x86_64-mes/elf64-body-exit-42.hex2: ... here. * lib/linux/x86_64-mes/elf64-body-hello-mes.hex2: Move from ... * lib/x86_64-mes/elf64-body-hello-mes.hex2: ... here. * lib/linux/x86_64-mes/elf64-footer-single-main.hex2: Move from ... * lib/x86_64-mes/elf64-footer-single-main.hex2: ... here. * lib/linux/x86_64-mes/elf64-header.hex2: Move from ... * lib/x86_64-mes/elf64-header.hex2: ... here. * module/mescc.scm (parse-opts): Support --kernel. * module/mescc/mescc.scm (kernel-find): New function. * module/mescc/mescc.scm (hex2->elf): Use it to find kernel-specific ELF snippets. * build-aux/install.sh.in: Install it. 2019-12-13 Jan Nieuwenhuizen mescc: Mes C Library: Add ioctl3 stub. mescc: Mes C Library: Fix access stub. * lib/stub/access.c (access): Use _open3 to give more meaningful behaviour. Fixes hanging of mes. hurd: Fixes for upgrade to debian-hurd-20190220.img. * include/mach/mach-init.h (__mach_host_self, __mach_task_self): Remove macro magic. (mach_host_self, mach_task_self): Remove macro magic; declare as function. * lib/mach/mach-init.c (mach_host_self, mach_task_self): New function. (mach_init): Use them. * lib/gnu/hurd-start.c (_hurd_start): Use mach_task_self (). * lib/gnu/_exit.c (_exit): Likewise. hurd: Add malloc. * include/gnu/syscall.h (__vm_allocate): New value. (__vm_allocate): Declare. * lib/gnu/malloc.c: New file. * lib/stdlib/malloc.c[__GNU__]: Disable. See FIXME. * lib/gnu/vm-allocate.c: New file. * build-aux/configure-lib.sh (libc_SOURCES): Add it. hurd: Add open. * include/fcntl.h (O_RDONLY, O_WRONLY, O_RDWR, O_CREAT, O_APPEND, O_TRUNC)[__GNU__]: Specialize for GNU. * lib/gnu/dir-lookup.c: New file. * lib/stdio/fopen.c (fopen): Use O_RDONLY. * lib/tests/posix/50-open-read.c (main): Likewise. * lib/tests/stdio/90-fseek.c (main): Likewise. * include/gnu/syscall.h (SYS__dir_lookup): New value. * lib/gnu/_open3.c: New file. * build-aux/configure-lib.sh (libc_SOURCES): Build them. hurd: Add argv and environ. * include/gnu/hurd.h (struct hurd_startup_data): Add argp, envp. * lib/gnu/hurd-start.c (__argv, __env): Define them. * lib/gnu/exec-startup-get-data.c (mach_startup_info2hurd_startup_data): Set them. * lib/gnu/x86-mes-gcc/crt1.c (_start): Use them. * build-aux/configure-lib.sh (libc_mini_SOURCES): Add argz-extract.c. * include/argz.h: Build fix. * lib/string/argz-count.c: Likewise. * lib/string/argz-extract.c: Likewise. hurd: Add stubs for missing libc+tcc functions. * lib/stub/close.c: New file. * lib/stub/rmdir.c: New file. * lib/stub/stat.c: New file. * build-aux/configure-lib.sh (libc_tcc_SOURCES)[gnu]: Add them. hurd: Add stubs for missing libc functions. * lib/stub/_getcwd.c: New file. * lib/stub/_getcwd.c: New file. * lib/stub/_open3.c: New file. * lib/stub/access.c: New file. * lib/stub/brk.c: New file. * lib/stub/chmod.c: New file. * lib/stub/clock_gettime.c: New file. * lib/stub/dup.c: New file. * lib/stub/dup2.c: New file. * lib/stub/execve.c: New file. * lib/stub/fork.c: New file. * lib/stub/gettimeofday.c: New file. * lib/stub/ioctl.c: New file. * lib/stub/time.c: New file. * lib/stub/unlink.c: New file. * lib/stub/waitpid.c: New file. * build-aux/configure-lib.sh (libc_SOURCES)[gnu]: Add them. hurd: Add stubs for missing libmes functions. * lib/stub/lseek.c: New file. * build-aux/configure-lib.sh (libmes_SOURCES)[gnu]: Add it. hurd: Add _read. * include/gnu/hurd.h (fd_read): Declare. * include/gnu/syscall.h (SYS__io_read): New value. * lib/gnu/_read.c: New file. * lib/gnu/fd-read.c: New file. * lib/gnu/io-read.c: New file. * build-aux/configure-lib.sh (libc_SOURCES): Add _read sources. hurd: Add _write. * include/gnu/syscall.h (SYS__io_write): Add enum field. (_hurd_dtable, _hurd_dtable_size): Declare variable. (fd_get, fd_write, __io_write, __syscall_put): Declare. * lib/gnu/hurd-start.c (_hurd_dtable, _hurd_dtable_size): Define variable. * lib/gnu/_write.c: New file. * lib/gnu/fd-get.c (fd_get): New file. * lib/gnu/fd-write.c (fd_write): New file. * lib/gnu/io-write.c: New file. * lib/gnu/syscall.c (__syscall_put): New function. * build-aux/cofnigure-lib.sh (libc_mini_SOURCES): Add write sources. * lib/tests/mes/30-oputs.c (main): Update. * lib/tests/mes/30-oputs.stdout: New file. * lib/tests/mes/30-eputs.c: New test. * lib/tests/mes/30-eputs.stderr: New file. * build-aux/check-mescc.sh (TESTS): Add it. 2019-12-13 Jan Nieuwenhuizen hurd: Initial support. This adds minimal Hurd support by implementing the _exit function. * AUTHORS: Update. * .gitignore: Ignore a.out, core, .config. * include/sys/wait.h (W_EXITCODE): New define. * lib/gnu/x86-mes-gcc/crt1.c: New file. * lib/gnu/x86-mes-gcc/mini.c: New file. * lib/gnu/hurd-start.c: New file. * lib/gnu/_exit.c: New file. * include/gnu/syscall.h: New file. * include/gnu/hurd.h: New file. * lib/gnu/_exit.c: New file. * lib/gnu/exec-startup-get-data.c: New file. * lib/gnu/hurd-start.c: New file. * lib/gnu/proc-mark-exit.c: New file. * lib/gnu/syscall.c: New file. * lib/gnu/task-get-special-port.c: New file. * lib/gnu/task-terminate.c: New file. * lib/gnu/vm-statistics.c: New file. * build-aux/configure-lib.sh (libc_mini_SOURCES): Add Hurd sources. * build-aux/build.sh.in (CPPFLAGS): Add lib to includes, to find linux crt1.c. * build-aux/test-c.sh: Always use at least -l c+mini for GNU. * lib/tests/scaffold/30-exit-42.exit: New file. * lib/tests/scaffold/30-exit-42.c: New test. * build-aux/check-mescc.sh (TESTS): Add it. * lib/tests/scaffold/30-exit-0.c (main): Move from 00-exit-0.c; Rewrite, use _exit. * include/gnu/hurd-types.h: Import from GNU C Library. * include/mach/mach-init.h: Likewise. * lib/mach/mach-init.c: Likewise. * lib/mach/mach_host_self.S: Likewise. * lib/mach/mach_msg_trap.S: Likewise. * lib/mach/mach_reply_port.S: Likewise. * lib/mach/mach_task_self.S: Likewise. * lib/mach/mach_thread_self.S: Likewise. * lib/mach/msg.c: Likewise. 2019-12-13 Jan Nieuwenhuizen build: Generate ChangeLog reproducibly. Thanks, Timothy! * build-aux/gitlog-to-changelog (git_dir_option): Avoid non-reproducible localtime. build: Make guild optional for bootstrap builds. * configure: Use `true' for guild when it is not available. build: Clean-out .gitignore. .gitignore: Remove obsolete cross build patterns. build: Cater for bootstrap build. * build-aux/build.sh.in: Build bin/mes. Update scripts and users. * build-aux/bootstrap.sh.in: Update. * build-aux/install.sh.in: Install all built bin/mes-* flavours. * configure: Drop SEED, support --bootstrap. * configure.sh: Likewise. 2019-12-08 Jan Nieuwenhuizen build: Oops, have configure honor --host. This allows ./configure --host=i686-unknown-linux-gnu instead of CC=i686-unknown-linux-gnu-gcc ./configure * configure (main): Honor --host. 2019-12-08 Jan Nieuwenhuizen bootstrap: Default to mesar for mescc build. * configure.sh: Default to mesar for mescc build. bootstrap: Fix configure.sh's host detection. * configure.sh: Avoid setting host="" and not running $CC. mescc: Add mes 0.19 compatibility. * mes/module/mes/boot-0.scm (%datadir): Cater for %datadir not being set. 2019-12-07 Jan Nieuwenhuizen bootstrap: Build files only once. * build-aux/bootstrap.sh.in: Build files only once. build: Support mescc-tools 0.5.2. * configure: Remove version check for mescc-tools. Check for stage0 architecture flag type. * configure.sh: Likewise. * build-aux/build-scaffold.sh: Add stage0 flag type indirection. * module/mescc/mescc.scm (arch-get-architecture): Likewise. 2019-12-06 Jan Nieuwenhuizen mescc: Fix for compiling handwritten .S assembly. * module/mescc/mescc.scm (mescc:compile): Handle .S. (mescc:link): Likewise. build: Add mescc scaffold for regular build. * lib/x86-mes-mescc/exit-42.S: New file. * lib/x86-mes-mescc/hello-mes.S: New file. * lib/x86_64-mes-mescc/exit-42.S: New file. * lib/x86_64-mes-mescc/hello-mes.S: New file. 2019-12-08 Jan Nieuwenhuizen build: Add --with-bootstrap option. * configure (main): Add --with-bootstrap option. * build-aux/build.sh.in [--with-bootstrap]: After building mes with CC, build mes with MesCC. 2019-12-05 Jan Nieuwenhuizen build: Support toplevel lib and mes builds. * build-aux/build.sh.in: Add missing libdir for gcc build. * build-aux/config.sh.in: ...here. * build-aux/build-mes.sh: Do not overwrite srcdest, V. bootstrap: Support srcdir builds. * build-aux/bootstrap.sh.in (srcdest): Initialize. * build-aux/build-lib.sh: Source config.sh. * configure.sh: Support srcdir builds. * build-aux/build.sh.in: Move setting of cflags to ... * build-aux/cflags.sh: ... New file. configure: Honor CFLAGS, LDFLAGS. * configure (cflags-list, ldflags-list): New function. check-preprocess-header-c, check-compile-string-c, check-link-string-c): Use them. Be verbose when %verbose?. (CFLAGS, LDFLAGS): Initialize to "-static -g". 2019-12-08 Jan Nieuwenhuizen build! Fixup clean without git: Clean cleaner. * build-aux/GNUmakefile.in (clean): Clean cleaner. 2019-12-07 Vagrant Cascadian Fix build without git on "wip" branch. --=-=-= Content-Type: text/plain In the "wip" branch, the attempt to build without git was a bit overly aggressive in the purging of GIT. live well, vagrant From 73bb68e86318a6bc0fe191db663be97f94556956 Mon Sep 17 00:00:00 2001 From: Vagrant Cascadian Date: Sat, 7 Dec 2019 19:59:00 +0100 Subject: [PATCH] Fix build without git Commit "1863c0d843a5fe4e94e8cb923cc0896f30fceeeb" removed the substitution of @GIT@ when, resulting in the GIT variable being set to "@GIT@" rather than "" when git is not installed. 2019-12-04 Jan Nieuwenhuizen build: Fix configure host detection for Arch. Thanks, Jelle! * configure (main): Grok `CPU-pc-linux-gnu'. build: Successfully check for Nyacc 0.99.0. * configure (gulp-pipe): New function. (check-program-version): Use it to correctly detect Nyacc. (gulp-pipe*): Rewrite to use it. build: Remove git dependency. * configure: Remove git dependency. * build-aux/GNUmakefile.in (clean,distclean, maintainer-clean): Implement without git. * INSTALL: Update dependencies. 2019-12-03 Jan Nieuwenhuizen core: Remove MES_PKGDATADIR. * configure: Do not add MES_PKGDATADIR to config.h. * configure.sh: Likewise. * simple.sh: Likewise. * src/mes.c (open_boot): Do not use MES_PKGDATADIR; rely on MES_PREFIX or cwd. 2019-12-02 Jan Nieuwenhuizen mescc: Ignore -fno-stack-protector. * module/mescc.scm (parse-opts): Ignore it. build: Use debug build (-g) by default. * build-aux/build.sh.in (debug): Enable. build: Honor user's CFLAGS, CPPFLAGS, LDFLAGS. * build-aux/build.sh.in (AM_CFLAGS, AM_CPPFLAGS, AM_LDFLAGS): Rename from CFLAGS, CPPFLAGS, LDFLAGS. Export them. * configure: Substitute them. * configure.sh: Likewise. * build-aux/cc.sh (compile, link): Use them. * build-aux/config.make.in (CFLAGS, CPPFLAGS, LDFLAGS): Add substitutable variables. * build-aux/config.sh.in: Likewise. * build-aux/export.make: Export them. test: 90-abtod: Remove printf dependency. Fixes gcc. * lib/tests/mes/90-abtod.stdout: Remove. * lib/tests/mes/90-abtod.c (main): Remove printf. 2019-12-01 Jan Nieuwenhuizen test: 90-readdir: Remove qsort dependency. Fixes tmpfs failures. * lib/tests/dirent/90-readdir.c (check_seen): New function. (main): Use it instead of qsort. (qsort_strcmp): Remove. 2019-11-24 Jan Nieuwenhuizen core: Throw instead of segfault on non-existing input file. Reported by theruran. * src/posix.c (open_input_file): Call error instead of failing silently. 2019-06-11 Vagrant Cascadian boot-0: Fix spelling of "evaluate" 2019-11-24 Jan Nieuwenhuizen mescc: Honor --includedir, --libdir. * guix/git/mes.scm (mes): * module/mescc.scm (%includedir, %libdir): New variable. (mescc:main): Add them to options. * module/mescc/mescc.scm (mescc:preprocess, c->info): Add %includedir. (arch-find): Use %libdir instead of prefix-file. (prefix-file): Remove. * scripts/mescc.scm.in (%includedir, %libdir): Initialize from and set in environment. xx * module/mescc/mescc.scm : 2019-11-24 Jan Nieuwenhuizen doc: Post-release update. * NEWS: Typo. * doc/announce/ANNOUNCE-0.21: Add checksums. 2019-11-10 Jan Nieuwenhuizen Release 0.21. * configure (VERSION): Update to 0.21. (main): Likewise. * build-aux/GNUmakefile.in: Likewise. * configure.sh (VERSION): Likewise. * guix/git/mes.scm (mes, mes.git): Likewise. 2019-11-04 Jan Nieuwenhuizen doc: Release update. * BLURB: Release update. * HACKING: Remove roadmap. * INSTALL: Release update. * NEWS: Add 0.21 section. * README: Release update. * ROADMAP: New file. * configure.sh: Release update. * doc/announce/ANNOUNCE-0.21: New file. * doc/mes.texi: Release update. 2019-11-23 Jan Nieuwenhuizen mescc: Mes C Library: vfprintf: Support --with-system-libc. * include/stdarg.h (va_arg8)[SYSTEM_LIBC]: Define. mescc: Mes C Library: Support gcc-4.6.4: Fix ctime stub. * lib/stub/ctime.c (ctime): Fix stub to avoid segfault upon use. mescc: Mes C Library: Fix isatty for x86_64. * lib/linux/ioctl.c (ioctl3): New function. * include/sys/ioctl.h: Declare it. * lib/posix/isatty.c (__tcgetattr): Use it. 2019-11-09 Jan Nieuwenhuizen build: Prefer /bin/bash if available. Thanks, Vagrant! Ensure the configure script uses /bin/bash, otherwise on systems with /bin -> /usr/bin it results in /bin/bash being embedded in various scripts. Inspired by https://salsa.debian.org/debian/mes/blob/debian/master/debian/patches/force-use-of-bin-bash * configure: Prefer /bin/bash, /bin/sh if available. Helps reproducibility on Debian. 2019-11-04 Jan Nieuwenhuizen build: Update script help and usage. * doc/mes.texi (Invoking mesar): New section. * mes/module/mes/boot-0.scm: Add one line help description. * module/mescc.scm (parse-opts): Likewise. * scripts/diff.scm (main): Add -h,--help, -v,--version. * scripts/mesar.in: Likewise. build: Use unversioned doc directory. Thanks, Vagrant! * configure (docdir): Drop version. Fixes Debian lint error. * configure.sh (docdir): Likewise. build: Add sensible NAME section for man pages. Thanks, Vagrant! * build-aux/GNUmakefile.in (mes.1, mescc.1, mesar.1): Add sensible --name section. Fixes Debian lint error. Reported by Vagrant Cascadian. 2019-11-09 Jan Nieuwenhuizen Revert "build: Mark lib/tests/dirent/90-readdir.c as XFAIL on x86_64-gcc." This reverts commit dc0b41f83efa973b7a92c0c7a0ad1eb21a7c4c7a. 2019-10-30 Jan Nieuwenhuizen build: Mark lib/tests/dirent/90-readdir.c as XFAIL on x86_64-gcc. * build-aux/check-mescc.sh (XFAIL_TESTS)[x86_64-gcc]: Add lib/tests/dirent/90-readdir.c. 2019-11-09 Jan Nieuwenhuizen Revert "build: Mark lib/tests/dirent/90-readdir.c as XFAIL on x86_64-mescc." This reverts commit 17986224095ed72649fb2383f72c21f525977310. 2019-10-30 Jan Nieuwenhuizen build: Mark lib/tests/dirent/90-readdir.c as XFAIL on x86_64-mescc. * build-aux/check-mescc.sh (XFAIL_TESTS)[x86_64-mescc]: Add lib/tests/dirent/90-readdir.c. 2019-10-24 Jan Nieuwenhuizen build: Better and friendlier tarball. * build-aux/GNUmakefile.in (dist): Be friendly to Debian; avoid using EPOCH. Cater for file permission differences. 2019-10-15 Jan Nieuwenhuizen build: bootstrap fixes. * build-aux/config.sh.in (bootstrap): Set up for substitution. * configure.sh (bootstrap): Substitute. * build-aux/install.sh.in (_v): Robustify check for V. (__exclude_go, __exclude_scm): Initialize. 2019-10-10 Jan Nieuwenhuizen mes: Fix -c, --command. * mes/module/mes/boot-0.scm: Prepend 'begin to expr list. 2019-10-03 Jan Nieuwenhuizen check: Remove duplicate test. * build-aux/check-boot.sh (TESTS): Remove duplicate test. 2019-09-20 Jan Nieuwenhuizen mescc: Mes C Library: Support gcc-4.6.4: vfprintf, vsnprintf: pad with space. * lib/stdio/vfprintf.c (vfprintf): pad with space. * lib/stdio/vsnprintf.c (vsnprintf): pad with space. 2019-09-13 Jan Nieuwenhuizen mescc: Mes C Library: Support gcc-4.6.4: Add math stubs. * lib/math/ceil.c: New file. * lib/math/floor.c: New file. * lib/stub/atan2.c: New file. * lib/stub/cos.c: New file. * lib/stub/exp.c: New file. * lib/stub/log.c: New file. * lib/stub/modf.c: New file. * lib/stub/pow.c: New file. * lib/stub/sin.c: New file. * lib/stub/sqrt.c: New file. * lib/libc+gnu.c: Include them. * include/math.h (atan2, ceil, cos, exp, fabs, floor, log, modf, pow, sin, sqrt): Declare. * lib/math/fabs.c: Update. * lib/stub/ldexp.c: Update. 2019-09-06 Jan Nieuwenhuizen mescc: Mes C Library: Support gcc-4.6.4: Add fscanf, vfscanf. * lib/stdio/vfscanf.c: New file. * lib/stdio/fscanf.c: New file. * build-aux/configure-lib.sh (libc_gnu_SOURCES): Add them. * include/stdio.h (fscanf): Declare. * include/stdarg.h (vfscanf): Declare. * lib/stub/fscanf.c: Remove. 2019-09-04 Jan Nieuwenhuizen mescc: Mes C Libray: Fix off_t. * include/sys/types.h (off_t): Drop unsigned. 2019-09-06 Jan Nieuwenhuizen mescc: Environment setup. * scripts/mescc.in (MES_ARENA, MES_MAX_ARENA, MES_STACK): Reduce defaults. * build-aux/check.sh.in (MES_ARENA): Likewise. Export them. * build-aux/bootstrap.sh.in (MES_STACK): Likewise. (MES_PREFIX): Set default. 2019-08-26 Danny Milosavljevic Add missing #include. * lib/stdlib/mbstowcs.c: Add missing #include. Fix dtoab. * lib/mes/dtoab.c (dtoab): Fix it. * lib/tests/mes/90-dtoab.c (main): Fix test. * build-aux/check-mescc.sh (XFAIL_TESTS: Remove it. 2019-08-27 Danny Milosavljevic va_align: Fix compiler warning. Follow-up to 49b0cd7d2e6952044d7436260d6ba950e40ee05f. * include/stdarg.h: Fix compiler warning. 2019-08-27 Danny Milosavljevic Add missing #include. * lib/tests/mes/90-abtod.c (main): Add missing #include. Fix variable argument list traversal for doubles. * include/stdarg.h (va_align): New macro. (va_arg8): New macro. * lib/stdio/vfprintf.c (vfprintf): Use it. * lib/stdio/vsnprintf.c (vsnprintf): Use it. 2019-08-24 Jan Nieuwenhuizen build: Improve --with-system-libc support. * build-aux/build-lib.sh: Avoid building libc for --with-system-libc. Make libmes richer. build-aux/check-mescc.sh: Enable 50-malloc test. * include/dirstream.h: Use HAVE_DIRSTREAM_H to cater for non-existing dirstream.h. * include/grp.h[SYSTEM_LIBC]: Typo. * include/mes/lib.h (__brk, __call_at_exit)[SYSTEM_LIBC]: Declare. * include/stdlib.h (comparison_fn_t)[SYSTEM_LIBC]: Declare. * include/time.h (mktime): Return time_t. * lib/posix/isatty.c [SYSTEM_LIBC]: Do not (re)declare termios. * lib/stub/mktime.c (mktime): Return time_t. * lib/tests/scaffold/41-ternary.c (main): Remove assumption that locals are initialized. * lib/tests/scaffold/70-stdarg.c: Cater for SYSTEM_LIBC. * lib/tests/setjmp/80-setjmp.c: Declare jmp buf. * lib/*/*.c: Add missing mes/lib.h, errno.h includes. 2019-09-01 Jan Nieuwenhuizen mescc: Mes C Library: vfprintf, vsnprintf: Pad floats with space. * lib/stdio/vfprintf.c (vfprintf): Pad floats with space. * lib/stdio/vsnprintf.c (vsnprintf): Pad floats with space. * lib/tests/stdio/90-sprintf.c: Test it. 2019-08-01 Jan Nieuwenhuizen mescc: Mes C Library: vsscanf: Increase count for scanned float. * lib/stdio/vsscanf.c (vsscanf): Increase count for scanned float. 2019-07-31 Jan Nieuwenhuizen mescc: Mes C Library: Support GNU Tar: Fix getpwnam, getpwuid stubs. * lib/stub/getpwnam.c (getpwnam): Return pointer to static struct passwd. * lib/stub/getpwuid.c (getpwuid): Likewise. 2019-07-24 Jan Nieuwenhuizen mescc: Mes C Library: Support GNU Tar: Add getgrgid, getgrnam, setgrent stub. * include/grp.h: New file. * lib/stub/getgrgid.c: New file. * lib/stub/getgrnam.c: New file. * lib/stub/setgrent.c: New file. * lib/libc+gnu.c: Include them. 2019-07-21 Jan Nieuwenhuizen mescc: Mes C Library: Support GNU Awk: Add wchar_t. * include/sys/types.h (wchar_t): New typedef. 2019-07-18 Jan Nieuwenhuizen mescc: Mes C Library: Support GNU Awk: Add getpgid, getpgrp stubs. * include/unistd.h (getpgid, getpgrp): Declare. * lib/stub/getpgid.c: New file. * lib/stub/getpgrp.c: New file. * lib/libc+gnu.c: Include them. 2019-07-15 Jan Nieuwenhuizen mescc: Mes C Library: Support GNU Tar: Add mktime stub, fix localtime stub. * include/time.h (mktime): Declare. * lib/stub/mktime.c: New stub. * lib/libc+gnu.c: Include it. * lib/stub/localtime.c (localtime): Return pointer to static struct tm. Avoids segfaults. 2019-07-12 Jan Nieuwenhuizen mescc: Mes C Library: Support GNU Tar: Add creat, mknod. * include/linux/x86_64/syscall.h (SYS_mknod): New macro. * include/linux/x86/syscall.h (SYS_mknod): New macro. * lib/linux/mknod.c: New file. * build-aux/configure-lib.sh (libc_gnu_SOURCES): Add it. * include/sys/stat.h (mknod): Declare it. * include/fcntl.h (creat): New macro. 2019-07-09 Jan Nieuwenhuizen mescc: Mes C Library: Support GNU Tar: Add missing defines. * include/errno.h (ENXIO): New macro. * include/sys/stat.h (S_IFIFO, S_ISFIFO): New macro. 2019-07-06 Jan Nieuwenhuizen mescc: Mes C Library: Support GNU Bash: Add struct winsize. * include/termio.h (struct winsize): New type. 2019-07-03 Jan Nieuwenhuizen mescc: Mes C Library: Support GNU Awk: Implement atof. * lib/stdlib/atoi.c: Update. * lib/stdlib/atof.c: Rename from stub/atof.c; Implement. * lib/libc+gnu.c: Update include. * lib/libg.c: Update include. 2020-01-12 Jan Nieuwenhuizen mescc: Mes C Library: Support GNU Awk: Add dtoab, %f in vfprintf, vsnprintf. * include/libmes.h (dtoab): Declare. * lib/mes/ntoab.c (ntoab): Update. * lib/mes/dtoab.c: New file. * build-aux/configure-lib.sh (libmes_SOURCES, libc_tcc_SOURCES): Add it. * lib/tests/mes/90-dtoab.c: Test it. * lib/tests/stdio/90-sprintf.c: Test it. * build-aux/check-mescc.sh (tests): Run it, against... * lib/tests/mes/90-dtoab.stdout: ...baseline. * lib/stdio/vfprintf.c (vfprintf): Support %f, even more naive support for %e, %E, %g, %G. * lib/stdio/vsnprintf.c (vsnprintf): Likewise. 2019-06-25 Jan Nieuwenhuizen mescc: Mes C Library: Support GNU Awk: Add abtod, implementing strtod. * include/libmes.h (abtod): Declare. * lib/mes/abtod.c: New file. * build-aux/configure-lib.sh (libmes_SOURCES, libc_tcc_SOURCES): Add it. * lib/mes/abtol.c: Update. * lib/stdlib/strtod.c: Use it to implement; move from stub/strtod. * lib/tests/mes/90-abtod.c: Test it. * lib/tests/mes/90-abtod.stdout: Baseline. * build-aux/check-mescc.sh (tests): Run it. 2019-06-22 Jan Nieuwenhuizen mescc: Mes C Library: Support GNU Awk: vsscanf: Support %f. * lib/stdio/vsscanf.c (vsscanf): Support %f. 2019-06-19 Jan Nieuwenhuizen mescc: Mes C Library: Support GNU Awk: Do not flush std files. * lib/stdio/fflush.c (fflush): Do not flush std files. 2019-06-16 Jan Nieuwenhuizen mescc: Mes C Library: Support GNU Awk: Add isgraph. * lib/ctype/isgraph.c: New file. * lib/libc+gnu.c: Include it. * include/ctype.h: Add missing prototypes. 2019-06-12 Jan Nieuwenhuizen mescc: Mes C Library: Support GNU Tar: Add readlink, symlink. * lib/linux/gnu.c (readlink, symlink): New function. * include/unistd.h (readlink, symlink): Declare. * include/linux/x86/syscall.h (SYS_readlink, SYS_symlink): New macro. * include/linux/x86_64/syscall.h (SYS_symlink, SYS_readlink): New macro. 2019-06-09 Jan Nieuwenhuizen mescc: Mes C Library: Support GNU Tar: Add execlp. * lib/posix/execl.c (vexec): New function. (execl): Use it. * lib/posix/execlp.c: New file. * build-aux/configure-lib.sh (libc_tcc_SOURCES): Add it. * lib/libc+gnu.c: Include it. * include/unistd.h (execlp): Declare. * lib/tests/posix/90-execlp.c: New file. * lib/tests/posix/90-execlp.stdout: New file. * build-aux/check-mescc.sh: Test it. 2019-06-12 Jan Nieuwenhuizen mescc: Mes C Library: Fix compile warnings. * include/stdlib.h (abort): Add prototype. 2019-11-10 Jan Nieuwenhuizen mescc: Mes C Library: Add missing stubs. * build-aux/configure-lib.sh (libc_gnu_SOURCES): Add fscanf, rewind stubs. * lib/stdio/freeopen.c: Remove. 2019-09-20 Jan Nieuwenhuizen build: Avoid tar --exclude=. * build-aux/install.sh.in: Only use `tar --exclude=' if we also have .go files compiled by Guile. 2019-09-16 Jan Nieuwenhuizen build: mesar: Remove bashisms. * scripts/mesar.in: Remove bashisms. 2019-10-01 Jan Nieuwenhuizen configure.sh: Cleanup argument parsing. Thanks, Timothy! * configure.sh: Cleanup argument parsing. 2019-09-16 Jan Nieuwenhuizen configure.sh: Remove bashisms. * configure.sh: Remove bashisms. Fixes running with Gash 0.1. 2019-09-16 Jan Nieuwenhuizen Revert "nyacc: 0.86.0 compatibility stub. WIP" This reverts commit 0183cc1c42437fda27196e27b490285a61d47f59. While it works to run Nyacc 0.86.0, it breaks running Nyacc 0.93 and up. This would need more thought and work, adding a nyacc-compat directory or so. Seems not worth the effort right now. 2019-09-16 Jan Nieuwenhuizen nyacc: 0.86.0 compatibility stub. WIP * mes/module/nyacc/lang/c99/util.scm: 0.86.0 compatibility stub. 2019-09-20 Jan Nieuwenhuizen build: Split-out build-source-lib.sh from build-lib.sh. * build-aux/build-lib.sh: Remove building of source lib. * build-aux/build-source-lib.sh: New file. * build-aux/build.sh.in: Invoke it. * build-aux/bootstrap.sh.in: Likewise. 2019-11-13 Jan Nieuwenhuizen build: Honor configure's --includedir. Thanks, Vagrant! Suggested by Vagrant Cascadian https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=902174#84 * build-aux/install.sh.in: Install headers in $includedir. * configure (includedir): Typo. * configure.sh (includedir): Likewise. 2019-11-23 Jan Nieuwenhuizen build: Create ascii signature. * build-aux/GNUmakefile.in (sign): Create ascii signature. 2019-09-09 Jan Nieuwenhuizen doc: Post-release update. * doc/announce/ANNOUNCE-0.20: Update. * guix/git/mes.scm (mes): Update. Release 0.20. * configure (VERSION): Update to 0.20. (main): Likewise. * configure.sh (VERSION): Likewise. * guix/git/mes.scm (mes, mes.git): Likewise. doc: Release update. * BLURB: New file. * AUTHORS: Update. * HACKING: Update. * INSTALL: Update. * NEWS: Update. * README: Update. * doc/images/gcc-mesboot-graph.dot: Update. * doc/mes.texi: Update. * simple.sh: Update. * doc/announce/ANNOUNCE-0.20: New file. guix: Update mescc-tools to 0.6.1. * guix/git/mes.scm (mescc-tools): Update to 0.6.1. * configure: Check for mescc-tools versions 0.6 or higher. build: Create ascii signature. * build-aux/GNUmakefile.in (sign): Create ascii signature. guix: Update Nyacc to 0.99. * guix/git/mes.scm (nyacc): Update to 0.99. doc: Add PORTING. * PORTING: New file. doc: Typos. Thanks, dddddd. * doc/announce/ANNOUNCE-0.11: Typo. * doc/announce/ANNOUNCE-0.12: Typo. * doc/announce/ANNOUNCE-0.13: Typo. * doc/announce/ANNOUNCE-0.14: Typo. mescc: Remove dead code. Thanks Mark Weaver. * module/mescc/compile.scm (field-size): Remove dead function. guix: Update packaging. * build-aux/manifest.scm (string-append): * guix/git/mes.scm (nyacc, git-file?): Remove. (mescc-tools): Bump to 0.6.0. (%source-dir): New variable. (mes.git): Ues it. * guix.scm: Rename from .guix.scm. build: Do not generate ChangeLog from tarball. * configure (main): Set .git-for-build. * build-aux/install.sh.in (DESTDIR): Use it as canary to skip ChangeLog rebuild. build: Use mesar instead of ar. * scripts/mesar.in: Rename from ar.in. Update users. * build-aux/build.sh.in (LIBS): Update. * build-aux/check.sh.in (recheck): Likwise. * build-aux/install.sh.in (DESTDIR): Likwise. * configure (main): Likwise. * configure.sh (mes_system): Likwise. * .gitignore: Update. getopt: Remove old FSF address, thanks Vagrant. * lib/posix/getopt.c: Remove old FSF address. 2019-09-09 Danny Milosavljevic Add missing #include. * lib/tests/scaffold/55-char-array.c: Add missing #include. Add missing #include. * lib/tests/io/90-stat.c: Add missing #include. Add missing #include. * lib/posix/getcwd.c: Add missing #include. 2019-09-09 Jan Nieuwenhuizen signal: Use SA_RESTORER on x86-64. * lib/linux/signal.c (signal)[x86_64]: Avoid segfault by setting SA_RESTORER flag. 2019-09-09 Danny Milosavljevic signal: Add comment on why we don't use the restorer. * lib/linux/signal.c: Add comment on why we don't use the restorer. signal: Remove SA_SIGINFO. * lib/linux/signal.c (signal): Remove SA_SIGINFO. signal: Don't use custom restorer. * lib/linux/signal.c (signal): Don't use custom restorer. signal: Use SA_SIGINFO (like glibc). * lib/linux/signal.c (_restorer): Rename to... (_restorer_for_siginfo): ...this. (signal): Use it. Use SA_SIGINFO. signal: Make sure that the signal mask is actually unsigned long. * lib/linux/signal.c (signal): Make sure that the signal mask is actually unsigned long. 2019-09-09 Danny Milosavljevic Delete "__sigmask". Follow-up to 6d95b89759d3c598fc84194429ae8c57249daa1a * lib/linux/signal.c (__sigmask): Delete definition. 2019-09-09 Danny Milosavljevic Fix "struct sigaction" structure for rt_sigaction. * include/signal.h (sigset_t): Increase size. * lib/linux/signal.c (signal): Use new sigset_t. Inherit CFLAGS for mes. * build-aux/check.sh.in: Inherit CFLAGS for mes. Fix typo. * build-aux/build.sh.in: Fix typo in "CFLAGS". tests: Fail early on nonexistent file. * lib/tests/io/90-stat.c (main): Fail early on nonexistent file. open: Check flags, and use _open2 if applicable. * lib/linux/open.c (open): Check flags; use _open2. ldiv: Make rem < 0 if a < 0. * lib/mes/div.c (ldiv): Make rem < 0 if a < 0. ldiv: Handle a == LONG_MIN. * lib/mes/div.c (ldiv): Handle a == LONG_MIN. 2019-09-09 Jan Nieuwenhuizen ntoab: Use __mesabi_uldiv only for arm. * lib/mes/ntoab.c (ntoab)[__MESC__ && __arm__]: Use __mesabi_uldiv. * build-aux/check-mescc.sh (XFAIL_TESTS): 70-printf-simple.c and 70-printf.c now pass for x86_64 mescc. 2019-07-01 Danny Milosavljevic Fix ntoab. Follow-up to b5b19304b59fefbed923b146ec8c8d495556fa76. * lib/mes/ntoab.c (ntoab): Fix non-MESC case. 2019-06-18 Danny Milosavljevic signal: Define "_restorer" everywhere except on i386. * lib/linux/signal.c: Define "_restorer" everywhere except on i386. Clarify our data type choices in "struct stat". * include/sys/stat.h: Clarify our data type choices in "struct stat". 2019-09-07 Jan Nieuwenhuizen test: Bump timeout. * build-aux/test-c.sh: Bump timeout to 10s, __mesabi_uldiv can be slow. 2019-06-14 Danny Milosavljevic ntoab: Use __mesabi_uldiv only on __MESC__. * lib/mes/ntoab.c (ntoab): Use __mesabi_uldiv only on __MESC__. 2019-06-14 Jan Nieuwenhuizen mescc: Mes C Library: Include mes/div.c for mescc builds. * build-aux/configure-lib.sh (libmes_SOURCES): Add mes/div.c. * simple.sh: Likewise. 2019-06-13 Danny Milosavljevic ntoab: Include "assert.h". * lib/mes/ntoab.c: #include "assert.h". mescc: Mes C Library: Use __mesabi_uldiv. * lib/mes/ntoab.c (ntoab): Use __mesabi_uldiv. mescc: Mes C Library: Add integer division algorithm. * lib/mes/div.c: New file. 2019-07-28 Jan Nieuwenhuizen mescc: Mes C Library: Have write behave well with buffered reads. * lib/mes/write.c: New file. * build-aux/configure-lib.sh (libc_mini_SOURCES): Add it. (libc_mini_shared_SOURCES): New variable. (libc_mini_SOURCES, libmes_SOURCES): Use it. (libmes_SOURCES): Add lib/linux/lseek.c, lib/posix/write.c. (libc_tcc_SOURCES): Remove lib/linux/lseek.c. * lib/posix/write.c (write): Correct for read buffer. * lib/stdio/fwrite.c (fwrite): Remove read buffer correction. * simple.sh: Update. 2019-07-27 Jan Nieuwenhuizen mescc: Mes C Library: Add buffered read. * lib/mes/__buffered_read.c: New file. * build-aux/configure-lib.sh (libc_SOURCES): Add it. Also add memmove.c. (libc_tcc_SOURCES): Remove memmove.c * lib/linux/close.c (close): Clear read buffer. * lib/linux/_open3.c (_open3): Likewise. * lib/linux/lseek.c (lseek): Correct for read buffer. * lib/stdio/fwrite.c (fwrite): Likewise. * lib/posix/read.c (read): Call __buffered_read. * lib/posix/write.c (write): Add FIXME note about buffered reads. * simple.sh: Update. 2019-06-10 Jan Nieuwenhuizen tests: Disable 70-extern.c for x86_64-gcc. * build-aux/check-mescc.sh (XFAIL_TESTS)[x86_64-gcc]: Add 70-extern.c. 2019-05-30 Danny Milosavljevic mescc: Put char's ASCII code into register, not char. * module/mescc/compile.scm (expr-register): Put char's ASCII code into register, not char. 2019-06-09 Jan Nieuwenhuizen mes: Update to Nyacc 0.93. * mes/module/nyacc/lang/c99/util.mes: New file. * mes/module/nyacc/lang/c99/parser.mes: Use it. * module/mescc/compile.scm (ast->info): Update for Nyacc 0.93.0. * module/mescc/preprocess.scm (need-progress): Likewise. (ast-strip-comment): Likewise. 2019-08-02 Jan Nieuwenhuizen mes: string->number: Support #x-prefixed hex numbers. * mes/module/mes/scm.mes (string->number): Support "#x"-prefix. * tests/math.test ("string->number #hex"): Test it. 2019-07-27 Jan Nieuwenhuizen mescc: Do not dump variables with extern storage. * lib/tests/scaffold/70-extern.stdout: New file. * lib/tests/scaffold/70-extern.c: New file. * build-aux/check-mescc.sh (TESTS): Add it.. * module/mescc/M1.scm (global-string?, global-extern?): New function. (info->M1): Dump strings first. Skip extern symbols. * module/mescc/info.scm (): Add storage field. (make-global): Add storage parameter. Pass it. * module/mescc/compile.scm (make-global-entry): Likewise. (global->info): Likewise. (init-declr->info): Likewise. (decl->info): Pass storage. build: ./pre-inst-env MES_PREFIX fixup. * build-aux/pre-inst-env.in: Set MES_PREFIX to abs_top_srcdir. * src/mes.c (open_boot): Cater for MES_PREFIX/mes and ${srcdest}. mescc: Be silent. * module/mescc/M1.scm (infos->M1, info->M1): Add verbose?. Move debugging into verbose? > 1. * module/mescc/compile.scm (c99-input->info, c99-ast->info): Likewise. (mescc:trace-verbose): Rename from mescc:trace. (mescc:trace): New function. * module/mescc.scm (mescc:main): Likewise. * module/mescc/mescc.scm (mescc:preprocess, c->ast mescc:compile, c->info, E->info): Likewise. * module/mescc/preprocess.scm (c99-input->full-ast, c99-input->ast): Likewise. 2019-07-26 Jan Nieuwenhuizen mescc: Add // to include path. * module/mescc/preprocess.scm (c99-input->full-ast): Add // to include path. * module/mescc/compile.scm (c99-input->info): Pass arch. * module/mescc/mescc.scm (mescc:preprocess): Likewise. (c->info): Likewise. (c->ast): Likewise. mescc: Add 70-function-destruct-declare.c test. * module/mescc/compile.scm (init-declr->info): Do not attempt to re-calculate function type. (ftn-declr:get-type): Remove. * lib/tests/scaffold/70-function-destruct-declare.c: New file. * build-aux/check-mescc.sh (TESTS): Add it. mescc: Resurrect --write. * module/mescc/mescc.scm (mescc:preprocess): Pass pretty-print/write to c->ast. build: Distribute crt*.c, libc+gnu.c for tcc, gcc bootstrap build. * build-aux/build-lib.sh (libc_gnu_SOURCES): Build libc+gnu.c. Copy crt*.c, libc+gnu.c for distribution. build: Uniquify config macros. * configure (main): Rename VERSION to MES_VERSION, pkgdatadir to MES_PKGDATADIR. Update users. * configure.sh (mes_system): Likewise. * src/mes.c (mes_symbols): Update. (open_boot): Update. * scaffold/cons-mes.c (main): Update. * simple.sh: Update. 2019-07-20 Jan Nieuwenhuizen build: Resurrect --with-cheating. * build-aux/config.sh.in (SCHEME): New substitute. * build-aux/config.make.in: Likewise. * configure: Substitute them. 2019-07-23 Jan Nieuwenhuizen mescc: Support tcc: libtcc1 build fixes. * lib/libtcc1.c: Support building without long long, float support. 2019-06-01 Jan Nieuwenhuizen mescc: Mes C Library: Avoid type/size_t conflicts. * include/alloca.h: Remove typedefs, include sys/types.h. * include/stdint.h: Likewise. * include/string.h: Likewise. 2019-07-17 Jan Nieuwenhuizen mescc: Support tcc: Add intptr_t, uintptr_t. * include/sys/types.h (intptr_t, uintptr_t): Add typedef. 2019-07-21 Jan Nieuwenhuizen mescc: Add 70-struct-post.c test with fix. * lib/tests/scaffold/70-struct-post.c: New file. * build-aux/check-mescc.sh (TESTS): Add it. * module/mescc/compile.scm (expr->register): Use type size for rank 0 (WAS: 1). mescc: Add 70-struct-short-enum-init.c test with fix. * module/mescc/compile.scm (init->data): Respect type of size. * lib/tests/scaffold/70-struct-short-enum-init.c: New file. * lib/tests/scaffold/70-struct-short-enum-init.stdout: New file. * build-aux/check-mescc.sh (TESTS): Add test. 2019-07-20 Jan Nieuwenhuizen mescc: Add 70-array-in-struct-init.c test with fix. * lib/tests/scaffold/70-array-in-struct-init.c: New file. * lib/tests/scaffold/70-array-in-struct-init.stdout: New file. * build-aux/check-mescc.sh (TESTS): Add test. * module/mescc/compile.scm (array-init-element->data): Recurse for elements instead of using init->data. Support array fields. 2019-07-19 Jan Nieuwenhuizen mes: Remove broken copy of simple-format. * mes/module/mes/simple-format.mes: New file. * mes/module/mes/guile.mes: Use it. (with-output-to-string, simple-format): Remove broken copies. * mes/module/mes/display.mes (with-output-to-string, simple-format, format): Remove. 2019-07-05 Danny Milosavljevic Fix remainder handling. * mes/module/mes/scm.mes (number->string): Fix remainder handling. * build-aux/check-mescc.sh (XFAIL_TESTS): Remove lib/tests/scaffold/60-math.c. 2019-07-09 Jan Nieuwenhuizen Revert "test: Disable 60-math.c test." This reverts commit bbe6576a66a520d429bb3ec84120ffcce88480bf. test: Disable 60-math.c test. * build-aux/check-mescc.sh (TESTS): Remove lib/tests/scaffold/60-math.c. (BROKEN_TESTS): Add it. 2019-07-07 Jan Nieuwenhuizen build: Resurrect bootstrap.sh. * build-aux/connfigure-lib.sh: Split from build-lib.sh * build-aux/build-lib.sh: Include it. * build-aux/bootstrap.sh.in: New file. * configure.sh: Substitute it. 2019-07-08 Jan Nieuwenhuizen mescc: Use basename of input as default output name. * module/mescc/mescc.scm (mescc:preprocess, mescc:compile, mescc:assemble, M1->hex2): Use basename of input as default output name. 2019-07-06 Jan Nieuwenhuizen build: Handle gcc with --pie-by-default. This fixes upgrading to debian-hurd-20190220.img. * build-aux/build.sh.in (CFLAGS): Add -static. Fixes using gcc compiled with --pie-by-default * build-aux/check.sh.in (CFLAGS): Likewise. * module/mescc.scm (parse-opts): Ignore -no-pie, -static. 2019-07-08 Jan Nieuwenhuizen test: Split-off broken 72-typedef-struct-def-local. * lib/tests/scaffold/72-typedef-struct-def-local.c: New file. * lib/tests/scaffold/72-typedef-struct-def.c: Remove local bit. * build-aux/check-mescc.sh (TESTS): Add it. (XFAIL_TESTS)[mescc]: Add lib/tests/scaffold/72-typedef-struct-def.c. 2019-06-28 Jan Nieuwenhuizen test: Fix open-read test. * build-aux/pre-inst-env.in (srcdir): Remove. (abs_top_srcdir, abs_top_builddir): Export. * lib/tests/posix/50-open-read.c (main): Use abs_top_srcdir. 2019-06-26 Jan Nieuwenhuizen test: Add open-read test. * build-aux/test-c.sh: Support running by hand. * lib/tests/posix/50-open-read.c: New test. * lib/tests/posix/data/open-read: New file. * build-aux/check-mescc.sh (TESTS): Add it. test: Enable argv test, run tests with arguments. * build-aux/check-mescc.sh (TESTS): Enable 54-argv.c (XFAIL_TESTS): Remove it. * build-aux/test-c.sh: Invoke test with options. * lib/tests/scaffold/54-argc.c: Update. 2019-06-25 Jan Nieuwenhuizen mescc: Mes C library: Move common getcwd, open bits to posix. * lib/linux/_getcwd.c: Rename from getcwd.c. * lib/linux/_open3.c: Rename from open.c. * lib/posix/getcwd.c: New file with bits from ../linux/getcwd.c. * lib/posix/open.c: New file with bits ../linux/getcwd.c. * build-aux/build-lib.sh (libc_SOURCES): Update. 2019-06-24 Jan Nieuwenhuizen mescc: Mes C Library: Move posix bits to read. * lib/linux/_read.c: Rename from read. * lib/posix/read.c: New file. * build-aux/build-lib.sh (libc_SOURCES): Update. * include/mes/lib.h (_read): Declare. 2019-06-25 Jan Nieuwenhuizen porting: Avoid failing in scaffold build. * build-aux/build-scaffold.sh: Do not fail when using courage. build: Use bash if available to avoid dash problems. * configure: Set SHELL to bash. * configure.sh: Likewise. * build-aux/test-suite.sh (TEST_LOGS): * build-aux/export.make: Export SHELL. * build-aux/config.sh.in (SHELL): New substitute, export. * build-aux/config.make.in (SHELL): New substitute. * build-aux/GNUmakefile.in (build, check, install, uninstall): Use $SHELL to avoid dash problems. * build-aux/check-mescc.sh: Likewise. * build-aux/build.sh.in: Likewise. * build-aux/check-mes.sh: Likewise. * build-aux/check.sh.in: Likewise. test: Oops, uncomment some commented-out tests. * lib/tests/scaffold/55-char-array.c: Uncomment. * lib/tests/scaffold/72-typedef-struct-def.c: Likewise. build: Improve --with-system-libc support. * build-aux/build-lib.sh: Avoid building libc for --with-system-libc. Make libmes richer. build-aux/check-mescc.sh: Enable 50-malloc test. * include/dirstream.h: Use HAVE_DIRSTREAM_H to cater for non-existing dirstream.h. * include/grp.h[SYSTEM_LIBC]: Typo. * include/mes/lib.h (__brk, __call_at_exit)[SYSTEM_LIBC]: Declare. * include/stdlib.h (comparison_fn_t)[SYSTEM_LIBC]: Declare. * include/time.h (mktime): Return time_t. * lib/posix/isatty.c [SYSTEM_LIBC]: Do not (re)declare termios. * lib/stub/mktime.c (mktime): Return time_t. * lib/tests/scaffold/41-ternary.c (main): Remove assumption that locals are initialized. * lib/tests/scaffold/70-stdarg.c: Cater for SYSTEM_LIBC. * lib/tests/setjmp/80-setjmp.c: Declare jmp buf. * lib/*/*.c: Add missing mes/lib.h, errno.h includes. 2019-06-23 Jan Nieuwenhuizen porting: Add x86_64 scaffold: exit and write in assembly. * lib/x86_64-mes-gcc/exit-42.S: New file. * lib/x86_64-mes-gcc/hello-mes.S: New file. * lib/x86_64-mes/elf64-0exit-42.hex2: New file. * lib/x86_64-mes/elf64-0hello-mes.hex2: New file. * lib/x86_64-mes/elf64-body-exit-42.hex2: Rewrite.. * lib/x86_64-mes/elf64-body-hello-mes.hex2: * lib/x86_64-mes/elf64-0header.hex2: Fix copyright header. * lib/x86_64-mes/elf64-header.hex2: Likewise. * lib/x86_64-mes/elf-0footer.hex2: Remove. 2019-06-13 Jan Nieuwenhuizen porting: Add x86 scaffold: exit and write in assembly. * lib/x86-mes-gcc/exit-42.S: New file. * lib/x86-mes-gcc/hello-mes.S: New file. * lib/x86-mes/elf32-0exit-42.hex2: New file. * lib/x86-mes/elf32-0hello-mes.hex2: New file. * lib/x86-mes/elf32-body-hello-mes.hex2: New file. * lib/x86-mes/elf32-body-exit-42.hex2: Rewrite. * lib/x86-mes/elf32-header.hex2: Fix copyright header. * lib/x86-mes/elf32-0header.hex2: Likewise. * lib/x86-mes/elf-0footer.hex2: Remove. * build-aux/build-scaffold.sh: Build them. * .dir-locals.el (asm-mode): Allow TABs. * .gitignore: Reserve .S assembly sources, i.e. manual written assembly. Update build system. * module/mescc/mescc.scm: Update. * build-aux/build-lib.sh: Update. * scripts/ar.in: Update. 2019-06-10 Jan Nieuwenhuizen make check: Do not re-check unless recheck=true. * build-aux/check-mescc.sh (recheck): New variable. * build-aux/check.sh.in (recheck): New variable. * build-aux/test-suite.sh (TEST_LOGS): Use it. 2019-05-22 Jan Nieuwenhuizen build: Cater for ARM. * configure: Cater for ARM. * configure.sh: Likewise * build-aux/GNUmakefile.in: Likewise. * build-aux/bootstrap.sh.in: Likewise. * module/mescc.scm (parse-opts): Likewise. * src/mes.c (mes_environment): Likewise. * build-aux/build.sh.in: Likewise. * build-aux/config.sh Likewise. * build-aux/install.sh.in: Likewise. * module/mes/guile.scm: Likewise. * scripts/mescc.scm.in: Likewise. * module/mescc/mescc.scm (arch-get): New function. (arch-get-info): New function. (arch-get-define): New function. (arch-get-m1-options): New function. (arch-get-Architecture): New function. (mescc:preprocess c->info, E->info, M1->hex2, hex2->elf, M1->blood-elf, arch-find): Use them. 2019-06-10 Jan Nieuwenhuizen mescc: Drop $@-workaround. * scripts/mescc.in: Drop $@-workaround. 2019-06-08 Jan Nieuwenhuizen build: Simplify. core: Make mes src/ c files separate compilation units. * include/mes/constants.h: New file. * include/mes/macros.h: New file. * include/mes/mes.h: New file. * src/gc.c: Update. * src/hash.c: Update. * src/lib.c: Update. * src/math.c: Update. * src/mes.c: Update. * src/module.c: Update. * src/posix.c: Update. * src/reader.c: Update. * src/string.c: Update. * src/struct.c: Update. * src/vector.c: Update. mes: Update datadir. * src/mes.c (g_datadir): New global. (open_boot): Rename from read_boot. (read_boot): New function. * mes/module/mes/boot-0.scm: Move from boot-0.scm.in * configure: Update. * configure.sh: Update. mescc: Create libraries from separate files. * .gitignore: Update. * build-aux/bootstrap-mes.sh: Remove. * build-aux/bootstrap.sh.in: Remove. * build-aux/build-guile.sh: Update. * build-aux/build-mes.sh: Update. * build-aux/build-scaffold.sh: New file. * build-aux/build.sh.in: Update. * build-aux/cc.sh: Update. * build-aux/check-tcc.sh: Remove. * build-aux/config.sh.in: New file. * build-aux/config.sh: Remove. * build-aux/install.sh.in: Update. * build-aux/test-boot.sh: New file. * build-aux/test-c.sh: New file. * build-aux/test-driver: New file. * build-aux/test-suite.sh: New file. * build-aux/trace.sh: Update. * build-aux/uninstall.sh.in: Update. * configure: Update. * configure.sh: Update. * lib/linux/x86-mes-mescc/crt1.c: Move from lib/linux/x86-mes. * lib/linux/x86-mes-mescc/mini.c: Likewise. * lib/linux/x86_64-mes-mescc/crt1.c: Move from lib/linux/x86_64-mes. * lib/linux/x86_64-mes-mescc/mini.c: Likewise. * lib/linux/x86-mes-gcc/syscall.c: Rename from mes.c. * lib/linux/x86-mes-mescc/syscall.c: Likewise. * lib/linux/x86_64-mes-gcc/syscall.c: Likewise. * lib/linux/x86_64-mes-mescc/syscall.c: Likewise. * lib/mes/mes_open.c: Include config.h. * lib/tests/stdio/70-printf-hello.c: Likewise. * lib/tests/stdio/70-printf-simple.c: Likewise. * scaffold/gc-test.sh: New file. * simple.sh: Update. 2019-06-08 Jan Nieuwenhuizen test: Move scaffold/tests into lib. * lib/tests/scaffold: Move from scaffold/tests. * scaffold/tests: Remove. * build-aux/check-mescc.sh: Update. 2019-05-10 Danny Milosavljevic build: Make "GUILEC" compilation status output more verbose (print full path). * build-aux/build-guile.sh: Make "GUILEC" compilation status output more verbose (print full path). 2019-05-29 Jan Nieuwenhuizen build: Fix --disable-silent-rules. Thanks ng0! * configure (main): Substitute V as string value. * build-aux/trace.sh: Typo. Fixes using V=0. * build-aux/config.status.in (V): New substitute. * build-aux/config.make.in (V): New substiute. mescc: Use a.out as default executable name. * module/mescc/mescc.scm (hex2->elf): Use a.out as default executable name. mescc: Robustify against empty `V' in environment. * module/mescc.scm: Robustify against empty V in environment. 2019-05-28 Jan Nieuwenhuizen mescc: Fix -dumpmachine to respect -m bits selection. * module/mescc.scm (parse-opts): Fix -dumpmachine to respect -m bits selection. Also display kernel. 2019-05-29 Jan Nieuwenhuizen mescc: Support single-dash options on Mes too. * scripts/mescc.in[MES]: Add -- as separator, fixes using single-dash options on Mes too. mescc: Ignore -fnobuiltin, -nostdinc for GCC compatibility. * module/mescc.scm (parse-opts): Add -fnobuiltin, -nostdinc. (mescc:main): Ignore them. 2019-05-27 Jan Nieuwenhuizen test: Resurrect running boot tests on Guile. * module/mes/guile.scm (keyword->string): New function. * scaffold/boot/43-or.scm (foo): Add quoting. * scaffold/boot/45-pass-if.scm (pass-if): Likewise. * scaffold/boot/46-report.scm (pass-if): Likewise. * scaffold/boot/47-pass-if-eq.scm (pass-if): Likewise. * scaffold/boot/48-let.scm (map): Rename from map1. * scaffold/boot/60-let-syntax-expanded.scm: Some work. 2019-05-26 Jan Nieuwenhuizen mescc: Mes C Library: Fix compile warnings. * lib/stdio/fputc.c (fputc): Oops, stream is a long. * lib/stdlib/malloc.c (malloc): Cast to char *. FIXME * lib/string/memchr.c (memchr): Cast to void *. * lib/string/memcmp.c (memcmp): Add const cast. mescc: Mes C Library: Fixes for x86_64 crt1.c * lib/linux/x86_64-mes/crt1.c (_start): Write only 4 bytes to int variables __stdin, __stdout, __stderr. 2019-05-29 Jan Nieuwenhuizen test: Move srfi-1 for-each and map tests to tests/srfi-1.test. This fixes: `make check MES=guile'. * tests/srfi-1.test ("map 1,2", "map 2,1", "for-each 1,2", for-each 2,1"): Move from scm.test. * tests/scm.test ("map 1,2", "map 2,1", "for-each 1,2", for-each 2,1"): Remove. 2019-05-29 Jan Nieuwenhuizen mescc: Mes C Library: Use SYSTEM_LIBC [WAS: WITH_GLIBC]. Run: sed -i 's,WITH_GLIBC,SYSTEM_LIBC,g' $(git grep -l WITH_GLIBC) * build-aux/config.sh: Update. * include/alloca.h: Likewise. * include/ar.h: Likewise. * include/argz.h: Likewise. * include/assert.h: Likewise. * include/ctype.h: Likewise. * include/dirent.h: Likewise. * include/dirstream.h: Likewise. * include/dlfcn.h: Likewise. * include/endian.h: Likewise. * include/errno.h: Likewise. * include/fcntl.h: Likewise. * include/features.h: Likewise. * include/float.h: Likewise. * include/getopt.h: Likewise. * include/inttypes.h: Likewise. * include/libgen.h: Likewise. * include/limits.h: Likewise. * include/linux/x86_64/syscall.h: Likewise. * include/locale.h: Likewise. * include/math.h: Likewise. * include/memory.h: Likewise. * include/mes/lib-mini.h: Likewise. * include/pwd.h: Likewise. * include/setjmp.h: Likewise. * include/signal.h: Likewise. * include/stdarg.h: Likewise. * include/stdbool.h: Likewise. * include/stddef.h: Likewise. * include/stdint.h: Likewise. * include/stdio.h: Likewise. * include/stdlib.h: Likewise. * include/stdnoreturn.h: Likewise. * include/string.h: Likewise. * include/strings.h: Likewise. * include/sys/cdefs.h: Likewise. * include/sys/dir.h: Likewise. * include/sys/file.h: Likewise. * include/sys/ioctl.h: Likewise. * include/sys/mman.h: Likewise. * include/sys/param.h: Likewise. * include/sys/resource.h: Likewise. * include/sys/select.h: Likewise. * include/sys/stat.h: Likewise. * include/sys/time.h: Likewise. * include/sys/timeb.h: Likewise. * include/sys/times.h: Likewise. * include/sys/types.h: Likewise. * include/sys/ucontext.h: Likewise. * include/sys/user.h: Likewise. * include/sys/wait.h: Likewise. * include/termio.h: Likewise. * include/time.h: Likewise. * include/unistd.h: Likewise. * lib/libmes.c: Likewise. * lib/tests/stdio/70-printf-hello.c: Likewise. * lib/tests/stdio/70-printf-simple.c: Likewise. * lib/tests/stdio/80-sscanf.c: Likewise. * lib/tests/stdlib/50-malloc.c: Likewise. * module/mescc/preprocess.scm: Likewise. * scaffold/cons-mes.c: Likewise. * scaffold/lib/stdlib/malloc.c: Likewise. * scaffold/micro-mes.c: Likewise. * scaffold/tests/61-array.c: Likewise. * scaffold/tiny-mes.c: Likewise. * simple.sh: Likewise. * src/mes.c: Likewise. 2019-05-27 Jan Nieuwenhuizen mes: Bugfix for search-path. Fixes running MesCC on Guile. * module/mescc/mescc.scm (arch-find): Also look in cwd. * mes/module/mes/posix.mes (search-path): Do not look in cwd. 2019-05-25 Jan Nieuwenhuizen mescc: Use named --architecture switch for upcoming mescc-tools 0.6. * module/mescc/mescc.scm (M1->hex2): Use named --architecture switch for upcoming mescc-tools 0.6. (hex2->elf): Likewise. * build-aux/bootstrap-mes.sh: Likewise. * build-aux/bootstrap.sh.in: Likewise. * build-aux/config.sh: Likewise. 2019-05-27 Jan Nieuwenhuizen mes: Identify 64-bit bug when compiled with MesCC. * src/math.c (divide): Add divide-by-zero error. (modulo): Likewise. * module/mes/guile.scm (%compiler): New variable. * module/mescc/M1.scm (mesc?): New variable. (hex2:immediate8): Use it to avoid divide-by-zero error. * HACKING (Bugs): Add it. mes: Make debug levels 4 and 5 usable. * HACKING: Update debug policy. * lib/linux/read.c (read): Print read in level 5. * src/mes.c (eval_apply): Print module in level 6. (main): Likewise. Remove redundant module printing. * src/gc.c (gc): Print symbols in level 6. 2019-05-18 Jan Nieuwenhuizen mes: Run build-aux/indent.sh. * src/mes.c: Re-indent. * src: Likewise. * include: Likewise. * lib: Likewise. * scaffold: Likewise. 2019-05-12 Jan Nieuwenhuizen mes: Grand indent: prepare. * build-aux/indent.sh: New file. * include/mes/builtins.h: Move from src/builtins.h. * include/fcntl.h: Use // *INDENT-OFF* to prevent indent breakage. * include/locale.h: Likewise. * include/signal.h: Likewise. * include/sys/stat.h: Likewise. * include/sys/user.h: Likewise. * lib/linux/x86-mes-gcc/crt0.c: Likewise. * lib/linux/x86-mes-gcc/crt1.c: Likewise. * lib/linux/x86-mes-gcc/mes.c: Likewise. * lib/linux/x86-mes-gcc/mini.c: Likewise. * lib/linux/x86_64-mes-gcc/crt0.c: Likewise. * lib/linux/x86_64-mes-gcc/crt1.c: Likewise. * lib/linux/x86_64-mes-gcc/mes.c: Likewise. * lib/linux/x86_64-mes-gcc/mini.c: Likewise. * lib/x86_64-mes-gcc/setjmp.c: Likewise. * src/mes.c: Likewise. * src/reader.c: Likewise. 2019-05-15 Jan (janneke) Nieuwenhuizen mes: Support -c EXPR. * mes/module/mes/boot-0.scm.in: Support -c EXPR. mes: Support optional port on read. * mes/module/mes/scm.mes (read): Support optional port on read. build: Fix mescc installation on Debian. * build-aux/pre-inst-env.in: Set bindir. * scripts/mescc.in: Fix configure/prefix issues. * mes/module/mes/boot-01.scm (integer->char): Remove. (newline): Use "\n". (%moduledir): Use string-append. * mes/module/mes/boot-02.scm: Likewise. * mes/module/mes/boot-0.scm: Likewise. build: Debian make check and install fixes. * configure (main): Oops, typo: mandir uses --infodir. * build-aux/check.sh.in: Run check-mescc.sh with bash. * build-aux/config.sh (CFLAGS, CPPFLAGS, HEX2FLAGS, LDFLAGS, M1FLAGS): unset. * build-aux/install.sh.in: Use BASHOPTS to check for bash; on Debian dash is used and has $SHELL=/bin/bash. Use ${DESTDIR}@... 2019-05-14 Jan Nieuwenhuizen mes: Rename strings.c. * src/string.c: Rename from src/strings.c. * src/mes.c * build-aux/snarf.sh: Update. 2019-05-12 Jan Nieuwenhuizen mescc: Mes C Library: Use mes_open to avoid open trickery. * include/mes/lib.h (mes_open): Declare. * lib/libmes.c[WITH_GLIBC]: Remove open undefine. (mes_open)[!WITH_GLIBC]: New function. * src/mes.c (open_boot): Use mes_open. * src/posix.c (open_input_file): Likewise. (open_output_file): Likewise. mescc: Mes C Library: Remove dead code. * lib/glibc.c: Remove. * lib/abtol.c: Remove. mescc: Mes C Library: Explode linux/tcc.c. * lib/linux/close.c: New file. * lib/linux/lseek.c: New file. * lib/linux/rmdir.c: New file. * lib/linux/stat.c: New file. * lib/linux/tcc.c: Include them. (close, lseek, rmdir, stat): Remove. mescc: Mes C Library: Explode linux/libc.c. * lib/linux/access.c: New file. * lib/linux/brk.c: New file. * lib/linux/chmod.c: New file. * lib/linux/dup.c: New file. * lib/linux/dup2.c: New file. * lib/linux/execve.c: New file. * lib/linux/fork.c: New file. * lib/linux/fsync.c: New file. * lib/linux/getcwd.c: New file. * lib/linux/ioctl.c: New file. * lib/linux/libc.c: New file. * lib/linux/open.c: New file. * lib/linux/read.c: New file. * lib/linux/unlink.c: New file. * lib/linux/waitpid.c: New file. * lib/linux/libc.c: Include them. (access, brk, chmod, dup, dup2, execve, fork, fsync, getcwd, ioctl, libc, open, read, unlink, waitpid): Remove. 2019-05-11 Jan Nieuwenhuizen mescc: Mes C Library: Explode linux/gnu.c. * lib/linux/chdir.c: New file. * lib/linux/fcntl.c: New file. * lib/linux/fstat.c: New file. * lib/linux/getdents.c: New file. * lib/linux/getegid.c: New file. * lib/linux/geteuid.c: New file. * lib/linux/getgid.c: New file. * lib/linux/getpid.c: New file. * lib/linux/getppid.c: New file. * lib/linux/getrusage.c: New file. * lib/linux/getuid.c: New file. * lib/linux/kill.c: New file. * lib/linux/link.c: New file. * lib/linux/lstat.c: New file. * lib/linux/mkdir.c: New file. * lib/linux/nanosleep.c: New file. * lib/linux/pipe.c: New file. * lib/linux/rename.c: New file. * lib/linux/setgid.c: New file. * lib/linux/settimer.c: New file. * lib/linux/setuid.c: New file. * lib/linux/signal.c: New file. * lib/linux/sigprogmask.c: New file. * lib/linux/gnu.c: Include them. (chdir, fcntl, fstat, getdents, getegid, geteuid, getgid, getpid, getppid, getrusage, getuid, kill, link, lstat, mkdir, munmap, nanosleep, pipe, rename, setgid, settimer, setuid, signal, sigprogmask): Remove. 2019-05-09 Jan Nieuwenhuizen mescc: Mes C Library: Explode libc-mini.c. * lib/posix/write.c: New file. * lib/linux/libc-mini.c: Include it. (write): Remove. * lib/tests/mes/30-oputs.c: Remove dead code. 2019-05-07 Jan Nieuwenhuizen mescc: Mes C Library: Cleanup includes. * include/mes/lib-mini.h: Move from include/libmes-mini.h. Update users. * include/mes/lib.h: Move from include/libmes.h. Update users. 2019-05-05 Jan Nieuwenhuizen mescc: Support -nodefaultlibs, -nostartfiles, -nostdlib. * module/mescc.scm (parse-opts): Parse -nodefaultlibs, -nostartfiles, -nostdlib. * module/mescc/mescc.scm (mescc:link): Handle -nodefaultlibs, -nostdlib. (hex2->elf): Handle -nostartfiles, -nostdlib. 2019-05-03 Jan Nieuwenhuizen build: Do not install test binaries. * build-aux/install.sh.in: Do not install test binaries. 2019-05-05 Jan Nieuwenhuizen mes: m2: Move force-output to Scheme. * mes/module/mes/posix.mes (force-output): New function. * src/posix.c (force_output): Remove. * src/mes.c (mes_builtins): Remove adding of force-output. 2019-03-23 Jan Nieuwenhuizen build: M2-Planet first-aid, simplest build script possible. * simple.sh: New file. 2019-03-27 Jan Nieuwenhuizen .dir-locals.el: Assert default GNU settings. * .dir-locals.el: Assert default GNU settings. Fix typo in stage0 copyright headers. * lib/x86-mes/elf-0footer.hex2: Fix typo. * lib/x86-mes/elf32-0header.hex2: Fix typo. * lib/x86-mes/elf32-body-exit-42.hex2: Fix typo. * lib/x86-mes/elf32-footer-single-main.hex2: Fix typo. * lib/x86-mes/elf32-header.hex2: Fix typo. * lib/x86_64-mes/elf-0footer.hex2: Fix typo. * lib/x86_64-mes/elf64-0header.hex2: Fix typo. * lib/x86_64-mes/elf64-body-exit-42.hex2: Fix typo. * lib/x86_64-mes/elf64-footer-single-main.hex2: Fix typo. * lib/x86_64-mes/elf64-header.hex2: Fix typo. 2019-03-16 Jan Nieuwenhuizen mescc: Mes C Library: Fix ungetc. * include/sys/resource.h (OPEN_MAX, RLIMIT_NOFILE): New macro. * lib/libc.c: Add memset.c include. * lib/libc+tcc.c: Remove memset.c include. * lib/linux/tcc.c (close): * lib/mes/fdgetc.c (__ungetc_buf): New global. (_ungetc_pos, _ungetc_fd, _ungetc_buf): Remove. Update users. * scaffold/tests/65-read.c: Update. 2019-03-23 Jan Nieuwenhuizen build: Replace POSIX, posix_p by WITH_GLIBC, wip_glibc_p. * build-aux/build-mes.sh: Replace POSIX, posix_p by WITH_GLIBC, wip_glibc_p. * build-aux/build.sh.in: Likewise. * build-aux/cc.sh (link): Likewise. * build-aux/config.make.in (with_glibc_p): Likewise. * build-aux/config.sh (libc): Likewise. (CPPFLAGS): Likewise. * build-aux/config.status.in (with_glibc_p): Likewise. * build-aux/test.sh: Likewise. * configure (main): Likewise. * configure.sh (subst): Likewise. (mes_arch): Likewise. * include/libmes.h: Likewise. * include/linux/x86_64/syscall.h: Likewise. * lib/libmes.c: Likewise. * lib/tests/stdio/70-printf-hello.c (main): Likewise. * lib/tests/stdio/70-printf-simple.c (main): Likewise. * lib/tests/stdio/80-sscanf.c (main): Likewise. * lib/tests/stdlib/50-malloc.c: Likewise. * module/mescc/preprocess.scm (c99-input->full-ast): Likewise. * scaffold/cons-mes.c: Likewise. * scaffold/lib/stdlib/malloc.c: Likewise. * scaffold/micro-mes.c: Likewise. * scaffold/tests/61-array.c (getenv): Likewise. * scaffold/tiny-mes.c: Likewise. * src/mes.c: Likewise. 2019-03-03 Jan Nieuwenhuizen mescc: Mes C Library: Fix compile warnings. * include/libmes.h (dtoab, itoa, ltoa, ntoab, ultoa, utoa): Return char* (WAS: char const*). * lib/*/*c: Update, add missing includes. 2019-03-02 Jan Nieuwenhuizen mescc: Mes C Library: Fix isatty. * lib/posix/isatty.c (isatty): Test ioctl == 0. * mes/module/mes/boot-0.scm.in: Update: no tty?: read from stdin. test: 50-getenv: Test PATH, allow to fail. * lib/tests/posix/50-getenv.c (main): Test PATH. * build-aux/check-mescc.sh (broken): Add 50-getenv. mes: Support map and for-each with lists of unequal length. * mes/module/mes/base.mes (map): Support lists of unequal length. * mes/module/mes/scm.mes (for-each): Likewise. * module/mescc/compile.scm (expr->register): Fix compile warning. * tests/scm.test ("map 1,2", "map 2,1", "for-each 1,2", "for-each 2,1": Test it. mescc: Mes C Library: Use __ as global internal prefix. * include/libmes-mini.h (g_stdin, g_stdout, g_stderr): Rename to __stdin, __stdout, __stderr. Update users. 2019-02-28 Jan Nieuwenhuizen mescc: ctype.h: Add missing prototypes. * include/ctype.h: Add missing prototypes. mescc: Mes C Library: Bugfix for tcc-compiled exit assembly. * lib/linux/x86-mes-gcc/mini.c (_exit): Add clobbered registers %eax, %ebx. Fixes always exit 1. 2019-02-25 Jan Nieuwenhuizen test: Remove special characters from files. * scaffold/tests/06-call-not-1.c: Rename from 06-call-!1.c. * scaffold/tests/06-not-call-1.c: Rename from 06-!call-1.c. * scaffold/tests/12-if-eq.c: Rename from 12-if-==.c. * scaffold/tests/13-if-neq.c: Rename from 13-if-!=.c. * scaffold/tests/15-if-not-f.c: Rename from 15-if-!f.c. * scaffold/tests/21-char-array-simple.c: Rename from 21-char[]-simple.c. * scaffold/tests/21-char-array.c: Rename from 21-char[].c. * scaffold/tests/22-while-char-array.c: Rename from 22-while-char[].c. * scaffold/tests/41-ternary.c: Rename from 41-?.c. * scaffold/tests/7u-call-ternary.c: Rename from 7u-call-?.c. * scaffold/tests/7u-ternary-expression.c: Rename from 7u-?-expression.c. * build-aux/check-mescc.sh (tests): Update. build: Support building with Gash. * build-aux/check-mes.sh: Replace unspported $((..)) by $(expr ...). * build-aux/check-mescc.sh: Likewise. * build-aux/check-tcc.sh: Likewise. 2019-02-18 Jan Nieuwenhuizen build: Configure: remove temp files. * configure (gulp-pipe*): Remove .error. (check-header-c): Remove .config.c. (check-compile-c): Likewise. (check-link-c): Likewise. build: Remove mini-mes. * scaffold/mini-mes.c: Remove. * build-aux/build-mes.sh: Remove commented build instructions. * .gitignore: Remove pattern. 2019-02-24 Jan Nieuwenhuizen mescc: Mes C Library: Initialize streams in crt1. * lib/linux/x86-mes-gcc/crt1.c: Initialize streams. * lib/linux/x86-mes/crt1.c: Likewise. * lib/linux/x86_64-mes-gcc/crt1.c: Likewise. * lib/linux/x86_64-mes/crt1.c: Likewise. * src/mes.c (main): Remove initialization of streams. mescc: Mes C Library: Populate with function tests from scaffold. * .gitignore: Update. * build-aux/bootstrap.sh.in: Update. * build-aux/build-mes.sh: Update. * build-aux/check-mescc.sh: Update. * lib/tests/assert/50-assert.c: Move from scaffold/tests/50-assert.c. * lib/tests/dirent/90-readdir.c: Move from scaffold/tests/99-readdir.c. * lib/tests/dirent/readdir.dir: Move from scaffold/tests/readdir.dir. * lib/tests/io/90-stat.c: Move from scaffold/tests/92-stat.c. * lib/tests/mes/30-oputs.c: Move from scaffold/tests/31-oputs.c. * lib/tests/mes/50-itoa.c: Move from scaffold/tests/51-itoa.c. * lib/tests/posix/90-unsetenv.c: Move from scaffold/tests/94-unsetenv.c. * lib/tests/setjmp/80-setjmp.c: Move from scaffold/tests/80-setjmp.c. * lib/tests/signal/90-signal.c: Move from scaffold/tests/95-signal.c. * lib/tests/stdio/70-printf-hello.c: Move from scaffold/tests/70-printf-hello.c. * lib/tests/stdio/70-printf-simple.c: Move from scaffold/tests/70-printf-simple.c. * lib/tests/stdio/70-printf.c: Move from scaffold/tests/70-printf.c. * lib/tests/stdio/80-sscanf.c: Move from scaffold/tests/87-sscanf.c. * lib/tests/stdio/90-fopen-append.c: Move from scaffold/tests/98-fopen.c. * lib/tests/stdio/90-fopen.c: Move from scaffold/tests/97-fopen.c. * lib/tests/stdio/90-fread-fwrite.c: Move from scaffold/tests/93-fread-fwrite.c. * lib/tests/stdio/90-fseek.c: Move from scaffold/tests/91-fseek.c. * lib/tests/stdlib/50-getenv.c: Move from lib/tests/stdlib/getenv.c. * lib/tests/stdlib/50-malloc.c: Move from lib/tests/stdlib/malloc.c. * lib/tests/stdlib/70-strtoull.c: Move from scaffold/tests/7j-strtoull.c. * lib/tests/stdlib/80-qsort-dupes.c: Move from scaffold/tests/81-qsort-dupes.c. * lib/tests/stdlib/80-qsort.c: Move from scaffold/tests/81-qsort.c. * lib/tests/stdlib/90-strtol.c: Move from scaffold/tests/96-strto.c. * lib/tests/string/30-strlen.c: Move from scaffold/tests/30-strlen.c. * lib/tests/string/50-strcmp.c: Move from scaffold/tests/51-strcmp.c. * lib/tests/string/50-strcpy.c: Move from scaffold/tests/53-strcpy.c. * lib/tests/string/50-strncmp.c: Move from scaffold/tests/51-strncmp.c. * lib/tests/string/70-strchr.c: Move from scaffold/tests/70-strchr.c. * lib/tests/string/80-strncpy.c: Move from scaffold/tests/86-strncpy.c. * lib/tests/string/80-strrchr.c: Move from scaffold/tests/88-strrchr.c. * lib/tests/string/90-snprintf.c: Move from scaffold/tests/9a-snprintf.c. * lib/tests/string/90-strpbrk.c: Move from scaffold/tests/90-strpbrk.c. * lib/tests/string/90-strspn.c: Move from scaffold/tests/90-strspn.c. 2019-02-24 Jan Nieuwenhuizen mescc: Mes C Library: Start test suite. TODO: move strict libc tests from scaffold/test/* here. * lib/tests/stdlib/getenv.c: New file. * lib/tests/stdlib/malloc.c: Move from scaffold. * build-aux/bootstrap.sh.in: Built them. * build-aux/build-mes.sh: Likewise. 2019-02-24 Jan Nieuwenhuizen mes: Remove stray debugging newline output. * mes/module/mes/guile.mes (open-input-file): Move debugging newline into debug clause. mescc: Mes C Library: Fix brk return type compare. * lib/stdlib/malloc.c (malloc): Fix brk return type compare. core: Rename load_env to read_boot. * src/mes.c (read_boot): Rename from load_env; Update users. (open_boot): Rename from load_boot; Update users. 2019-02-10 Jan Nieuwenhuizen core: Initialize g_buf dynamically, add MES_STRING_MAX override. * src/mes.c (g_buf, MAX_STRING): Move from strings.c. (gc_init_cells): Initialize g_buf dynamically. (main): Add environment override MES_MAX_STRING for MAX_STRING. * doc/mes.texi (Environment Variables): Document it. 2019-02-03 Jan Nieuwenhuizen mes-snarf: rewrite for development-time snarfing * build-aux/mes-snarf.scm (%gcc?): Remove. (symbol->header): Produce code for src/builtins.h. (symbol->source, symbol->names, function->environment): Remove. (snarf-symbols): Rewrite, snarf from init_symbol (...). (function->source): Produce code to be manually put into (main): Remove --mes option. 2019-02-15 Jan Nieuwenhuizen core: Resurrect POSIX build. Thanks, gio! * lib/libmes.c[POSIX]: Define and initialize g_stdin, g_stdout and g_stderr that were moved to crt1 for non-POSIX builds. * src/mes.c[POSIX]: Remove struct-initialisation exceptions. 2019-01-04 Jan Nieuwenhuizen core: Remove struct definitions for builtins, drop snarfing. After making a change to the list of builtin functions, run cat src/*.i and move the into src/mes.c:mes_builtins () and, or also after changing the list of fixed symbols in src/mes.c:mes_symbols (), do cat src/*.h > src/builtins.h * build-aux/build.sh.in: Remove snarfing. * build-aux/bootstrap.sh.in: Likewise. * mes/module/mes/display.mes (display): * mes/module/mes/type-0.mes (cell:type-alist): Remove . (function?, builtin?): Remove. * src/builtins.h: New file. * src/mes.c (TFUNCTION): Remove. (struct function): Remove. (apply_builtin): Rewrite from call. (mes_builtins): Rewrite. (init_builtin, make_builtin_type, make_builtin, builtin_name, builtin_arity, builtin, builtin_p, builtin_printer): New function. 2019-01-04 Jan Nieuwenhuizen core: Remove struct definitions for cells, drop snarfing for symbols. * src/mes.c (init_symbol): New function. (mes_symbols): Use it. (scm_nil, ... scm_test): Remove. 2018-12-27 Jan Nieuwenhuizen mes: Add take-while. * mes/module/srfi/srfi-1.mes (take-while): New function. 2018-12-26 Jan Nieuwenhuizen mescc: Enhance POSIX command-line support, e.g. -DFOO=1. * module/mescc.scm (unclump-single): New function. (main): Use it to support -DFOO=bar, and equivalent. 2018-12-27 Jan Nieuwenhuizen build: Support running out-of-tree. * build-aux/pre-inst-env.in (MES_PREFIX): Use absolute name. core: Remove string debugging. * src/strings.c (make_bytes, make_string, string_equal_p, symbol_to_string, symbol_to_keyword, make_symbol): Remove string debugging. core: Remove --dump, --load. * mes/module/mes/boot-0.scm.in (tty?): Remove --dump, --load. * src/mes.c (bload_env): Remove. * src/reader.c (dump): Remove. 2018-12-16 Jan Nieuwenhuizen doc: Post-release update. * doc/announce/ANNOUNCE-0.19: Update. Release 0.19. * configure (VERSION): Update to 0.19. (main): Likewise. * configure.sh (VERSION): Likewise. * guix/git/mes.scm (mes, mes.git): Likewise. 2018-10-20 Jan Nieuwenhuizen doc: Release update. * AUTHORS: Update. * HACKING: Update. * NEWS: Update. * doc/mes.guix: Update. * scripts/mescc.in: Update. * mes/module/mes/boot-0.scm.in: Update. * doc/announce/ANNOUNCE-0.19: New file. 2018-12-15 Jan Nieuwenhuizen mes: assq-ref, assoc-ref: Support alist == #f. * mes/module/mes/scm.mes (assq-ref): Support alist == #f. (assoc-ref): Likewise. core: Bump MAX_STRING to 524288 * src/strings.c (MAX_STRING): Bump to 524288. (assert_max_string): New function. (list_to_cstring, string_append, read_string): Use it. * src/reader.c (reader_read_string): Use it. 2018-12-14 Jan Nieuwenhuizen mescc: Support Bash: Add getppid. * lib/linux/gnu.c (getppid): New function. * include/linux/x86/syscall.h (SYS_getppid): New macro. * include/linux/x86_64/syscall.h (SYS_getppid): New macro. mescc: Support bash: Add sigdelset stub. * lib/stub/sigdelset.c (sigdelset): New stub. * lib/libc+gnu.c: Include it. 2018-12-07 Jan Nieuwenhuizen mescc: getcwd: Support getcwd (0, 0) GNU extension. * lib/linux/libc.c (_getcwd): Rename from getcwd. (_getcwd): New function. Support getcwd (0, 0) GNU extension. 2018-12-02 Jan Nieuwenhuizen mescc: Replace \r in comments. * module/mescc/compile.scm (ast->comment): Replace \r in comments. 2018-11-24 Jan Nieuwenhuizen build: Support building with Gash. * build-aux/install.sh: Replace variables with substitution. * build-aux/bootstrap.sh: New file. * configure: Substitute it. * configure.sh: Likewise. Be friendly to Gash. * .gitignore: Ignore it. 2018-11-25 Jan Nieuwenhuizen mescc: Run without shell. * mes/module/mescc.mes: New file. * module/mescc.scm: Include it. * scripts/mescc.scm.in: New file. * scripts/mescc.in: Use it; Make pure shell. * configure: Substitute it. * configure.sh: Substitute it. * build-aux/install.sh.in: Install it. 2018-11-15 Jan Nieuwenhuizen core: Add string-ref. * src/strings.c (string_ref): New function. * mes/module/mes/scm.mes (string-ref): Remove. core: Add string-length. * src/strings.c (string_length): New function. * mes/module/mes/scm.mes (string-length): Remove. core: Add string-append. * src/strings.c (string_append): New function. * mes/module/mes/boot-0.scm.in (string-append): Remove. * mes/module/mes/boot-03.scm (string-append): Remove. * scaffold/boot/50-make-string.scm (string-append): Remove. * scaffold/boot/50-string-append.scm (string-append): Remove. * scaffold/boot/50-string-join.scm (string-append): Remove. * scaffold/boot/51-module.scm (string-append): Remove. * scaffold/boot/52-define-module.scm (string-append): Remove. * tests/macro.test (string-append): Remove. * scaffold/boot/17-string-append.scm: Move from 50-string-append.scm. 2018-11-11 Jan Nieuwenhuizen core: String as array of bytes. * src/strings.c: New file. * src/mes.c: Use it. Update users. 2018-11-25 Jan Nieuwenhuizen mescc: Move mecmp to libc. * lib/libc.c: Include mecmp.c. * lib/libc+tcc.c: Remove mecmp.c include. 2018-11-15 Jan Nieuwenhuizen mescc: Move memchr to libc. * lib/libc.c: Include memchr.c. test: Use write instead of display. * module/mes/test.scm (seq?, sequal?, seq2?, sless?, sequal2?): Use write for expected, actual. 2018-11-14 Jan Nieuwenhuizen core: struct_set_: Oops typo. * src/struct.c (struct_set_x_): Oops, remove indirection. mes: Remove copy of make-string. * mes/module/mes/guile.mes (make-string): Remove copy. mescc: Compile fixes. * include/libmes-mini.h[WITH_GLIBC]: Do not declare strlen, write, types. 2018-11-11 Jan Nieuwenhuizen mes: Oops, %moduledir debug info. * mes/module/mes/boot-0.scm.in: Oops, %moduledir debug info. build: configure: Support Mes. * configure: Support Mes. mes; Add read-line. * mes/module/mes/guile.mes (read-line): New function. mes: dirname: Fix for absolute file names. * mes/module/mes/guile.mes (dirname): Fix absolute files. mes: Add file-exists?. * mes/module/mes/guile.mes (file-exists?): New function. mes: Add with-error-to-file. * mes/module/mes/guile.mes (with-error-to-file): New function. mes: Add string-downcase, string-upcase, string-tokenize. * mes/module/srfi/srfi-13.mes (string-downcase, string-upcase, string-tokenize): New function. mes: Add char-downcase, char-upcase. * mes/module/srfi/srfi-14.mes (char-downcase, char-upcase): New function. mes: Add char-set:digit, char-set:lower-case, char-set:upper-case. * mes/module/srfi/srfi-14.mes (char-set:digit, char-set:lower-case, char-set:upper-case): New variable. mes: Add char-set-adjoin, char-set-complement. * mes/module/srfi/srfi-14.mes (char-set-adjoin, char-set-complement): New function. mes: system*: Support redirection. * mes/module/mes/posix.mes (system*): Support redirection. core: read_string: Allow for gc. * src/posix.c (read_char): Add optional port parameter. (read_string): Allow for gc. core: Add delete_file. * src/posix.c (delete_file): New function. core: Add dup, dup2. * src/posix.c (dup_, dup2_): New function. core: Add getcwd. * src/posix.c (getcwd_): New function. core: Support redirection of stderr. * include/libmes-mini.h (g_stderr): New global. * lib/mes/eputc.c (eputc): Use it. * lib/mes/eputs.c (eputs): Likewise. * lib/mes/oputc.c (oputc): Likewise. * lib/mes/oputs.c (oputs): Likewise. * src/lib.c (display_error_, write_error_): Likewise. * src/posix.c (write_byte): Likewise. * src/mes.c (mes_builtins): Likewise. (main): Iniitalize g_stderr. * src/posix.c (current_error_port, set_current_error_port): New function. * mes/module/mes/boot-0.scm.in (current-output-port, current-error-port): Remove. core: Assert g_free in alloc. * src/mes.c (alloc): Assert g_free. mescc: unlink: Move to libc. * lib/linux/libc.c (unlink): New function. * lib/linux/tcc.c (unlink): Remove. mescc: dup, dup2: Move to libc. * lib/linux/libc.c (dup, dup2): New function. * lib/linux/gnu.c (dup, dup2): Remove. mescc: getcwd: Move to libc. * lib/linux/libc.c (getcwd): New function. * lib/linux/tcc.c (getcwd): Remove. 2018-11-10 Jan Nieuwenhuizen mescc: Support GNU make with POSIX. * include/linux/x86/syscall.h (SYS_sigprocmask): New macro. * include/linux/x86_64/syscall.h (SYS_rt_sigprocmask): New macro. * include/signal.h (SIG_BLOCK, SIG_UNBLOCK, SIG_SETMASK): New macro. (sigprocmask): Declare. * lib/linux/gnu.c (sigprocmask): New function. 2018-11-09 Jan Nieuwenhuizen mescc: Support GNU Bash. * include/errno.h (EACCES, ENOSPC, ESPIPE): New macro. * include/linux/x86/syscall.h (SYS_setuid, SYS_geteuid, SYS_getegid, SYS_setgid): New macro. * include/linux/x86_64/syscall.h: Likewise. * include/stdint.h (LLONG_MIN, LLONG_MAX, SIZE_MAX): New macro. * include/sys/stat.h (S_ISUID, S_ISGID, S_IXGRP, S_IXOTH, S_IRGRP, S_IROTH, S_IWGRP, S_IWOTH, S_IRWXG, S_IRWXO): New macro. * include/termio.h: New file. * include/unistd.h (_POSIX_VERSION): New macro. * lib/linux/gnu.c (geteuid, getegid, setuid, setgid): New function. * lib/string/memchr.c: New file. * lib/stub/getpwuid.c: New file. * lib/stub/rand.c: New file. * lib/stub/ttyname.c: New file. * include/string.h (memchr): Declare. * include/unistd.h (geteuid, getegid, setuid, setgid): Declare. 2018-11-06 Jan Nieuwenhuizen build: Simplify: cater for one compiler at a time. * build-aux/build-cc.sh: Remove. * build-aux/build-cc32.sh: Remove. * build-aux/build-cc64.sh: Remove. * build-aux/build-x86_64-mes.sh: Remove. * build-aux/cc-mes.sh: Remove. * build-aux/cc-x86_64-mes.sh: Remove. * build-aux/cc32-mes.sh: Remove. * build-aux/cc64-mes.sh: Remove. * build-aux/test64.sh: Remove. * build-aux/bootstrap-mes.sh: New file. * build-aux/config.make.in: New file. * build-aux/config.status.in: New file. * build-aux/test-cc.sh: New file. * .gitignore: Update. * build-aux/GNUmakefile.in: Update. * build-aux/build-guile.sh: Update. * build-aux/build-mes.sh: Update. * build-aux/build.sh.in: Update. * build-aux/cc.sh: Update. * build-aux/check-boot.sh: Update. * build-aux/check-mes.sh: Update. * build-aux/check-mescc.sh: Update. * build-aux/check-tcc.sh: Update. * build-aux/check.sh.in: Update. * build-aux/config.sh: Update. * build-aux/export.make: Update. * build-aux/install.sh.in: Update. * build-aux/pre-inst-env.in: Update. * build-aux/test.sh: Update. * build-aux/uninstall.sh.in: Update. * configure: Update. * configure.sh: Update. * module/mescc/i386/as.scm: Update. * module/mescc/preprocess.scm: Update. * module/mescc/x86_64/as.scm: Update. * scripts/mescc.in: Update. * tests/psyntax.test: Update. 2018-11-09 Jan Nieuwenhuizen mescc: Add missing define. * lib/x86-mes/x86.M1: Add missing define. 2018-11-08 Jan Nieuwenhuizen mescc: Exit if library cannot be found. * module/mescc/mescc.scm (arch-find): Exit upon failure. mescc: Accept -O, --std, -x. * scripts/mescc.in (parse-opts): Accept -O, --std, -x. mescc: Support -dumpmachine. * scripts/mescc.in (parse-opts): Support -dumpmachine. 2018-10-22 Jan Nieuwenhuizen mescc: vsnprintf: Compliant implementation. * lib/stdio/vsnprintf.c (vsnprintf): New, complient implementation, replacing vsnprint. * lib/stdio/vsprintf.c (vsnprint): Forward to vsnprint. * lib/stdio/snprintf.c (snprintf): Likewise. * scaffold/tests/9a-snprintf.c: Test it. * build-aux/check-mescc.sh (tests): Run it. 2018-10-21 Jan Nieuwenhuizen test: Add performance test. * module/mes/test.scm (pass-if-timeout): New macro. * tests/perform.test: New test. * build-aux/check-mes.sh (tests): Run it. mes: Add ceil, floor, round, inexact->exact. * mes/module/mes/scm.mes (ceil, floor, round, inexact->exact, exact->inexact): New function. mes: read-string: Take optional port argument. * src/posix.c (read_string): Take optional port argument. * mes/module/mes/guile.mes (read-string): Remove. core: eval_apply: Order gotos according to frequency. * src/mes.c (eval_apply): Order gotos according to frequency. Revert "core: eval_apply profile." This reverts commit d61e6be0b18459a8e3c262eab448b428dc81937a. core: eval_apply profile. * src/mes.c: Poor man's eval_apply profile. 2018-10-20 Jan Nieuwenhuizen core: Fix displaying of closure. * src/lib.c (display_helper): Fix displaying of closure. mes: Print backtrace upon exception. * mes/module/mes/catch.mes (display-backtrace, frame-function): New function. (%eh): Use them. core: Set procedure in stack frame. * src/mes.c (eval_apply): Set procedure in stack frame. core: Implement stack and frame. * src/lib.c (frame_printer make_frame_type, make_frame, make_stack_type, make_stack, stack_length, stack_ref): New function. core: Support time functions. * lib/linux/clock_gettime.c: New file, move from gnu.c. * lib/linux/gettimeofday.c: New file, move from tcc.c. * lib/linux/time.c: New file, move from tcc.c. * lib/linux/libc.c: Include them. * lib/linux/gnu.c (clock_gettime): Remove. * lib/linux/tcc.c (time, gettimeofday): Remove. * include/time.h (CLOCK_PROCESS_CPUTIME_ID): New define. * src/posix.c (init_time, current_time, gettimeofday_, seconds_and_nanoseconds_to_long, get_internal_run_time): New function. * src/mes.c (scm_symbol_internal_time_units_per_second): New symbol. (main): Call init_time. 2018-10-18 Jan Nieuwenhuizen core: Use hash table for symbols. * src/mes.c (mes_symbols): Use hash table for symbols. Update users. 2018-10-19 Jan Nieuwenhuizen core: Use assert before failure exit. * src/mes.c (error): Use assert before failure exit. Helps debugging. 2018-10-18 Jan Nieuwenhuizen core: Add hashq_get_handle, hash, hash_ref, hash_set_x. * src/mes.c (scm_symbol_hashq_table, scm_symbol_record_type, scm_symbol_module, scm_symbol_buckets, scm_symbol_size): New symbols. Update users. * src/hash.c (hash_list_of_char): Rename from hashq_. Respect size, update callers. (hashq_, hash_ hash, hashq_get_handle, hash_ref, hash_set_x_, hash_set_x): New function. (hashq_ref): Do not return handle. Update callers. mes: Move pair? to core. * src/lib.c (pair_p): New function. Gains 8% performance on MesCC. 2018-10-19 Jan Nieuwenhuizen mes: Move assoc to core. * mes/mes.c (assoc_string, assoc): New function. * mes/module/mes/scm.mes (assoc): Remove. Gains 12% performance for MesCC. 2018-10-20 Jan Nieuwenhuizen Revert "core: Add gc-debug for stack array." This reverts commit f35084d1dbea889d107824e7596da1701c6b90ad. 2018-10-19 Jan Nieuwenhuizen core: Add gc-debug for stack array. * src/gc.c (gc_debug): New function. scaffold: Resurrect mini-mes. * src/mini-mes.c: Resurrect. 2017-12-14 Jan Nieuwenhuizen core: Use array-based stack. * src/mes.c (STACK_SIZE)[MES_ARRAY_STACK]: New variable. (g_stack_array): New variable. (g_stack): Change type to SCM*. (gc_push_frame)[MES_ARRAY_STACK]: Use g_stack_array, g_stack. (gc_peek_frame): Likewise. (gc_pop_frame): Likewise. * src/gc.c (gc_check): Likewise. (gc): Likewise. 2018-10-17 Jan Nieuwenhuizen mes: Resurrect Guile-1.8 support. * module/mes/mes-0.scm: Resurrect Guile-1.8 support. 2018-10-16 Jan Nieuwenhuizen core: expand_variable: Remove weird exceptions: begin, if. * src/mes.c (expand_variable_): Remove weird exceptions: begin, if. 2018-10-15 Jan Nieuwenhuizen mes: Switch to srfi-9 based on structs. * mes/module/srfi/srfi-9.mes: Swap symlink to srfi-9-struct.mes. * mes/module/srfi/srfi-9/gnu.mes: Swap symlink to gnu-struct.mes. * src/module.c (make_module_type): Update to match srfi-9-struct records. Update users. * src/hash.c (make_hashq_type): Likewise. mes: srfi-9: Add implementation based on struct. * mes/module/srfi/srfi-9-struct.mes: New file. * mes/module/srfi/srfi-9-vector.mes: Rename from srfi-9.mes * mes/module/srfi/srfi-9.mes: Symlink to srfi-9-vector.mes. * mes/module/srfi/srfi-9/gnu-struct.mes: Add srfi-9-struct implementation. * mes/module/srfi/srfi-9/gnu-vector.mes: Rename from gnu.mes. * mes/module/srfi/srfi-9/gnu.mes: Symlink to gnu-vector.mes. core: hashq-table: Refactor to be a record-like struct. * src/hash.c (hash_table_printer): New function. (make_hashq_type): New function. * src/module.c (module_printer): Use it. (make_module_type): New function. (make_initial_module): Use them. mescc: Mes C Library: oputs: New function. * lib/mes/oputc.c: New file. * lib/libmes.c: Include it. * include/libmes.h: Declare it. core: Use hashq-table for macros. * src/mes.c (lookup_macro_): Remove. (macro_ref, get_macro, macro_set_x): New function. Update callers. core: Add hashq-table type. src/hash.c: New file. src/module.c (char_hash, module_hash): Remove. * src/module.c (make_initial_module): Use hash primitives. (module_define_x): Likewise. (module_variable): Likewise. * build-aux/snarf.sh: Snarf it. * src/mes.c: Include it. core: Add boot-module. * src/mes.c (scm_symbol_boot_module): New symbol. (eval_apply): Handle it. (mes_symbols): Initialize it. 2018-10-14 Jan Nieuwenhuizen core: Add module-define! * src/module.c (module_define_x, module_printer): New function. (make_initial_module): Use them. * tests/srfi-0.test: Test it. * src/mes.c (display_m0): Remove. Update callers. * mes/module/mes/fluids.mes (make-fluid): Rewrite. * tests/macro.test: Test it. * mes/module/mes/boot-0.scm.in (module-define!): Remove. * mes/module/mes/boot-02.scm: Likewise. * module/mes/misc.scm (pk, warn): New function. * build-aux/check-mes.sh (tests): Run tests. core: Add module indirection for variable lookup. * src/module.c (module_ref, module_variable): New function. * src/mes.c: Thoughout: Use them. (assq_ref_env): Remove. * mes/module/mes/boot-0.scm.in (defined?): Use module-variable. * mes/module/mes/boot-00.scm (defined?): Likewise. * mes/module/mes/boot-01.scm (defined?): Likewise. * mes/module/mes/boot-02.scm (defined?): Likewise. * scaffold/boot/53-closure-display.scm: Likewise. core: Add module type. * src/module.c: New file. * build-aux/snarf.sh: Snarf it. * src/mes.c: Include it. core: Add cstring_to_symbol. * src/mes.c (make_symbol): Rename from lookup_symbol_. Update callers. (cstring_to_symbol): New function. * src/reader.c (reader_read_identifier_or_number): Use it. 2018-10-13 Jan Nieuwenhuizen core: Add struct type. * src/struct.c: New file. * build-aux/snarf.sh: Snarf it. * src/mes.c: Include it. 2018-10-15 Jan Nieuwenhuizen build: factor-out snarfing. * build-aux/snarf.sh: New file. * build-aux/build-cc.sh: Use it. * build-aux/build-cc32.sh: Likewise. * build-aux/build-cc64.sh: Likewise. * build-aux/build-mes.sh: Likewise. * build-aux/build-x86_64-mes.sh: Likewise. * build-aux/snarf.sh: Likewise. core: core:cdr: Support port type. * src/mes.c (cdr_): Support port type. * mes/module/mes/display.mes (display): Add space between fields. mes: with-fluids: Fix reset. * mes/module/mes/fluids.mes (with-fluids): Fix reset. * tests/fluids.test (report): Remove Mes failure expectation. 2018-10-19 Jan Nieuwenhuizen mescc: Recognize U integer suffix. * module/mescc/compile.scm (cstring->int): Recognize U integer suffix. Thanks, Peter de Wachter! 2018-10-16 Peter De Wachter mescc: Add INTn_MIN/MAX defines to stdint.h. * include/stdint.h: Add INTn_MIN/MAX defines. Move integere size defines from limits.h * include/limits.h: Include it. 2018-10-16 Peter De Wachter mescc: Allow superfluous parentheses in function declarations. E.g.: int (f)(); This is obscure but valid C. It occurs in the csmith headers (thanks to macro shenanigans). * module/mescc/compile.scm (fctn-defn:get-name, fctn-defn:get-statement): Allow superfluous parentheses in function declarations. 2018-10-16 Peter De Wachter mescc: Implement unary plus operator. * module/mescc/compile.scm (ast->type, expr->register, try-expr->number):): Implement unary plus operator. mescc: Add missing assembly defines. * lib/x86-mes/x86.M1: Add missing assembly defines. * lib/x86_64-mes/x86_64.M1: Likewise. mescc: Delete duplicate assembly defines. * lib/x86-mes/x86.M1: Delete duplicate assembly defines. * lib/x86_64-mes/x86_64.M1: Likewise. 2018-10-16 Peter De Wachter mescc: Exit with non-zero exit code when subprocess fails. system* returns the result of waitpid. So, suppose that a subprocess fails with exit code 1. Then the waitpid return value will be 256. And exit(256) is equivalent to exit(0). Modified-by: Jan Nieuwenhuizen * mes/module/mes/posix.mes (status:exit-val): New function. * module/mescc/mescc.scm (assert-system*): Use it. 2018-10-12 Jan Nieuwenhuizen mescc: Oops typo. * module/mescc/M1.scm (hex2:immediate8): Typo. 2018-12-13 Jan Nieuwenhuizen core: Support \xNN in reader. Fixes tcc-boot running on Mes. * src/reader.c (reader_read_string): Support \xNN. Fixes Guix bootstrap chain; i.e., compilation of gcc-2.95.3 using tcc-boot. * tests/base.test ("reader: \\x08"): Test it. * scaffold/tests/17-compare-char.c: Likewise, for mescc. * build-aux/check-mescc.sh (tests): Run it. 2018-11-18 Jan Nieuwenhuizen build: configure: Make dot optional. * configure: Make dot optional. 2018-10-11 Jan Nieuwenhuizen build: Oops, remove stray lib/linux/x86_64-mes/crt1. * lib/linux/x86_64-mes/crt1: Remove. 2018-10-10 Jan Nieuwenhuizen build: x86_64 bootstrap build fixes and workaround. * configure: Substitute @arch@ (WAS: ARCH). Update users. * configure.sh: Substitute @arch@. * build-aux/build-mes.sh: Use $GUILE for x86_64 build. * build-aux/install.sh.in: Install mes.S, mes.x86_64-mes-S too. Prune *.E, *.out. 2018-10-08 Jan Nieuwenhuizen doc: Release update. mescc: Oops, delete wrong line of assembly. * lib/x86-mes/x86.M1 (movzbl_%bx,%ebx): Delete wrong line. Thanks, pdewacht! 2018-10-07 Jan Nieuwenhuizen admin: Release update. * doc/announce/ANNOUNCE-0.18: New file. * guix/git/mes.scm (mes): Update hash. 2018-10-04 Jan Nieuwenhuizen Release 0.18. * configure (VERSION): Update to 0.18. (main): Likewise. * configure.sh (VERSION): Likewise. * guix/git/mes.scm (mes, mes.git): Likewise. * guix/mescc-tools-boot.patch: New file. 2018-09-05 Jan Nieuwenhuizen doc: Release update. * BOOTSTRAP: Update. * HACKING: Update. * NEWS: Update. * README: Update. * doc/mes.texi (Submitting Patches): Fix misquoting, misattribution. 2018-10-07 Jan Nieuwenhuizen mescc: Another attempt at divide. * module/mescc/i386/as.scm (i386:r0/r1): Never be signed. Use div for unsigned. (i386:r0%r1): Likewise. * module/mescc/x86_64/as.scm (x86_64:r0/r1): Likewise. (x86_64:r0%r1): Likewise. * lib/x86-mes/x86.M1: Add div. * lib/x86_64-mes/x86_64.M1: Likewise. tests: Expect srfi-13 failure, MesCC more resembles Gcc. * tests/srfi-13.test (report): Expect INT-MIN failure for x86. 2018-10-06 Jan Nieuwenhuizen core: reader: Support 64 bit. * src/reader.c (reader_read_identifier_or_number): Support 64 bit. (reader_read_binary): Likewise. (reader_read_octal): Likewise. (reader_read_hex): Likewise. mescc: Mes C Library: Fix execve on x86_64. * include/linux/x86_64/syscall.h (SYS_execve): Typo. Fixes execve on x86_64. build: Support make seed for x86_64. * build-aux/GNUmakefile.in (seed): Support make seed for x86_64. * build-aux/build-mes.sh[SEED]: Also build src/mes.S. * build-aux/build-x86_64-mes.sh[SEED]: Also build src/mes.x86_64-mes.S. mes: Support fold-right 3. * mes/module/srfi/srfi-1.mes (fold-right): Support fold-right 3. * tests/srfi-1.test ("fold-right-3"): Test it. mescc: Nyacc comment escapes. * module/mescc/compile.scm (ast->comment): Nyacc comment escapes. mescc: Fix clobbering of struct by value assign. * module/mescc/x86_64/as.scm (long-r0->r1-mem): New instruction. * module/mescc/i386/as.scm: Likewise. * lib/x86_64-mes/x86_64.M1: Support it. * module/mescc/compile.scm (r0->r1-mem*n-): Fix clobbering. core: Add vector test. * scaffold/boot/11-vector.scm: New test. * build-aux/check-boot.sh: Run it. mescc: Fix obnoxious assignment ERROR message. * module/mescc/compile.scm (expression->register): Fix assignment ERROR message. core: Avoid 64bit zero divide. * src/math.c (divide): Avoid (64bit) 0 divide. (modulo): Likewise. mescc: Support negative divide. * module/mescc/i386/as.scm (i386:r0/r1, i386:r0%r1): Support negative divide. * module/mescc/x86_64/as.scm (x86_64:r0/r1, x86_64:r0%r1): Likewise. * lib/x86-mes/x86.M1: Likewise. * lib/x86_64-mes/x86_64.M1: Likewise. * scaffold/tests/a0-math-divide-signed-negative.c: Test it. * build-aux/check-mescc.sh (tests): Run it. mescc: Support --align, off by default. * scripts/mescc.in (parse-opts): Add --align. * module/mescc/mescc.scm (mescc:compile): Support --align, off by default. * module/mescc/M1.scm (infos->M1): Add #:align parameter. (M1:merge-infos): Likewise. Keep types. (info->M1): Likewise. Make alignment switchable. * module/mescc/compile.scm (r->ident): Do not clobber. (ident-add): Likewise. (clean-info): Keep types. * module/mescc/i386/as.scm (i386:r->byte-label): New instruction. * lib/x86-mes/x86.M1: Add instructions. * lib/x86_64-mes/x86_64.M1: Add instructions. * module/mescc/x86_64/as.scm (x86_64:r->byte-label, x86_64:r->word-label, x86_64:r->long-label): New instruction. Revert "mescc: Make globals at least reg-size." This reverts commit 30544316c35ed4a2472f2029beb27e007d913792. mescc: Make globals at least reg-size. * module/mescc/compile.scm (global->info): Make globals at least reg-size. mescc: Support 64-bit immediates. * module/mescc/M1.scm (hex2:address8, hex2:immediate8): New function. (info->M1): Support 64-bit. * module/mescc/compile.scm (convert-r0): FIXME! * module/mescc/x86_64/as.scm (x86_64:value->r, x86_64:r->local, x86_64:label->arg, x86_64:label->r, x86_64:r+value, x86_64:r-cmp-value, x86_64:r-long-mem-add, x86_64:r-and): Support 64-bit immediates. * lib/x86_64-mes/x86_64.M1: Likewise. * scaffold/tests/17-compare-unsigned-char-le.c: Test it. * scaffold/tests/17-compare-unsigned-short-le.c: Test it. * build-aux/check-mescc.sh (tests): Run them. core: Use proper name for %compiler. * src/mes.c (mes_symbols, bload_env): : Use proper name for %compiler. core: Resurrect MES_MINI for non-POSIX. src/mes.c[MES_MINI,!POSIX]: Resurrect. mescc: Mes C Library: Add ultoa. * lib/mes/ultoa.c: New file. * lib/libmes.c: Include it. * include/libmes.h: Declare ultoa. mescc: Mes C Library: Add ltoa. * lib/mes/ltoa.c: New file. * lib/libmes.c: Include it. * include/libmes.h: Declare ltoa. mescc: Fix truncation of short. * module/mescc/compile.scm (convert-r0): Typo. Fixes truncation of short. Thanks, pdewacht! * scaffold/tests/a0-call-trunc-char.c: New file. * scaffold/tests/a0-call-trunc-short.c: New file. * build-aux/check-mescc.sh: Add them. build: Split-off x86_mes-gcc build. * build-aux/build-cc64.sh: New file. * build-aux/build.sh.in[CC64]: Invoke it. * build-aux/build-cc.sh: Remove x86_64-mes-gcc build. * build-aux/GNUmakefile.in (x86_64-mes-gcc): New target. * build-aux/build-x86_64-mes.sh: Build all scafffold files. 2018-10-05 Jan Nieuwenhuizen build: Oops, use MES_LIBS. * build-aux/build-x86_64-mes.sh: Use MES_LIBS instead of the unused MES64_LIBS. Fixes build. Thanks, pdewacht! build: remove bashism. * build-aux/trace.sh (trace): Remove bashism. Thanks pdewacht! 2018-10-04 Jan Nieuwenhuizen core: Support x86_64. * src/lib.c: Support x86_64. * src/math.c: Likewise. * src/mes.c: Likewise. * src/reader.c: Likewise. * src/vector.c Likewise. build: Oops, set VERSION. * build-aux/install.sh.in (VERSION): New substituted variable. 2018-09-30 Jan Nieuwenhuizen build: Resurrect make seed. * build-aux/GNUmakefile.in (seed): Resurrect. * build-aux/build-x86_64-mes.sh: Build from seed. 2018-08-15 Jan Nieuwenhuizen mescc: x86_64 support: Refactor to abstracted assembly, add x86_64. * module/mescc/as.scm: Support abstracted assembly. * module/mescc/i386/as.scm: Rewrite. * module/mescc/x86_64/as.scm: Implement. * module/mescc/compile.scm: Refactor to abstracted assembly. * module/mescc/M1.scm: Update for partial 64 bit support. * module/mescc/bytevectors.scm (bytevector-u64-native-set!): New procedure. * module/mescc/i386/info.scm (i386:type-alist): Use 4 byte type length also for faking double, long long, long double. * module/mescc/info.scm:modified: * module/mescc/x86_64/info.scm (x86_64:registers): New variable. * lib/x86-mes/x86.M1: Update for new register scheme. * lib/x86_64-mes/x86_64.M1: Implement. * lib/x86-mes/setjmp.c: Implement. * lib/x86_64-mes-gcc/setjmp.c: Implement. * build-aux/build-cc.sh: Update for x86_64. * build-aux/build-cc32.sh: Likewise. * build-aux/build-mes.sh: Likewise. * build-aux/build-x86_64-mes.sh: Likewise. * build-aux/check-mescc.sh: Likewise. * build-aux/test64.sh: Likewise. * include/libmes.h: Likewise. * include/setjmp.h: Likewise. * include/signal.h: Likewise. * include/stdarg.h: Likewise. * include/sys/stat.h: Likewise. * include/sys/types.h: Likewise. * include/sys/wait.h: Likewise. * include/unistd.h: Likewise. * lib/libc+gnu.c: Likewise. * lib/libc+tcc.c: Likewise. * lib/linux/gnu.c: Likewise. * lib/linux/libc-mini.c: Likewise. * lib/linux/libc.c: Likewise. * lib/linux/tcc.c: Likewise. * lib/linux/x86_64-mes-gcc/mes.c: Likewise. * lib/linux/x86_64-mes/crt1.c: Likewise. * lib/mes/abtol.c: Likewise. * lib/posix/mktemp.c: Likewise. * lib/posix/wait.c: Likewise. * lib/stdio/fopen.c: Likewise. * lib/stdio/fputc.c: Likewise. * lib/stdio/fseek.c: Likewise. * lib/stdio/printf.c: Likewise. * lib/stdio/sprintf.c: Likewise. * lib/stdio/vfprintf.c: Likewise. * lib/stdio/vsprintf.c: Likewise. * lib/stdio/vsscanf.c: Likewise. * lib/stdlib/qsort.c: Likewise. * lib/x86-mes-gcc/setjmp.c: Likewise. * scaffold/tests/11-if-1.c: Likewise. * scaffold/tests/15-if-!f.c: Likewise. * scaffold/tests/16-if-t.c: Likewise. * scaffold/tests/21-char[].c: Likewise. * scaffold/tests/23-pointer.c: Likewise. * scaffold/tests/32-compare.c: Likewise. * scaffold/tests/33-and-or.c: Likewise. * scaffold/tests/34-pre-post.c: Likewise. * scaffold/tests/35-compare-char.c: Likewise. * scaffold/tests/36-compare-arithmetic.c: Likewise. * scaffold/tests/37-compare-assign.c: Likewise. * scaffold/tests/38-compare-call.c: Likewise. * scaffold/tests/40-if-else.c: Likewise. * scaffold/tests/41-?.c: Likewise. * scaffold/tests/42-goto-label.c: Likewise. * scaffold/tests/43-for-do-while.c: Likewise. * scaffold/tests/44-switch.c: Likewise. * scaffold/tests/45-void-call.c: Likewise. * scaffold/tests/46-function-static.c: Likewise. * scaffold/tests/51-strcmp.c: Likewise. * scaffold/tests/51-strncmp.c: Likewise. * scaffold/tests/53-strcpy.c: Likewise. * scaffold/tests/54-argv.c: Likewise. * scaffold/tests/60-math.c: Likewise. * scaffold/tests/61-array.c: Likewise. * scaffold/tests/63-struct-cell.c: Likewise. * scaffold/tests/64-make-cell.c: Likewise. * scaffold/tests/65-read.c: Likewise. * scaffold/tests/70-printf.c: Likewise. * scaffold/tests/71-struct-array.c: Likewise. * scaffold/tests/72-typedef-struct-def.c: Likewise. * scaffold/tests/74-multi-line-string.c: Likewise. * scaffold/tests/76-pointer-arithmetic.c: Likewise. * scaffold/tests/79-int-array.c: Likewise. * scaffold/tests/7a-struct-char-array.c: Likewise. * scaffold/tests/7b-struct-int-array.c: Likewise. * scaffold/tests/7i-struct-struct.c: Likewise. * scaffold/tests/7k-for-each-elem.c: Likewise. * scaffold/tests/7l-struct-any-size-array.c: Likewise. * scaffold/tests/7o-struct-pre-post.c: Likewise. * scaffold/tests/7q-bit-field.c: Likewise. * scaffold/tests/7s-struct-short.c: Likewise. * scaffold/tests/80-setjmp.c: Likewise. * scaffold/tests/81-qsort.c: Likewise. * scaffold/tests/85-sizeof.c: Likewise. * scaffold/tests/87-sscanf.c: Likewise. * scaffold/tests/90-strpbrk.c: Likewise. * scaffold/tests/91-fseek.c: Likewise. * scaffold/tests/95-signal.c: Likewise. * scaffold/tests/97-fopen.c: Likewise. * scaffold/tests/99-readdir.c: Likewise. * scaffold/tests/t.c: Likewise. * lib/linux/x86_64-mes/mes.c: New file. * lib/linux/x86_64-mes/mini.c: New file. * lib/x86_64-mes/setjmp.c: New file. * scaffold/tests/06-!call-1.c: New file. * scaffold/tests/06-call-2.c: New file. * scaffold/tests/06-call-variable.c: New file. * scaffold/tests/08-assign-global.c: New file. * scaffold/tests/08-assign-negative.c: New file. * scaffold/tests/17-compare-and-or.c: New file. * scaffold/tests/17-compare-and.c: New file. * scaffold/tests/17-compare-ge.c: New file. * scaffold/tests/17-compare-gt.c: New file. * scaffold/tests/17-compare-le.c: New file. * scaffold/tests/17-compare-lt.c: New file. * scaffold/tests/17-compare-or.c: New file. * scaffold/tests/17-compare-unsigned-ge.c: New file. * scaffold/tests/17-compare-unsigned-gt.c: New file. * scaffold/tests/17-compare-unsigned-le.c: New file. * scaffold/tests/17-compare-unsigned-lt.c: New file. * scaffold/tests/21-char[]-simple.c: New file. * scaffold/tests/23-global-pointer-init-null.c: New file. * scaffold/tests/23-global-pointer-init.c: New file. * scaffold/tests/23-global-pointer-pointer-ref.c: New file. * scaffold/tests/23-global-pointer-ref.c: New file. * scaffold/tests/23-pointer-sub.c: New file. * scaffold/tests/31-oputs.c: New file. * scaffold/tests/32-call-wrap.c: New file. * scaffold/tests/38-compare-call-2.c: New file. * scaffold/tests/38-compare-call-3.c: New file. * scaffold/tests/51-pointer-sub.c: New file. * scaffold/tests/54-argc.c: New file. * scaffold/tests/63-struct-array-assign.c: New file. * scaffold/tests/63-struct-array-compare.c: New file. * scaffold/tests/63-struct-array.c: New file. * scaffold/tests/63-struct-assign.c: New file. * scaffold/tests/63-struct-function.c: New file. * scaffold/tests/63-struct-local.c: New file. * scaffold/tests/63-struct-pointer.c: New file. * scaffold/tests/63-struct.c: New file. * scaffold/tests/70-printf-hello.c: New file. * scaffold/tests/70-printf-simple.c: New file. * scaffold/tests/70-stdarg.c: New file. * scaffold/tests/70-strchr.c: New file. * scaffold/tests/73-union-hello.c: New file. * scaffold/tests/76-pointer-arithmetic-pp.c: New file. * scaffold/tests/79-int-array-simple.c: New file. * scaffold/tests/7b-struct-int-array-hello.c: New file. * scaffold/tests/7b-struct-int-array-pointer.c: New file. * scaffold/tests/7i-struct-struct-simple.c: New file. * scaffold/tests/7k-for-each-elem-simple.c: New file. * scaffold/tests/7l-struct-any-size-array-simple.c: New file. * scaffold/tests/7o-struct-pre-post-simple.c: New file. * scaffold/tests/7q-bit-field-simple.c: New file. * scaffold/tests/90-strspn.c: New file. * scaffold/tests/06-call-string.c.: Rename from 31-eputs.c. * scaffold/tests/7t-function-destruct.c: Rename from 48-function-destruct.c. * scaffold/tests/48-global-static.c: Rename from 49-global-static.c. * scaffold/tests/55-char-array.c:renamed: Rename from 4a-char-array.c. * scaffold/tests/51-itoa.c:r Rename from 52-itoa.c. * include/signal.h:(struct sigaction): mescc: x86_64 support: Add tests. 2018-08-14 Jan Nieuwenhuizen mescc: Initial x86_64 support. make all-go && MES=guile ./pre-inst-env scripts/mescc -m64 -c scaffold/main.c mescc: Prepare for x86_64 support. * module/mescc/info.scm (info): Add allocated, registers. * module/mescc/i386/info.scm: New file. * build-aux/build-guile.sh (SCM_FILES): Add it. * module/mescc/compile.scm (c99-input->info): Add info parameter. (c99-ast->info): Likewise. (i386:type-alist): Remove. (alloc-register, free-register): New function. (expr->register*): Rename from expr->accu*. Update callers. (expr->accu): Rename from expr->accu. Update callers. * module/mescc/mescc.scm(%info): New variable. * module/mescc/mescc.scm (c->ast): Use it. (mescc:compile): Likewise. (E->info): Likewise. 2018-09-16 Jan Nieuwenhuizen emacs: Add disassembly helpers. * .dir-locals.el (as-32, as-64): Add disassembly helpers. 2018-09-11 Jan Nieuwenhuizen guix: nyacc-for-mes: Update to 0.86.0. * guix/git/mes.scm (nyacc-for-mes): Update to 0.86.0 plus fix binary literals. mescc: Support gcc-3.0: Locale header fix. * include/locale.h (LC_ALL, LC_NUMERIC): Numbers, not strings. (LC_COLLATE, LC_CTYPE): New macro. 2018-09-09 Jan Nieuwenhuizen build: Oops, fix ./check.sh for bootstrap build. * build-aux/config.sh (top_builddir): Set default to `.'. 2018-09-05 Jan Nieuwenhuizen guix: nyacc-for-mes: Update to 0.85.3. * guix/git/mes.scm (nyacc-for-mes): Update to 0.85.3. mes: Support Nyacc 0.85.3: Integrate progress. * mes/module/nyacc/lang/sx-util.mes: New file. * mes/module/nyacc/version.mes: New file. * mes/module/nyacc/lang/c99/cpp.mes (nyacc): Include them. * mes/module/nyacc/lang/c99/parser.mes (nyacc): Include them. * module/mescc/preprocess.scm (need-progress): New function. (progress): New function. (insert-progress-monitors): Use them to Integrate progress. mes: Support Nyacc 0.85.3: Add char-set-copy. * mes/module/srfi/srfi-14.mes (char-set-copy): New function> 2018-09-04 Jan Nieuwenhuizen doc: Update bootstrap graph. * doc/images/gcc-mesboot-graph.dot: Regenerate. * build-aux/GNUmakefile.in (doc/mes.info): Oops change dependency to .png. * doc/mes.texi (The Mes Bootstrap Process): Update image and wording. guix: Update hash. * guix/git/mes.scm (mes): Update hash. 2018-09-03 Jan Nieuwenhuizen Release 0.17.1. * configure (VERSION): Update to 0.17.1. (main): Likewise. * configure.sh (VERSION): Likewise. * build-aux/GNUmakefile.in (gen-announce): Likewise. * guix/git/mes.scm (mes, mes.git): Likewise. 2018-08-09 Jan Nieuwenhuizen doc: Release update. * HACKING (prefix): Update. * INSTALL (http): Update. * NEWS: Update. * README (C-compiler): Update. * doc/announce/ANNOUNCE-0.17: Update. 2018-09-03 Jan Nieuwenhuizen build: ALlow releasing from worktree. * build-aux/GNUmakefile.in (COMMIT): Check for .git file. 2018-09-01 Jan Nieuwenhuizen mescc: Mes C Library: Do not redefine size_t. * include/stddef.h: Do not redefine size_t. 2018-08-27 Jan Nieuwenhuizen mescc: Mes C Library: Support make 3.80: Add setlocale, sigaddset. * include/limits.h (ULONG_MAX): New macro. * include/locale.h (LC_ALL, LC_NUMERIC): New macro. * lib/stub/setlocale.c: New file. * lib/stub/sigaddset.c: New file. * lib/libc+gnu.c: Include them. mescc: Mes C Library: Fix qsort to support duplicate entries. * lib/stdlib/qsort.c (qpart): Handle dupes. * scaffold/tests/81-qsort-dupes.c: New file. * build-aux/check-mescc.sh (tests): Run it. 2018-08-26 Jan Nieuwenhuizen mescc: Mes C Library: Support make: Implement clock_gettime, time. * include/linux/x86/syscall.h (SYS_time, SYS_clock_gettime, SYS_gettimeofday): New macro. * include/linux/x86_64/syscall.h (SYS_time, SYS_clock_gettime, SYS_gettimeofday): New macro. * lib/linux/tcc.c (gettimeofday, time): New function. * lib/linux/gnu.c (clock_gettime): New function. * include/time.h: Declare it. * lib/stub/gettimeofday.c: Remove. * lib/stub/time.c: Remove. mescc: Mes C Library: Support make: Support main with envp. * lib/linux/x86-mes-gcc/crt1.c (_start): Also push envp. * lib/linux/x86-mes/crt1.c (_start): Also push envp. * lib/linux/x86_64-mes-gcc/crt1.c (_start): Also mov environment,%rdx. mescc: Mes C Library: Support make: Add chdir, getlogin, setvbuf, sigblock. * lib/stub/getlogin.c: New file. * lib/stub/setvbuf.c: New file. * lib/stub/sigblock.c: New file. * lib/libc+gnu.c: Include them. * include/linux/x86/syscall.h (SYS_chdir): New macro. * include/linux/x86_64/syscall.h (SYS_chdir): New macro. * include/stdio.h (_IOFBF, _IOLBF, _IONBF): New macro. * include/errno.h (ENOEXEC, ECHILD): New macro. * include/sys/wait.h (WNOHANG): New macro. * lib/linux/gnu.c (chdir): New function. * include/ar.h: New file. mescc: Mes C Library: Support diffutils: Add execl. * include/limits.h (CHAR_MAX): New macro. * lib/posix/execl.c: New file. * include/unistd.h: Declare it. mescc: Mes C Library: Add closedir, opendir, readdir. * include/dirent.h: New file. Import from glibc-2.2.5. * include/dirstream.h: Likewise. * lib/dirent/__getdirentries.c: Likewise. * lib/dirent/closedir.c: Likewise. * lib/dirent/readdir.c (readdir): Likewise. * lib/libc+gnu.c: Include them. * include/linux/x86/syscall.h (SYS_getdents): New macro. * include/linux/x86_64/syscall.h (SYS_getdents): Likewise. * lib/linux/gnu.c (getdents): New function. * include/limits.h (NAME_MAX): New macro. * include/fcntl.h (O_DIRECTORY): New macro. * scaffold/tests/readdir.dir: New directory. * scaffold/tests/99-readdir.c: New file, use it. * build-aux/check-mescc.sh (tests): Run it. 2018-08-21 Jan Nieuwenhuizen mescc: Mes C Library: Move strncmp to own test. * scaffold/tests/51-strcmp.c: Remove strncmp tests. * scaffold/tests/51-strncmp.c: New file. * build-aux/check-mescc.sh (tests): Add it. 2018-08-19 Jan Nieuwenhuizen test: Cleanup includes. * scaffold/tests/30-strlen.c: Include only libmes-mini.h * scaffold/tests/31-eputs.c: Likewise. * scaffold/tests/32-compare.c: Likewise. * scaffold/tests/33-and-or.c: Likewise. * scaffold/tests/34-pre-post.c: Likewise. * scaffold/tests/35-compare-char.c: Likewise. * scaffold/tests/36-compare-arithmetic.c: Likewise. * scaffold/tests/37-compare-assign.c: Likewise. * scaffold/tests/38-compare-call.c: Likewise. * scaffold/tests/40-if-else.c: Likewise. * scaffold/tests/41-?.c: Likewise. * scaffold/tests/42-goto-label.c: Likewise. * scaffold/tests/43-for-do-while.c: Likewise. * scaffold/tests/44-switch.c: Likewise. * scaffold/tests/45-void-call.c: Likewise. mescc: Cleanup includes. * include/libmes-mini.h: New file. * include/libmes.h: Use it. 2018-08-15 Jan Nieuwenhuizen mescc: Add dir to include path. * module/mescc/mescc.scm (preprocess): Add dir to include path. (c->info): Likewise. * scaffold/tests/08-assign.c: New file. 2018-08-16 Jan Nieuwenhuizen check-mescc: c-mini 2018-08-24 Jan Nieuwenhuizen mescc: Mes C Library: Explode libc+gnu.c. * modified: include/math.h: Add declarations. * lib/posix/getopt.c: Rename from lib/getopt.c. * lib/gcc.c: Remove. * lib/m4.c: Remove. * lib/ctype/isalnum.c: New file, explode from libc+gnu.c. * lib/ctype/isalpha.c: Likewise. * lib/ctype/isascii.c: Likewise. * lib/ctype/iscntrl.c: Likewise. * lib/ctype/isnumber.c: Likewise. * lib/ctype/isprint.c: Likewise. * lib/ctype/ispunct.c: Likewise. * lib/math/fabs.c: Likewise. * lib/posix/alarm.c: Likewise. * lib/posix/mktemp.c: Likewise. * lib/posix/raise.c: Likewise. * lib/posix/sbrk.c: Likewise. * lib/posix/sleep.c: Likewise. * lib/posix/unsetenv.c: Likewise. * lib/stdio/clearerr.c: Likewise. * lib/stdio/fdgets.c: Likewise. * lib/stdio/feof.c: Likewise. * lib/stdio/fgets.c: Likewise. * lib/stdio/fileno.c: Likewise. * lib/stdio/freeopen.c: Likewise. * lib/stdio/freopen.c: Likewise. * lib/stdio/perror.c: Likewise. * lib/stdlib/__exit.c: Likewise. * lib/stdlib/abs.c: Likewise. * lib/stdlib/atexit.c: Likewise. * lib/stdlib/atol.c: Likewise. * lib/stdlib/bsearch.c: Likewise. * lib/stdlib/mbstowcs.c: Likewise. * lib/string/bcmp.c: Likewise. * lib/string/bcopy.c: Likewise. * lib/string/bzero.c: Likewise. * lib/string/index.c: Likewise. * lib/string/rindex.c: Likewise. * lib/string/strcspn.c: Likewise. * lib/string/strdup.c: Likewise. * lib/string/strerror.c: Likewise. * lib/string/strncat.c: Likewise. * lib/string/strpbrk.c: Likewise. * lib/string/strspn.c: Likewise. * lib/stub/__cleanup.c: Likewise. * lib/stub/atof.c: Likewise. * lib/stub/chown.c: Likewise. * lib/stub/ctime.c: Likewise. * lib/stub/fpurge.c: Likewise. * lib/stub/freadahead.c: Likewise. * lib/stub/frexp.c: Likewise. * lib/stub/fscanf.c: Likewise. * lib/stub/getpwnam.c: Likewise. * lib/stub/gmtime.c: Likewise. * lib/stub/pclose.c: Likewise. * lib/stub/popen.c: Likewise. * lib/stub/rewind.c: Likewise. * lib/stub/setbuf.c: Likewise. * lib/stub/sigsetmask.c: Likewise. * lib/stub/strftime.c: Likewise. * lib/stub/sys_siglist.c: Likewise. * lib/stub/system.c: Likewise. * lib/stub/times.c: Likewise. * lib/stub/umask.c: Likewise. * lib/stub/utime.c: Likewise. * lib/libc+gnu.c: Include explodings. * lib/libg.c: Likewise. * lib/libgetopt.c: Include explodings. 2018-08-22 Jan Nieuwenhuizen mescc: Mes C Library: Explode libc+tcc.c. * include/libmes.h: Add declarations. * include/string.h: Likewise. * lib/ctype/islower.c: New file, explode from lib/libc+tcc.c. * lib/ctype/isupper.c: Likewise. * lib/ctype/tolower.c: Likewise. * lib/ctype/toupper.c: Likewise. * lib/mes/search-path.c: Likewise. * lib/posix/execvp.c: Likewise. * lib/stdio/fclose.c: Likewise. * lib/stdio/fdopen.c: Likewise. * lib/stdio/ferror.c: Likewise. * lib/stdio/fflush.c: Likewise. * lib/stdio/fopen.c: Likewise. * lib/stdio/fprintf.c: Likewise. * lib/stdio/fread.c: Likewise. * lib/stdio/fseek.c: Likewise. * lib/stdio/ftell.c: Likewise. * lib/stdio/fwrite.c: Likewise. * lib/stdio/printf.c: Likewise. * lib/stdio/remove.c: Likewise. * lib/stdio/snprintf.c: Likewise. * lib/stdio/sprintf.c: Likewise. * lib/stdio/sscanf.c: Likewise. * lib/stdio/vfprintf.c: Likewise. * lib/stdio/vprintf.c: Likewise. * lib/stdio/vsnprintf.c: Likewise. * lib/stdio/vsprintf.c: Likewise. * lib/stdio/vsscanf.c: Likewise. * lib/stdlib/calloc.c: Likewise. * lib/stdlib/qsort.c: Likewise. * lib/stdlib/strtof.c: Likewise. * lib/stdlib/strtol.c: Likewise. * lib/stdlib/strtold.c: Likewise. * lib/stdlib/strtoll.c: Likewise. * lib/stdlib/strtoul.c: Likewise. * lib/stdlib/strtoull.c: Likewise. * lib/string/memcmp.c: Likewise. * lib/string/memmem.c: Likewise. * lib/string/memmove.c: Likewise. * lib/string/memset.c: Likewise. * lib/string/strcat.c: Likewise. * lib/string/strchr.c: Likewise. * lib/string/strlwr.c: Likewise. * lib/string/strncpy.c: Likewise. * lib/string/strrchr.c: Likewise. * lib/string/strstr.c: Likewise. * lib/string/strupr.c: Likewise. * lib/stub/gettimeofday.c: Likewise. * lib/stub/ldexp.c: Likewise. * lib/stub/localtime.c: Likewise. * lib/stub/mprotect.c: Likewise. * lib/stub/sigaction.c: Likewise. * lib/stub/sigemptyset.c: Likewise. * lib/stub/strtod.c: Likewise. * lib/stub/time.c: Likewise. * lib/libc+tcc.c: Include explodings. 2018-08-16 Jan Nieuwenhuizen mescc: Mes C Library: Explode libmes.c. * include/libmes.h: Add declarations. * lib/abtol.c: New file, explode from lib/libmes.c. * lib/ctype/isdigit.c: Likewise. * lib/ctype/isnumber.c: Likewise. * lib/ctype/isspace.c: Likewise. * lib/ctype/isxdigit.c: Likewise. * lib/mes/abtol.c: Likewise. * lib/mes/eputc.c: Likewise. * lib/mes/eputs.c: Likewise. * lib/mes/fdgetc.c: Likewise. * lib/mes/fdputc.c: Likewise. * lib/mes/fdputs.c: Likewise. * lib/mes/fdungetc.c: Likewise. * lib/mes/itoa.c: Likewise. * lib/mes/ltoab.c: Likewise. * lib/mes/ntoab.c: Likewise. * lib/mes/utoa.c: Likewise. * lib/stdlib/atoi.c: Likewise. * lib/libmes.c: Include explodings. mescc: Mes C Library: Explode libc-mini.c. * include/libmes.h: Add declarations. * lib/mes/eputs.c: New file, explode from lib/libc-mini.c. * lib/mes/oputs.c: Likewise. * lib/stdlib/exit.c: Likewise. * lib/stdlib/puts.c: Likewise. * lib/string/strlen.c: Likewise. * lib/libc-mini.c: Include explodings. mescc: Mes C Library: Explode libc.c. * lib/libc.c: New file, explode from lib/libc.c. * lib/posix/execv.c: Likewise. * lib/posix/isatty.c: Likewise. * lib/posix/wait.c: Likewise. * lib/stdio/fgetc.c: Likewise. * lib/stdio/fputc.c: Likewise. * lib/stdio/fputs.c: Likewise. * lib/stdio/getc.c: Likewise. * lib/stdio/getchar.c: Likewise. * lib/stdio/putc.c: Likewise. * lib/stdio/putchar.c: Likewise. * lib/stdio/ungetc.c: Likewise. * lib/stdlib/free.c: Likewise. * lib/stdlib/getenv.c: Likewise. * lib/stdlib/realloc.c: Likewise. * lib/stdlib/setenv.c: Likewise. * lib/string/strcmp.c: Likewise. * lib/string/strcpy.c: Likewise. * lib/string/strncmp.c: Likewise. * lib/libc.c: Include explodings. 2018-08-15 Jan Nieuwenhuizen test: Build initial scaffold tests without libc. * scaffold/argv.c (strcmp): New function; support building without libc. * build-aux/build-cc.sh: Build initial scaffold tests without libc. * build-aux/build-cc32.sh: Likewise. * build-aux/build-mes.sh: Likewise. * build-aux/check-mescc.sh: Likewise. * scaffold/read.data: Rename from `mesmes'. * scaffold/read.c: Rename from `m.c'; update. test: Remove 30-test.i indirection. * include/30-test.i: Remove. * scaffold/tests/30-strlen.c: Remove 30-test.i indirection. * scaffold/tests/31-eputs.c: Likewise. * scaffold/tests/32-compare.c: Likewise. * scaffold/tests/33-and-or.c: Likewise. * scaffold/tests/34-pre-post.c: Likewise. * scaffold/tests/35-compare-char.c: Likewise. * scaffold/tests/36-compare-arithmetic.c: Likewise. * scaffold/tests/37-compare-assign.c: Likewise. * scaffold/tests/38-compare-call.c: Likewise. * scaffold/tests/40-if-else.c: Likewise. * scaffold/tests/41-?.c: Likewise. * scaffold/tests/42-goto-label.c: Likewise. * scaffold/tests/43-for-do-while.c: Likewise. * scaffold/tests/44-switch.c: Likewise. * scaffold/tests/45-void-call.c: Likewise. * scaffold/tests/46-function-static.c: Likewise. * scaffold/tests/50-assert.c: Likewise. * scaffold/tests/51-strcmp.c: Likewise. * scaffold/tests/52-itoa.c: Likewise. * scaffold/tests/53-strcpy.c: Likewise. * scaffold/tests/60-math.c: Likewise. * scaffold/tests/63-struct-cell.c: Likewise. * scaffold/tests/64-make-cell.c: Likewise. * scaffold/tests/65-read.c: Likewise. * scaffold/tests/66-local-char-array.c: Likewise. * scaffold/tests/70-printf.c: Likewise. * scaffold/tests/71-struct-array.c: Likewise. * scaffold/tests/72-typedef-struct-def.c: Likewise. * scaffold/tests/73-union.c: Likewise. * scaffold/tests/74-multi-line-string.c: Likewise. * scaffold/tests/75-struct-union.c: Likewise. * scaffold/tests/76-pointer-arithmetic.c: Likewise. * scaffold/tests/77-pointer-assign.c: Likewise. * scaffold/tests/78-union-struct.c: Likewise. * scaffold/tests/79-int-array.c: Likewise. * scaffold/tests/7a-struct-char-array.c: Likewise. * scaffold/tests/7b-struct-int-array.c: Likewise. * scaffold/tests/7c-dynarray.c: Likewise. * scaffold/tests/7d-cast-char.c: Likewise. * scaffold/tests/7e-struct-array-access.c: Likewise. * scaffold/tests/7f-struct-pointer-arithmetic.c: Likewise. * scaffold/tests/7g-struct-byte-word-field.c: Likewise. * scaffold/tests/7h-struct-assign.c: Likewise. * scaffold/tests/7i-struct-struct.c: Likewise. * scaffold/tests/7j-strtoull.c: Likewise. * scaffold/tests/7k-for-each-elem.c: Likewise. * scaffold/tests/7l-struct-any-size-array.c: Likewise. * scaffold/tests/7m-struct-char-array-assign.c: Likewise. * scaffold/tests/7n-struct-struct-array.c: Likewise. * scaffold/tests/80-setjmp.c: Likewise. * scaffold/tests/81-qsort.c: Likewise. * scaffold/tests/86-strncpy.c: Likewise. * scaffold/tests/87-sscanf.c: Likewise. test: Remove 00-test.i indirection. * include/00-test.i: Remove. * scaffold/tests/01-return-0.c: Remove 00-test.i indirection. * scaffold/tests/02-return-1.c: Likewise. * scaffold/tests/03-call.c: Likewise. * scaffold/tests/04-call-0.c: Likewise. * scaffold/tests/05-call-1.c: Likewise. * scaffold/tests/06-call-!1.c: Likewise. * scaffold/tests/10-if-0.c: Likewise. * scaffold/tests/11-if-1.c: Likewise. * scaffold/tests/12-if-==.c: Likewise. * scaffold/tests/13-if-!=.c: Likewise. * scaffold/tests/14-if-goto.c: Likewise. * scaffold/tests/15-if-!f.c: Likewise. * scaffold/tests/16-if-t.c: Likewise. * scaffold/tests/20-while.c: Likewise. * scaffold/tests/21-char[].c: Likewise. * scaffold/tests/22-while-char[].c: Likewise. * scaffold/tests/23-pointer.c: Likewise. build: Cleanup trace output. * build-aux/build-cc.sh: Cleanup trace output. * build-aux/build-cc32.sh: Likewise. * build-aux/build-guile.sh: Likewise. * build-aux/build-mes.sh: Likewise. * build-aux/build-x86_64-mes.sh: Likewise. * build-aux/cc-mes.sh: Likewise. * build-aux/cc.sh: Likewise. * build-aux/cc32-mes.sh: Likewise. * build-aux/cc64-mes.sh: Likewise. * build-aux/check-boot.sh: Likewise. mescc: Support -l none (linking without libc). * module/mescc/mescc.scm (mescc:link): Support -l none. 2018-08-14 Jan Nieuwenhuizen mescc: Support -o-. * module/mescc/mescc.scm (GUILE-with-output-to-file): New variable. (with-output-to-file): Use it in redefined function. build: Update dir-locals for new layout. * .dir-locals.el: Update to new layout. 2018-08-12 Jan Nieuwenhuizen mescc: Mes C Library: Support oputs for POSIX. * lib/libmes.c (oputs)[POSIX]: New function. core: mes: Prepare for M2-Planet. * src/mes.c (cal): Refactor to use if instead of switch. (eval_apply): Likewise. core: lib: Prepare for M2-Planet. * src/lib.c (display_helper): Refactor to use if instead of switch. (memq): Likewise. core: reader: Prepare for M2-Planet. * src/reader.c (MAX_STRING): New define. (read_input_file_env_): Remove dead code. (reader_read_line_comment): Refactor to remove recursion. (reader_read_line_sexp_): Refactor to use if instead of switch. (reader_read_hash): Likewise. (reader_read_character): Refactor: cache peekchar () value, make M2-Planet friendly. (reader_read_binary): Make M2-Planet friendly. (reader_read_octal): Likewise. (reader_read_hex): Likewise. (reader_read_string): Refactor. (dump): Make M2-Planet friendly. build: src/mes build fixes. * build-aux/GNUmakefile.in (seed): Add dependency on gcc. * build-aux/build-cc.sh: Copy result to src/mes. * build-aux/build-cc32.sh: Likewise. * build-aux/build.sh.in: Remove copying of results. mescc: Mes C Library: Cleanup start files. * lib/linux/x86-mes-gcc/crt0.c: Split from lib/linux/crt0.c. * lib/linux/x86-mes-gcc/crt1.c: Split from lib/linux/crt1.c. * lib/linux/x86-mes-gcc/crti.c: Split from lib/linux/crti.c. * lib/linux/x86-mes-gcc/crtn.c: Split from lib/linux/crtn.c. * lib/linux/x86-mes/crt0.c: Split from lib/linux/crt0.c. * lib/linux/x86-mes/crt1.c: Split from lib/linux/crt1.c. * lib/linux/x86-mes/crti.c: Split from lib/linux/crti.c. * lib/linux/x86-mes/crtn.c: Split from lib/linux/crtn.c. * build-aux/build-cc.sh: Update. * build-aux/build-cc32.sh: Update. * build-aux/build-mes.sh: Update. 2018-08-11 Jan Nieuwenhuizen mescc: Mes C Library: Add x86_64 libc+gnu support. * include/linux/x86/syscall.h: Move SYS_ defines from gnu.c. * include/linux/x86_64/syscall.h: Add SYS_ defines for gnu. * lib/linux/gnu.c: Update. * lib/linux/gnu.c (signal)[__x86_64__]: Implement using rt_sigaction. * lib/stdlib/abort.c: Support x86_64. mescc: Mes C Library: Add x86_64 libc+tcc support. * include/linux/x86/syscall.h: Move SYS_ defines from tcc.c. * include/linux/x86_64/syscall.h: Add SYS_ defines for tcc. * lib/x86-mes-gcc/setjmp.c: Rename from lib/libc+tcc-gcc.c * lib/x86-mes/setjmp.c: Rename from lib/libc+tcc-mes.c * lib/linux/tcc.c: Update. mescc: Mes C Library: Add x86_64 libc support. * include/linux/x86_64/syscall.h: New file. * include/linux/x86/syscall.h: New file. * lib/linux/x86_64-mes-gcc/mes.c: New file. * lib/linux/x86-mes/mes.c: Rename from lib/linux/mes.c. * lib/linux/x86-mes-gcc/mes.c: Rename from lib/linux/gcc.c. * lib/linux/libc.c: Update includes. (waitpid)[__x86_64__]: Use wait4. * build-aux/build-cc.sh: Build libc too. * lib/x86-mes/x86.M1 (mov____0x8(%ebp),%esi): New macro. 2018-08-10 Jan Nieuwenhuizen mescc: Mes C Library: Add x86_64 libc-mini support. * lib/linux/x86-mes-gcc/mini.c: Rename from lib/linux/mini-gcc.c. * lib/linux/x86-mes/mini.c: Rename from lib/linux/mini-mes.c. * lib/linux/x86_64-mes-gcc/crt1.c: Rename from lib/linux/x86_64/crt1.c. * lib/linux/x86_64-mes-gcc/mini.c: New file. * build-aux/build-cc.sh: Build libc-mini, scaffold/main, scaffold/hello. * build-aux/cc64.sh: New file. mescc: Add objdump'able x86_64-mes scaffold. * lib/x86_64-mes/elf64-header.hex2: New file. * lib/x86_64-mes/elf64-footer-single-main.hex2: New file. * build-aux/build-x86_64-mes.sh: Enable second, objdump'able exit-42 scaffold test. mescc: Initial x86_64-mes scaffold. * build-aux/GNUmakefile.in (x86_64-mes): New target. * .gitignore: Ignore x86 and x86_64 out files. * build-aux/build-mes.sh: Resurrect three initial exit42 scaffold tests. * build-aux/build-x86_64-mes.sh: New file. Add initial exit42 scaffold test. * lib/x86-mes/elf32-0header.hex2: Fix comment. * lib/x86-mes/elf32-header.hex2: Likewise. * lib/x86_64-mes/elf-0footer.hex2: New file. * lib/x86_64-mes/elf64-0header.hex2: New file. * lib/x86_64-mes/elf64-body-exit-42.hex2: New file. * lib/x86_64-mes/exit-42.c: New file. 2018-08-12 Jan Nieuwenhuizen build: seed: Oops, copy TCC seed after it's been regenerated. * build-aux/GNUmakefile.in (seed): Oops, copy TCC seed after it's been regenerated. 2018-08-10 Jan Nieuwenhuizen build: Fix mescc man page generation. * build-aux/GNUmakefile.in (doc/mescc.1): Reverse dependencies; generate page for mescc. 2018-08-23 Jan Nieuwenhuizen build: Fixes for make check. * build-aux/config.sh (srcdir): Initialize if unset. * build-aux/test.sh (DIFF): Do not fail if unset. 2018-08-09 Jan Nieuwenhuizen guix: Update to 0.17. * guix/git/mes.scm (mes): Update to 0.17. 2018-07-22 Jan Nieuwenhuizen Release 0.17. * configure (VERSION): Update to 0.17. doc: Release update. * HACKING: Update. * INSTALL: Update. * NEWS: Update. * README: Update. * doc/announce/ANNOUNCE-0.17: New file. 2018-08-09 Jan Nieuwenhuizen build: Non-bootstrap install fixes. * configure (main): Fix default bindir. * build-aux/GNUmakefile.in (PHONY_TARGETS): Remove src/mes. Fixes re-build upon install. * build-aux/install.sh.in: Fix tar arguments for scaffold files. Expand install directories. check: Do not fail if partial test prerequisites fail. * build-aux/check-tcc.sh: Pass if no test directory found. * build-aux/check.sh.in (TINYCC_PREFIX): Rename from TCC_PREFIX. Pass if partial tests prerequisites fail. check: Fix 4f-string-split.scm for Guile. * module/mes/guile.scm (core:car, core:make-cell): New function. Fixes scaffold/boot/4f-string-split.scm. build: configure: Oops, substitute @prefix@. * build-aux/pre-inst-env.in (MES_PREFIX): Respect pre-set value. * configure (main): Oops, substitute @prefix@. * configure.sh (subst): Likewise. 2018-07-28 Jan Nieuwenhuizen build: web: New target. * README: Add bug-mes@gnu.org * NEWS: Likewise. * doc/mes.texi: Likewise. * build-aux/gendocs.sh: New file, from gnulib. * doc/gendocs_template: New file, from gnulib. * build-aux/GNUmakefile.in (web): New target. Remove fosdem talk. * doc/fosdem/GuixSD.png: Remove. * doc/fosdem/LISP-1-5-page-13-bottom.png: Remove. * doc/fosdem/LISP-1.5-page-13-bottom.png: Remove. * doc/fosdem/LISP-1.5-page-13.pdf: Remove. * doc/fosdem/LISP-1.5-page-13.png: Remove. * doc/fosdem/README: Remove. * doc/fosdem/beamercolorthemeX.sty: Remove. * doc/fosdem/beamerthemeX.sty: Remove. * doc/fosdem/bootstrap-graph.png: Remove. * doc/fosdem/egg.jpeg: Remove. * doc/fosdem/egg.png: Remove. * doc/fosdem/egg.xcf: Remove. * doc/fosdem/fosdem.org: Remove. * doc/fosdem/fosdem.pdf: Remove. * doc/fosdem/fsb-logo-guile-guix-gnu.png: Remove. * doc/fosdem/fsb-logo-guile-guix-gnu.xcf: Remove. * doc/fosdem/fsb-logo-guile-guix-mes.png: Remove. * doc/fosdem/fsb-logo-guile-guix-mes.xcf: Remove. * doc/fosdem/fsb-logo.png: Remove. * doc/fosdem/guix-build-bootstrap-tarballs.log: Remove. * doc/fosdem/mes.png: Remove. * doc/fosdem/mes.xcf: Remove. 2018-07-26 Jan Nieuwenhuizen build: Remove tinycc/test2 import. * scaffold/tinycc/: Remove. * build-aux/check-mescc.sh: Remove tinycc testing. * build-aux/check-tcc.sh: New file. * build-aux/check.sh.in: Use it. * build-aux/config.sh: Update. * build-aux/export.make: Update. Add missing copyright headers and READMEs. * ChangeLog: Add copyright header. * build-aux/GNUmakefile.in (generate-ChangeLog): Append it as copyright footer. * BOOTSTRAP: Add copyright header. * scaffold/boot/2f-define-second-lambda.scm: Likewise. * scaffold/boot/39-global-define-override.scm: Likewise. * scaffold/boot/3a-global-define-lambda-override.scm: Likewise. * scaffold/boot/4f-string-split.scm: Likewise. * scaffold/boot/numbers.scm: Likewise. * scaffold/gc.scm: Likewise. * scaffold/b-0.mes: Remove. * doc/GNU-EVAL-APPLY: Remove. * doc/announce/README: New file. * doc/announce/ANNOUNCE: Move from doc/ANNOUNCE. * doc/announce/ANNOUNCE-0.10: Likewise. * doc/announce/ANNOUNCE-0.11: Likewise. * doc/announce/ANNOUNCE-0.12: Likewise. * doc/announce/ANNOUNCE-0.13: Likewise. * doc/announce/ANNOUNCE-0.14: Likewise. * doc/announce/ANNOUNCE-0.15: Likewise. * doc/announce/ANNOUNCE-0.16: Likewise. * doc/announce/ANNOUNCE-0.3: Likewise. * doc/announce/ANNOUNCE-0.4: Likewise. * doc/announce/ANNOUNCE-0.5: Likewise. * doc/announce/ANNOUNCE-0.6: Likewise. * doc/announce/ANNOUNCE-0.7: Likewise. * doc/announce/ANNOUNCE-0.8: Likewise. * doc/announce/ANNOUNCE-0.9: Likewise. * doc/announce/ANNOUNCE-2: Likewise. * doc/announce/UPDATE-0.13: Likewise. * doc/fosdem/README: New file. * doc/fosdem/fosdem.org: Add legalese. * doc/fosdem/fosdem.pdf: Regenerate. * doc/images/README: New file. * mes/module/mes/psyntax.pp.header: New file. * mes/module/mes/psyntax.pp: Add it to generated file. 2018-07-25 Jan Nieuwenhuizen build: Make build more autotools-like. * build-aux/build.sh.in: Move from ./build.sh * build-aux/check.sh.in: Likewise. * build-aux/GNUmakefile.in: Likewise. * build-aux/install.sh.in: Likewise. * build-aux/uninstall.sh.in: Likewise. * configure: Substitute them. * configure.sh: Likewise. * build-aux/build-cc.sh: Update: use ${srcdest} instead of ${top_builddest}. * build-aux/build-cc32.sh: Likewise. * build-aux/build-guile.sh: Likewise. * build-aux/build-mes.sh: Likewise. * build-aux/cc-mes.sh: Likewise. * build-aux/cc.sh: Likewise. * build-aux/cc32-mes.sh: Likewise. * build-aux/check-boot.sh: Likewise. * build-aux/check-mes.sh: Likewise. * build-aux/check-mescc.sh: Likewise. * build-aux/config.sh: Likewise. * build-aux/export.make: Likewise. * build-aux/mes-snarf.scm: Likewise. * build-aux/pre-inst-env.in: Likewise. * build-aux/test.sh: Likewise. * build-aux/trace.sh: Likewise. * module/mescc/mescc.scm: Likewise. * scripts/mescc.in: Likewise. * src/mes.c: Likewise. * .gitignore: Likewise. 2018-07-23 Jan Nieuwenhuizen build: Support all `Standard targets' for users. * GNUmakefile (distclean mostlyclean, maintainer-clean, html, dvi, ps, install-dvi, install-ps, install-html, installcheck): New target. (install-info): Remove fake target. * configure (parse-opts): Add --srcdir. xx 2018-07-23 Jan Nieuwenhuizen Add taken-from-Binutils and copyright line to alloca.c * lib/stdlib/alloca.c: Add `taken from binutils' and copyright line to alloca.c for minor changes. 2018-07-26 Jan Nieuwenhuizen Relicense some taken-from-GNU Guile LGPLv3+ files to GPLv3+. * mes/module/mes/pmatch.scm: Relicense to GPLv3+. * mes/module/sxml/xpath.scm: Likewise. * mes/module/mes/peg/cache.scm: Likewise. * mes/module/mes/peg/codegen.scm: Likewise. * mes/module/mes/peg/simplify-tree.scm: Likewise. * mes/module/mes/peg/string-peg.scm: Likewise. * mes/module/mes/peg/using-parsers.scm: Likewise. 2018-07-23 Jan Nieuwenhuizen Relicense some taken-from-GNU Guile LGPLv2+ files to GPLv3+. * mes/module/mes/pretty-print.scm: Relicense to GPLv3+. * mes/module/mes/psyntax.ss: Likewise. * mes/module/srfi/srfi-1.scm: Likewise. * mes/module/srfi/srfi-16.scm: Likewise. * mes/module/srfi/srfi-26.scm: Likewise. * module/mes/getopt-long.scm: Likewise. Add missing copyright headers. * .dir-locals.el: Add copyright header. * AUTHORS: Likewise. * HACKING: Likewise. * INSTALL: Likewise. * README: Likewise. * build-aux/export.make: Likewise. * build-aux/setup-mes.sh: Likewise. * configure.sh: Likewise. * install.sh: Likewise. * scaffold/tests/90-goto-var.c: Likewise. * scaffold/tests/91-goto-array.c: Likewise. * tests/read.test: Likewise. * uninstall.sh: Likewise. * doc/fosdem/beamercolorthemeX.sty: * doc/fosdem/beamerthemeX.sty: * doc/fosdem/html.sty: Remove. * doc/fosdem/README: New file. * doc/images/README: New file. 2018-07-22 Jan Nieuwenhuizen GNU Mes. Throughout, make these changes Copyright headers: GNU Mes First mention of name: GNU Mes Website: https://www.gnu.org/software/mes Git: git://git.savannah.gnu.org/mes.git 2018-07-22 Jan Nieuwenhuizen build: Support uninstall. * uninstall.sh: New file. * GNUmakefile (uninstall): Use it in new target. build: Generate gcc-mesboot-graph from .dot. * doc/images/gcc-mesboot-graph.dot: New file. * doc/images/gcc-mesboot-graph.png: Remove. * GNUmakefile (${top_builddest}doc/images/gcc-mesboot-graph.png): New target. * configure (det): Add check. * build-aux/export.make: Export it. * doc/mes.texi (The Mes Bootstrap Process): Describe new recipe. * guix/git/mes.scm (mes): Add graphvis dependency. 2018-07-22 Jan Nieuwenhuizen guix: Refactor package setup. Next to the convenient environment setup and package build from git guix environment -l .guix.scm guix build -f .guix.scm we can now also build other included packages GUIX_PACKAGE_PATH=guix guix build mes@0.17 GUIX_PACKAGE_PATH=guix guix build nyacc@0.80.42 * guix/git/mes.scm: Move from .guix.scm, make a module. * .guix.scm: Move from guix.scm, use it. * build-aux/manifest.scm: Update location. * build-aux/pre-inst-env.in: Support it. * configure: Check for guix. * build-aux/export.make: Export GUIX. * GNUmakefile (update-hash): New target. 2018-07-22 Jan Nieuwenhuizen build: Respect --docdir. * configure: Respect --docdir. 2018-07-21 Jan Nieuwenhuizen build: Support --srcdir build. * build-aux/config.sh: New file. * build-aux/trace.sh: New file. * build-aux/GNUmakefile.in: New file. * configure: Support srcdir configure. * GNUmakefile: Support srcdir build. * build-aux/build-cc.sh: Likewise. * build-aux/build-cc32.sh: Likewise. * build-aux/build-guile.sh: Likewise. * build-aux/build-mes.sh: Likewise. * build-aux/cc-mes.sh: Likewise. * build-aux/cc.sh: Likewise. * build-aux/cc32-mes.sh: Likewise. * build-aux/check-mes.sh: Likewise. * build-aux/check-mescc.sh: Likewise. * build-aux/export.make: Likewise. * build-aux/mes-snarf.scm: Likewise. * build-aux/pre-inst-env.in: Likewise. * build-aux/test.sh: Likewise. * build.sh: Likewise. * check.sh: Likewise. * install.sh: Likewise. * module/mescc/mescc.scm: Likewise. * scripts/mescc.in: Likewise. * src/mes.c: Likewise. 2018-06-30 Jan Nieuwenhuizen core: Prepare for the Hurd. * lib/linux/libc.c: Move from lib/linux.c. * lib/linux/gcc.c: Move from lib/linux-gcc.c. * lib/linux/gnu.c: Move from lib/linux+gnu.c. * lib/linux/libc.c: Move from lib/linux.c. * lib/linux/mes.c: Move from lib/linux-mes.c. * lib/linux/mini-gcc.c: Move from lib/linux-mini-gcc.c. * lib/linux/mini-mes.c: Move from lib/linux-mini-mes.c. * lib/linux/tcc.c: Move from lib/linux+tcc.c. * lib/linux/crt0.c: Move from lib/crt0.c. * lib/linux/crt1.c: Move from lib/crt1.c. * lib/linux/crti.c: Move from lib/crti.c. * lib/linux/crtn.c: Move from lib/crtn.c. * build-aux/build-cc.sh: Update for new layout. * build-aux/build-cc32.sh: Likewise. * build-aux/build-mes.sh: Likewise. * build-aux/cc-mes.sh: Likewise. * build-aux/cc32-mes.sh: Likewise. * lib/string/argz-count.c: New file taken from GNU C Library, relicensed. * lib/string/argz-extract.c: New file taken from GNU C Library, relicensed. * include/argz.h: New file. * lib/string/memcpy.c: New file, extract from libc. * lib/assert/assert.c: Likewise. 2018-07-21 Jan Nieuwenhuizen build: Install ChangeLog. * ChangeLog: New file. * install.sh: Regenerate it, install it. build: Refactor configure. * configure: Refactor. 2018-07-21 Jan Nieuwenhuizen build: Prepare for autoconfiscation. Make build system more in alignment with how autotools work. This will make transition easier. * mes/module/mes/boot-0.scm.in: Update from module/mes/boot-0.scm. * scripts/mescc.in: Update from scripts/mescc. * build-aux/pre-inst-env.in: New file. * build-aux/cc-mes.sh: Use pre-inst-env. * configure: Substitute new .in files. * install.sh: Do not substitute mescc, boot-0.scm. 2018-07-21 Jan Nieuwenhuizen core: Document number->string INT-MIN failure with gcc-x86. * src/mes.c (scm_symbol_arch, scm_symbol_compiler): New symbol. (mes_symbols, bload_env): Add them. (scm_symbol_gnuc, scm_symbol_mesc): Remove. * scaffold/mini-mes.c: Likewise. * module/mes/mes-0.scm (%arch, %compiler): New public variable. * tests/srfi-13.test: Expect number->string INT-MIN to fail for gcc-x86. * HACKING (Bugs): Add it. build: Refactor mes tests. * build-aux/check-mes.sh: New file. * check.sh: Invoke it for Guile and Mes. * .gitignore: Ignore new guile logs. * mes/module/mes/boot-0.scm: Ignore some standard Guile options. * module/mes/test.scm: Make a module. * tests/base.test: Use it. Make a module, support invoking with Guile or Mes alike. * tests/boot.test: Likewise. * tests/catch.test: Likewise. * tests/closure.test: Likewise. * tests/cwv.test: Likewise. * tests/display.test: Likewise. * tests/fluids.test: Likewise. * tests/getopt-long.test: Likewise. * tests/guile.test: Likewise. * tests/let-syntax.test: Likewise. * tests/let.test: Likewise. * tests/match.test: Likewise. * tests/math.test: Likewise. * tests/module.test: Likewise. * tests/optargs.test: Likewise. * tests/peg.test: Likewise. * tests/pmatch.test: Likewise. * tests/psyntax.test: Likewise. * tests/quasiquote.test: Likewise. * tests/read.test: Likewise. * tests/scm.test: Likewise. * tests/srfi-13.test: Likewise. * tests/srfi-14.test: Likewise. * tests/srfi-16.test: Likewise. * tests/srfi-1.test: Likewise. * tests/srfi-43.test: Likewise. * tests/srfi-9.test: Likewise. * tests/syntax.test: Likewise. * tests/vector.test: Likewise. * tests/base.test-guile: Remove. * tests/boot.test-guile: Remove. * tests/catch.test-guile: Remove. * tests/closure.test-guile: Remove. * tests/cwv.test-guile: Remove. * tests/display.test-guile: Remove. * tests/fluids.test-guile: Remove. * tests/getopt-long.test-guile: Remove. * tests/guile.test-guile: Remove. * tests/let-syntax.test-guile: Remove. * tests/let.test-guile: Remove. * tests/match.test-guile: Remove. * tests/math.test-guile: Remove. * tests/module.test-guile: Remove. * tests/optargs.test-guile: Remove. * tests/peg.test-guile: Remove. * tests/pmatch.test-guile: Remove. * tests/psyntax.test-guile: Remove. * tests/quasiquote.test-guile: Remove. * tests/read.test-guile: Remove. * tests/scm.test-guile: Remove. * tests/srfi-13.test-guile: Remove. * tests/srfi-14.test-guile: Remove. * tests/srfi-16.test-guile: Remove. * tests/srfi-1.test-guile: Remove. * tests/srfi-43.test-guile: Remove. * tests/srfi-9.test-guile: Remove. * tests/syntax.test-guile: Remove. * tests/vector.test-guile: Remove. build: all-go: Support V=0,1,2. * build-aux/build-guile.sh: Support V=0,1,2. build: Fix for handling missing makeinfo. * configure (main): Update MAKEINFO. mescc: fwrite: Increase debug tracing threshold. * lib/libc+tcc.c (fwrite): Increase debug tracing threshold. mescc: Add proper includes. * include/libmes.h (__mes_debug): Declare. * lib/libtcc1.c: Add proper includes. * lib/linux+gnu.c: Likewise. * lib/m4.c: Likewise. core: Resurrect gcc support. * src/mes.c (MES_ARENA)[POSIX]: Default to 100000000. scaffold: Add proper includes. * scaffold/argv.c: Add proper includes. * scaffold/malloc.c: Likewise. * scaffold/micro-mes.c: Likewise. * scaffold/mini-mes.c: Likewise. * scaffold/tiny-mes.c: Likewise. build: cc32: Silence warnings. * build-aux/build-cc32.sh (CC32_CFLAGS): Silence warnings. build: Resurrect i686-unknown-linux-gnu-gcc support. * build-aux/build-cc32.sh (CC32_CFLAGS): Add -fno-builtin. Resurrects i686-unknown-linux-gnu-gcc. mescc: Support verbose int types. * module/mescc/compile.scm (i386:type-alist): Support verbose int types. build: Separate Mes and Guile modules. * scaffold/gc.scm: Move from guile/gc.scm. * guile/: Remove. * module/language/paren.mes: Remove. * mes/module/mes/base.mes: Move from module/mes/. * mes/module/mes/boot-0.scm: Likewise. * mes/module/mes/boot-00.scm: Likewise. * mes/module/mes/boot-01.scm: Likewise. * mes/module/mes/boot-02.scm: Likewise. * mes/module/mes/catch.mes: Likewise. * mes/module/mes/display.mes: Likewise. * mes/module/mes/fluids.mes: Likewise. * mes/module/mes/getopt-long.mes: Likewise. * mes/module/mes/guile.mes: Likewise. * mes/module/mes/lalr.mes: Likewise. * mes/module/mes/lalr.scm: Likewise. * mes/module/mes/let.mes: Likewise. * mes/module/mes/match.mes: Likewise. * mes/module/mes/match.scm: Likewise. * mes/module/mes/mescc.mes: Likewise. * mes/module/mes/misc.mes: Likewise. * mes/module/mes/module.mes: Likewise. * mes/module/mes/optargs.mes: Likewise. * mes/module/mes/optargs.scm: Likewise. * mes/module/mes/peg.mes: Likewise. * mes/module/mes/peg/cache.scm: Likewise. * mes/module/mes/peg/codegen.scm: Likewise. * mes/module/mes/peg/simplify-tree.scm: Likewise. * mes/module/mes/peg/string-peg.scm: Likewise. * mes/module/mes/peg/using-parsers.scm: Likewise. * mes/module/mes/pmatch.mes: Likewise. * mes/module/mes/pmatch.scm: Likewise. * mes/module/mes/posix.mes: Likewise. * mes/module/mes/pretty-print.mes: Likewise. * mes/module/mes/pretty-print.scm: Likewise. * mes/module/mes/psyntax-0.mes: Likewise. * mes/module/mes/psyntax-1.mes: Likewise. * mes/module/mes/psyntax.mes: Likewise. * mes/module/mes/psyntax.pp: Likewise. * mes/module/mes/psyntax.ss: Likewise. * mes/module/mes/quasiquote.mes: Likewise. * mes/module/mes/quasisyntax.mes: Likewise. * mes/module/mes/quasisyntax.scm: Likewise. * mes/module/mes/repl.mes: Likewise. * mes/module/mes/scm.mes: Likewise. * mes/module/mes/syntax.mes: Likewise. * mes/module/mes/syntax.scm: Likewise. * mes/module/mes/test.mes: Likewise. * mes/module/mes/tiny-0.mes: Likewise. * mes/module/mes/type-0.mes: Likewise. * mes/module/mescc/M1.mes: Likewise. * mes/module/mescc/as.mes: Likewise. * mes/module/mescc/bytevectors.mes: Likewise. * mes/module/mescc/compile.mes: Likewise. * mes/module/mescc/i386/as.mes: Likewise. * mes/module/mescc/info.mes: Likewise. * mes/module/mescc/mescc.mes: Likewise. * mes/module/mescc/preprocess.mes: Likewise. * mes/module/nyacc/lalr.mes: Likewise. * mes/module/nyacc/lang/c99/cpp.mes: Likewise. * mes/module/nyacc/lang/c99/parser.mes: Likewise. * mes/module/nyacc/lang/c99/pprint.mes: Likewise. * mes/module/nyacc/lang/calc/parser.mes: Likewise. * mes/module/nyacc/lang/util.mes: Likewise. * mes/module/nyacc/lex.mes: Likewise. * mes/module/nyacc/parse.mes: Likewise. * mes/module/nyacc/util.mes: Likewise. * mes/module/rnrs/arithmetic/bitwise.mes: Likewise. * mes/module/srfi/srfi-0.mes: Likewise. * mes/module/srfi/srfi-1.mes: Likewise. * mes/module/srfi/srfi-1.scm: Likewise. * mes/module/srfi/srfi-13.mes: Likewise. * mes/module/srfi/srfi-14.mes: Likewise. * mes/module/srfi/srfi-16.mes: Likewise. * mes/module/srfi/srfi-16.scm: Likewise. * mes/module/srfi/srfi-26.mes: Likewise. * mes/module/srfi/srfi-26.scm: Likewise. * mes/module/srfi/srfi-43.mes: Likewise. * mes/module/srfi/srfi-8.mes: Likewise. * mes/module/srfi/srfi-9.mes: Likewise. * mes/module/srfi/srfi-9/gnu.mes: Likewise. * mes/module/sxml/xpath.mes: Likewise. * mes/module/sxml/xpath.scm: Likewise. * module/mes/mes-0.scm: Likewise. * build-aux/build-guile.sh: Update for new layout. * build-aux/build-mes.sh: Likewise. * build-aux/check-boot.sh: Likewise. * build-aux/check-mescc.sh: Likewise. * install.sh: Likewise. * scaffold/boot/51-module.scm: Likewise. * scaffold/boot/52-define-module.scm: Likewise. * scripts/mescc: Likewise. * src/mes.c: Likewise. * tests/base.test-guile: Likewise. * tests/boot.test: Likewise. * tests/srfi-9.test: Likewise. * mes/include: New symlink. * mes/lib: New symlink. * AUTHORS: Update file names. core: typo: Remove trailing 1. * include/alloca.h: typo: Remove trailing 1. 2018-07-20 Jan Nieuwenhuizen Add missing copyright header. Thanks, Mike! * guile/gc.c: Add missing copyright header. Thanks, Mike! 2018-07-19 Jan Nieuwenhuizen guix: mes: Updatee to 0.16.1. * guix.scm (mes): Update to 0.16.1. (mes.git): Likewise. 2018-07-12 Jan Nieuwenhuizen Release 0.16.1 * configure (VERSION): Bump to 0.16.1. doc: Release update. * BOOTSTRAP: Update. * HACKING: Update. * INSTALL: Update. * NEWS: Update. * README: Update. * scaffold/tests/23-pointer.c: Add (janneke) to copyright line. * doc/images/gcc-mesboot-graph.png: Update. * doc/mes.texi (The Mes Bootstrap Process): Describe update. build: setup-mes.sh: Cater for Debian/stretch too. Thanks, pdewacht! * build-aux/setup-mes.sh: Cater for Debian/stretch too. Thanks, pdewacht! core: Fix segfault on Debian/strectch. Thanks, pdewacht! * src/posix.c (execl_): Typo in initialization. Fixes segfault on Debian/strectch. Thanks, pdewacht! doc: Add html, pdf. * GNUmakefile (html, pdf): New target. * .gitignore: Ignore html, pdf targets. doc: Remarks from Rutger. * doc/mes.texi: Remarks from Rutger. doc: Further work. * doc/images/gcc-mesboot-graph.png: New file. * install.sh: Install it. * doc/mes.texi (The Mes Bootstrap Process): Show it. (Bootstrapping): Add missing Mes direntry. (Running the Test Suites): Fix example. Fix typos. build: Handle CFLAGS, CPPFLAGS for Debian. build: Have configure create a git archive. * configure: Create git archive if necessary. build: Use GNU style lower case directory configure variable naming. * GNUmakefile: Use GNU style lower case directory configure variable naming. * HACKING: Likewise. * INSTALL: Likewise. * build-aux/build-cc.sh: Likewise. * build-aux/build-cc32.sh: Likewise. * build-aux/cc-mes.sh: Likewise. * build-aux/cc.sh: Likewise. * build-aux/cc32-mes.sh: Likewise. * build-aux/export.make: Likewise. * build-aux/setup-mes.sh: Likewise. * build.sh: Likewise. * check.sh: Likewise. * configure: Likewise. * doc/mes.texi: Likewise. * install.sh: Likewise. * scripts/mescc: Likewise. build: Support Debian build, install. * scripts/mescc: Support Debian build, install. * lib/libmes.c (fdgetc): Allow Nyacc/ungetc conflict. * build-aux/export.make (ARCH): Export. * build-aux/build-mes.sh: Disable full build for non-bootstrap x86-only. * check.sh (total): Use bash to invoke build-aux/check-mescc.sh. * build-aux/build-guile.sh (SCM_FILES): Support guile-2.0. * module/mes/guile.scm (guile-2.0): Support guile-2.0. * build-aux/build-mes.sh: Use bash. * build-aux/setup-mes.sh: New file. mescc: Be sure to exit upon system* failure. * module/mescc/mescc.scm (assert-system*): New function. (M1->hex2, hex2->elf, M1->blood-elf): Use it. build: Support $DESTDIR. * build-aux/export.make: export DESTDIR. * install.sh: Support $DESTDIR. build: Build and install manual pages. * build-aux/export.make: New file. * GNUmakefile (man): New target. (doc): Depend on man. include build-aux/export.make, remove exports. * guix.scm (mes): Add dependency on help2man. * configure: Check for help2man. * install.sh: Install manual pages if built. doc: Initial version. * doc/mes.texi: New file. * doc/fdl-1.3.texi: New file. * AUTHORS: Mention it. * GNUmakefile (doc, info, install-info): New targets. * install.sh: Install info if available. * guix: (mes): Add texinfo to native-inputs. * configure: Check for makeinfo. 2018-06-26 Jan Nieuwenhuizen guix: mescc-tools: Update to 0.5.1. * guix.scm (mescc-tools): Update to 0.5.1. guix: Oops, fix nyacc-for-mes checksum. Thanks, pdewacht! * guix.scm (nyacc-for-mes): Fix checksum. guix: Update mes to 0.16. * guix.scm (mes): Update to 0.16. (mes.git): Likewise. 2018-06-25 Jan Nieuwenhuizen Release 0.16. * configure (VERSION): Bump to 0.16. 2018-06-24 Jan Nieuwenhuizen doc: Release update. * BOOTSTRAP: Update. * HACKING: Update. * INSTALL: Update. * NEWS: Update. * README: Update. * doc/ANNOUNCE-0.16: New file. 2018-06-26 Jan Nieuwenhuizen core: Fix compile warnings. * lib/libmes.c: Fix warning. * src/posix.c (execl_): Fix warning, add debug printing. core: execl_: Allow 1000 arguments. * src/posix.c (execl_): Allow 1000 arguments. 2018-06-24 Jan Nieuwenhuizen mescc: Support binutils 2.10.1: strrchr: Stop at start of string. * lib/libc+tcc.c (strrchr): Stop at start of string. * scaffold/tests/88-strrchr.c: Test it. * build-aux/check-mescc.sh (tests): Run it. build: Support tcc, create tinycc-seed with tcc. * configure: check for tcc. * build-aux/cc32-mes.sh: Rename from cc-mes-gcc.sh. Support tcc. Update users. * build-aux/build-cc32-mes.sh: Rename from build-mes-gcc.sh. Update users. * GNUmakefile (mes-tcc): New target. * .gitignore: Ignore mes-tcc arch output. * lib/crt1.c (_start): Add "rm" constraint so satisfy tcc. * lib/linux-gcc.c (_sys_call, _sys_call1 _sys_call2 _sys_call3): Likewise. 2018-06-20 Jan Nieuwenhuizen mescc: Support glibc-2.2.5: header tweaks. * include/sys/types.h [__PTRDIFF_T]: Extra guard for ptrdiff_t. [__SIZE_T]: Extra guard for size_t. * include/stdlib.h: Include alloca; remove alloca prototype, * include/errno.h: Add E2BIG. 2018-06-24 Jan Nieuwenhuizen mescc: Support binutils 2.20.1: vfprint, vsprintf: %llx. * lib/libc+tcc.c (vfprintf, vsprintf): Handle %%llx. Print error: should we skip another int, va_arg a long long? 2018-06-20 Jan Nieuwenhuizen mescc: Support binutils 2.14: vfprint, vsprintf: %12.10d. * lib/libc+tcc.c (vfprintf, vsprintf): Handle %12.10d. * scaffold/tests/70-printf.c: Test it. 2018-06-19 Jan Nieuwenhuizen mescc: Support gnu toolchain: libtcc1. * lib/libtcc1.c: New file. * lib/libc+tcc-gcc.c: Remove libtcc1 stubs. mescc: Support binutils-2.20.1a: header tweaks. * include/signal.h: Include sys/types.h; remove type declaration copies. * include/stdarg.h: Likewise. * include/stdio.h: Likewise. * include/stdlib.h: Likewise. * include/unistd.h: Likewise. 2018-06-18 Jan Nieuwenhuizen mescc: Support Tinycc 0.9.27: Drop dlclose, dlopen. * lib/libc+tcc.c (dlclose, dlopen): Remove. * include/dlfcn.h (RTLD_DEFAULT): Add. core: Resurrect dump-tiny. * src/reader.c (dump): Resurrect dump-tiny. core: Resurrect loading of boot-0.32-mo. 2018-06-17 Jan Nieuwenhuizen mescc: Support binutils 2.25: fseek: Add debug printing. * lib/libc+tcc.c (fseek): Add debug printing. mescc: Tinycc support: bcopy: Do not return void. * lib/m4.c (bcopy): Do not return void. Helps tcc. mescc: Support binutils 2.25: memcmp: Support size 0. * lib/libc+tcc.c (memcmp): Support size 0. mescc: Support binutils 2.25: vsscanf: Skip `l'. * lib/libc+tcc.c (vsscanf): Skip `l'. mescc: Debugging oops. * lib/libc.c (__mes_debug): Oops, wrong direction. 2018-06-16 Jan Nieuwenhuizen mescc: Support binutils 2.15a: fread: read ungetc'd chars too. * lib/libmes.c (_ungetc_fd): New variable. (fdgetc): Use it. (_fdungetc_p): New function. * lib/libc+tcc.c (_fungetc_p): New function. * lib/libc+tcc.c (fread): Use it to read ungetc'd chars too. mescc: Add another fopen test. * scaffold/tests/98-fopen.c: New file. * build-aux/check-mescc.sh (tests): Add it. * AUTHORS: Mention it. mescc: Add fopen test. * scaffold/tests/97-fopen.c: New file. * build-aux/check-mescc.sh (tests): Run it. * include/unistd.h (link): Declare. mescc: Support binutils-2.14: fopen: Return 0 upon failure. * lib/libc+tcc.c (fopen): Return 0 upon failure. 2018-06-16 Jan Nieuwenhuizen mescc: Update elf32-header for linux-4.17. Previously, our binaries showed this $ readelf -s scaffold/main.mes-out There are 2 program headers, starting at offset 64 Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align LOAD 0x000000 0x01000000 0x01000000 0x0557c 0x0557c RWE 0x1 LOAD 0x000000 0x01000000 0x01000000 0x0557c 0x0557c RWE 0x1 Section to Segment mapping: Segment Sections... 00 .text .data 01 .text .data Linux-4.17 refuses to run this and says Uhuuh, elf segment at 0000000001000000 requested but the memory is mapped already Segmentation fault * lib/x86-mes/elf32-header.hex2: Remove unused data program header. 2018-06-16 Jan Nieuwenhuizen build: make seed: Update mescc-tools-seed too. guix: mescc-tools: Update to 0.5. * guix.scm (mescc-tools): Update to 0.5. Update for mescc-tools-0.5. * build-aux/build-mes.sh (HEX2FLAGS): Remove = from flags. * build.sh (HEX2FLAGS): Likewise. * module/mescc/mescc.scm (hex2->elf): Likewise. 2018-06-11 Jan Nieuwenhuizen guix: Update mes to 0.15. * guix.scm (mes): Update to 0.15. (mes.git): Likewise. 2018-06-10 Jan Nieuwenhuizen Release 0.15. * configure (VERSION): Bump to 0.15. 2018-05-23 Jan Nieuwenhuizen doc: Release udpate. * BOOTSTRAP: Update. * HACKING: Update. * NEWS: Update. * README: Update. * doc/ANNOUNCE-0.15: New file. 2018-06-12 Jan Nieuwenhuizen build: Resurrect non-bootstrap build. * configure (parse-opts): Support mixing VAR=VALUE --prefix=PREFIX. * guix.scm (mes): Remove setting PREFIX in make-flags. * install.sh: Cater for Guix's setting read-only of scripts/diff.scm. 2018-06-10 Jan Nieuwenhuizen mescc: Support less-patched tcc/gcc: Add crti and crtn. * lib/crt0.c[__MESC__]: Support MesCC. * lib/crti.c: New file. * lib/crtn.c: New file. * build-aux/build-mes-gcc.sh: Build them. mescc: Refactor debug and stub printing. * lib/libc.c (__mes_debug): New function. Use it for debug printing and in stubs throughout. mescc: Support binutils-2.30: fopen fix. * lib/libc+tcc.c (fopen): Set O_APPEND for 'a'. 2018-06-09 Jan Nieuwenhuizen mescc: Support binutils-2.30. * lib/binutils.c (raise, strdup): New function. (mbstowcs): New stub. * include/fcntl.h (O_APPEND, FD_CLOEXEC): New define. mescc: Support binutils-2.10.1: Stubs set errno to 0. mescc: Silence some stubs. * lib/libc+tcc.c: [!NOISY_FLOATS, !NOISY_TIMES]: Silence stubs. * lib/gcc.c: Likewise. * lib/binutils.c: Likewise. 2018-06-10 Jan Nieuwenhuizen mescc: Add debug printing: fopen, fwrite. * lib/libc+tcc.c (fopen, fwrite)[MESC_DEBUG]: Print debug info. mescc: Support binutils-2.10.1: opentype `r+'. * lib/libc+tcc.c (fopen): Support opentype `r+'. 2018-06-08 Jan Nieuwenhuizen mescc: syscall: return only ever error -1, set errno. 2018-06-07 Jan Nieuwenhuizen mescc: Support gcc-2.95: Add getpwnam stub. * lib/gcc.c (getpwnam): New stub. mescc: Support gcc-3.0: Implement alarm, setitimer. mescc: Support gcc-3.0: Implement atexit. mescc: Support gcc-3.0: Implement dup2, fcntl, getrusage. * include/sys/resource.h: New file. * lib/linux+gnu.c (fcntl, dup2, getrusage): New function. * lib/binutils.c (fcntl): Remove stub. mescc: Support gcc-3.2: Implement getuid, getgid. * lib/linux+gnu.c (getuid, getdid): New function. * lib/binutils.c (getuid, getdid): Remove stub. mescc: Support gcc-3.2: Reset errno. * lib/linux-gcc.c (_sys_call, _sys_call1, _sys_call2, _sys_call3): Reset errno. * lib/linux-mes.c (__sys_call, __sys_call1, __sys_call2 , __sys_call3): Rename from _*. (_sys_call, _sys_call1, _sys_call2, _sys_call3): New function. Reset errno. 2018-06-06 Jan Nieuwenhuizen mescc: Support gcc-3.2: Implement integer strto*. * lib/libc+tcc.c (strtoll, strtoul): Call strtoul. mescc: Support gcc-3.2: Add getpid, signal. * lib/linux+gnu.c (getpid, signal): New function. * include/signal.h: Declare signal. * include/unistd.h: Declare getpid. * scaffold/tests/95-signal.c: Test it. * build-aux/check-mescc.sh (tests): Run it. mescc: Support gcc-3.4.0: *printf: Support `%n'. * lib/libc+tcc.c (vfprintf, vsprintf): Support `%n'. For Gcc 3.4.0. * scaffold/tests/70-printf.c: Test it. mescc: Support gcc-3.4.0: alloca. * lib/alloca.c: New file. * AUTHORS: Mention it. * lib/libc+gnu.c: Add it. * include/stdlib.h: Declare alloca. mescc: Support gcc-3.4.0: unsetenv. * lib/gcc.c (unsetenv): New function. mescc: Support gcc-3.2: Add __divdi3, __moddi3 stubs. * lib/gcc.c (__divdi3, __moddi3): New stubs. mescc: Support gcc-3.2: puts with newline. * lib/libc-mini.c (oputs): Rename from puts. (puts): New function: Add newline. mescc: Support binutils-2.10.1. xx 2018-06-03 Jan Nieuwenhuizen mescc: Support glibc-1.06.4. * lib/glibc.c: New file. * lib/libc+gnu.c: Include it. 2018-06-02 Jan Nieuwenhuizen mescc: Support gcc-2.6.3. * TODO 2018-05-30 Jan Nieuwenhuizen mescc: Support binutils-2.5.1. * include/stdint.h: #undef types before typedef'ing them. * include/sys/types.h: Likewise. * include/string.h (NULL): New define. * include/stdio.h (BUFSIZ): New define. 2018-06-01 Jan Nieuwenhuizen tests: Remove tinycc-imported non-free grep test. * scaffold/tinycc/46_grep.c: Remove. * scaffold/tinycc/46_grep.expect: Remove. 2018-05-30 Jan Nieuwenhuizen mescc: Implement fflush, sscanf, vsscanf. * lib/libc+tcc.c (vsscanf): New function. (sscanf): Use it. (fflush): Remove stub notice; we have no buffering. * include/stdarg.h: Declare it. * scaffold/tests/87-sscanf.c: Test it. * build-aux/check-mescc.sh (tests): Run it. 2018-05-29 Jan Nieuwenhuizen build: Use arch-dir. * lib/x86-mes: Move from stage0. * build-aux/build-cc.sh: Create libraries in lib/gcc. Update users. * build-aux/build-mes.sh: Create libraries in lib/x86-mes. Update users. * build-aux/build-mes-gcc.sh: Rename from build-mlibc.sh. Create libraries in lib/x86-mes-gcc. Update callers. * build-aux/cc-mes-gcc.sh: Rename from cc-mlibc.sh. Update callers. mlibc: Implement strstr. * lib/libc+tcc.c (_memmem, memmem): New function. Import from GNU LilyPond. (strstr): Implement using memmem. * include/string.h (_memmem, memmem): Declare. * AUTHORS: Add Han-Wen Nienhuys. mlibc: Implement ftell, fseek. * lib/libc+tcc.c (ftell, fseek): Implement. mlibc: Cleanup. 2018-05-27 Jan Nieuwenhuizen mescc: m4 support: WIP 2018-05-28 Jan Nieuwenhuizen core: Refactor boot-0 loading. * src/mes.c (load_boot): New function. (load_env): Use it. 2018-05-26 Jan Nieuwenhuizen mescc: Out of the box Geiser support. * .dir-locals.el: New file. Out of the box Geiser support for mescc. 2018-05-25 Jan Nieuwenhuizen mescc: Posixify interface. * module/mescc/compile.mes: Move from language/c99/compiler.mes. * module/mescc: New module.. * module/mescc/M1.scm: Move from mes/M1.mes. * module/mescc/as.scm: Likewise. * module/mescc/bytevectors.scm: Likewise. * module/mescc/mescc.scm: New file. * scripts/mescc: Update to new layout and posixy interface. * GNUmakefile: Likewise. * build-aux/build-cc.sh: Likewise. * build-aux/build-guile.sh: Likewise. * build-aux/build-mes.sh: Likewise. * build-aux/build-mlibc.sh: Likewise. * build-aux/cc-mes.sh: Likewise. * build-aux/cc-mlibc.sh: Likewise. * build-aux/cc.sh: Likewise. * build-aux/check-mescc.sh: Likewise. * build-aux/test.sh: Likewise. * build.sh: Likewise. * .gitignore: Update for posixy extensions. 2018-05-26 Jan Nieuwenhuizen mes: Add drop, drop-right. * module/srfi/srfi-1.mes (drop, drop-right): New function. 2018-05-25 Jan Nieuwenhuizen Revert "fork/exec: debug." This reverts commit f0315ac0d9acd66a30dbb192334f443459b7ed16. fork/exec: debug. 2018-05-24 Jan Nieuwenhuizen core: Support fork, waitpid, execve. * stage0/x86.M1 (SYS_fork, SYS_waitpid, SYS_execve): New define. * lib/linux-gcc.c (fork, waitpid, execve): New function. * lib/linux-mes.c (fork, waitpid, execve): New function. * lib/libc.c (wait): New function. * include/unistd.h (fork, execve): Declare. * include/sys/wait.h (waitpid, wait): Declare. * module/mes/posix.mes (search-path, execlp, system*, waitpid): New function. * src/posix.c (primitive_fork, execl): New function. 2018-05-27 Jan Nieuwenhuizen mescc: Oops, alignment. * module/mes/M1.mes (object->M1): Oops, alignment: only add alignment when not aligned. 2018-05-26 Jeremiah Orians mescc: Add fopen. * lib/libc+tcc.c (fopen)[!POSIX]: Remove stub. * lib/libc.c (fopen)[!POSIX]: New function. * AUTHORS: Add Jeremiah. 2018-05-27 Jan Nieuwenhuizen build: Remove function declarations from M1. * module/language/c99/compiler.mes (info->object): Remove function declarations. build: Check for mes-seed, tinycc-seed. * configure: Check for guile-tools, mes-seed, tinycc-seed. Bugfix: Add cwd to load path. 2018-05-22 Jan Nieuwenhuizen guix: mes: Update to 0.14. * guix.scm (mes): Update to 0.14. (mes.git): Likewise. 2018-05-23 Jan Nieuwenhuizen guix: Add nyacc-for-mes. * guix.scm (nyacc-for-mes): New variable. 2018-05-20 Jan Nieuwenhuizen Release 0.14. * configure (VERSION): Bump to 0.14. 2018-05-19 Jan Nieuwenhuizen doc: Release udpate. * BOOTSTRAP: Update. * HACKING: Update. * NEWS: Update. * README: Update. * doc/ANNOUNCE-0.14: New file. 2018-05-22 Jan Nieuwenhuizen mescc: Tinycc support: Handle short struct initializer. * module/language/c99/compiler.mes (array-init-element->data): Handle short struct initializer. 2018-05-21 Jan Nieuwenhuizen mescc: Align global data. * module/mes/M1.mes (object->M1): Align globals. 2018-05-20 Jan Nieuwenhuizen mescc: Tinycc support: strncpy. * lib/libc+tcc.c (strncpy): New function. * scaffold/tests/86-strncpy.c: Test it. * build-aux/check-mescc.sh (tests): Run it. * build-aux/cc-mlibc.sh (LIBC): Acknowlegde. * build-aux/test.sh (LIBC): Export it. 2018-05-21 Jan Nieuwenhuizen tinycc: Add stubs: __fixdfdi, __fixxfdi, __fixsfdi. * lib/libc+tcc-gcc.c (__fixdfdi, __fixxfdi, __fixsfdi): New stub. 2018-05-20 Jan Nieuwenhuizen tinycc: Add stubs: __floatundixf __fixunsxfdi. * lib/libc+tcc-gcc.c (__floatundixf, __fixunsxfdi): New stub. mescc: Tinycc support: workaround for tcc; this breaks: Structured type with char or short on heap. * module/language/c99/compiler.mes (int->bv): Always use 32bit byte vector. 2018-05-19 Jan Nieuwenhuizen mescc: Tinycc support: Structured type with char or short on heap. * module/language/c99/compiler.mes (int->bv): New function. (init->data): Use it. Add parameter. Update callers. (array-init->data): Add type parmeter. (array-init-element->data): Likewise. * module/mes/bytevectors.mes (bytevector-u8-set!): New function. * module/mes/bytevectors.scm (mes): Export it. * module/mes/as.mes (int->bv8): New function. 2018-05-20 Jan Nieuwenhuizen mescc: Fix size ERROR message. * module/language/c99/compiler.mes (expr->accu): Fix size ERROR message. mescc: Fix itoa. * lib/libc.c (itoa): Use function-static buffer. Increase to 12 to handle INT_MIN. (itoab): Likewise. 2018-05-19 Jan Nieuwenhuizen mescc: Tinycc support: Export nested struct definitions. * module/language/c99/compiler.mes (struct-field): Support nested, named and anonymous enums. (field->info): New function. (type->info): Use it to reap nestedly defined enums, structs, unions. (decl->info): Likewise. * scaffold/tests/t.c: Test it. mescc: Tinycc support: Unsigned comparison. * stage0/x86.M1 (ja32, jae32, jb32, jbe32): New macro. * module/mes/as-i386.mes (i386:jump-a, i386:jump-ae, i386:jump-b, i386:jump-be): Use it in new function. * module/mes/as-i386.scm: Export them. * module/language/c99/compiler.mes (test-jump-label->info): Use them to support unsigned comparison. * scaffold/tests/7s-unsigned-compare.c: Test it. * build-aux/check-mescc.sh (tests): Run it. 2018-05-18 Jan Nieuwenhuizen mescc: Tinycc support: Char and short sign extend. * module/mes/as-i386.mes (i386:accu*n->local, i386:byte-accu->local+n, i386:word-accu->local+n): Remove. (i386:byte-accu, i386:signed-byte-accu, i386:word-accu, i386:signed-word-accu): New function. * module/mes/as-i386.scm: Export them. * module/language/c99/compiler.mes (accu->local+n-text): Simplify. (mem->accu, convert-accu): New function. (expr->accu): Use them. * stage0/x86.M1 (mov____%al,0x32(%ebp), mov____%al,0x8(%ebp), mov____%ax,0x32(%ebp), mov____%ax,0x8(%ebp), movzbl_0x32(%ebp),%eax, movzbl_0x8(%ebp),%eax, movzwl_0x32(%ebp),%eax, movzwl_0x8(%ebp),%eax): Deprecate. * scaffold/tests/7r-sign-extend.c: Test it. * build-aux/check-mescc.sh (tests): Run it. 2018-05-21 Jan Nieuwenhuizen mes: string->number: Support upper case hex. * module/mes/scm.mes (string->number): Support upper case hex. 2018-05-18 Jan Nieuwenhuizen mescc: Tinycc support: Minimal float support. * lib/libc+tcc.c (ldexp, strtod, strtof, strtold): New stub. * include/math.h (ldexp): Declare. * include/stdlib.h (strtod, strtof, strtold): Declare. * module/mes/scm.mes (string->number): Minimal float support. (inexact->exact): New function. * tests/math.test ("string->number"): Test it. * module/language/c99/compiler.mes (ast->type): Handle float type. (type->info): Likewise. (cstring->int): Rename from cstring->number. Update callers. (cstring->float): New function. (expr->accu): Use it. 2018-05-17 Jan Nieuwenhuizen mescc: Tinycc support: Switch with heterogeneous body, non-last default. * module/language/c99/compiler.mes (switch->info): New function. (ast->info): Use it for switch. (clause->info, statements->clauses): Remove. * scaffold/tests/44-switch.c (default_first): Test it. 2018-05-20 Jan Nieuwenhuizen mes: Support fold 3. * module/srfi/srfi-1.mes (fold): Support fold 3. 2018-05-14 Jan Nieuwenhuizen mescc: Tinycc support: Compound strings as function argument. * module/language/c99/compiler.mes (expr->accu): Handle compound strings as function argument. * module/mes/M1.mes (object->M1): Call error when string not found. * scaffold/tests/t.c: Test it. mescc: Tinycc support: Update some tests. mescc: Tinycc support: Add __lshrdi3, __ashldi3, __ashrdi3. * lib/libc+tcc-gcc.c (__lshrdi3, __ashldi3, __ashrdi3): New function. mescc: Tinycc support: Fix sizeof interesting expressions. * module/language/c99/compiler.mes (ast->type): Return type for sizeof-expr, sizeof-type. * scaffold/tests/85-sizeof.c: Test it. 2018-05-13 Jan Nieuwenhuizen mescc: Tinycc support: Support bit-fields. * module/language/c99/compiler.mes (struct->fields): Support bit-fields. (ast->type): (field-field): (field-offset): (expr->accu*): (expr->accu): (struct-field): (->size): * module/language/c99/info.scm (): New type. * stage0/x86.M1 (and____$i32,%eax, and____(%edx),%eax, mov____(%edx),%eax, or____(%edx),%eax): New macro. * module/mes/as-i386.mes (i386:base-mem->accu): Use it. (i386:accu-and, i386:accu-and-base-mem, i386:accu-or-base-mem): New function. * module/mes/as-i386.scm: Export them. * scaffold/tests/7q-bit-field.c: Test it. * build-aux/check-mescc.sh (tests): Run it. 2018-05-12 Jan Nieuwenhuizen mescc: Tinycc support: Anonymous string array. * module/language/c99/compiler.mes (global->info): Anonymous string array. (local->info): Likewise. (array-init->string): Support array of char. (init-local): Likewise. (->size): Fix for array. * scaffold/tests/4a-char-array.c: Test it. * build-aux/check-mescc.sh (tests): Run it. mescc: Tinycc support: sizeof: Bugfix for c-array. * module/language/c99/compiler.mes (->size): Bugfix for c-array. * scaffold/tests/85-sizeof.c: Test it. 2018-05-11 Jan Nieuwenhuizen mescc: Tinycc support: Implement ((struct foo*)p)->bar. * module/language/c99/compiler.mes (expr->accu*): * scaffold/tests/7p-struct-cast.c: Test it. * build-aux/check-mescc.sh (tests): Run it. 2018-05-13 Jan Nieuwenhuizen mescc: Tinycc support: Implement (foo--)->bar and permutations. * module/language/c99/info.scm (clone): Add post field. (make): Handle post parameter. * module/language/c99/compiler.mes (clone): Handle post parameter. (expr->accu*): Set it to support foo--/foo--. (expr->accu): Read it to support foo--/foo--. * scaffold/tests/7o-struct-pre-post.c: Test it. * build-aux/check-mescc.sh: Run it. 2018-05-11 Jan Nieuwenhuizen mescc: Tinycc support: Function addresses. mescc: Tinycc support: Numeric constant expressions. mescc: Tinycc support: Function variables. mescc: Tinycc support: Pointer typedefs. mescc: Tinycc support: Array typedefs. mescc: Tinycc support: Sizeof struct destruct. mescc: Tinycc support: Anonymous union initialization. mescc: Tinycc support: Fix for ?-operator. mescc: Tinycc support: Valued function assign. 2018-05-10 Jan Nieuwenhuizen mescc: Refactor type system: WIP * module/language/c99/compiler.mes (): WIP * module/language/c99/info.scm (): WIP mescc: Refactor type system: struct/enum fields: (name . ). * module/language/c99/compiler.mes (struct-field): Refactor. (field:name): Update. (field:pointer): Update. (field:size): Update. (field:type): Remove. (->size): New function. 2018-05-09 Jan Nieuwenhuizen mescc: Refactor type system: introduce , , . * module/language/c99/info.scm (, , ): New type. * module/language/c99/compiler.mes (ast->): New function. (ast-type): Use it. 2018-05-05 Jan Nieuwenhuizen mescc: Refactor variable declaration. * module/language/c99/compiler.mes (decl->info): Refactor. 2018-05-04 Jan Nieuwenhuizen mescc: Handle sizeof expression. * module/language/c99/compiler.mes (expr->accu): Handle sizeof expression. * scaffold/tests/85-sizeof.c: Test it. mescc: Handle struct field lists. * module/language/c99/compiler.mes (struct-field): Return list of fields. Update callers. * scaffold/tests/84-struct-field-list.c: Test it. * build-aux/check-mescc.sh (tests): Add it. mescc: Support heterogeneous variable init. * module/language/c99/compiler.mes (decl->info): Support heterogeneous variable init. * scaffold/tests/83-heterogenoous-init.c: Test it. * build-aux/check-mescc.sh (tests): Add it. mescc: Handle (Skip) global static. * module/language/c99/compiler.mes (decl->info): Handle (Skip) global static. * scaffold/tests/48-global-static.c: Test it. mescc: Support functions in expression. * module/language/c99/info.scm (): New type. * module/language/c99/compiler.mes (ast->type): Support function. (expr->type-size): Likewise. (expr->type): Likewise. (expr->accu*): Likewise. (function->info): Create . * module/mes/M1.mes (object->M1): Grok . * scaffold/tests/47-function-expression.c: Test it. * build-aux/check-mescc.sh: Add it. mescc: Support function-static variables. * module/language/c99/info.scm (make): Add statics field. (): Add name and function fields. Update callers. (global->string): New function. * module/mes/M1.mes (object->M1): Update. * module/language/c99/compiler.mes (clone): Add statics field. (ident->accu): For , use global in text (WAS: name). (ident-address->accu): Likewise. (ident-address->base): Likewise. (decl-local->info): New function. (decl->info): New function. (ast->info): Use them. (function->info): Keep globals in object (WAS: global:value only). * scaffold/tests/46-function-static.c: Test it. 2018-05-20 Jan Nieuwenhuizen mes: Add unfold. * module/srfi/srfi-1.mes (unfold): New function. mes: Add const. * module/mes/scm.mes (const): New function. * tests/scm.test ("const"): Test it. 2018-05-16 Jan Nieuwenhuizen core: Add logxor. * src/math.c (logxor): New function. * tests/math.test ("logxor"): Test it. mes: string-join: Support optional delimiter, support grammar. * module/srfi/srfi-13.mes (string-join): Support optional infix and grammar. * tests/srfi-13.test ("string-join"): Test it. core: reader: Support binary #b101. * src/reader.c (reader_read_binary): New function. (reader_read_hash): Use it. * tests/scm.test ("binary"): Test it. 2018-05-04 Jan Nieuwenhuizen mes: Support srfi-9-gnu. * module/srfi/srfi-9/gnu.mes: New file. Support srfi-9-gnu. * tests/srfi-9.test: Test it. * tests/srfi-9.test-guile: 2018-04-28 Jan Nieuwenhuizen core: Have core:eval expand macros. * src/mes.c (core:eval-expand): Remove (core:eval-expanded): New variable. (eval_apply): Have core:eval expand macros; core:eval-expanded evals expanded sexps. 2018-04-29 Jan Nieuwenhuizen Revert "core: Remove pmatch-car, pmatch-cdr hack." This reverts commit be1e84624ea4a158173f34af923e3c4a3793412a. 2018-04-28 Jan Nieuwenhuizen core: Remove pmatch-car, pmatch-cdr hack. * src/mes.c (scm_vm_eval_pmatch_car, scm_vm_eval_pmatch_cdr): Remove (eval_apply): Remove cell_vm_eval_pmatch_car, cell_vm_eval_pmatch_cdr hack. (mes_symbols): Remove cell_symbol_pmatch_car, cell_symbol_pmatch_cdr. * scaffold/mini-mes.c: Likewise. * module/mes/guile.scm (mes): Remove pmatch-car, pmatch-cdr. * module/mes/pmatch.scm (ppat): Use plain car, cdr. 2018-05-23 Jan Nieuwenhuizen build: Do not assume /bin/sh, basename/dirname. * install.sh: Do not assume /bin/sh, basename/dirname. * scripts/diff.scm: Likewise. build: Build mini-libc and libc+tcc-gcc too. * include/getopt.h[__GNUC__ && POSIX]: Only use include_next. * lib/libc+tcc-gcc.c[POSIX](longjmp, setjmp, __udivdi3, __umoddi3): Remove. * build-aux/build-cc.sh: Build mini-libc-gcc and libc+tcc-gcc too. * build-aux/build-mlibc.sh: Build mini-libc-gcc too. boot: Bugfix for diff on mes. * scripts/diff.scm (diff-files): Rename from diff; Avoids name clash with module to allow using -e '()' hack. build: Install naive diff. * scripts/diff.scm: Move from build-aux. * install.sh: Install it. * build-aux/tests.sh: Update location. 2018-05-20 Jan Nieuwenhuizen build: Update configure. * configure: Update. 2018-05-02 Jan Nieuwenhuizen mes: Remove debugging. * module/mes/module.mes (mes-load-module-env): Remove debugging. 2018-05-10 Jan Nieuwenhuizen build: Use ../mes-seed/refresh.sh, ../tinycc-seed/refresh.sh. * GNUmakefile (seed): Use ../mes-seed/refresh.sh, ../tinycc-seed/refresh.sh. 2018-05-04 Jan Nieuwenhuizen mescc: Guile fixes. * scripts/mescc: Set GODIR. Add module as expression to Mes invokation. Remove explicit (second) call to main. 2018-05-18 Jan Nieuwenhuizen test: Use diff -ub for tinycc tests. * build-aux/diff.scm: Support -b. * build-aux/test.sh: Use it. 2018-05-04 Jan Nieuwenhuizen check: Also test with i686-unknown-linux-gnu-gcc. * check.sh (CC32): New variable. * build-aux/test.sh: Also test with CC32.o 2018-05-06 Jan Nieuwenhuizen build: configure: Handle VAR=VALUE. Update help. * configure: Handle VAR=VALUE. Update help. 2018-05-03 Jan Nieuwenhuizen build: Fixes for Debian and /bin/sh == dash. * build.sh: Use separate export stanzas. Use command -v (WAS: type -p). Fixes sh, /bin/sh == dash. * build-aux/build-cc.sh: Likewise. * build-aux/build-guile.sh: Likewise. * build-aux/build-mes.sh: Likewise. * build-aux/build-mlibc.sh: Likewise. * build-aux/cc-mes.sh: Likewise. * build-aux/check-mescc.sh: Likewise. * check.sh: Likewise. * install.sh: Likewise. * scripts/mescc: Likewise. build: Rebuild after build from seed. * build-aux/build-mes.sh: Rebuild after build from seed. mescc: Use file-name as global prefix. * module/mes/M1.mes (object->M1): Add file-name parameter. 2018-05-02 Jan Nieuwenhuizen core: Fixes for int-max, int-min. * src/math.c (greater_p): Fix INT_MAX > 0. (less_p): Fix INT_MIN < 0. * tests/math.test ("< INT-MIN"): Test it. ("< INT-MAX"): ("> INT-MAX"): ("> INT-MAX 0"): ("> INT-MIN"): * tests/srfi-13.test ("string->number INT-MAX"): Test it. ("string->number INT-MIN"): ("number->string INT-MAX"): ("number->string INT-MIN"): * scaffold/tests/60-math.c (test): Test it. mescc: Fix dumping of strings > M1_STRING_MAX. * module/mes/M1.mes (object->M1): Skip opening quote. 2018-04-30 Jan Nieuwenhuizen Revert "core: length: Check parameter." This reverts commit 1f52ed35c66febcce16e06868e803a39be7eda41. core: length: Check parameter. * src/mes.c (length): Check parameter. 2018-05-01 Jan Nieuwenhuizen test: enable all tests, use expect count, add tinycc tests. * build-aux/check-mescc.sh (tests): Add tinycc tests. * build-aux/diff.scm: Naive diff for tinycc tests. * build-aux/test.sh: Run diff when .expect found. 2018-04-29 Jan Nieuwenhuizen build: Simplify, drop make.scm experiment. * build.sh: Rewrite. * build-aux/build-cc.sh: New file. * build-aux/build-mes.sh: New file. * build-aux/build-mlibc.sh: New file. * build-aux/cc.sh: New file. * build-aux/cc-mes.sh: New file. * build-aux/cc-mlibc.sh: New file. * install.sh: Update. * make.scm: Remove. * guile/guix/make.scm: Remove. * guile/guix/records.scm: Remove. * guile/guix/shell-utilsg.scm: Remove. 2018-04-30 Jan Nieuwenhuizen core: Use length__. * src/mes.c (check_formals): Use length__. 2018-04-29 Jan Nieuwenhuizen mes-snarf: Support running with Mes. * build-aux/mes-snarf.scm: Support running with Mes. mes: Support -C and -L for Guile compatibility. * module/mes/boot-0.scm): Support -C and -L for Guile compatibility. mes: Support -e,--main option. * module/mes/boot-0.scm: Support -e,--main option. mes: Upgrade Guile module support. * module/mes/boot-0.scm (define-module): New macro with minimal Guile support. (use-modules): New macro. mes: Add srfi-8. * module/srfi/srfi-8.mes: New file. mes: string-join: Handle empty list. * module/mes/boot-0.scm (string-join): Handle empty list. mes: Add basename. * module/mes/posix.mes (basename): New function. mes: Add delete-duplicates. * module/srfi/srfi-1.mes (delete-duplicates): New function. mes: filter-map: Handle two lists. * module/srfi/srfi-1.mes (filter-map): Handle two lists, add error when called with three or more. mes: Add string-replace. * module/srfi/srfi-13.mes (string-replace): New function. * tests/srfi-13.test ("string-replace"): Test it. mes: Add string-map. * module/srfi/srfi-13.mes (string-map): New function. * tests/srfi-13.test ("string-map"): Test it. mes: Add string-trim, string-trim-right, string-trim-both. * module/srfi/srfi-13.mes (string-trim, string-trimn-right, string-trim-both): New function. * tests/srfi-13.test ("string-trim"): Test it. ("string-trim-right"): ("string-trim-both"): mes: Add string-contains. * module/srfi/srfi-13.mes (string-contains): New function. * tests/srfi-13.test ("string-contains"): Test it. ("string-contains not"): mes: string-drop: Error on negative droppings. * module/srfi/srfi-13.mes (string-drop, string-take, string-drop-right): Error on negative droppings. * tests/srfi-13.test ("string-drop"): Test it. core: reverse!: Handle empty list. * src/mes.c (reverse_x_): Handle empty list. * tests/scm.test ("reverse! ()"): Test it. core: Add string ports. * src/mes.c (type_t): Add TPORT. (scm_type_port): New symbol. (PORT): New macro. (MAKE_STRING_PORT): New macro. (eval_apply): Handle string ports in primitive-load. (mes_symbols): Add scm_type_port. * src/posix.c (peekchar): Handle string ports. (readchar): New function. Replace all getchar callers. (unreadchar): Likewise. * module/mes/type-0 (port?): New function. * module/mes/guile.mes (with-input-from-file): Rewrite. (open-input-string): Remove. * module/mes/guile.scm (guile): Update cell types. * src/gc.c (gc_loop): Support TPORT. * src/lib.c (display_helper): Support TPORT. * module/mes/display.mes (display): Support TPORT. mes: assq, assoc-ref: Handle non-A-LISTs. * src/mes.c (assq): Return #f if A-LIST is not a list. * module/mes/scm.mes (assoc): Likewise. core: Use single definition rule for cell-type. * src/mes.c (scm_type_char, scm_type_closure, scm_type_continuation, scm_type_function, scm_type_keyword, scm_type_macro, scm_type_number, scm_type_pair, scm_type_ref, scm_type_special, scm_type_string, scm_type_symbol, scm_type_values, scm_type_variable, scm_type_vector): New symbol. (mes_symbols): Add them. * module/mes/type-0.mes (, , , , , , , , , , , , , , , , guix: Update mes to 0.13. * guix.scm (mes): Update to 0.13. (mes.git): Likewise. 2018-04-27 Jan Nieuwenhuizen Release 0.13. * configure (VERSION): Bump to 0.13. 2018-04-21 Jan Nieuwenhuizen doc: Release udpate. * BOOTSTRAP: Update. * HACKING: Update. * NEWS: Update. * README: Update. * doc/ANNOUNCE-0.13: New file. 2018-04-27 Jan Nieuwenhuizen mescc: Merge mescc.mes and mescc.scm. * scripts/mescc: New file. * scripts/mescc.mes: Remove. * guile/mescc.scm: Remove. * guile/guix/make.scm (CC.mescc): Update. * install.sh (TINYCC_SEED): Update. * make.scm (bootstrap?): Update. * test.sh (MES): Update. * check-boot.sh: Use $GUILE to allow running without Guile. core: Add chmod. * src/posix.c (chmod_): New function. 2018-04-25 Jan Nieuwenhuizen core: jam-scaper/garbage-collector: Use only one arena. * src/mes.c (ARENA_SIZE): Lower to 200000. (MES_MAX_ARENA): Bump to 300000000. (JAM_SIZE): New global. (make_cell__): Remove ARENA assert. (gc_init_cells): Alloc ARENA_SIZE + JAM_SIZE. (mes_symbols): Do not init news. (gc_init_news): Remove. (main): Initialize JAM_SIZE, consider MES_JAM environment variable. * src/gc.c (gc_init_news): Move from mes.c. Start at g_free. (gc_flip): Do not flip to g_news, instead copy g_news to cells. (gc_up_arena): Realloc to ARENA_SIZE + JAM_SIZE. (gc_): Init news. Only up arena if g_news is safe. 2018-04-24 Jan Nieuwenhuizen mescc: Create less garbage when dumping M1. * module/mes/M1.mes (display-join): New function. * (object->M1): Use it. core: last_pair: Move to core. * src/lib.c (last_pair): New function. * module/mes/scm.mes (last-pair): Remove. core: equal2_p: Add short-circuit and eliminate tail call. * src/lib.c (equal2_p): Add short-circuit and eliminate tail call. 2018-04-23 Jan Nieuwenhuizen mescc: Use display for dumping M1. * module/mes/M1.mes (object->M1): Use display for dumping M1. 2018-04-22 Jan Nieuwenhuizen mes: Guile-like command-line interface. * module/mes/boot-0.scm (tty?): Guile-like command-line interface. * scripts/repl.mes: Remove. * scripts/mescc.mes: Update. * tests/*.test: Update scripts. * module/mes/repl.mes (repl): Add ,quit. mes: getopt-long: Support stop-at-first-non-option. * module/mes/getopt-long.scm (process-options): Fix parsing `-'. Add parameter: stop-at-first-non-option. (getopt-long): Add keyword parameter #:stop-at-first-non-option. mes: Add isatty?. * src/posix.c (isatty_p): New function. mlibc: Add isatty. * lib/libc.c (isatty): New function. * include/unistd.h: Declare it. mlibc: Add ioctl. * stage0/x86.M1 (SYS_ioctl): New define. * lib/linux-mes.c (ioctl): New syscall. * lib/linux-gcc.c (ioctl): New syscall. * include/sys/ioctl.h: New file. 2018-04-10 Jan Nieuwenhuizen core: Compile minimal mes with MES_MINI=1. * src/mes.c: Compile minimal mes with MES_MINI=1. 2018-04-21 Jan Nieuwenhuizen core; reader_read_string: Support escaped characters. * src/reader.c (reader_read_string): Support escaped characters. 2018-04-22 Jan Nieuwenhuizen Revert "mescc: Use core:write." This reverts commit d88e31dfec3158a830c32f9f732b052cfccac6eb. 2018-04-21 Jan Nieuwenhuizen mescc: Use core:write. * scripts/mescc.mes (source->ast): Use core:write. 2018-04-22 Jan Nieuwenhuizen mes: display: Display escaped characters. * module/mes/display.mes (display): Display escaped characters. 2018-04-21 Jan Nieuwenhuizen core: display_helper: Display escaped characters. * src/lib.c (display_helper): Display escaped characters. mes: Resurrect macros in repl. * src/mes.c (scm_vm_begin_expand): Rename to core:begin-expand. (eval_apply): Expose it. * module/mes/repl.mes (repl): Use it to resurrect macros. core: Fixes for garbage collector/jam scraper. * src/gc.c (gc_loop): Do not relocate car of TCLOSURE, TCONTINUATION. Check for TBROKEN_HEART. * src/mes.c (make_closure_): Set car to 0. (check_apply): Check for TBROKEN_HEART. Fixes reporting artificial out-of-memory error. (eval_apply): Likewise. * src/vector.c (vector_entry): Only copy TCHAR and TNUMBER. core: drop global_p from variable. * src/mes (struct scm): Remove field global_p. (VARIABLE_GLOBAL_P): Remove. (make_variable_): Remove global_p parameter. Update callers. * src/lib.c (display_helper): Drop VARIABLE_GLOBAL_P support. core: Reenable full printing of lists. * src/lib.c (display_helper): Reenable full printing of lists. 2018-04-20 Jan Nieuwenhuizen core: append2, append_reverse, reverse, reverse!: Create less garbage. * src/mes.c (append_reverse): New function. (reverse_x_): New function. (append2): Use them to create less garbage. * module/mes/scm.mes (reverse): Create less garbage. * module/srfi/srfi-1.mes (reverse!): Rewrite, use core:reverse!. (append-reverse): Remove. core: vector_to_list: Create less garbage. * src/vector.c (vector_to_list): Create less garbage. core: Optimize vector-map, vector-for-each. * module/srfi/srfi-43.mes (vector-map): Optimize. (vector-for-each): Optimize. * tests/srfi-43.test: New file. * tests/srfi-43.test-guile: New file. * check.sh (tests): Add it. * make.scm (mes-tests): Add it. 2018-04-18 Jan Nieuwenhuizen Revert "build-32.sh" This reverts commit ace8b6f1b52de58c9ab404ed13234f397dac6bdc. 2018-04-16 Jan Nieuwenhuizen build-32.sh 2018-04-14 Jan Nieuwenhuizen core: Cleanup make_cell, remove tmp cells. * src/mes.c (make_cell__): New function. (make_cell_): Use it. (length__): New function. (tmp, tmp_num, tmp_num2, tmp_num_, tmp_num2_, make_tmps): Remove. Update callers to use make_cell__ directly. * src/vector.c (make_vector__): New function. (make_vector_): Use it. 2018-04-21 Jan Nieuwenhuizen Revert "mlibc: Use memmove in realloc." This reverts commit f47a21e3cb4814c4a30d10ff59e5c947441725e9. 2018-04-15 Jan Nieuwenhuizen mlibc: Use memmove in realloc. * src/libc.c (memmove): New function. (realloc): Use it. * src/libc+tcc.c (memmove): Remove. mes: Add char-whitespace? * module/srfi/srfi-14.mes (char-whitespace?): New function. 2018-04-14 Jan Nieuwenhuizen mes: Move base-0.mes int boot-0.scm. * module/mes/boot-02.scm: New file, rename from boot-0.scm. * module/mes/boot-0.scm: Add base-0.mes. * module/mes/base-0.mes: Remove. 2018-04-13 Jan Nieuwenhuizen mes: Unify mlibc-gcc and mes builds. * make.scm (bin.gcc): Remove stray slash. * src/mes.c: Unify mlibc-gcc and mes builds. (gc_init_cells): (gc_init_news): (bload_env): * src/reader.c (reader_read_character): (reader_read_string): 2018-04-12 Jan Nieuwenhuizen core: Remove local variables from gc. * src/gc.c (gl_loop): Remove local variables. core: Listen to MES_SAFETY environment variable. core: Remove local variables from eval/apply. * src/mes.c (eval_apply): Move all variables to global scope. core: Remove MesCC reminder. 2018-04-11 Jan Nieuwenhuizen core: Update default memory settings. * src/mes.c (MAX_ARENA_SIZE)[__MESC__]: Set to maximum 172100000. 2018-04-09 Jan Nieuwenhuizen core: Tune debug printing. * src/mes.c: Tune debug printing. * src/gc.c: Likewise. * module/mes/guile.mes: Likewise. * HACKING: Describe it. core: Rewrite reader to create less garbage. * src/reader.c (reader_read_line_comment): Rename from read_line_comment. (reader_identifier_p): New function. (reader_end_of_word_p): New function. (reader_read_identifier_or_number): New function. (reader_read_sexp_): Rewrite. Update callers. (reader_read_list): Rewrite. (reader_lookup_): Remove. 2018-04-10 Jan Nieuwenhuizen core: Add isspace. * include/ctype.h (isspace): Declare. * lib/libc.c (isspace): New function. 2018-04-08 Jan Nieuwenhuizen core: Rewrite string reader. * src/reader.c (reader_read_string): Rewrite, create much less garbage. (append_char): Remove. install: Fix prefix confusion. * install.sh: Substitute @PREFIX@ with MES_PREFIX. * scripts/mescc.mes: Grok PREFIX as MES_PREFIX. guix.scm: Update mes to 0.12. * guix.scm (mes, mes.git): Update to 0.12. 2018-04-06 Jan Nieuwenhuizen Release 0.12. * configure (VERSION): Bump to 0.12. 2017-11-21 Jan Nieuwenhuizen doc: Release udpate. * HACKING: Update. * INSTALL: Update. * NEWS: Update. * README: Update. * doc/ANNOUNCE-0.12: New file. * throughout: (janneke) coming out. 2018-04-08 Jan Nieuwenhuizen guix.scm: Update mescc-tools to 0.4. * guix.scm (mescc-tools): Update to 0.4. core: Workaround for mescc. * src/mes.c (eval_apply)[__MESC__]: Add reminder for macro_p, global_p. 2018-04-07 Jan Nieuwenhuizen build: Remove scripts/mes symlink. mes: Add string-fold, string-fold-right. * module/srfi/srfi-13.mes (string-fold, string-fold-right): New function. * tests/srfi-13.test ("string-fold"): Test it. ("string-fold-right"): Test it. mes: Allow tick as part of identifier. * src/reader.c (reader_read_sexp_): Do not treat tick as special. mescc: Remove debugging. * module/language/c99/compiler.mes: Remove debugging. mescc: No comments in M1 when running on Mes. * module/language/c99/compiler.mes (ast-comment): If mes?, return nil. mescc: Trace globals. * module/language/c99/compiler.mes (mescc:trace): New function. Use throughout. Revert "core: Add member." This reverts commit 921686a0a3b06281f1804d04e6d4a0344dda507a. core: Add member. * src/lib.c (member): New function. * module/mes/scm.mes (member): Remove. mescc: trace M1 dumping. * module/language/c99/compiler.mes (info->object): Add tracing. * module/mes/M1.mes (object->M1): Add tracing. Revert "guix: Update nyacc to 0.83.31." This reverts commit 624b85d6b1dd876542f7ad342d6beb8a92408397. guix: Update nyacc to 0.83.31. * guix.scm (nyacc): Update to 0.83.31. mescc: Have Nyacc trace functions while parsing. * guile/mescc.scm (main): Set NYACC_TRACE. * scripts/mescc.mes (main): Set NYACC_TRACE. mes: Add setenv. * src/posix.c (setenv_): New function. * tests/base.test ("setenv, getenv"): Test it. core: Add setenv. * lib/libc.c (setenv): New function. * include/stdlib.h (setenv): Declare it. * scaffold/tests/61-array.c (test): Test it. 2018-04-05 Jan Nieuwenhuizen guix: Add manifest. * build-aux/manifest.scm: New file. guix: Update Nyacc to 0.80.42. * guix.scm (nyacc): Update to 0.80.42. 2018-04-06 Jan Nieuwenhuizen mescc: Also print `parsing: input' when using -E. * module/language/c99/compiler.mes (c99-input->ast): Print `parsing: input'. (c99-input->info): Remove that. 2018-04-05 Jan Nieuwenhuizen core: Cleanup reader. * src/reader.c (reader_read_sexp_): Rename from reader_read_word_. Cleanup. (read_hash): Cleanup. mes: Cleanup formatting. core: Add equal2?. * src/lib.c (equal2_p): New function. * module/mes/base.mes (equal2?): Remove. core: Add memq. * lib/mes.c (memq): New function. * module/mes/scm.mes (memq): Remove. mes: Remove duplicate memq. * module/mes/base-0.mes (memq): Remove. 2017-12-09 Jan Nieuwenhuizen mes: Single environment lookup for variables, SICP chapter 3. * src/mes.c (t): Add TVARIABLE. (scm_vm_eval_deref): New vm special. (make_vref_): New internal function. (eval_apply): WIP: replace symbols with their variable reference. * src/gc.c (gc_loop): Handle TVARIABLE. * src/lib.c (display_helper): Handle TVARIABLE. * module/mes/type-0.mes (): New variable. (cell:type-alist): Add it. (variable?): New function. * module/mes/display.mes (display): Handle . 2018-04-03 Jan Nieuwenhuizen core: Remove override hook for read-input-file. * src/reader.c (read_input_file_env): Remove override hook for read-input-file. 2018-03-04 Jan Nieuwenhuizen mes: Iterative recursive macro expand. * src/mes.c (eval_apply): Iterative recursive macro expand. * src/posix.c (set_current_input_port): Return previous port. * module/mes/catch.mes (%eh): Use core:display. * module/mes/display.mes (display-cut, display-cut2): Move macro definitions to toplevel. 2018-04-04 Jan Nieuwenhuizen guix: records.scm: update from upstream. * guile/guix/records.scm: Update from upstream. 2018-01-25 Jan Nieuwenhuizen mes: Add incremental test suite. * check-boot.sh: New file. * check.sh: Invoke it. * module/srfi/srfi-16.mes: New file. * scaffold/boot/00-zero.scm: New file. * scaffold/boot/01-true.scm: New file. * scaffold/boot/02-symbol.scm: New file. * scaffold/boot/03-string.scm: New file. * scaffold/boot/04-cons.scm: New file. * scaffold/boot/04-quote.scm: New file. * scaffold/boot/05-list.scm: New file. * scaffold/boot/06-tick.scm: New file. * scaffold/boot/07-if.scm: New file. * scaffold/boot/08-if-if.scm: New file. * scaffold/boot/10-cons.scm: New file. * scaffold/boot/11-list.scm: New file. * scaffold/boot/12-car.scm: New file. * scaffold/boot/13-cdr.scm: New file. * scaffold/boot/14-exit.scm: New file. * scaffold/boot/15-display.scm: New file. * scaffold/boot/16-if-eq-quote.scm: New file. * scaffold/boot/20-define-quote.scm: New file. * scaffold/boot/20-define-quoted.scm: New file. * scaffold/boot/20-define.scm: New file. * scaffold/boot/21-define-procedure.scm: New file. * scaffold/boot/22-define-procedure-2.scm: New file. * scaffold/boot/23-begin.scm: New file. * scaffold/boot/24-begin-define.scm: New file. * scaffold/boot/25-begin-define-2.scm: New file. * scaffold/boot/26-begin-define-later.scm: New file. * scaffold/boot/26-define-define.scm: New file. * scaffold/boot/27-lambda-define.scm: New file. * scaffold/boot/28-define-define.scm: New file. * scaffold/boot/29-lambda-define.scm: New file. * scaffold/boot/2a-lambda-lambda.scm: New file. * scaffold/boot/2b-define-lambda.scm: New file. * scaffold/boot/2c-define-lambda-recurse.scm: New file. * scaffold/boot/2d-define-lambda-set.scm: New file. * scaffold/boot/2e-define-second.scm: New file. * scaffold/boot/30-capture.scm: New file. * scaffold/boot/31-capture-define.scm: New file. * scaffold/boot/32-capture-modify-close.scm: New file. * scaffold/boot/33-procedure-override-close.scm: New file. * scaffold/boot/34-cdr-override-close.scm: New file. * scaffold/boot/35-closure-modify.scm: New file. * scaffold/boot/36-closure-override.scm: New file. * scaffold/boot/37-closure-lambda.scm: New file. * scaffold/boot/38-simple-format.scm: New file. * scaffold/boot/40-define-macro.scm: New file. * scaffold/boot/41-when.scm: New file. * scaffold/boot/42-if-when.scm: New file. * scaffold/boot/43-or.scm: New file. * scaffold/boot/44-or-if.scm: New file. * scaffold/boot/45-pass-if.scm: New file. * scaffold/boot/46-report.scm: New file. * scaffold/boot/47-pass-if-eq.scm: New file. * scaffold/boot/48-let.scm: New file. * scaffold/boot/49-macro-override.scm: New file. * scaffold/boot/4a-define-macro-define-macro.scm: New file. * scaffold/boot/4b-define-macro-define.scm: New file. * scaffold/boot/4c-quasiquote.scm: New file. * scaffold/boot/50-primitive-load.scm: New file. * scaffold/boot/51-module.scm: New file. * scaffold/boot/52-define-module.scm: New file. * scaffold/boot/53-closure-display.scm: New file. * scaffold/boot/60-let-syntax.scm: New file. * scaffold/boot/closure.scm: New file. * scaffold/boot/compose.scm: New file. * scaffold/boot/data/bar.mes: New file. * scaffold/boot/data/i.scm: New file. * scaffold/boot/data/module.mes: New file. * scaffold/boot/foo.scm: New file. * scaffold/boot/lambda-star.scm: New file. * scaffold/boot/vector.scm: New file. * tests/boot.test: New file. * tests/boot.test-guile: New file. * tests/srfi-16.test: New file. * tests/srfi-16.test-guile: New file. 2018-02-03 Jan Nieuwenhuizen mes: Boot from MES_BOOT, boot-0.scm. * src/mes.c (load_env): Softcode loading of boot-0.scm from environment variabl MES_BOOT. * module/mes/boot-00.scm: New file. * module/mes/boot-01.scm: New file. * module/mes/boot-0.scm: Rename from read-0.mes. * module/mes/module.mes: New file. 2018-03-04 Jan Nieuwenhuizen build: Add -fno-stack-protector for debian. * guile/guix/make.scm (%C32-FLAGS): Add -fno-stack-protector. 2018-01-06 Jan Nieuwenhuizen mes: reader: reader_ prefix; read/write char/string in core. * src/posix.c (peek_char, read_char, read_string, unread_char, write_char): New function. * src/reader.c: Use reader_ prefix. r# bootstrappable.org 2018-01-25 Jan Nieuwenhuizen mes: More informative error reporting for number asserts. * src/math.c (assert_number): New function. Update assert () users. 2018-01-27 Jan Nieuwenhuizen guile: Resurrect eval/apply in scheme. * guile/mes.mes (eval-expand): Short-circuit make-closure. * guile/mes.scm (environment): Update. 2018-02-03 Jan Nieuwenhuizen mes: simple-format: support ~A, ~S. * module/mes/display.scm (simple-format): support ~A, ~S. 2018-01-22 Jan Nieuwenhuizen core: Display and write string and char compliance. * src/lib.c (display_helper): Display and write char and string compliance. 2018-02-03 Jan Nieuwenhuizen mes: display: Support keyword. * src/lib.c (display_helper): Support keyword. 2018-01-12 Jan Nieuwenhuizen mes: display: vector. * src/lib.c (display_helper): Display vector. 2018-01-14 Jan Nieuwenhuizen mes: display: closure names. * src/lib.c (display_helper): Display closure names. 2018-01-07 Jan Nieuwenhuizen mes: Rename make-vector to core:make-vector. * src/vector.c (make_vector_): Rename from make_vector. Update callers. mes: Better error reporting. * src/lib.c (write_error_): New function. * src/mes.c (error, check_apply): Use it. (append2, set_car_x): Upon error, call error (WAS: assert). Revert "mes: un-defmacro optargs. WIP" This reverts commit 5da527c540dc0e1481a010899233b4e806fe37da. 2018-01-06 Jan Nieuwenhuizen mes: un-defmacro optargs. WIP mes: Test optargs without pmatch. * tests/optargs.test: Remove pmatch. mes: Add define-macro*. * module/mes/optargs.mes (define-macro*): New macro. 2018-01-05 Jan Nieuwenhuizen mes: Evaluate test of COND only once. * module/mes/base-0.mes (cond): Evaluate test of COND only once. Fixes cond tests with side effects (Nyacc). * tests/base.test ("cond side effect"): Test it. 2018-01-04 Jan Nieuwenhuizen mes: #\page is whitespace. * module/srfi/srfi-14.mes (char-set:whitespace): Add #\page. mes: # is not a character. * module/mes/display.mes (display): * module/mes/type-0.mes (char?): -1 is not a character. (eof-object?): New function. * tests/base.test ("#"): Test it. * module/mes/scm.mes (eof-object?): Remove. (unread-char): Return character (WAS: integer). mes: open-input-string: peek fix. * module/mes/guile.mes (open-input-string): Return actual tell. * tests/guile.test ("open-input-string peek"): Test it. mes: with-input-from-string: peek fix. * module/mes/guile.mes (with-input-from-string): Return actual tell. * tests/guile.test ("with-input-from-string peek"): Test it. 2018-01-03 Jan Nieuwenhuizen mescc: Resurrect guile-1.8. * guile/mescc.scm: Use GUILE_LOAD_COMPILED_PATH instead of -C. [guile]: Include syncase. * module/language/c99/compiler.scm [guile]: Stub pretty-print-c99. Set stack to unlimited. * module/language/c99/info.scm [guile]: Include (ice-9 syncase). * module/mes/as-i386.scm [guile]: Likewise. * module/mes/guile.scm [guile]: Add compose, export it. mes: Add string-drop-right. * module/srfi/srfi-13.mes (string-drop-right): New function. 2018-01-02 Jan Nieuwenhuizen mescc: cleanups. * guile/mescc.scm: Cleanups. * module/language/c99/compiler.mes: * module/language/c99/compiler.scm: * module/language/c99/info.mes: * module/language/c99/info.scm: * module/mes/getopt-long.mes: * module/mes/optargs.mes: * module/mes/optargs.scm: * module/mes/repl.mes: * module/mes/scm.mes: * scripts/mescc.mes: nyacc cpp-debugging, tests mes: getopt-long: fix multi-opt and unclumping. * module/mes/getopt-long.scm (remove-if-not): Remove. (option-spec): Add value field. Update users. (expand-clumped-singles): Simplify, fix. (process-options): To get an option's value, use value instead of value-policy. Fixes multi-opt. * tests/getopt-long.test: New file. * make.scm (mes-tests): Add it. * check.sh (tests): Add it. * tests/getopt-long.test-guile: New symlink. guix: back to 0.80.41 for tinycc. guix.scm (nyacc): New variable. 2018-01-01 Jan Nieuwenhuizen mes: Support equal? with arbitrary number of arguments. * module/mes/base.mes (equal2?): Rename from equal?. (equal?): Implement. mescc: Use records for mes too. * module/language/c99/info.mes: Use info.scm records, remove simplistic list data structures. mescc.mes: Use write for preprocessing output. * scripts/mescc.mes (source->ast): Use core:write instead of pretty-print. mes: Add write, core:write. * src/lib.c (display_helper, fdisplay_): Add parameter, write_p. Update callers. When write_p: write quoted strings. (write_, write_port_): New function. * module/mes/read-0.mes (write): New function. mes: gc_safety. check-mescc.sh: run with mes. * src/build.sh: * src/check-mescc.sh: Run with mes. mes: Add string-null?. * module/srfi/srfi-13.mes (string-null?): New function. mes: Add dirname. * module/mes/guile.mes (dirname): New function. 2018-01-01 Jan Nieuwenhuizen test: Add syntax tests. * tests/syntax.test: New file. * tests/syntax.test-guile: New file. fixup: 1b0696f9 (Jan Nieuwenhuizen 2018-01-01 15:53:13 +0100 40) , (lambda () 2017-12-17 Jan Nieuwenhuizen Revert "mes: use array-based stack. WIP: will not survice gc." This reverts commit 7fb653f68c2dbf8bc83cce4bd138439c600b538f. 2017-12-14 Jan Nieuwenhuizen mes: use array-based stack. WIP: will not survice gc. * src/mes.c (STACK_SIZE)[MES_ARRAY_STACK]: New variable. (g_stack_array): New variable. (g_stack): Change type to SCM*. * (gc_push_frame)[MES_ARRAY_STACK]: Use g_stack_array, g_stack. (gc_peek_frame): Likewise. (gc_pop_frame): Likewise. * src/gc.c (gc_check): Likewise. (gc): Likewise. 2017-12-12 Jan Nieuwenhuizen mes: Fix assq to improve performance. * src/mes.c (assq): Special case eq_p to improve performance. 2017-12-11 Jan Nieuwenhuizen mes: Reimplement records. * module/srfi/srfi-9.mes (define-record-type): New macro. * AUTHORS: Update. * module/mes/record-0.mes: Remove. * module/mes/record.mes: Remove. * module/srfi/srfi-9-psyntax.mes: Remove. * module/srfi/srfi-9.scm: Remove. * make.scm: Remove them. mes: Fix display of closure. * module/mes/display.mes (display): Drop extra ( at start of *closure*, *circ*. * src/lib.c (display_helper): Likewise. 2017-12-09 Jan Nieuwenhuizen mes: Resurrect define, define-macro in C core. * make.scm (bin.gcc, bin.mescc): Use MES_C_READER=1. * src/mes.c (scm_symbol_define, scm_symbol_define_macro): New symbol. (scm_vm_eval_define): New special. (scm_symbol_c_define): New symbol. (MAKE_MACRO): New define. (eval_apply)[MES_C_DEFINE]: Handle define, define-macro. (mes_symbols): Define %c-define for use in read-0.mes. * module/mes/read-0.mes: Do not implement full scheme define if %c-define. * module/mes/quasiquote.mes (sexp:define, env:define, env:macro): New function. (define-macro): New macro. FIXME * module/mes/psyntax.mes (define): New macro. FIXME 2017-12-10 Jan Nieuwenhuizen mes: Fix initial display. * module/mes/read-0.mes (display): Fix. 2017-12-11 Jan Nieuwenhuizen mes: Fix compile warning in reader. * src/reader.c[MES_C_READER]: Declare read_block_comment, read_hash. Fixes compile warning. 2017-12-09 Jan Nieuwenhuizen mescc: Allow invoking git mescc.mes from elsewhere. * src/mes.c (load_env): Look in MES_PREFIX too. Add debug printing. * scripts/mescc.mes: Consider MES_PREFIX. * guile/mescc.scm (%prefix): Consider MES_PREFIX. * module/mes/base-0.mes (string->list): New function, move from type-0.mes. (%moduledir): Consider MES_PREFIX. * module/mes/type-0.mes (string->list): Remove. mescc: Output performance hacks: use core:display. * src/lib.c (display_): Write to g_stdout (WAS: STDOUT). * module/mes/guile.scm (guile): Declare and export core:display core:display-error. * module/mes/M1.mes (object->M1): Use core:display and string-append instead of format. * module/mes/guile.mes (with-input-from-string): Add debugging. (open-input-string): Likewise. (read-string): Likewise. Re-implement. (drain-input): Use read-string. mes: Nyacc support: substring/copy, substring/shared. * module/srfi/srfi-13.mes (substring/copy, substring/shared): Define to substring. mes: Nyacc support: Read old characters. * src/reader.c (read_character)[MES_C_READER]: Support reading old characters: #\bel, #\bs, #\vt. mes: resurrect running MesCC: handle \t in strings. * src/reader.c (read-string): Handle \t. Fixex M1 output. mescc: Use small, bootstrappable syntax rather than huge psyntax seed. * module/nyacc/lex.mes (mes): Use syntax (WAS: psyntax). * module/mes/pmatch.mes (mes): Likewise. * module/nyacc/lang/c99/parser.mes (srfi-9): Use syntax (WAS: srfi-9-psyntax). mes: Fix for pmatch on bootstrappable syntax-rules. * module/mes/pmatch.scm (ppat): Do not use let. * tests/pmatch.test ("pmatch nyacc minimal", "pmatch nyacc"): Test it. 2017-12-05 Jan Nieuwenhuizen mlibc: M4 support: robustify headers, add sys/signal.h. * include/errno.h (ERANGE): New define. * include/stdarg.h (size_t): Undefine before typedef. * include/stdint.h: Likewise. * include/stdio.h: Likewise. * include/stdlib.h: Likewise. * include/sys/types.h: Likewise. * include/string.h: Likewise. (ssize_t): Undefine before typedef. * include/unistd.h: Likewise. (off_t): Undefine before typedef. * include/sys/stat.h (struct stat): New stub. * include/sys/signal.h: New file. 2017-12-04 Jan Nieuwenhuizen mescc: M4 support: scaffold/tests/82-define.c. * scaffold/tests/82-define.c: New file; inspired by M4. Thanks, Ricardo! * make.scm ("82-define"): Build it. * check-mescc.sh: Add 82-define. mlibc: Tinycc support: Avoid hex. * include/00-test.i (main)[__TINYC__]: Do not use $0x. mlibc: Tinycc support: qsort. * lib/libc+tcc.c (qswap, qpart): New function (qsort): Implement. * scaffold/tests/81-qsort.c: Test it. * make.scm ("81-qsort"): Build it. 2017-12-03 Jan Nieuwenhuizen mescc: scaffold: misc cleanups. * scaffold/tests/44-switch.c (swits): More case labels. * scaffold/tests/60-math.c: Discriminate return values. * scaffold/tests/77-pointer-assign.c (memset)[__TINYC__]: Remove. * scaffold/tests/79-int-array.c (test): Discriminate return values. mlibc: Tinycc support: __udivdi3, __umoddi3. * lib/libc+tcc-gcc.c (__udivdi3, __umoddi3): Fix signature, do not crash on simple integer devisions. mescc: Tinycc support: Respect word size better. * stage0/x86.M1 (movzwl_0x32(%ebp),%eax,movzwl_0x8(%ebp),%eax): New define. * module/mes/as-i386.mes (i386:push-word-local-de-ref, i386:word-local->accu): New function. * module/mes/as-i386.scm: Export them. * module/language/c99/compiler.mes (push-local-de-ref): Respect word size. (ident->accu): Likewise. mlibc: New library layout; remove duplication. * lib/libc+tcc-gcc.c: New file: Libc bits for GCC from libc-mes+tcc.c. * lib/libc+tcc-mes.c: New file: Libc bits for MesCC from libc-mes+tcc.c. * lib/libc+tcc.c: New file: Libc bits from libc-mes+tcc.c. * lib/libc.c: New file: Merged from libc-mes.c, libc-gcc.c. (abtoi): New function: Rename from _atoi. * lib/linux+tcc-gcc.c: New file: Linux bits from libc-gcc+tcc.c. * lib/linux+tcc-mes.c: New file: Linux bits from libc-mes+tcc.c. * lib/linux-gcc.c: New file: Linux bits from libc-gcc.c. * lib/linux-mes.c: New file: Linux bits from libc-mes.c. * lib/mini-libc-gcc.c: New file. * lib/mini-libc.c: New file: Libc bits from mini-libc-mes.c. * lib/mini-linux-gcc.c: New file. * lib/mini-linux-mes.c: New file: Linux bits from mini-libc-mes.c. * lib/libc-gcc.c: Remove duplication using include now. * lib/libc-mes.c: Likewise. * lib/mini-libc-mes.c: Likewise. * include/stdio.h (puts)[POSIX]: Remomve macro. (fputc, fputs)[!POSIX]: New macro. (fputc, fputs): Remove declaration. * scaffold/tests/7j-strtoull.c (strtoull, test): Use abtoi. * src/lib.c (fputs)[__MESC__]: Remove define. * guile/guix/make.scm: Update for new library layout. * make.scm: Likewise. * build.sh: Likewise. * install.sh: Likewise. mlibc: Tinycc support: itoab, for debugging. * lib/libc-gcc.c (itoab): New function. * lib/libc-mes.c (itoab): New function. 2017-12-02 Jan Nieuwenhuizen mescc: prefix string labels with _. * module/mes/M1.mes (object->M1): Prefix string lables with _. mescc: prefix local labels with _. * module/language/c99/compiler.mes (expr->accu): prefix local labels with _. bootstrap: Update build script. * build.sh: Add blood-elf, use -o. mlibc: Mescc-tools support: fix for [v]fprintf. * lib/libc-mes+tcc.c (vfprintf): Bugfix: print to fd. 2017-11-29 Jan Nieuwenhuizen mes: resurrect full reader in C core. * module/mes/read-0.mes (defined?): New function. (eat-whitespace, read-env, read-word, read-block-comment, read-line-comment, read-list, read-character, read-hex, read-octal, reader:read-string, lookup, read-hash, read-word): Only define if not %c-reader. * module/mes/base-0.mes (defined?): Remove. * src/mes.c[MES_C_READER]: Set ARENA_SIZE=10000000. (scm_symbol_quasiquote scm_symbol_unquote, scm_symbol_unquote_splicing, scm_symbol_syntax, scm_symbol_quasisyntax, scm_symbol_unsyntax, scm_symbol_unsyntax_splicing): New symbol. (scm_symbol_c_reader): New symbol. (MAKE_KEYWORD)[MES_C_READER]: New define. (mes_symbols): Define %c_reader. * src/reader.c (read_word_)[MES_C_READER]: Extend to full Scheme reader. (eat_whitespace)[MES_C_READER]: Likewise. (read_block_comment, read_hash, read_word, read_character, read_octal, read_hex, append_char, read_string)[MES_C_READER]: Likewise. * make.scm (bin.gcc,bin.mescc): Define MES_C_READER=1. 2017-11-27 Jan Nieuwenhuizen mescc: Mescc-tools support: char foo[BAR] = {'a', 'b', 'c'}. * stage0/x86.M1 (mov____%al,0x8(%ebp), mov____%al,0x32(%ebp), mov____%ax,0x8(%ebp), mov____%ax,0x32(%ebp)): New define. * module/mes/as-i386.mes (i386:accu->local+n,i386:byte-accu->local+n, i386:word-accu->local+n): New function. * module/language/c99/compiler.mes (accu->local+n): New function. (initzer->data): Return char as single byte. (decl->info): Support char foo[BAR] = {'a', 'b', 'c'}. * scaffold/tests/66-local-char-array.c: Test it. * make.scm (add-scaffold-test): Build it. 2017-11-26 Jan Nieuwenhuizen mlibc: Mescc-tools support: chmod. * stage0/x86.M1 (SYS_chmod): New define. * lib/libc-gcc.c (chmod): New function. * lib/libc-mes.c (chmod): New function. mlibc: GNU Gcc support: setjmp, longjmp. * stage0/x86.M1 (jmp____*%ebx): New macro. (mov____0x8(%ebp),%ebp): New macro. (mov____0x8(%ebp),%esp): New macro. * include/setjmp.h (jmp_buf): Redefine as struct. * lib/libc-mes+tcc.c (longjmp, setjmp): Implement. * scaffold/tests/80-setjmp.c: Test it. * make.scm ("80-setjmp"): Build it. * .gitignore: Ignore *.tcc-guile. 2017-11-25 Jan Nieuwenhuizen mlibc: GNU Gcc support: ferror. * lib/libc-mes+tcc.c (ferror): New function. * include/stdio.h (ferror): Declare it. 2017-11-24 Jan Nieuwenhuizen bootstrap: Add bootstrap build scripts. * build.sh: New file. * check-mescc.sh: New file. * check.sh: New file. * install.sh: New File. 2017-11-23 Jan Nieuwenhuizen remove obsolete Nyacc link. * guile/nyacc: Remove. 2017-11-22 Jan Nieuwenhuizen build: mlib/include to include, move mlib to lib. * include: Move from mlib/include. * lib: Move from mlib. * BOOTSTRAP: Update. * HACKING: Update. * guile/guix/make.scm: Update. * make.scm: Update. * module/language/c99/compiler.mes: Update. 2017-11-21 Jan Nieuwenhuizen mes: Resurrect running mes tests tests/*.test with Guile. * tests/tests/base.test-guile: New file to resurrect running Mes test with Guile. * tests/catch.test-guile: Symlink for same purpose. * tests/closure.test-guile: Likewise. * tests/cwv.test-guile: Likewise. * tests/display.test-guile: Likewise. * tests/fluids.test-guile: Likewise. * tests/guile.test-guile: Likewise. * tests/let-syntax.test-guile: Likewise. * tests/let.test-guile: Likewise. * tests/match.test-guile: Likewise. * tests/math.test-guile: Likewise. * tests/module.test-guile: Likewise. * tests/optargs.test-guile: Likewise. * tests/peg.test-guile: Likewise. * tests/pmatch.test-guile: Likewise. * tests/psyntax.test-guile: Likewise. * tests/quasiquote.test-guile: Likewise. * tests/read.test-guile: Likewise. * tests/record.test-guile: Likewise. * tests/scm.test-guile: Likewise. * tests/srfi-1.test-guile: Likewise. * tests/srfi-13.test-guile: Likewise. * tests/srfi-14.test-guile: Likewise. * tests/vector.test-guile: Likewise. * make.scm (add-guile-test): New function. Use it to run running tests/*.test-guile. 2017-11-20 Jan Nieuwenhuizen mes: resurrect running MesCC: handle \t in strings. * module/mes/read-0.mes (reader:read-string): Handle \t. Fixex M1 output. mes: Nyacc support: with-fluids. * module/mes/fluids.mes (with-fluids): New macro. * tests/fluids.test ("with-fluids"): Test it. mes: resurrect running MesCC: update info interface. * module/language/c99/info.mes (type?, global?, local?): New function. (make-global): Remove name parameter. * module/nyacc/lang/c99/pprint.mes: New file. 2017-12-17 Jan Nieuwenhuizen mes: Add last. * module/srfi/srfi-1.mes (last): New funcion. 2017-11-20 Jan Nieuwenhuizen mes: Add reverse-list->string. * module/srfi/srfi-13.mes (reverse-list->string): New function. bootstrap: Unbundle necessary M1 sources. * mlibc/crt1.M1: Remove. * mlibc/libc-mes.M1: Remove. * src/mes.M1: Remove. 2017-11-19 Jan Nieuwenhuizen mlibc: Mescc-tools support: fix fgetc. * mlibc/libc-mes.c (fgetc): Fix from completely fubar. mlibc: Mescc-tools support: strtol: partly implement stub. * mlibc/libc-mes+tcc.c (strtol): Partly implement stub. mlibc: Mescc-tools support: getopt, getopt_long. * mlibc/getopt.c: Move to ANSI C. Remove GETOPT_COMPAT and non-POSIXLY_CORRECT options. * mlibc/include/getopt.h: New file. * mlibc/libc-gcc+tcc.c: Include getopt.c. * mlibc/libc-mes+tcc.c: Likewise. mlibc: Mescc-tools support: import getopt_long. * mlibc/getopt.c: Import from gcc-2.0. Revert "mescc: Grok char foo[] parameter." This reverts commit c4cc75105db48b550cd515751b766b2e7a88ddc3. mescc: Grok char foo[] parameter. * module/language/c99/compiler.mes (function->text+data): Grok char foo[] parameter. mescc: Grok char *const foo[]; * module/language/c99/compiler.mes (ast-strip-const): Grok char *const argv[]; mlibc: Mescc-tools support: endianness. * mlibc/include/endian.h: New file. * mlibc/include/ctype.h[!(__GNUC__ && POSIX)]: Include it. * mlibc/include/stdlib.h: Likewise. * mlibc/include/sys/types.h: Likewise. mlibc: Mescc-tools support: exit stati. * mlibc/include/stdlib.h (EXIT_FAILURE, EXIT_SUCCESS): New define. 2017-11-18 Jan Nieuwenhuizen mescc: cleanup obsolete Nyacc 0.7x compatibility. * module/language/c99/compiler.mes (ast-type->type, ast->type expr->accu, struct-field, decl->info,): Remove obsolete Nyacc 0.7x patterns. guix: Release update. * guix.scm (mes): Update commit, hash and version. Add 'make-git-source-writable stage. Release 0.11. * configure (VERSION): Bump to 0.11. 2017-11-11 Jan Nieuwenhuizen doc: Release udpate. * HACKING: Update. * INSTALL: Update. * NEWS: Update. * README: Update. * doc/ANNOUNCE-0.11: New file. 2017-11-18 Jan Nieuwenhuizen build: fix for 07-include, thanks rain1! * make.scm (add-scaffold-test): New keyword parameter: includes. ("07-include"): Use it. build: support gcc -m32, thanks rain1! * guile/guix/make.scm (%CC32): fallback to %CC. (%C32-FLAGS): Add -m32, to suppor gcc -m32. (LINK.gcc): Use it. 2017-11-18 Jan Nieuwenhuizen bootstrap: Update necessary M1 sources. M1 -f stage0/x86.M1 -f mlibc/crt1.M1 --LittleEndian --Architecture=1 > mlibc/crt1.hex2 M1 -f stage0/x86.M1 -f mlibc/mini-libc-mes.M1 --LittleEndian --Architecture=1 > mlibc/libc-mes.hex2 M1 -f stage0/x86.M1 -f src/mes.M1 --LittleEndian --Architecture=1 > src/mes.hex2 hex2 --LittleEndian --Architecture=1 --BaseAddress=0x1000000 -f stage0/elf32-header.hex2 -f mlibc/crt1.hex2 -f mlibc/libc-mes.hex2 -f src/mes.hex2 -f stage0/elf32-footer-single-main.hex2 > src/mes-mes exec_enable src/mes-mes * mlibc/libc-mes.M1: Update. * src/mes.M1: Udate. 2017-11-18 Jan Nieuwenhuizen mescc: Tinycc support: test #include. * scaffold/tests/exit-42.i: New file. * scaffold/tests/07-include.c: New file. * make.scm ("07-include"): Build it. 2017-11-17 Jan Nieuwenhuizen mescc: Tinycc support: struct struct array. Support struct foo { struct bar baz[N]; struct bar bla*[M]; }; * module/language/c99/compiler.mes (expr->accu): * scaffold/tests/7n-struct-struct-array.c: Test it. * make.scm (add-scaffold-test): Build it. 2017-11-16 Jan Nieuwenhuizen mlibc: Tinycc support: support, most syscalls stubbed. * mlibc/libc-gcc.c (exit, write)[__TINYC__]: tcc-compatible gcc-style asm implementation. (read,open,access,brk,fsync)[__TINYC__]: Stub body. * mlibc/libc-gcc+tcc.c (close,unlink, lseek, getcwd)[__TINYC__]: Stub body. * mlibc/libc-mes+tcc.c: Support tinycc. * mlibc/include/00-test.i (main) [__TINYC__]: Support tcc. mescc: Tinycc support: empty for. * module/language/c99/compiler.mes (test-jump-label->info): Handle empty expression. * make.scm (add-tcc-test "45_empty_for"): Test it. tinycc: scaffold/main.c: running mes-tcc compiled binary #6. * scaffold/main.c (main): Use variable, if, argc, ++, +=, function call to return 42. 2017-11-15 Jan Nieuwenhuizen tinycc: scaffold/main.c: running mes-tcc compiled binary #5. * scaffold/main.c (main): Use function call and variable to return 42. 2017-11-14 Jan Nieuwenhuizen tinycc: scaffold/main.c: running mes-tcc compiled binary #4. * scaffold/main.c (main): Use variables to return 42. mescc: Tinycc support: workaround lack of long long support. * module/language/c99/compiler.mes (i386:type-alist): Use size=4 for long long as a workaround. 2017-11-11 Jan Nieuwenhuizen mescc: refactor expr->accu, expr->accu*, fixes nontrivial struct by value assign. * module/language/c99/compiler.mes: (pke): New function. (expr->number): Rename from p-expr->number. Update callers. (decl->info, init-declr->pointer, struct-field): Several pointeryness fixes. (expr->accu*, expr->accu): Remove special-casing for foo.bar, foo->bar, foo[bar]. Fixes struct by value assign for non-trival expressions. (accu->ident, ident-address->accu, ident->accu): (base->ident-address, ident->base): Remove. * scaffold/tests/7k-for-each-elem.c (test): Test it. * scaffold/tests/7c-dynarray.c (test): Test it. * scaffold/tests/7m-struct-char-array-assign.c: Test it. * make.scm (add-scaffold-test): Build it. mlibc: errno.h: declare errno without extern. * mlibc/include/errno.h: drop extern. Fixes tcc compile. guix: nyacc: Update to 0.82.4. * guix.scm (nyacc): Update to 0.82.4. 2017-09-10 Jan Nieuwenhuizen guix: Release update. * guix.scm (mes): Update commit, hash and version. Release 0.10. * configure (VERSION): Bump to 0.10. doc: Release udpate. * HACKING: Update. * INSTALL: Update. * NEWS: Update. * doc/ANNOUNCE-0.10: New file. * BOOTSTRAP: New file. * make.scm: Install them. 2017-09-10 Jan Nieuwenhuizen bootstrap: Include necessary M1 sources. M1 -f stage0/x86.M1 -f mlibc/crt1.M1 --LittleEndian --Architecture=1 > mlibc/crt1.hex2 M1 -f stage0/x86.M1 -f mlibc/mini-libc-mes.M1 --LittleEndian --Architecture=1 > mlibc/libc-mes.hex2 M1 -f stage0/x86.M1 -f src/mes.M1 --LittleEndian --Architecture=1 > src/mes.hex2 hex2 --LittleEndian --Architecture=1 --BaseAddress=0x1000000 -f stage0/elf32-header.hex2 -f mlibc/crt1.hex2 -f mlibc/libc-mes.hex2 -f src/mes.hex2 -f stage0/elf32-footer-single-main.hex2 > src/mes-mes exec_enable src/mes-mes * mlibc/crt1.M1: New File. * mlibc/libc-mes.M1: New File. * src/mes.M1: New File. 2017-09-10 Jan Nieuwenhuizen guix: Bump Nyacc to 0.82.0. * guix.scm (nyacc): Bump to 0.82.0. mescc: Support Nyacc-0.81.0. * module/language/c99/compiler.mes (ast->info): Handle asm-expr from Nyacc 0.81.0. 2017-09-03 Jan Nieuwenhuizen tinycc: scaffold/main.c: running tcc-compiled binary #3. * scaffold/main.c (main): Remove asm. 2017-09-10 Jan Nieuwenhuizen mescc: Tinycc support: struct by value assign. * module/language/c99/compiler.mes (expr->accu): warn for unsupported sizes. * scaffold/tests/7h-struct-assign.c (test): Test it. 2017-09-02 Jan Nieuwenhuizen tinycc: scaffold/main.c: running tcc-compiled binary #2. * scaffold/main.c (main)[__i386__]: Rename from _start. 2017-09-10 Jan Nieuwenhuizen build: compile crt1.c, libc-mesc.c and .c separately. * mlibc/crt1.c: New file. * mlibc/libc-mes.c (_start): Remove. * mlibc/libc-gcc.c (_start): Remove. * make.scm (LINK.hex2, bin.mescc): Move from guile/guix/make.scm. * guile/guix/make.scm (LINK.hex2, bin.mescc): Remove. 2017-09-03 Jan Nieuwenhuizen mescc: Tinycc support: refactor _start. * mlibc/libc-mes.c (_start): Refactor. (_env): Remove. * stage0/x86.M1: 2017-08-19 Jan Nieuwenhuizen tinycc: scaffold/main.c: first running tcc-compiled binary. * scaffold/main.c (_start): Exit 42 using asm. 2017-08-27 Jan Nieuwenhuizen mescc: Tinycc support: fix *--p = 'x'. * module/language/c99/compiler.mes (expr->accu): Respect size in *--p = 'x'. * scaffold/tests/23-pointer.c (test): Test it. mescc: Tinycc support: initializer arithmetic. * module/language/c99/compiler.mes (p-expr->bool): New function (p-expr->number): Support bitwise-and, bitwise-not, cast, cond-expr. core: Add logand, lognot. * src/math.c (logand, lognot): New function. mescc: Tinycc support: array of struct of any size. * module/language/c99/compiler.mes (accu*value): New function (expr->accu*): Use it to support array of struct of any size. * scaffold/tests/7l-struct-any-size-array.c: Test it. * make.scm (add-scaffold-test): Build it. mescc: Tinycc support: stdint.h: declare size_t. * mlibc/include/stdint.h (size_t)[!__MES_SIZE_T]: Declare. 2017-08-26 Jan Nieuwenhuizen mescc: Tinycc support: pointer arithmetic with pointer-variable. * module/language/c99/compiler.mes (expr->accu): pointer arithmetic with pointer-variable. * scaffold/tests/76-pointer-arithmetic.c (test): Test it. * mlibc/include/stdarg.h (va_start): Update for fixed pointer arithmetic. 2017-08-25 Jan Nieuwenhuizen mescc: Tinycc support: pointer arithmetic with &variable. * module/language/c99/compiler.mes (expr->pointer): Handle ref. * scaffold/tests/76-pointer-arithmetic.c: Test it. 2017-08-23 Jan Nieuwenhuizen mescc: Tinycc support: pointer arithmetic with variable. * module/language/c99/compiler.mes (expr->accu): Support pointer arithmetic with variable: p + i, p - i, p += i, p -= i. * scaffold/tests/76-pointer-arithmetic.c (test): Test it. mescc: Tinycc support: handle pointerness, siziness for cast foo*. * module/language/c99/compiler.mes (expr->pointer): Support cast foo*. (expr->size): Likewise. * scaffold/tests/7k-for-each-elem.c: Test it * make.scm (add-scaffold-test): Build it. 2017-08-19 Jan Nieuwenhuizen mescc: Tinycc support: strtoull. * mlibc/include/mlibc.h (_atoi): Declare. * mlibc/include/ctype.h (isxdigit): Declare. * mlibc/libc-gcc.c (isxdigit, _atoi): New function. (atoi): Use it. * mlibc/libc-mes.c (isxdigit, _atoi): New function. (atoi): Use it. * scaffold/tests/7j-strtoull.c (test): Test it. * make.scm (add-scaffold-test): Build it. 2017-08-12 Jan Nieuwenhuizen mescc: Tinycc support: snprintf. * mlibc/include/stdarg.h (vsprintf): Declare. * mlibc/libc-gcc.c (vsprintf): New function. (sprintf): Use it. * mlibc/libc-mes+tcc.c (snprintf): Implement. * mlibc/libc-mes.c (vsprintf): New function (sprintf): Use it. 2017-08-10 Jan Nieuwenhuizen mescc: Tinycc support: struct.struct. * module/language/c99/compiler.mes (field:name): (field:pointer): (field:size): (field:type): (field-field): (field-offset): (struct-field): Support struct.struct. * scaffold/tests/7i-struct-struct.c: Test it. * make.scm (add-scaffold-test): Build it. mescc: Fix compile warnings. * mlibc/include/stdio.h (fdputs): Declare. * mlibc/libc-gcc.c (malloc): (memcpy): Fix compile warning. mescc: Tinycc support: --*p, ++*p. * module/language/c99/compiler.mes (expr->accu): Remove specific --/++. (expr->accu*): Support p, *p. * scaffold/tests/76-pointer-arithmetic.c (test): Test it. 2017-08-08 Jan Nieuwenhuizen mescc: Tinycc support: word array assignment. * stage0/x86.M1 (movzwl_(%eax),%eax): New define. * module/mes/as-i386.mes (i386:word-mem->accu): New function. * module/mes/as-i386.scm: Export it. * module/language/c99/compiler.mes (expr->accu): word array assignment. (expr->accu*): word array assignment. * scaffold/tests/7a-struct-char-array.c (test): Test it. 2017-08-07 Jan Nieuwenhuizen mescc: Tinycc support: struct char array assignment. * module/language/c99/compiler.mes (expr->accu): struct char array assignment. * scaffold/tests/7a-struct-char-array.c (test): Test it. 2017-08-06 Jan Nieuwenhuizen mescc: Tinycc support: struct assign by value. * module/language/c99/compiler.mes (base->ident): Remove. (accu->ident): Use them to support assign of size >4 by value. * scaffold/tests/7h-struct-assign.c: Test it. * make.scm (add-scaffold-test): Build it. * module/mes/as-i386.mes (i386:base->local): Remove. (i386:accu*n->local): (i386:accu*n->label): New functions. * module/mes/as-i386.scm: Export them. * stage0/x86.M1: (mov____%ebx,0x32): (mov____%ebx,0x32(%ebp)): (mov____%ebx,0x8(%ebp)): (mov____%ebx,0x8(%edx)): (mov____%ecx,0x32(%ebp)): (mov____%ecx,0x8(%ebp)): (mov____0x32(%eax),%ebx): (mov____0x32(%eax),%ecx): (mov____0x8(%eax),%ebx): New define. mescc: Tinycc support: eputc. * mlibc/include/stdio.h (eputc): Declare. * mlibc/libc-gcc.c (eputc): * mlibc/libc-mes.c (eputc): New function. mescc: Move simple main to scaffold. * scaffold/main.c (main): Move from doc/examples/main.c * make.scm: Build it. * README: Update. * guile/mescc.scm (main): * scripts/mescc.mes (main): Remove fallback doc/examples/main.c mescc: Tinycc support: byte and word struct fields. * stage0/x86.M1 (mov____%al,0x8(%edx)): (mov____%ax,(%edx)): (mov____%ax,0x32(%edx)): (mov____%ax,0x8(%edx)): (movzbl_0x32(%eax),%eax): (movzbl_0x8(%eax),%eax): (movzwl_0x32(%eax),%eax): (movzwl_0x8(%eax),%eax): New define. * module/mes/as-i386.mes (i386:word-accu->base-mem): (i386:byte-accu->base-mem+n): (i386:word-accu->base-mem+n): (i386:byte-mem+n->accu): (i386:word-mem+n->accu): New function. * module/mes/as-i386.scm: Export them. * module/language/c99/compiler.mes (struct-field): Use actual size for simple types (WAS: 4). (decl->info): (expr->accu): Respect byte and word struct field sizes. * scaffold/tests/7g-struct-byte-word-field.c: Test it. * make.scm (add-scaffold-test): Build it. mescc: Tinycc support: eputs as function for gcc. * mlibc/libc-gcc.c (eputs)[POSIX]: New function. * mlibc/include/stdio.h (eputs)[POSIX]: Remove define. 2017-08-05 Jan Nieuwenhuizen mescc: Tinycc support: fixes for foo.bar[baz]. * module/language/c99/compiler.mes (expr->accu, expr->accu*): fixes for foo.bar[baz]. * scaffold/tests/7c-dynarray.c: Test it. mescc: Tinycc support: fixes for foo->bar[baz]. * module/language/c99/compiler.mes (expr->accu, expr->accu*): fixes for foo->bar[baz]. (expr->pointer): Support i-sel. (p-expr->type): Support add, sub, de-ref, ref-to. * scaffold/tests/7f-struct-pointer-arithmetic.c: Test it. * make.scm (add-scaffold-test): Build it. mescc: Tinycc support: foo.bar[baz], foo->bar[baz] for typedef'd struct bar. * module/language/c99/compiler.mes (expr->accu): foo.bar[baz], foo->bar[baz] for typedef'd struct bar. * scaffold/tests/7c-dynarray.c: Test it. 2017-08-04 Jan Nieuwenhuizen mescc: Tinycc support: foo[index]->bar for array bar. * module/language/c99/compiler.mes (expr->accu*): foo[index]->bar for array bar. * scaffold/tests/7e-struct-array-access.c: Test it. * make.scm (add-scaffold-test): Build it. 2017-08-04 Jan Nieuwenhuizen Revert "mescc: Tinycc support: workaround for nyacc "\0" bug." This reverts commit b160540e221dbeb96908823b5a3504bdbfd7f751. Fixed by: https://lists.gnu.org/archive/html/guile-user/2017-08/msg00007.html 2017-08-04 Jan Nieuwenhuizen guix: use nyacc 0.80.41. * guix.scm (nyacc): use 0.80.41. mescc: Tinycc support: ((unsigned char*)str)[i]. * module/language/c99/compiler.mes (expr->accu*): Consider size of expr array deref. * scaffold/tests/7d-cast-char.c: Test it. mescc: Tinycc support: ((unsigned char*)str)[0]. * module/language/c99/compiler.mes (expr->accu): Consider size of expr array deref. * stage0/x86.M1 (movzbl_0x32(%ebp),%eax): New define. * scaffold/tests/7d-cast-char.c: Test it. mescc: Tinycc support: define __linux__. * module/language/c99/compiler.mes (c99-input->full-ast): Add "__linux__=1" to cpp-defs. 2017-08-01 Jan Nieuwenhuizen mescc: Tinycc support: strcat. * mlibc/libc-mes+tcc.c (strcat): Implement. mescc: Tinycc support: vsnprintf. * module/language/c99/compiler.mes (ast-type->type): Support *p++ in test. * mlibc/libc-mes+tcc.c (vsnprintf): Implement. mescc: Tinycc support: support foo.bar[baz], foo->bar[baz] for struct bar. * module/language/c99/compiler.mes (struct-field): Use negative pointer for struct array fields. (expr->accu): support: support foo.bar[baz], foo->bar[baz] for struct bar. * scaffold/tests/7c-dynarray.c: Test it. mescc: drop naive realloc. * mlibc/libc-gcc.c (free, memcpy): Move from libc-mes+tcc.c. (realloc): Use realloc from libc-mes+tcc.c * mlibc/libc-gcc+tcc.c (free, memcpy, realloc): Remove. * mlibc/libc-mes+tcc.c (free, memcpy, realloc): Remove. * scaffold/tests/79-int-array.c (test): Update. * scaffold/tests/7a-struct-char-array.c (test): Update. 2017-07-31 Jan Nieuwenhuizen mescc: Tinycc support: ((foo*) p) + n. * module/language/c99/compiler.mes init-declr->pointer, expr->pointer, expr->size): support: ((foo*) p) + n. (expr->accu*): Consider field size for foo.bar[baz]. * scaffold/tests/7b-struct-int-array.c: Test it. * make.scm (add-scaffold-test): Build it. 2017-07-30 Jan Nieuwenhuizen mescc: Tinycc support: field size of foo.bar[baz], foo->bar[baz]. Inspired by a patch from rain1 for foo->bar[baz]. * module/language/c99/compiler.mes (expr->accu): (expr->accu*): Consider field size for foo.bar[baz]. * scaffold/tests/7a-struct-char-array.c: Test it. * make.scm (add-scaffold-test): Build it. 2017-07-30 Jan Nieuwenhuizen mescc: Tinycc support: fwrite. * mlibc/libc-mes+tcc.c (fwrite): Implement. mescc: Tinycc support: fclose. * mlibc/libc-mes+tcc.c (fclose): Implement. 2017-07-30 rain1 mescc: Tinycc support: fgetc. * mlibc/libc-mes.c (fgetc): Implement. mescc: Tinycc support: fprintf. * mlibc/libc-mes+tcc.c (fprintf): Implement. mescc: allow complicated enums expressions. * module/language/c99/compiler.mes (p-expr->number): Support lshift, rshift, ash. (enum-def-list->constants): Refactor using p-expr->number. mescc: support \x00 strings in M1. * module/mes/M1.mes (object->m1): Support \x00 strings. 2017-07-30 Jan Nieuwenhuizen mescc: Tinycc support: memmove. * mlibc/libc-mes+tcc.c (memmove): Implement. mescc: Tinycc support: strrchr. * mlibc/libc-mes+tcc.c (strrchr): Implement. mescc: Tinycc support: strchr. * mlibc/libc-mes+tcc.c (strchr): Implement. 2017-07-27 Jan Nieuwenhuizen mescc: Tinycc support: noisy stubs. * mlibc/libc-mes+tcc.c: Noisy stubs. 2017-07-30 Jan Nieuwenhuizen mescc: Tinycc support: int foo[bar] = {baz,...}. * scaffold/tests/79-int-array.c: Test it. * make.scm (add-scaffold-test): Build it. * module/language/c99/compiler.mes (init-declr->count): New function. (decl->info): Support int foo[bar] = {baz,...}. 2017-07-29 Jan Nieuwenhuizen mescc: Tinycc support: union.struct. * module/language/c99/compiler.mes (decl->info): Support struct inside union. * scaffold/tests/78-union-struct.c: Test it. * make.scm (add-scaffold-test): Build it. mescc: Tinycc support: fix accu value after comparison. * stage0/x86.M1 (setg___%al,, setge__%al, setl___%al, setle__%al): New defines. * module/mes/as-i386.mes (i386:g?->accu, i386:ge?->accu, i386:l?->accu, i386:le?->accu, i386:jumpl, i386:jumple): New functions. * module/mes/as-i386.scm: Export them. * module/language/c99/compiler.mes (expr->accu): Use them to fix accu value after comparisons. (test-jump-label->info): Update comparison jumps. mescc: Tinycc support: memcmp. * mlibc/libc-mes+tcc.c (memcmp): Implement. mescc: Tinycc support: bugfix *++foo,*--foo. * module/language/c99/compiler.mes (c99-input->full-ast): Pre-define NULL. (expr->pointer, expr->size): Handle pre/post-inc/dec. mescc: Tinycc support: uniquify strings per compilation unit. * module/mes/M1.mes (object->M1): Add file-name to string id. 2017-07-28 Jan Nieuwenhuizen mescc: Tinycc support: foo.bar = foo.baz = bla. * module/language/c99/compiler.mes (expr->base*): New function. (expr->accu): Use it to have value in accu for assignments. * scaffold/tests/77-pointer-assign.c (test): Test it. * stage0/x86.M1 (mov____%ecx,(%edx), mov___(%eax),%ecx): New define. * module/mes/as-i386.mes (accu-mem->base->mem): New function. (i386:byte-base->accu-mem+n): (i386:byte-base->accu-mem): (i386:base-mem->accu-mem): (i386:base->accu-mem): (i386:value->accu-mem+n): (i386:value->accu-mem): (i386:accu->base-mem+n): (i386:byte-accu->base-mem): (i386:accu->base-mem): Rename from accu-address, base-address. Update callers. * module/mes/as-i386.scm (mes): Update exports. mescc: Tinycc support: workaround for nyacc "\0" bug. * module/language/c99/compiler.mes (fix-null): Replace "\nul" with "\0". (initzer->data): Use it. (expr->global): Use it. mescc: Tinycc support: bugfix foo % bar. * stage0/x86.M1 (mov____%edx,%ebx): Typo (idiv___%ebx): Replace div____%ebx. * module/mes/as-i386.mes (i386:accu/base): Update. (i386:accu%base): Update. 2017-07-29 Jan Nieuwenhuizen mescc: Tinycc support: fix foo[bar]->baz. * module/language/c99/compiler.mes (expr->accu*): Lose one indirection. * scaffold/tests/72-typedef-struct-def.c: Test it. 2017-07-28 Jan Nieuwenhuizen mescc: Tinycc support: foo *bar[baz]. * module/language/c99/compiler.mes (decl->info): Support foo *bar[baz]. * module/language/c99/compiler.mes (push-global): Support push of -2, -1. Change signature to take info. Update callers. (push-global-address): Change signature to take info. Update callers. mescc: Tinycc support: bugfix foo[bar] = baz, with foo*[]. * module/language/c99/compiler.mes (expr->accu): Support size for more expressions. (expr->pointer): (expr->size): Support more expressions. * scaffold/tests/77-pointer-assign.c (add0): Test it. mescc: Tinycc support: bugfix *foo = bar. * module/language/c99/compiler.mes (base->ident-address): Typo, fixes (non-char*)*x = y. * scaffold/tests/77-pointer-assign.c (test): Test it. mescc: Tinycc support: bugfix *(cast)foo = bar. * module/language/c99/compiler.mes (expr->accu): Thinko for de-ref assign. * stage0/x86.M1: Fix typos. * module/mes/as-i386.mes: Update for typos. * scaffold/tests/77-pointer-assign.c: Test it. * make.scm (add-scaffold-test): Build it. mescc: Tinycc support: pointer arithmetic. * module/language/c99/compiler.mes (ident->size, expr->size): New function. (expr->accu): Use them for ++,--,add, sub. (i386:type-alist): Set void size to 1. * scaffold/tests/71-struct-array.c (test): * scaffold/tests/76-pointer-arithmetic.c: Test it. * make.scm (add-scaffold-test): Build it. mescc: Tinycc support: compile tcc with TCC_IS_NATIVE. * mlibc/include/string.h (strcat): Declare. * mlibc/libc-mes+tcc.c (dlclose, dlopen, mprotect, sigaction, sigemptyset, strcat, vfprintf): Move from libc-gcc+tcc.c. * mlibc/libc-gcc+tcc.c: Remove them. * module/language/c99/compiler.mes (c99-input->full-ast): Define __i386__=1. (i386:type-alist): Parse `long long int', `unsigned short int', `unsigned long long int'. (struct-field): Support void**. (init-declr->name): (init-declr->pointer): Support function declaration. 2017-07-27 Jan Nieuwenhuizen mlibc: Tinycc support: gcc -nostdinc -nostdlib. * mlibc/libc-gcc+tcc.c: New file. * mlibc/include/dlfcn.h: * mlibc/include/errno.h: * mlibc/include/signal.h: * mlibc/include/sys/mman.h: * mlibc/include/sys/time.h: Add tcc declarations. mescc: Tinycc support: malloc,memcpy. * mlibc/libc-mes.c (malloc): Rewrite. * mlibc/libc-mes+tcc.c (memcpy): Implement. build: support libc-mes+tcc. mescc: Tinycc support: memset. * mlibc/libc-mes+tcc.c (memset): Implement. 2017-08-26 Jan Nieuwenhuizen mescc: bump default maximum for M1-strings to 80. * module/mes/M1.mes (object->M1): bump default maximum for M1-strings to 80. 2017-07-26 Jan Nieuwenhuizen mescc: Tinycc support: oops, use new realloc. * mlibc/libc-mes.c (realloc): Disable naive realloc for libc-mes+tcc.c. mescc: Bugfix: output M1-strings if possible. * module/mes/M1.mes (object->M1): Typo. Also disallow \return in M1-strings. guix: Release update. * guix.scm (mes): Update commit, hash and version. Release 0.9. * configure (VERSION): Bump to 0.9. doc: Release udpate. * HACKING: Update. * INSTALL: Update. * NEWS: Update. * README: Update. * doc/ANNOUNCE-0.9: New file. * make.scm: Install it. * guix.scm (mescc-tools): Bump to 0.2. build: Install and installed-run fixes. * guile/mescc.scm (%datadir,%docdir,%moduledir,%version): Remove. * scripts/mescc.mes: Likewise. * module/language/c99/compiler.mes: Likewise. (%prefix): Prefer environment setting. (c99-input->full-ast): Remove unnecessary includes. Remove unnecessary defines. * make.scm (%scm-files): Add mes/guile.scm. (src/mes.gcc, src/mes.mlibc-gcc, src/mes.guile): Update MODULEDIR, add -I src. * src/mes.c (load_env): Use temporary variable for MODULEDIR concatenation. (bload_env): Likewise. mescc: Tinycc support: calloc,malloc,realloc. * mlibc/libc-mes+tcc.c (calloc,malloc,realloc): New function. mescc: Tinycc support: bugfix struct.array. * module/language/c99/compiler.mes (struct-field): Update pointer info. (field:name,field:pointer,field:size,field:type): Rely on pointer info. (field:pointer): New function. (expr->accu): Use it. * scaffold/tests/71-struct-array.c (test): Test it. mescc: Tinycc support: bugfix struct pointer. * module/language/c99/compiler.mes (decl->info): Only set non-pointer struct to -1. * scaffold/tests/23-pointer.c (test): Test it. mescc: Tinycc support: more function stack space. * module/mes/as-i386.mes (function-locals): Increase local space from 64 (16 vars) to 2*1025 + 80 (20 vars). mescc: Tinycc support: bugfix for char **pp = *p. * module/language/c99/compiler.mes (ptr-declr->pointer): Grok ***. (decl->info): Bugfix for char **pp = *p, cleanup. * mlibc/libc-mes.c (getenv): Update for bugfix. * scaffold/tests/23-pointer.c (test): Test it. mescc: Tinycc support: execvp stub. * mlibc/include/unistd.h (execvp): Declare. * mlibc/libc-mes+tcc.c (execvp): Add stub. mescc: Tinycc support: remove stub. * mlibc/include/stdio.h (remove): Declare. * mlibc/libc-mes+tcc.c (remove): Add stub. mescc: Tinycc support: fread stub. * mlibc/include/stdio.h (fread): Declare. * mlibc/libc-mes+tcc.c (fread): Add stub. mescc: Tinycc support: ftell stub. * mlibc/include/stdio.h (ftell): Declare. * mlibc/libc-mes+tcc.c (ftell): Add stub. mescc: Tinycc support: fseek stub. * mlibc/include/stdio.h (fseek): Declare. * mlibc/libc-mes+tcc.c (fseek): Add stub. mescc: Tinycc support: fopen stub. * mlibc/include/stdio.h (fopen): Declare. * mlibc/libc-mes+tcc.c (fopen): Add stub. mescc: Tinycc support: strstr stub. * mlibc/include/string.h (strstr): Declare. * mlibc/libc-mes+tcc.c (strstr): Add stub. mescc: Tinycc support: sscanf stub. * mlibc/include/stdio.h (sscanf): Declare. * mlibc/libc-mes+tcc.c (sscanf): Add stub. mescc: Tinycc support: longjmp, setjump stub. * mlibc/include/stdarg.h (longjmp, setjmp): Declare. * mlibc/libc-mes+tcc.c (longjmp, setjmp): Add stub. mescc: Tinycc support: function parameters. * module/language/c99/compiler.mes (.name): Handle function parameters. mescc: Tinycc support: fflush stub. * mlibc/include/stdio.h (fflush): Declare. * mlibc/libc-mes+tcc.c (fflush): Add stub. mescc: Tinycc support: vnsprintf stub. * mlibc/include/stdarg.h (vnsprintf): Declare. * mlibc/libc-mes+tcc.c (vnsprintf): Add stub. mescc: Tinycc support: jump 32. * module/mes/as-i386.mes (i386:jump-byte-z): Use jne32 (was: jne8). mescc: Tinycc support: free stub. * mlibc/include/stdlib.h (free): Declare. * mlibc/libc-mes+tcc.c (free): Add stub. mescc: Tinycc support: strrchr stub. * mlibc/include/string.h (strrchr): Declare. * mlibc/libc-mes+tcc.c (strrchr): Add stub. mescc: Tinycc support: strtoll stub. * mlibc/include/stdlib.h (strtoll): Declare. * mlibc/libc-mes+tcc.c (strtoll): Add stub. mescc: Tinycc support: strtoull stub. * mlibc/include/stdlib.h (strtoull): Declare. * mlibc/libc-mes+tcc.c (strtoull): Add stub. mescc: Tinycc support: strtol stub. * mlibc/include/stdlib.h (strtol): Declare. * mlibc/libc-mes+tcc.c (strtol): Add stub. mescc: Tinycc support: lseek. * mlibc/include/unistd.h (lseek): Declare. * stage0/x86.M1 (SYS_lseek): New define. * mlibc/libc-mes+tcc.c (lseek): New function. mescc: Tinycc support: fclose stub. * mlibc/include/stdio.h (fclose): Declare. * mlibc/libc-mes+tcc.c (fclose): Add stub. mescc: Tinycc support: fdopen stub. * mlibc/include/stdio.h (fdopen): Declare. * mlibc/libc-mes+tcc.c (fdopen): Add stub. mescc: Tinycc support: unlink. * mlibc/include/unistd.h (unlink): Declare. * stage0/x86.M1 (SYS_unlink): New define. * mlibc/libc-mes+tcc.c (unlink): New function. mescc: Tinycc support: fwrite stub. * mlibc/include/stdio.h (fwrite): Declare. * mlibc/libc-mes+tcc.c (fwrite): Add stub. mescc: Tinycc support: qsort stub. * mlibc/include/stdlib.h (qsort): Declare. * mlibc/libc-mes+tcc.c (qsort): Add stub. mescc: Tinycc support: getcwd. * mlibc/include/unistd.h (getcwd): Declare. * stage0/x86.M1 (SYS_getcwd): New define. * mlibc/libc-mes+tcc.c (getcwd): New function. mescc: Tinycc support: strchr stub. * mlibc/include/string.h (strchr): Declare. * mlibc/libc-mes+tcc.c (strchr): Add stub. mescc: Tinycc support: fprintf stub. * mlibc/include/stdio.h (fprintf): Declare. * mlibc/libc-mes+tcc.c (fprintf): Add stub. mescc: Tinycc support: localtime stub. * mlibc/include/time.h (localtime): Declare. * mlibc/libc-mes+tcc.c (localtime): Add stub. mescc: Tinycc support: time stub. * mlibc/include/time.h (time): Declare. * mlibc/libc-mes+tcc.c (time): Add stub. mescc: Tinycc support: snprintf stub. * mlibc/include/stdio.h (snprintf): Declare. * mlibc/libc-mes+tcc.c (snprintf): Add stub. mescc: Tinycc support: strtoul stub. * mlibc/include/stdlib.h (strtoul): Declare. * mlibc/libc-mes+tcc.c (strtoul): Add stub. mescc: Tinycc support: memmove stub. * mlibc/include/string.h (memcmp): Declare. * mlibc/libc-mes+tcc.c (memcmp): Add stub. mescc: Tinycc support: memset stub. * mlibc/include/string.h (memset): Declare. * mlibc/libc-mes+tcc.c (memset): Add stub. mescc: Tinycc support: memmove stub. * mlibc/include/string.h (memmove): Declare. * mlibc/libc-mes+tcc.c (memmove): Add stub. mescc: Tinycc support: memcpy stub. * mlibc/include/string.h (memcpy): Declare. * mlibc/libc-mes+tcc.c (memcpy): Add stub. mescc: Tinycc support: close. * stage0/x86.M1 (SYS_close): New define. * mlibc/include/unistd.h (close): Declare. * mlibc/libc-mes+tcc.c: New file. * make.scm: Build and install it. mescc: Tinycc support: arithmetic in initializes. * module/language/c99/compiler.mes (p-expr->number): Handle bitwise-or, constants. (initzer-data): Refactor, use p-expr->number. mescc: Tinycc support: multi-byte [local] offsets. * stage0/x86.M1: Add 32bit variants for all 8bit instructions. * module/mes/as-i386.mes: Use them, switch on size. mescc: Naming fix. * stage0/x86.M1 (je8): Rename from jne8. * module/mes/as-i386.mes (i386:jump-byte-z): Update. mescc: Tinycc support: remove warnings for foo (void), foo (...). * module/language/c99/compiler.mes (.name, .type): Expect foo (void), foo (...). mescc: Tinycc support: multiple statements in default case. * module/language/c99/compiler.mes (clause->info): Support multiple statements in default case. mescc: Tinycc support: array[]. * module/language/c99/compiler.mes (p-expr->number): New function. (struct-field, decl->info): Use it to support const expressions in array size. mescc: Use "tag" for tag namespace. * module/language/c99/compiler.mes: Use "tag" for tag namespace (WAS: "struct"). Move enums to "tag" namespace. mescc: Guile eval.c support: headers. * mlibc/include/signal.h (sigset_t): New type. * mlibc/include/float.h: New file. * mlibc/include/stddef.h: New file. * mlibc/include/sys/select.h: New file. mescc: Non-Guix support. Thanks rain1! * mlibc/include: Neutralize include guards before #include_next. Fixes compiling tinycc on Debian GNU/Linux. mescc: Tinycc support: sizeof (struct.field). * module/language/c99/compiler.mes (expr->accu): Support sizeof (struct.field). mescc: Tinycc support: struct.union. * module/language/c99/compiler.mes (struct-field): Add struct tag to struct/union types. (field-type, field-size, field-offset, field-field, ast-type->type): Ascertain struct tag with type. * (expr->accu*): Do not add struct tag. * scaffold/tests/75-struct-union.c: Test it. * scaffold/tests/71-struct-array.c: Update. mescc: Tinycc support: sizeof ("foo"). * module/language/c99/compiler.mes (expr->accu): Support sizeof (string). mescc: Tinycc support: struct foo {int bar; int baz} = {0}. * module/language/c99/compiler.mes (decl->info): struct foo {int bar; int baz} = {0}. * scaffold/tests/72-typedef-struct-def.c (test): mescc: Tinycc support: generalize neg. * module/language/c99/compiler.mes (expr->accu): Generalize neg. mescc: Tinycc support: >>=, <<=. * module/language/c99/compiler.mes (expr->accu): Support >>= <<=. mescc: Bugfix non-char* *x x[] test. * module/language/c99/compiler.mes (expr->pointer): New function. (test-jump-label->info): Use it to fix non char* while (*x | x[i]). mescc: Tinycc support: foo[i].bar.baz. * module/language/c99/compiler.mes (init-declr->pointer): Use -1 for array. (expr->accu): Implement foo[i].bar.baz. * scaffold/tests/72-typedef-struct-def.c (test): Test it. mescc: Tinycc support: *global =. * module/language/c99/compiler.mes (base->ident-address): Support *global = ... * scaffold/tests/74-multi-line-string.c: Test it. mescc: Tinycc support: anonymous union. * module/language/c99/compiler.mes (field:name): New function. (decl->info): Use it. (struct-field): Support anonymous union. (field:size): Update. (field-field): Update. (field-offset): Update. mescc: Tinycc support: declare struct tm. * mlibc/include/time.h (struct tm): New type. mescc: Tinycc support: ignore [ULL], UL, LL, L. * module/language/c99/compiler.mes (cstring->number): Drop suffix. mescc: Tinycc support: ~, ^=. * module/mes/as-i386.mes (i386:accu-not): New function. (i386:accu-negate): Rename from i386:accu-not. * module/mes/as-i386.scm (mes): Export them. * module/language/c99/compiler.mes (expr->accu): Support ~, ^=. * scaffold/tests/60-math.c (test): Test it. * stage0/x86.M1 (not____%eax): New define. mescc: Tinycc support: struct.struct. * module/language/c99/compiler.mes (expr->accu): Support &*, bar.foo.i, p->foo.i, p->pf->i (*pp)->foo.i, [slightly modified] offsetof. * scaffold/tests/72-typedef-struct-def.c (test): Test them. mescc: Tinycc support: ***parameter. * module/language/c99/compiler.mes (.name): Support ***parameter. mescc: Tinycc support: bitwise-or initializer. * module/language/c99/compiler.mes (initzer->value): New function. (initzer->data): Use it to support bitwise-or initializer. * scaffold/tests/74-multi-line-string.c (test): Test it. mescc: Tinycc support: char*[] in function. * module/language/c99/compiler.mes (c99-input->full-ast): Add NULL. (decl->info): Support char* [] in function scope. * scaffold/tests/71-struct-array.c (test) Test it. mescc: Tinycc support: more list initializers. * module/language/c99/compiler.mes (init-declr->name): Handle array, pointer array. (init-declr->pointer): Likewise. (decl->info): Generalize list initializers, add pointer variant. FIXME: AST-rewriting? mescc: Tinycc support: headers. * mlibc/include/string.h (ssize_t): New type. * mlibc/include/unistd.h (ssize_t): New type. mescc: Tinycc support: sizeof struct field. * module/language/c99/compiler.mes (expr->accu): Sizeof struct field. * scaffold/tests/72-typedef-struct-def.c (test): Test it. mescc: Tinycc support: sizeof typename. * module/language/c99/compiler.mes (expr->accu): Sizeof typename. mescc: Tinycc support: pre/post-inc/dec more. * module/language/c99/compiler.mes (expr-add): New function. (expr->pointer): New function. (expr->accu): Use it to support broader pre/post-inc/dec.. * scaffold/tests/72-typedef-struct-def.c (test): Test it. mescc: Tinycc support: comma operator. * module/language/c99/compiler.mes (expr->accu): Handle comma operator. * scaffold/tests/74-multi-line-string.c (test): Test it. mescc: Tinycc support: assign pointer to struct field. * module/language/c99/compiler.mes (expr->accu, expr->accu*): Support pointer field selection. * scaffold/tests/72-typedef-struct-def.c (test): Test it. mescc: Tinycc support: multi-line strings. * module/language/c99/compiler.mes (initzer->data, expr->global): Handle multi-line strings. * scaffold/tests/74-multi-line-string.c: New file. * make.scm (add-scaffold-test): Build it. mescc: Tinycc support: union. * scaffold/tests/73-union.c: New file. * module/language/c99/compiler.mes (union->type-entry): New function. (decl->info): Support unions. mescc: Tinycc support: struct. * scaffold/tests/72-typedef-struct-def.c: New file. * module/language/c99/compiler.mes (decl->info): Struct support for tinycc. mescc: Refactor decl. * module/mes/as-i386.mes (i386:mem->base, i386:nop): New functions. * module/mes/as-i386.scm: Export them. * module/language/c99/compiler.mes: * stage0/x86.M1 (nop,mov____(%edx),%edx,movzbl_(%edx),%edx): New defines. * scaffold/tests/23-pointer.c: New file. * scaffold/tests/t.c: New file. * make.scm: Build them. * module/language/c99/compiler.mes (init-declr->name): Handle array. (init-declr->pointer): Likewise. (ident->accu): Simplify. (ident->base): Simplify. (ident-address->base): Typo. (expr->accu): Simplify. (decl->info): Simplify. * mlibc/libc-mes.c (getenv): Remove superfluous statement. mescc: Use records for Guile: . * module/language/c99/info.scm (): New record. * module/language/c99/compiler.mes (make-local-entry): Rename from make-local. Update callers. (local-var?): Rename from local?. Update callers. * module/language/c99/info.mes (make-local, local:type, local:pointer, local:id): Move from compiler.mes. mescc: Use records for Guile: . * module/language/c99/info.scm (): New record. * module/language/c99/compiler.mes (make-global-entry): Rename from make-global. Update callers. * module/language/c99/info.mes (make-global, global:type, global:pointer, global:value): Move from compiler.mes. mescc: Use records for Guile: . * module/language/c99/info.scm (): New record. * module/language/c99/compiler.mes (make-type-entry): Rename from make-type. Update-callers. * module/language/c99/info.mes (make-type, type:type, type:size, type:pointer, type:description): Move from compiler.mes. mescc: Use records for Guile: . * module/language/c99/info.scm (): Make immutable record. Update users. mescc: Use records for Guile: preparation. * module/language/c99/info.mes: New file. * module/mes/M1.mes: Use it. * scripts/mescc.mes: Use it. * module/language/c99/compiler.mes: Use it. (, , , , , , , , , , make, info?, .info, .types, .constants, .functions, .globals, .locals, .function, .text, .break, .continue): Remove. * module/language/c99/info.scm: New file. * module/language/c99/compiler.scm: Use it. * guile/mescc.scm: Use it. * module/mes/M1.scm: Use it. mescc: Refactor decl. * module/language/c99/compiler.mes (decl->info, ptr-declr->pointer): New function. (ast->info): Use decl->info. guix: Update build. * guix.scm (mes): Do not strip. Fixes mes binary. build: support Guix. * guile/guix/make.scm (link-or-cp): New function. (assert-link, store): Use it. build: Add make install. * guile/guix/make.scm (method-cp, install, install-target?): New functions. * make.scm: Use them. build: Add target list. * GNUmakefile (%): Handle all targets. * make.scm (main): Show and implement target list. build: Ignore some files. .gitignore: Update for make.scm. build: Bugfix for store. * guile/guix/make.scm (store): Add each store file only once. build: Resurrect guile-2.0. Thanks rain1! * module/mes/guile.scm: New file. * module/mes/elf.scm: Include it. * module/mes/bytevectors.scm: : Include it. * module/mes/as.scm: Include it. * module/mes/as-i386.scm: Include it. * module/mes/M1.scm: Include it. * module/language/c99/compiler.scm: Include it. * make.scm: Update. 2017-07-26 Jan Nieuwenhuizen build: Non-Guix build robustifications. Thanks, rain1! Fix typo in configure, gracefully switch between M0 vs M1, skip CC32/i686-unknown-linux-gnu-gcc targets if not available, esp. for non-Guix usage. * configure (M1): Declare missing variable. * make.scm (main): all-go, clean-go: New targets. * GNUmakefile (PHONY_TARGETS): Add them. (.config.make): New target. * guile/guix/make.scm (%CC32): Set to #f if not found. (bin.gcc): Skip if CC not set. (check-target?, add-target): Skip if target is not set. 2017-07-26 Jan Nieuwenhuizen build: Fix snarf dependencies. * guile/guix/make.scm (compile.gcc compile.mescc bin.mescc m1-asm): Accept and forward dependencies. * make.scm (gcc-snarf-targets): Remove explicit defaults. build: Use released M0 intead of M1. 2017-07-26 Jan Nieuwenhuizen mescc: Import tinycc test suite. * make.scm (check-scaffold-tinycc): New target. * guile/guix/make.scm (): Add baseline field. (method-check): Handle baseline. * scaffold/tinycc/00_assignment.c: New file. * scaffold/tinycc/00_assignment.expect: New file. * scaffold/tinycc/01_comment.c: New file. * scaffold/tinycc/01_comment.expect: New file. * scaffold/tinycc/02_printf.c: New file. * scaffold/tinycc/02_printf.expect: New file. * scaffold/tinycc/03_struct.c: New file. * scaffold/tinycc/03_struct.expect: New file. * scaffold/tinycc/04_for.c: New file. * scaffold/tinycc/04_for.expect: New file. * scaffold/tinycc/05_array.c: New file. * scaffold/tinycc/05_array.expect: New file. * scaffold/tinycc/06_case.c: New file. * scaffold/tinycc/06_case.expect: New file. * scaffold/tinycc/07_function.c: New file. * scaffold/tinycc/07_function.expect: New file. * scaffold/tinycc/08_while.c: New file. * scaffold/tinycc/08_while.expect: New file. * scaffold/tinycc/09_do_while.c: New file. * scaffold/tinycc/09_do_while.expect: New file. * scaffold/tinycc/10_pointer.c: New file. * scaffold/tinycc/10_pointer.expect: New file. * scaffold/tinycc/11_precedence.c: New file. * scaffold/tinycc/11_precedence.expect: New file. * scaffold/tinycc/12_hashdefine.c: New file. * scaffold/tinycc/12_hashdefine.expect: New file. * scaffold/tinycc/13_integer_literals.c: New file. * scaffold/tinycc/13_integer_literals.expect: New file. * scaffold/tinycc/14_if.c: New file. * scaffold/tinycc/14_if.expect: New file. * scaffold/tinycc/15_recursion.c: New file. * scaffold/tinycc/15_recursion.expect: New file. * scaffold/tinycc/16_nesting.c: New file. * scaffold/tinycc/16_nesting.expect: New file. * scaffold/tinycc/17_enum.c: New file. * scaffold/tinycc/17_enum.expect: New file. * scaffold/tinycc/18_include.h: New file. * scaffold/tinycc/18_include.c: New file. * scaffold/tinycc/18_include.expect: New file. * scaffold/tinycc/19_pointer_arithmetic.c: New file. * scaffold/tinycc/19_pointer_arithmetic.expect: New file. * scaffold/tinycc/20_pointer_comparison.c: New file. * scaffold/tinycc/20_pointer_comparison.expect: New file. * scaffold/tinycc/21_char_array.c: New file. * scaffold/tinycc/21_char_array.expect: New file. * scaffold/tinycc/22_floating_point.c: New file. * scaffold/tinycc/22_floating_point.expect: New file. * scaffold/tinycc/23_type_coercion.c: New file. * scaffold/tinycc/23_type_coercion.expect: New file. * scaffold/tinycc/24_math_library.c: New file. * scaffold/tinycc/24_math_library.expect: New file. * scaffold/tinycc/25_quicksort.c: New file. * scaffold/tinycc/25_quicksort.expect: New file. * scaffold/tinycc/26_character_constants.c: New file. * scaffold/tinycc/26_character_constants.expect: New file. * scaffold/tinycc/27_sizeof.c: New file. * scaffold/tinycc/27_sizeof.expect: New file. * scaffold/tinycc/28_strings.c: New file. * scaffold/tinycc/28_strings.expect: New file. * scaffold/tinycc/29_array_address.c: New file. * scaffold/tinycc/29_array_address.expect: New file. * scaffold/tinycc/30_hanoi.c: New file. * scaffold/tinycc/30_hanoi.expect: New file. * scaffold/tinycc/31_args.c: New file. * scaffold/tinycc/31_args.expect: New file. * scaffold/tinycc/32_led.c: New file. * scaffold/tinycc/32_led.expect: New file. * scaffold/tinycc/33_ternary_op.c: New file. * scaffold/tinycc/33_ternary_op.expect: New file. * scaffold/tinycc/34_array_assignment.c: New file. * scaffold/tinycc/34_array_assignment.expect: New file. * scaffold/tinycc/35_sizeof.c: New file. * scaffold/tinycc/35_sizeof.expect: New file. * scaffold/tinycc/36_array_initialisers.c: New file. * scaffold/tinycc/36_array_initialisers.expect: New file. * scaffold/tinycc/37_sprintf.c: New file. * scaffold/tinycc/37_sprintf.expect: New file. * scaffold/tinycc/38_multiple_array_index.c: New file. * scaffold/tinycc/38_multiple_array_index.expect: New file. * scaffold/tinycc/39_typedef.c: New file. * scaffold/tinycc/39_typedef.expect: New file. * scaffold/tinycc/40_stdio.c: New file. * scaffold/tinycc/40_stdio.expect: New file. * scaffold/tinycc/41_hashif.c: New file. * scaffold/tinycc/41_hashif.expect: New file. * scaffold/tinycc/42_function_pointer.c: New file. * scaffold/tinycc/42_function_pointer.expect: New file. * scaffold/tinycc/43_void_param.c: New file. * scaffold/tinycc/43_void_param.expect: New file. * scaffold/tinycc/44_scoped_declarations.c: New file. * scaffold/tinycc/44_scoped_declarations.expect: New file. * scaffold/tinycc/45_empty_for.c: New file. * scaffold/tinycc/45_empty_for.expect: New file. * scaffold/tinycc/46_grep.c: New file. * scaffold/tinycc/46_grep.expect: New file. * scaffold/tinycc/47_switch_return.c: New file. * scaffold/tinycc/47_switch_return.expect: New file. * scaffold/tinycc/48_nested_break.c: New file. * scaffold/tinycc/48_nested_break.expect: New file. * scaffold/tinycc/49_bracket_evaluation.c: New file. * scaffold/tinycc/49_bracket_evaluation.expect: New file. * scaffold/tinycc/50_logical_second_arg.c: New file. * scaffold/tinycc/50_logical_second_arg.expect: New file. * scaffold/tinycc/51_static.c: New file. * scaffold/tinycc/51_static.expect: New file. * scaffold/tinycc/52_unnamed_enum.c: New file. * scaffold/tinycc/52_unnamed_enum.expect: New file. * scaffold/tinycc/54_goto.c: New file. * scaffold/tinycc/54_goto.expect: New file. * scaffold/tinycc/55_lshift_type.c: New file. * scaffold/tinycc/55_lshift_type.expect: New file. * scaffold/tinycc/56_btype_excess-1.c: New file. * scaffold/tinycc/56_btype_excess-1.expect: New file. * scaffold/tinycc/57_btype_excess-2.c: New file. * scaffold/tinycc/57_btype_excess-2.expect: New file. * scaffold/tinycc/58_function_redefinition.c: New file. * scaffold/tinycc/58_function_redefinition.expect: New file. * scaffold/tinycc/59_function_array.c: New file. * scaffold/tinycc/59_function_array.expect: New file. * scaffold/tinycc/60_enum_redefinition.c: New file. * scaffold/tinycc/60_enum_redefinition.expect: New file. * scaffold/tinycc/61_undefined_enum.c: New file. * scaffold/tinycc/61_undefined_enum.expect: New file. * scaffold/tinycc/62_enumerator_redefinition.c: New file. * scaffold/tinycc/62_enumerator_redefinition.expect: New file. * scaffold/tinycc/63_local_enumerator_redefinition.c: New file. * scaffold/tinycc/63_local_enumerator_redefinition.expect: New file. * scaffold/tinycc/64_macro_nesting.c: New file. * scaffold/tinycc/64_macro_nesting.expect: New file. * scaffold/tinycc/67_macro_concat.c: New file. * scaffold/tinycc/67_macro_concat.expect: New file. * scaffold/tinycc/70_floating_point_literals.c: New file. * scaffold/tinycc/70_floating_point_literals.expect: New file. * scaffold/tinycc/71_macro_empty_arg.c: New file. * scaffold/tinycc/71_macro_empty_arg.expect: New file. * scaffold/tinycc/72_long_long_constant.c: New file. * scaffold/tinycc/72_long_long_constant.expect: New file. * scaffold/tinycc/73_arm64.c: New file. * scaffold/tinycc/73_arm64.expect: New file. * scaffold/tinycc/74_nocode_wanted.c: New file. * scaffold/tinycc/74_nocode_wanted.expect: New file. * scaffold/tinycc/75_array_in_struct_init.c: New file. * scaffold/tinycc/75_array_in_struct_init.expect: New file. * scaffold/tinycc/76_dollars_in_identifiers.c: New file. * scaffold/tinycc/76_dollars_in_identifiers.expect: New file. * scaffold/tinycc/77_push_pop_macro.c: New file. * scaffold/tinycc/77_push_pop_macro.expect: New file. * scaffold/tinycc/78_vla_label.c: New file. * scaffold/tinycc/78_vla_label.expect: New file. * scaffold/tinycc/79_vla_continue.c: New file. * scaffold/tinycc/79_vla_continue.expect: New file. * scaffold/tinycc/80_flexarray.c: New file. * scaffold/tinycc/80_flexarray.expect: New file. * scaffold/tinycc/81_types.c: New file. * scaffold/tinycc/81_types.expect: New file. * scaffold/tinycc/82_attribs_position.c: New file. * scaffold/tinycc/82_attribs_position.expect: New file. * scaffold/tinycc/83_utf8_in_identifiers.c: New file. * scaffold/tinycc/83_utf8_in_identifiers.expect: New file. * scaffold/tinycc/84_hex-float.c: New file. * scaffold/tinycc/84_hex-float.expect: New file. * scaffold/tinycc/85_asm-outside-function.c: New file. * scaffold/tinycc/85_asm-outside-function.expect: New file. * scaffold/tinycc/86_memory-model.c: New file. * scaffold/tinycc/86_memory-model.expect: New file. * scaffold/tinycc/87_dead_code.c: New file. * scaffold/tinycc/87_dead_code.expect: New file. * scaffold/tinycc/88_codeopt.c: New file. * scaffold/tinycc/88_codeopt.expect: New file. * scaffold/tinycc/89_nocode_wanted.c: New file. * scaffold/tinycc/89_nocode_wanted.expect: New file. * scaffold/tinycc/90_struct-init.c: New file. * scaffold/tinycc/90_struct-init.expect: New file. * scaffold/tinycc/91_ptr_longlong_arith32.c: New file. * scaffold/tinycc/91_ptr_longlong_arith32.expect: New file. * scaffold/tinycc/92_enum_bitfield.c: New file. * scaffold/tinycc/92_enum_bitfield.expect: New file. * scaffold/tinycc/93_integer_promotion.c: New file. * scaffold/tinycc/93_integer_promotion.expect: New file. * scaffold/tinycc/COPYING: New file. * scaffold/tinycc/LICENSE: New file. include 2017-07-09 Jan Nieuwenhuizen test: Split-up Mescc scaffold test. * make.scm (check-scaffold, check-scaffold-tests): New targets. * mlibc/include/00-test.i: New file. * mlibc/include/30-test.i: New file. * mlibc/mini-libc-mes.c (puts): New function. * scaffold/tests/00-exit-0.c: : New file. * scaffold/tests/01-return-0.c: : New file. * scaffold/tests/02-return-1.c: : New file. * scaffold/tests/03-call.c: : New file. * scaffold/tests/04-call-0.c: : New file. * scaffold/tests/05-call-1.c: : New file. * scaffold/tests/06-call-!1.c: : New file. * scaffold/tests/10-if-0.c: : New file. * scaffold/tests/11-if-1.c: : New file. * scaffold/tests/12-if-==.c: : New file. * scaffold/tests/13-if-!=.c: : New file. * scaffold/tests/14-if-goto.c: : New file. * scaffold/tests/15-if-!f.c: : New file. * scaffold/tests/16-if-t.c: : New file. * scaffold/tests/20-while.c: : New file. * scaffold/tests/21-char[].c: : New file. * scaffold/tests/22-while-char[].c: : New file. * scaffold/tests/30-strlen.c: : New file. * scaffold/tests/31-eputs.c: : New file. * scaffold/tests/32-compare.c: : New file. * scaffold/tests/33-and-or.c: : New file. * scaffold/tests/34-pre-post.c: : New file. * scaffold/tests/35-compare-char.c: : New file. * scaffold/tests/36-compare-arithmetic.c: : New file. * scaffold/tests/37-compare-assign.c: : New file. * scaffold/tests/38-compare-call.c: : New file. * scaffold/tests/40-if-else.c: : New file. * scaffold/tests/41-?.c: : New file. * scaffold/tests/42-goto-label.c: : New file. * scaffold/tests/43-for-do-while.c: : New file. * scaffold/tests/44-switch.c: : New file. * scaffold/tests/45-void-call.c: : New file. * scaffold/tests/50-assert.c: : New file. * scaffold/tests/51-strcmp.c: : New file. * scaffold/tests/52-itoa.c: : New file. * scaffold/tests/53-strcpy.c: : New file. * scaffold/tests/54-argv.c: : New file. * scaffold/tests/60-math.c: : New file. * scaffold/tests/61-array.c: : New file. * scaffold/tests/63-struct-cell.c: : New file. * scaffold/tests/64-make-cell.c: : New file. * scaffold/tests/65-read.c: : New file. * scaffold/tests/66-struct-array.c: : New file. * scaffold/t.c: Remove. * scaffold/t-tcc.c: Remove. mescc: Avoid warnings in recursve functions. * module/language/c99/compiler.mes (expr->accu): Avoid warnings in recursve functions. mescc: undefine __GNUC__. * module/language/c99/compiler.mes (c99-input->full-ast): Remove __GNUC__=0. Should help compiling pcc, libguile/eval.c. 2017-07-05 Jan Nieuwenhuizen mescc: Support stdarg. * mlibc/include/stdarg.h (va_list): New type. (va_start, va_arg, va_end, va_copy): New macro. (vprintf): New declaration. * mlibc/libc-mes.c (vprintf): New function. (printf): Rewrite using vprintf. * module/language/c99/compiler.mes (expr->accu, expr->accu*): Handle any array. Limitation: element size must be 4/sizeof (expression). (make-type): Add value pointer to type. (type:type, type:size, type:pointer, type:description): New functions. (ast->info): Handle typedef with pointer. 2017-07-02 Jan Nieuwenhuizen build: Remove make. * GNUmakefile: trivial convenience-frontend to ./make.scm * make/*.make: Remove. * */*.make: Remove. 2017-07-02 Jan Nieuwenhuizen mescc: Produce M1 output instead of hex2. Use: ./make.scm [TARGET] ./make.scm check * stage0/x86.M1: New file. * mlibc/mini-libc-mes.c (exit, write): Use M1 instead of .byte. * mlibc/libc-mes.c (_start, exit, read, write, open, access, brk, fsync, printf): Use M1 instead of .byte. * module/mes/as-i386.mes: Use M1. * module/mes/make.scm: New file. * make.scm: New file. * guile/guix/records.scm: New File. * guile/guix/shell-utils.scm: New file. * module/mes/M1.mes: Rename from hex2.mes. * module/mes/M1.scm: Rename from hex2.scm. * scripts/mescc.mes: Update callers. * guile/mescc.scm: Update callers. 2017-06-18 Jan Nieuwenhuizen mescc: Add headers for guile:eval.c. * mlibc/include/alloca.h: New file. * mlibc/include/stdint.h: New file. * mlibc/include/inttypes.h: Remove definitionss, include stdint.h. mescc: Add headers for 8cc. * mlibc/include/libgen.h: New file. * mlibc/include/locale.hh: New file. * mlibc/include/stdbool.h: New file. * mlibc/include/stdnoreturn.h: New file. * mlibc/include/time.h: Add time_t. 2017-06-27 Jan Nieuwenhuizen guix: Add missing module. * guix.scm: Use (guix download). Fixes compilation with mescc-tools included. 2017-06-26 Jan Nieuwenhuizen guix: Add mescc-tools. * guix.scm (mescc-tools): New variable. Fixes using guix.scm. Thanks paroneayea! 2017-06-25 Jan Nieuwenhuizen Release 0.8. * configure (VERSION): Bump. build: Release update. * configure (main): Make hex2 required. * guix.scm (mes): Add mescc-tools to propagated-inputs. Update commit, hash. 2017-06-08 Jan Nieuwenhuizen doc: Release update. * NEWS: Update. * INSTALL: Update. * HACKING: Update. * doc/ANNOUNCE-0.8: New file. 2017-06-25 Jan Nieuwenhuizen mescc: Remove ELF creation, handled by hex2 now. * module/language/c99/compiler.scm (make-global, global:type, global:pointer, global:value): Move from elf-util.mes * module/mes/as.mes: New file. * module/mes/as-i386.mes: Use it. * module/mes/as-i386.scm: Use it. * module/mes/elf-util.mes: Remove. * module/mes/elf.mes (elf32-addr, elf32-half, elf32-off, elf32-word, make-elf, write-any, object->elf): Remove (hex2->elf): New function with dummy implementation. * module/mes/elf.scm: Update exports. * module/mes/hex2.mes (object->elf): New function. * module/mes/hex2.scm: Export it. mescc: Produce object files in hex2 format, remove hex3. * GNUmakefile (HEX2_FLAGS): New variable. * make/mescc-guile.make ($(OUT)/$(TARGET)): Use HEX2 for linking. * make/mescc-mes.make ($(OUT)/$(TARGET)): Likewise. * guile/mescc.scm (main): Remove hex3 support. * scripts/mescc.mes (main): Likewise. * stage0/elf32-0header.hex2: New file, merging of elf32.hex and elf32-header.hex2. * stage0/elf-0footer.hex2: New file. * stage0/elf32-header.hex2: Rename from elf32-header-exit-42.hex2, repurpose as generic debug heder. * stage0/elf32-footer-single-main.hex2: Rename from elf32-footer-exit-42.hex2, repurpose as generic debug footer for single-main source. * stage0/exit-42.c: New file. * stage0/stage0.make ($(OUT)/0exit-42): Test 0header, 0footer. ($(OUT)/exit-42.guile): Test generic debug header, footer. * stage0/elf32.hex2: Remove. 2017-06-23 Jan Nieuwenhuizen build: Add stage0 hex2 test. * configure (HEX2): Check for hex2 from MESCC_tools. * INSTALL: Mention it. * GNUmakefile (SUBDIRS): Add stage0. * make/check-cc.make: New file. * make/check.make: Remove CC-not-empty guard. * scaffold/scaffold.make: Update CC check targets. 2017-06-21 Jan Nieuwenhuizen stage0: Move to-be-generated part of body to footer. * stage0/elf32-footer-exit-42.hex2: Add ELF_str, ELF_sym from body. * stage0/elf32-body-exit-42.hex2: Remove ELF_str, ELF_sym. 2017-06-19 Jan Nieuwenhuizen stage0: Leverage label>base in stage0 gdb header. * stage0/elf32-header-exit-42.hex2: Replace calculated addresses with label>base. * stage0/elf32-body-exit-42.hex2: Likewise. stage0: Move stage0's section-headers before text. * stage0/elf32-header-exit-42.hex2: Add section-headers. * stage0/elf32-body-exit-42.hex2: Update. * stage0/elf32-footer-exit-42.hex2: Remove section-headers. 2017-06-18 Jan Nieuwenhuizen stage0: Add stage0 hex2 gdb header and footer example. * stage0/elf32-header-exit-42.hex2: New file. * stage0/elf32-footer-exit-42.hex2: New file. 2017-06-13 Jan Nieuwenhuizen mescc: Remove jump calculation, use labels: rename jumps. * module/mes/as-i386.mes (i386:jump, i386:jump-byte-z, i386:jump-g, i386:jump-ge, i386:jump-nc, i386:jump-ncz, i386:jump-nz, i386:jump-z): Rename from i386:jump-label*. * module/mes/as-i386.scm (mes): Update exports. * module/language/c99/compiler.mes (ast->info): Update callers. mescc: Remove jump calculation, use labels: remove offset-jumps. * module/mes/as-i386.mes (i386:XXjump, i386:Xjump, i386:Xjump-c, i386:Xjump-cz, i386:Xjump-g, i386:Xjump-ge, i386:Xjump-l, i386:Xjump-le, i386:Xjump-nc, i386:Xjump-ncz, i386:Xjump-ncz", i386:Xjump-nz, i386:Xjump-z, i386:jump, i386:jump-byte-nz, i386:jump-byte-z, i386:jump-c, i386:jump-cz, i386:jump-le, i386:jump-nc, i386:jump-ncz, i386:jump-nz, i386:jump-z, i386:test-jump-z): Remove. * module/mes/as-i386.scm: Remove export. 2017-06-12 Jan Nieuwenhuizen mescc: Remove jump calculation, use labels: cleanup. * module/language/c99/compiler.mes (test->jump->info): Remove. 2017-06-13 Jan Nieuwenhuizen mescc: Remove jump calculation, use labels: switch. * module/language/c99/compiler.mes (expr->accu): Refactor (switch ...). (clause->info): Refactor. 2017-06-12 Jan Nieuwenhuizen mescc: Remove jump calculation, use labels: and, or. * module/language/c99/compiler.mes (expr->accu): Refactor (and ...), (or ...). mescc: Remove jump calculation, use labels: if. * module/language/c99/compiler.mes (ast->info): Refactor (if ...) using test-jump-label->info. mescc: Remove jump calculation, use labels: for. * module/language/c99/compiler.mes (ast->info): Refactor (for ...) using test-jump-label->info. mescc: Remove jump calculation, use labels: do while. * module/language/c99/compiler.mes (ast->info): Refactor (do-while ...) using test-jump-label->info. mescc: Remove jump calculation, use labels: ?. * module/language/c99/compiler.mes (ast->info): Refactor (cond-expr ...) using test-jump-label->info. mescc: Support continue in while. * module/language/c99/compiler.mes (make): Add continue field. (.continue): New function. (clone): Support continue field. (ast->info): Support continue. * scaffold/t.c (test): Test it. mescc: Remove jump calculation, use labels: while. * module/language/c99/compiler.mes (ast->info): Refactor (while ...) using test-jump-label->info. mescc: Remove jump calculation, use labels: prepare. * module/language/c99/compiler.mes (test-jump-label->info): New function. * module/mes/as-i386.mes (i386:jump-label-z,i386:jump-label-byte-z, i386:jump-label-g, i386:jump-label-ge,i386:jump-label-nz): New functions. * module/mes/as-i386.scm: Export them. mescc: Remove duplication of string globals. * module/language/c99/compiler.mes (expr->global): Curry-in globals. Update callers. (initzer->global): Likewise. 2017-06-11 Jan Nieuwenhuizen mescc: Unify labels. * module/language/c99/compiler.mes: Use (#:address label) (#local label) (#:relative label) thoughout. * module/mes/elf-util.mes (add-s:-prefix, drop-s:-prefix): Remove. (function->text): Update. * module/mes/hex2.mes (write-hex2): Update. mescc: Write object files in hex2 or hex3 format. * stage0/elf32.hex2: New file. * module/mes/hex2.mes: New file. * module/mes/hex2.scm: New file. * module/language/c99/compiler.mes: Eradicate object lamdas. (current-eval, dec-xhex, function:-object->text, object->elf, object->objects, merge-objects, alist-add): Remove. * module/mes/elf.mes (object->elf): New function, move from compiler.mes. * module/mes/elf.scm: Export it. * guile/mescc.scm (parse-opts): Add -g. (main): Use it. * scripts/mescc.mes: Likewise. * scripts/mescc-guile.make (MESCC.scm, MESLD.scm): Add -g flag. * scripts/mescc-mes.make (MESCC.mes, MESLD.mes): Likewise. * scaffold/m.c: Add proper includes. * scaffold/argv.c: New file. * scaffold/hello.c: Simplify. * scaffold/micro-mes.c: Add proper includes. * scaffold/t.c: Add proper includes. 2017-06-12 Jan Nieuwenhuizen core: %moduledir ends with /. * make/install.make (MODULEDIR): Append /. (install): Remove /. * src/mes.c (load_env, bload_env): Update. 2017-06-11 Jan Nieuwenhuizen mescc: Put _start at top of mlibc. * mlibc/libc-mes.c (_start): Move to top. * mlibc/mini-libc-mes.c (_start): Likewise. * module/mes/elf-util.mes (function-prefix): Update for _start == 0. (function-offset): Likewise. mes: Add list-index. * module/srfi/srfi-1.scm (list-index): New function. 2017-06-08 Jan Nieuwenhuizen build: Bugfix add prepocess dependency on snarfing mes. * src/src.make ($(OUT)/$(DIR)/mes.guile-E, $(OUT)/$(DIR)/mes.mes-E): Depend on mes snarfing. 2017-06-20 Jan Nieuwenhuizen test: Support for non-Guix[SD]: cater for missing CC/CC32 compilers. * make/check.make: Skip if CC is not set. * make/check-mlibc.make: New file. * scaffold/scaffold.make: Use it for mlibc targets. * tinycc/tinycc.make: Skip mlibc targets if CC32 not set. mescc: Support for non-Guix[SD] builds. * module/language/c99/compiler.mes (c99-input->full-ast): Cater for C_INCLUDE_PATH not set. Fixes non-Guix[SD] builds. build: Support for non-Guix[SD]: make CC/CC32 optional in configure too. * configure (optional): New global. (BUILD_TRIPLET): Use Guile value. (check-version): Add keyword argument #:optional. (main): Make CC optional (--with-courage). Only check for stdio.h, limits.h if CC is found. Make CC32 check optional. * scripts/scripts.make: Skip if CC is not set. 2017-06-05 Jan Nieuwenhuizen mescc: Bugfix for merging objects. * mlibc/libc-mes.c (main): Declare. * mlibc/mini-libc-mes.c (g_stdin): Define. (main): Declare. * module/language/c99/compiler.mes (alist-add): Thinko. Fixes merging objects when first declares function of next. 2017-06-03 Jan Nieuwenhuizen guix hash: 0fvzr1ai2rmi46zdi5b2bdjb6s8ip78mkmsk02yxl46rajmp2pb1 Release 0.7. * configure (VERSION): Bump. doc: Release update. * AUTHORS: Remove module/nyacc. * HACKING: Release uppdate. * NEWS: Release uppdate. * doc/ANNOUNCE-0.7: New file. guix: mes.git: Add git hash to version. * guix.scm (mes.git): Add git hash to version. mescc: move include into share/mlibc, allows installing alongside gcc. * mlibc: Rename from libc. * HACKING: Update for name change. * make/bin.make: Likewise. * make/mescc-guile.make: Likewise. * make/mescc-mes.make: Likewise. * scaffold/scaffold.make: Likewise. * make/install.make: Likewise. (install): Install mlibc into share/mlibc. 2017-06-02 Jan Nieuwenhuizen mescc: Handle any const, by ignoring. * module/language/c99/compiler.mes (ast-strip-const): New function. (c99-input->ast): Use it. (type->size, type->description, ast->info): Remove const handling. 2017-05-31 Jan Nieuwenhuizen mescc: Support array in struct. * module/language/c99/compiler.mes: (field:size, field-offset): New functions. Update callers, use them throughout. (ast->info): Support declaration of struct and typedef'ed struct variable with array fields. (expr->accu, expr->accu*): Support foo.bar[baz], foo->bar[baz]. * scaffold/t-tcc.c: Test it. 2017-05-28 Jan Nieuwenhuizen build: Skip gcc, mlibc, guile or mes builds using CC=, CC32=, GUILE= or MES=. * GNUmakefile (build-scripts): New target (HELP_TOP): Mention it. * configure (main): Write GUILE_FOR_BUILD. * make/bin-mlibc.make: Skip if CC32 is not set. * make/bin.make: Skip if CC is not set. * make/install.make (install): Only install $(OUT)/mes.mes if MES_BOOTSTRAP is set. * make/mescc-guile.make: Skip if GUILE is not set. * make/mescc-mes.make: Skip if MES is not set. * HACKING: write something about core: Always include reader.c, drop binary read-0-32.mo dependency. * module/language/c99/compiler.mes (c99-input->full-ast): Remove obsolete __NYACC__ and MES_FULL defines. * src/mes.c [!MES_FULL]: Include reader-mes.h. (mes_builtins) [!MES_FULL]: Include reader.mes.i, reader.me.environment.i. [!MES_FULL]: Include reader.c. (main) [!MES_FULL]: By default call load_env, only call bload_env when --load is supplied. WAS: Always bload read-0-32.mo. * src/reader.c (__end_of__mes_): Remove. (dump): Remove option of dumping tiny test program. * make/mescc-mes.make ($(OUT)/$(TARGET), mescc.mes-ccompile, mescc.mes.c-compile-E): Depend on $(OUT)/mes, scripts/mes. * src/src.make (mes.guile): Remove module/mes/read-32-0 dependency. Do not build $(OUT)/mes.mes. * module/module.make (module/mes/read-0.mo, module/mes/read-0-32.mo, module/mes/tiny-0-32.mo): Remove targets. (CLEAN): Do not add them. Neither install $(OUT)/mes.mes. * .gitignore: Remove exceptions for them. * make/install.make (install): Do not install them. * HACKING: Update info about creating module/mes/read-32-0.mo. * scaffold/mini-mes.c: Remove. * scaffold/tiny-mes.c: Remove. * scaffold/cons-mes.c: Remove. * scaffold/scaffold.make (tiny-mes.libc, tiny-mes.guile, tiny-mes.mes, mini-mes.libc, mini-mes.guile, mini-mes.mes): Reemove targets. 2017-05-27 Jan Nieuwenhuizen mescc: Add missing builtins. * module/language/c99/compiler.mes (i386:type-alist): Add missing builtins. TODO: identify and handle unsigned. 2017-05-25 Jan Nieuwenhuizen mescc: Support typedef and many TCC declaration variants. * module/language/c99/compiler.mes (ast->info): Register typedefs in types. (enum-def-list->constants): Support addition and substraction in enum field values. (get-type): New function. Use throughout. mescc: Handle comments anywhere. * module/language/c99/compiler.mes (c99-input->full-ast): Rename from c99-input->full-ast. (ast-strip-comment, c99-input->ast): New functions. (ast->info): Remove comment exceptions. mescc: Support anonymous enums. * module/language/c99/compiler.mes (enum-def-list->constants): New function. (ast->info): Support anonymous enum. 2017-05-23 Jan Nieuwenhuizen mescc: C99 header files and declaraions. * libc/include/assert.h (assert_fail): * libc/include/stdio.h: +int eputs (char const* s); +int fputs (char const* s); +int puts (char const* s); +int putchar (int c); +int fputc (int c, int fd); +int getchar (); * libc/include/stdlib.h: +char* getenv (char const* s) +int atoi (char const *s); +int *malloc (size_t); +int *realloc (int *p, int size); * libc/include/unistd.h (access): * src/lib.c (display_helper): * src/mes.c (read_input_file_env): * src/posix.c: Include unistd.h. guix: Update from Guix. * guix.scm (mes): Update from Guix. 2017-05-22 Jan Nieuwenhuizen build: Use separate preprocessing stage for mescc. * make/mescc-guile.make (mescc.scm-c-preprocess, (mescc.scm-compile-E): New defines. [!MESC_DIRECT]Compile .o via separate preprocessed .E stage. mescc: support -E. * guile/mescc.scm (parse-opts): Add -E. (source->ast): New function. (main): Use it. * scripts/mescc.mes (parse-opts): Add -E. (source->ast): New function. (main): Use it. 2017-05-21 Jan Nieuwenhuizen mescc: Refactor mlibc compilation. * libc/libc-mes.c: New file. Contents from module/mes/libc.mes, module/mes/libc-i386.mes. * libc/libc-gcc.c: Rename from libc/mlibc.c, include libc/mstart.c * libc/mstart.c: Remove. * module/mes/libc-i386.mes: Remove. * module/mes/libc-i386.scm: Remove. * module/mes/libc.mes: Remove. * module/mes/libc.scm: Remove. * GNUmakefile (CFLAGS): Include libc-gcc.c (WAS: mlibc.c). * make/bin-mlibc.make (C_FLAGS): Remove start.c include. * make/mescc-guile.make: Rewrite using compile, link. * make/mescc-mes.make: Likewise. * scaffold/m.c: Update. 2017-05-17 Jan Nieuwenhuizen mescc: support -c, -o. * module/language/c99/compiler.mes: Throughout: quote lambda's. (current-eval): New function. Thanks Andy! (object->list): New function. Update callers. (c99-input->info): Dump a.o. (initzer->non-const, function:object->list): New functions. (info:object->list): New function. (c99-input->elf): Call it. * module/mes/as-i386: Throughout: quote lambda's. * scripts/mescc.mes (main): Rewrite. * guile/mescc.scm (main): Likewise. 2017-05-23 Jan Nieuwenhuizen mes: Bugifx for number->string radix > 10. * module/mes/scm.mes (number->string): Bugfix for `10' -> hex/radix > 10. 2017-05-21 Jan Nieuwenhuizen mes: Simplify read-string. * module/mes/guile.mes (read-string): Simplify, probably fix even. mescc: Remove LALR C frontend prototype. * module/language/c/compiler.mes: Remove. * module/language/c/lexer.mes: Remove. * module/language/c/parser.mes: Remove. mes: Add negate. * module/mes/scm.mes (negate): New function. 2017-05-19 Jan Nieuwenhuizen core: Add current-output-port, open-output-file, set-current-output-port. * libc/include/fcntl.h: Declare it. Add some fcntl defines. * libc/include/stdio.h: Remove fcntl defines, Declare g_stdout. * module/language/c99/compiler.mes (c99-input->ast): Define O_WRONLY, O_RDWR. * module/mes/guile.mes (with-output-to-file, with-output-to-port): New functions. * src/posix.c (current_output_port, open_output_file, set_current_output_port): New functions. * libc/mlibc.c (open): Add optional mode parameter. * module/mes/libc-i386.mes (i386:open): Forward third parameter. * scaffold/mini-mes.c (main): Init g_stdout. * src/mes.c (main): Likewise. mes: Support octal numbers in reader. * module/mes/read-0.mes (read-octal): New function. (read-word): Use it. * tests/read.test: Test it. 2017-05-18 Jan Nieuwenhuizen mes: Add getopt-long. * module/mes/getopt-long.scm: New file, imported from Guile-1.8, * module/mes/getopt-long.mes: Include it. * AUTHORS: Mention it. mes: Add string-rindex. * module/srfi/srfi-13.mes (string-rindex): New function. mes: Support predicate with string-index. * module/srfi/srfi-13.mes (string-index): Support predicate. mes: Add string-suffix? * module/mes/scm.mes (string-prefix?): Refactor. (string-suffix?): New function. 2017-05-27 Jeremiah Orians Purging binary blobs * mes.mes: Remove. * module/mes/read-0-32.mo: Remove. 2017-05-15 Jan Nieuwenhuizen doc: Update. * AUTHORS: Remove module/nyacc. 2017-05-14 Jan Nieuwenhuizen doc: typo guix hash: 0qqywk3siyhf08v7xac08lqldklrqfndlp495wgy6ii9fn93197k 2016-12-25 Jan Nieuwenhuizen Release 0.6. * configure (VERSION): Bump. 2017-05-06 Jan Nieuwenhuizen doc: Release update. * NEWS: Update. 2017-05-04 Jan Nieuwenhuizen test: Run 33/55 tests of ../tinycc/tests/test2 if avaiable. * make/check-tinycc.make: New file. * tinycc/tinycc.make: New file. * GNUmakefile (SUBDIRS): Add tinycc. 2017-05-14 Jan Nieuwenhuizen build: Support i686, support development for arm. * configure (CC32): Accept arm-* as 32 bit compiler. (check-compile-header-c, check-header-c): New functions. (parse-opts): New option: --with-courage. (main): Check for platform, stdio.h, limits.h. 2017-05-08 Jan Nieuwenhuizen mescc: Minimal support for short. * module/language/c99/compiler.mes (i386:type-alist): Add short. mescc: Add strcpy. * libc/include/string.h (strcpy): Declare. * libc/mlibc.c (strcpy): New function. * module/mes/libc.mes (strcpy): New function. (libc): Add it. * scaffold/t.c (string_test): Test it. mescc: Enhance sizeof support. * module/language/c99/compiler.mes (expr->accu): Support sizeof (simple-type), sizeof (var). mescc: Support void return. * module/language/c99/compiler.mes (ast-info): Support `return'. 2017-05-07 Jan Nieuwenhuizen nyacc: Unbundle. * configure (check-version): Use keyword parameters, add #:command parameter. (main): Check for Nyacc. * INSTALL: Mention Nyacc as dependency. * make/guile.make (all-go): Compile in guile dir. * module/module.make (SCM_FILES): Remove Nyacc filters. * module/nyacc/BUGS: Remove. * module/nyacc/ChangeLog: Remove. * module/nyacc/README: Remove. * module/nyacc/README.nyacc: Remove. * module/nyacc/bison.scm: Remove. * module/nyacc/export.scm: Remove. * module/nyacc/import.scm: Remove. * module/nyacc/lalr.scm: Remove. * module/nyacc/lalr2.scm: Remove. * module/nyacc/lang/c99/README: Remove. * module/nyacc/lang/c99/body.scm: Remove. * module/nyacc/lang/c99/cpp.scm: Remove. * module/nyacc/lang/c99/cppmach.scm: Remove. * module/nyacc/lang/c99/mach.d/c99act.scm: Remove. * module/nyacc/lang/c99/mach.d/c99tab.scm: Remove. * module/nyacc/lang/c99/mach.d/c99xact.scm: Remove. * module/nyacc/lang/c99/mach.d/c99xtab.scm: Remove. * module/nyacc/lang/c99/mach.d/cppact.scm: Remove. * module/nyacc/lang/c99/mach.d/cpptab.scm: Remove. * module/nyacc/lang/c99/mach.scm: Remove. * module/nyacc/lang/c99/parser.scm: Remove. * module/nyacc/lang/c99/pprint.scm: Remove. * module/nyacc/lang/c99/util1.scm: Remove. * module/nyacc/lang/c99/util2.scm: Remove. * module/nyacc/lang/c99/xparser.scm: Remove. * module/nyacc/lang/calc/parser.scm: Remove. * module/nyacc/lang/util.scm: Remove. * module/nyacc/lex.scm: Remove. * module/nyacc/parse.scm: Remove. * module/nyacc/util.scm: Remove. mes: Consider GUILE_LOAD_PATH for include-from-path. * module/mes/guile.scm (include-from-path): New macro. mescc: Bugfixes for local char[]. * module/language/c99/compiler.mes (push-ident): Cater for local arrays. (expr->accu): Avoid post-inc/post-dec twice on rhs of assignment. Fix size lookup for local char arrayns. 2017-05-06 Jan Nieuwenhuizen nyacc: Update to 0.78. mes: Add srfi-16 to Nyacc Guile support. * module/mes/guile.mes: Include srfi-16 for Nyacc. mes: Basic support for string-index. * module/srfi/srfi-13.mes (string-index): New function. * tests/srfi-13.test ("string-index"): Test it. mes: Support #\cr short form in reader. * module/mes/read-0.mes (read-character): Support #\cr short form for #\return. * module/mes/read-0-32.mo: Regenerate. mes: Support case-lambda. * module/srfi/srfi-16.scm: New file. * AUTHORS: Mention it. * module/srfi/srfi-16.mes: New file. mescc: Enhance enum support. * module/language/c99/compiler.mes (ast->info): Support enum variable declaration. Respect field value overrides. mescc: Support binary constants. * module/language/c99/compiler.mes (cstring->number): Support binary 0bxxx values. * scaffold/t.c (math_test): Test it. mescc: Support ==, != as expression value. * module/mes/as-i386.scm: Export them. * module/language/c99/compiler.mes (expr->accu): Set accu to 0/1 for eq, ne. * module/mes/as-i386.mes (i386:nz->accu, i386:z->accu, i386:accu<->stack): New functions. * scaffold/t.c (math_test): Test it. mescc: Support &, ^. * module/mes/as-i386.mes (i386:accu-and-base, i386:accu-xor-base): New functions. * module/mes/as-i386.scm: Export them. * module/language/c99/compiler.mes (expr->accu): Support bitwise-and, bitwise-xor. mescc: Support struct pointers. * module/language/c99/compiler.mes (expr->accu): Support &struct.field, struct->field. (ast->info): Support struct *foo = &bar; * scaffold/t.c (struct_test): Test it. mescc: Support struct definition with variable declaration. * module/language/c99/compiler.mes (ast->info): Support `struct foo {} bar;'. mescc: Support void functions. * module/language/c99/compiler.mes (function->info): Add return if missing. Fixes calling void functions (and functions where return is missing). * scaffold/t.c (void_func): Test it. mescc: Bugfix for break in switch not in compound. * module/language/c99/compiler.mes (clause->jump-info): Rename from case->jump-info. (statements->clauses): New function. (ast->info): Use it. Fixes switch statement with break in a case outside of a compound. * scaffold/t.c (swits): Test it. 2017-05-05 Jan Nieuwenhuizen mescc: Enhance [int/pointer] array support. * module/language/c99/compiler.mes (p-expr->type): Handle array-ref with any index. (ast->info): Support plain array declerations. (expr->accu): For size == 4, assume value in accu. Fixes int/pointer arrays. * scaffold/t.c: Test it. 2017-05-04 Jan Nieuwenhuizen mescc: Enhance struct support. * module/language/c99/compiler.mes (expr->accu): Remove struct scm hardcoding. (p-expr->type): New function. (ast->info): Support struct variable declaration without initializer. Set struct type for all struct declarations. 2017-05-03 Jan Nieuwenhuizen mescc: Fix itoa for negative numbers, using workaround. * module/mes/libc.mes (itoa): Avoid `sign = x < 0;' FIXME, todo. * scaffold/t.c (test): Test it. 2017-05-02 Jan Nieuwenhuizen mescc: Support regular C99 compile, headers + mlibc. * libc/include/assert.h: New file. * libc/include/ctype.h: New file. * libc/include/errno.h: New file. * libc/include/fcntl.h: New file. * libc/include/limits.h: New file. * libc/include/mlibc.h: New file. * libc/include/stdio.h: New file. * libc/include/stdlib: New file. * libc/include/string.h: New file. * libc/include/unistd.h: New file. * libc/mlibc.c: Remove declarations. * make/bin.make (INCLUDES): Factor out standard includes. * make/bin-mlibc.make: New file. * scaffold/scaffold.make: Use it. * src/src.make: Use it. * module/language/c99/compiler.mes (ast-info): Handle more function declarations. * scaffold/cons-mes.c: Remove mlibc definitionsa and mlibc.c include. Instead include . * scaffold/hello.c: Likewise. * scaffold/m.c: Likewise. * scaffold/malloc.c: Likewise. * scaffold/micro-mes.c: Likewise. * scaffold/mini-mes.c: Likewise. * scaffold/t.c: Likewise. * scaffold/tiny-mes.c: Likewise. * src/gc.c: Likewise. * src/lib.c: Likewise. * src/math.c: Likewise. * src/mes.c: Likewise. * src/posix.c: Likewise. * src/reader.c: Likewise. 2017-05-03 Jan Nieuwenhuizen mescc: Support list of initializers. * module/language/c99/compiler.mes (ast->info): Support list of initializers. 2017-05-02 Jan Nieuwenhuizen mescc: Basic printf support. * module/mes/libc-i386.mes (i386:va-arg): New function. * module/mes/libc-i386.scm (mes): Export it. * module/mes/libc.mes (printf): New function. (libc): Add it. * libc/include/stdio.h: New file. * module/language/c99/compiler.mes (c99-input->ast): Add libc/include to include path. (ast-info): Handle (skip) ellipsis in function declaration. guix: Update from Guix. * guix.scm: Use version from Guix. * make/install.make (update-hash): Update version for new Guix meme. make: Recompile .go too when included mes is touched. * build-aux/compile-all.scm (scm->mes): New function. (file-needs-compilation?): Use it to hackishly respect (include-[from-path] "<>.mes") 2017-05-05 Jan Nieuwenhuizen build: Resolve MODULEDIR confusion. Fixes mes installation. * make/install.make (GUILEDIR): New variable. Was MODULEDIR. (MODULEDIR): Mes' module dir. * guile/mescc.scm: Update. * src/mes.c (load_env, bload_env): Update. 2017-05-02 Jan Nieuwenhuizen guix hash: 01m8n7zk4f1ryd61dj589zarx09vbi7fc5f8m1x5zfk6r7l0zja2 guix.scm: Remove erroneous system restriction. * guix.scm (mes): Remove second erroneous system restriction. 2017-04-27 Jan Nieuwenhuizen Release 0.5. * configure (VERSION): Bump. bootstrap: Regenerate. * module/mes/read-0-32.mo: Regenerate. doc: Release update. * AUTHORS: Mention Nyacc and GuixSD. * NEWS: Update. * README: Update. * doc/ANNOUNCE-0.5 New file. * HACKING: Add pointers, update TODO/DONE. 2017-04-25 Jan Nieuwenhuizen bootstrap: Regenerate. * mes.mes: Regenerate. 2017-04-24 Jan Nieuwenhuizen mescc: Parse mlibc early, show progress. * module/mes/libc.mes (_start, strlen, getchar, assert_fail, ungetc, putchar, fputc, eputs, fputs, puts, strcmp, itoa, isdigit, atoi, malloc, realloc, strncmp, c:getenv): Change to function, add progress. Update callers. * module/language/c99/compiler.mes (c99-input->info): Compile libc separately. * guile/mescc.scm: Update progress. * scripts/mescc.mes: Update progress. 2017-04-25 Jan Nieuwenhuizen bootstrap: Regenerate. * mes.mes: Regenerate. 2017-04-24 Jan Nieuwenhuizen core: Set argv for mescc too. * src/mes.c (main)[!__MESC__]: Remove branch. bootstrap: Regenerate. * mes.mes: Regenerate. 2017-04-23 Jan Nieuwenhuizen mescc: Avoid duplication of globals. * module/language/c99/compiler.mes (globals:add-string): New function. (expr->arg): Use it to avoid globals duplication. (expr->accu): Do not pre-add globals. mescc: Fix global creation in AND/OR clause. * module/language/c99/compiler.mes (test->jump->info): Retain globals created in AND/OR test. 2017-04-17 Jan Nieuwenhuizen core: Move some debugging to MES_DEBUG=2. * module/mes/base-0.mes (load): Add ;;;. * src/gc.c (gc_flip): Test on g_debug > 1. (gc): Likewise. * src/mes.c (mes_builtins): Likewise. (main): Likewise. * src/reader.c (dump): Likewise. mescc: Add atoi. * libc/mlibc.c (atoi): New function. * module/mes/libc.mes (atoi): New function. (libc): Add it. mescc: Add getenv. * module/mes/libc-i386.mes (i386:_start): Push environment pointer. * module/mes/libc.mes (g_environment): New global. (_env): New function. (_start): Use it to set g_environment. (getenv): New function. * lib/mlibc.c (strncmp): New function. (getenv): Implement. * lib/mstart.c (_start): Set g_environment. * module/mes/libc.mes (strncmp): New function. (libc): Add it. * scaffold/t.c: (array_ref): Test it. mescc: Support pointer arrays and some arithmetic. * module/language/c99/compiler.mes (.name): Support **; handle type size. (.statements): Likewise. (push-local-de-ref): Likewise. (push-ident-de-ref): Likewise. (expr->arg): Likewise. (ident->accu): Likewise. (base->ident-address): Likewise. (ident-add): Likewise. (expr->accu): Likewise. (decl->type): Likewise. (formal->text): Likewise. (int->global, ident-address->accu, ident-address->base): New functions. (ast->info): Support *, *[] ** declarations. (push-local-de-de-ref, push-ident-de-de-ref): New functions. * module/mes/as-i386.mes (i386:push-byte-local-de-ref): Rename from i386:push-local-de-ref. Update callers. (i386:push-local-de-ref, i386:push-byte-local-de-de-ref, i386:accu-mem-add): New functions. * module/mes/as-i386.scm (mes): Export them. * scaffold/t.c (array_test): Test it. 2017-04-25 Jan Nieuwenhuizen bootstrap: Regenerate. * mes.mes: Regenerate. * module/mes/read-0-32.mo: Regenerate. 2017-04-16 Jan Nieuwenhuizen Add access? * libc/mlibc.c (access): New function. * module/mes/libc-i386.mes (i386:access): New function. (i386:libc): Add it. * src/posix.c (access_p): New function. * module/mes/posix.mes: New file. * module/mes/base-0.mes (mes): Include it. * module/mes/read-0-32.mo: Regenerate. 2017-04-25 Jan Nieuwenhuizen bootstrap: Regenerate * module/mes/read-0-32.mo: Regenerate. 2017-04-12 Jan Nieuwenhuizen build: Refactor. * GNUmakefile (OUT,QUIET,SUBDIRS): New variables. include make/common.make * .gitignore: Remove toplevel targets. * build-aux/compile-all.scm: Import from GNU Guix. * configure (gulp-pipe): Check exit status. Actually test for CC, CC32. * make/bin.make: New file. * make/check.make: New file. * make/clean.make: New file. * make/common.make: New file. * make/compile.make: New file. * make/guile.make: New file. * make/mescc-guile.make: New file. * make/mescc-mes.make: New file. * make/reset.make: New file. * lib/mlibc.c: Rename from top. * lib/start.c: Rename from top. * module/module.make: New file. * scaffold/scaffold.make: New file. * scripts/scripts.make: New file. * src/mes.c: Rename from top. * src/src.make: New file. * src/mes.c: Rename from top. * src/gc..c: Rename from top. * src/lib.c: Rename from top. * src/posix.c: Rename from top. * src/reader.c: Rename from top. * src/vector.c: Rename from top. * tests/tests.make: New file. 2017-04-15 Jan Nieuwenhuizen Remove gc scaffolding. * tests/gc-0.test: Remove. * tests/gc-1.test: Remove. * tests/gc-2.test: Remove. * tests/gc-2a.test: Remove. * tests/gc-3.test: Remove. * tests/gc-4.test: Remove. * tests/gc-5.test: Remove. * tests/gc-6.test: Remove. * tests/gc.test:Remove. mescc: Add fsync. * module/mes/libc-i386.mes (i386:fsync): New function. (i386:libc): Export it. * mlibc.c (fsync): New function. 2017-04-10 Jan Nieuwenhuizen core/mini-mes: Merge merge mes.c and mini-mes.c. * mes.c: * scaffold/mini-mes.c: * gc.c: * GNUmakefile: mescc: Allow usage of const by ignoring. * module/language/c99/compiler.mes (ast->info): Support const declarations (by ignoring them). * lib.c (display_helper)[!__GNUC__]: Remove branch. * posix.c (write_byte)[!__GNUC__]: Likewise. HACKING: Removed __MESC__ workarounds. * HACKING: Update pointer. mescc: Support break in while. * module/language/c99/compiler.mes (make): Add break field. (.break): New function. (clone): Support break field. (ast->info): Support break. * scaffold/t.c (test): Test it. * scaffold/mini-mes.c (lookup_symbol_): Use it; remove goto workaround. 2017-04-09 Jan Nieuwenhuizen mescc: Refactor switch. * module/language/c99/compiler.mes (case->jump-info): Refactor. Support multiple case statements. * scaffold/t.c (swits): Test it. * lib.c (display_helper)[__NYACC__]: Remove branch. 2017-04-08 Jan Nieuwenhuizen mini-mes: Merge with mes.c: lib.c, math.c, posix.c. * mes.c: Include math.c after posix.c. (assert_defined, check_formals, check_apply, load_env, bload_env): Move from lib.c * scaffold/mini-mes.c: Include mini-lib.h, lib.c., mini-math.h, math.c, mini-posix.h, posix.c. (greater_p, less_p, is_p, minus, plus, divide, modulo, multiply, logior, ash): Remove. (ungetchar, peekchar, peek_byte, read_byte, write_byte, string_to_cstring, getenv_, open_input_file, current_input_port, set_current_input_port, force_output): Remove. (mes_builtins): include mini-lib.i, mini-lib.environment.i. mini-math.i, mini-math.environment.i mini-posix.i, mini-posix.environment.i. * GNUmakefile (guile-mini-mes): Add dependencies. mescc: Refactor assignment. * module/language/c99/compiler.mes (expr->accu): Refactor assignment. Support multiple operators. * scaffold/t.c (math_test): Test it. * scaffold/mini-mes.c (minus, divide, modulo, multiply, logior)[!__GNUC__]: Remove branch. 2017-04-07 Jan Nieuwenhuizen mescc: Factor-out array-ref. * module/language/c99/compiler.mes: Factor-out array-ref. mescc: Refactor expr->base. * module/language/c99/compiler.mes (expr->base): Rename from expr->+base. Use throughout. mescc: Refactor binary operators. * module/language/c99/compiler.mes (binop->accu): Rename from compare->accu. Update callers. (expr->accu): Use it for binary operators. * scaffold/t.c (math_test): Test it. mescc: Factor-out append-text. * module/language/c99/compiler.mes: Use append-text throughout. mescc: Factor-out wrap-as. * module/language/c99/compiler.mes (wrap-as): Rename from wrap. Use throughout. mescc: Refactor comparisons. * module/language/c99/compiler.mes (compare->accu, append-text, wrap): New functions. (expr->accu): Use them to implement construct like 1 == inc (0). * scaffold/t.c (math_test): Test them. 2017-04-06 Jan Nieuwenhuizen HACKING: Removed gc.c, vector.c mescc workarounds. * HACKING: Update pointer and recipe. mescc: Refactor array ref. * module/language/c99/compiler.mes (expr->accu, expr->accu*): Remove duplication, use expression as array index. * scaffold/t.c (struct_test): Test it. * vector.c (vector_length, list_to_vector)[!__GNUC__]: Remove branch. mescc: Refactor expressions. * module/language/c99/compiler.mes (expr->accu, ast->info): Remove duplication, separate concerns. 2017-04-05 Jan Nieuwenhuizen mescc: Refactor pre/post inc/dec. * module/language/c99/compiler.mes: Refactor pre/post inc/dec. bootstrap: Regenerate. * mes-mini-mes: Regenerate. * module/mes/read-0-32.mes: Regenerate. mescc: function call. * module/language/c99/compiler.mes (expr->accu): Move function call from ast->info. mescc: Support expression as lhs array index. * module/language/c99/compiler.mes (expr->accu): Treat array index as expression. * scaffold/t.c (struct_test): Test it. * gc.c (gc_copy)[!__GNUC__]: Remove branch. * vector.c (list_to_vector)[!__GNUC__]: Likewise. 2017-04-04 Jan Nieuwenhuizen mescc: Remove duplication. * module/language/c99/compiler.mes (expr->arg): Use expr->accu for most expressions. scripts: Support --help, --version. * guile/mescc.scm: Support --help, --version. * scripts/mescc.mes: Likewise. * scripts/repl.mes: Likewise. 2017-04-03 Jan Nieuwenhuizen scm: Do not quote list of strings. * module/mes/display.mes (display): Check value of write?, fixes quoting display string. mescc: Do not return ELF text. * module/language/c99/compiler.mes (info->exe): Do not return ELF text. 2017-04-02 Jan Nieuwenhuizen build: Update Guix build and install. * guix.scm (%source-dir): New variable. (git-file?): New function. (mes): Use them to simplify building/installing from git. * make/install.make (READMES): Add INSTALL, README. * (install): Install mescc.scm and read-0-32.mo. bootstrap: Regenerate. * mes-mini-mes: First self-hosting binary. HACKING: scripts/mescc.mes scaffold/mini-mes runs. * HACKING: Update pointer and recipe. mini-mes: Fix for assq. * scaffold/mini-mes.c (assq): Use eq_p iso ==. Fixes tests/display.test ("write alarm"). core: Use 0.25% safety region. * gc.c (gc_up_arena): Up GC_SAFETY too. * scripts/repl.mes: Remove MES_ARENA override. bootstrap: Regenerate. * module/mes/read-0-32.mo: Regenerate. core: Remove append. * lib.c (append): Remove. * scaffold/mini-mes.c (append): Remove. * module/mes/base-0.mes (append): New function. * module/mes/read-0.mo: Regenerate. * module/mes/read-0-32.mo: Regenerate. test: Add test for append-map. * tests/srfi-1.test ("append-map"): New test. 2017-04-01 Jan Nieuwenhuizen core: Check gc free harder. * gc.c (gc_check): New fuction. * mes.c (eval_apply): Use it. mescc: Fix by value assignment from array-of struct entry. * module/language/c99/compiler.mes (expr->accu): Fix by value assignment from array-of struct entry. * scaffold/t.c (struct_test): Test it. * vector.c (make_vector, list_to_vector, vector_to_list): Use it; remove workarounds. * gc.c (gc_copy): Likewise. core: Fix flush for _POSIX_SOURCE. * posix.c (write_byte, force_output)[_POSIX_SOURCE]: Use FILE* functions. Fixes repl.mes. core: Increase MAX_ARENA_SIZE and GC safety. * mes.c (MAX_ARENA_SIZE): Double to 40000000. (GC_SAFETY): Set to 10000 cells (WAS: 1000). * scaffold/mini-mes.c (MAX_ARENA_SIZE, GC_SAFETY): Likewise. * gc.c (gc)[MES_DEBUG]: Also print safety area. HACKING: scripts/mescc.mes scaffold/t.c runs. core: Increase GC safety. * mes.c (GC_SAFETY): Set to 1000 cells (WAS: 100). * scaffold/mini-mes.c (GC_SAFETY): Likewise. HACKING: scripts/mescc.mes scaffold/tiny-mes.c runs. HACKING: scripts/mescc.mes scaffold/cons-mes.c runs. test: Add nyacc cpp match tests; two fail. * tests/match.test ("match nyacc 0", "match nyacc 1"): New tests. ("match nyacc simple", "match nyacc tkl0"): New tests; FAIL with Mes. (report): Set failure expectation to 2 for Mes. * HACKING: Add to bugs. scm: Support test failure expectation. * module/mes/test.mes (result): Take second argument to mean expected failure count. 2017-04-02 Jan Nieuwenhuizen scm: Evaluate arguments of OR only once. * module/mes/base.mes (or): Evaluate arguments only once. * module/mes/read-0.mes (or): Likewise. * tests/base.test ("or only once"): Test it. * module/mes/read-0-32.mo: Regenerate. 2017-04-01 Jan Nieuwenhuizen scm: Have char-set-contains? strictly return boolean. * module/srfi/srfi-14.mes (char-set-contains?): Return #t rather than memq result. scm: Fix bug in assq-set! * module/mes/scm.mes (assq-set!): Bugfix. 2017-04-02 Jan Nieuwenhuizen scm: Add c????r. * module/mes/base-0.mes (caar, cadr, cdar, cddr, map): Remove. Update callers. * module/mes/base.mes (): Remove. * module/mes/base.mes (cadadr, cddadr, cdddar): New function. 2017-03-31 Jan Nieuwenhuizen scm: Add access? * module/mes/guile.mes (access?): New dummy function. Fixes Nyacc's #include. 2017-03-29 Jan Nieuwenhuizen doc: Add Roamdmap. * HACKING: Add roadmap. 2017-04-01 Jan Nieuwenhuizen scm: Add open-input-string, read-string. * module/mes/guile.mes (open-input-string, read-string): New functions. * tests/guile.test: New file. * GNUmakefile (TESTS): Add it. 2017-04-02 Jan Nieuwenhuizen build: Cleanup, use gcc-specific snarfing. * .gitignore: Ignore *.o-32, mes-mini-mes. * scripts/nyacc-calc.mes: Remove. * scripts/nyacc.mes: Remove. * scripts/paren.mes: Remove. * make/install.make (install): Remove them. p* module/mes/mes-0.mes: Remove. * module/mes/loop-0.mes: Remove. * build-aux/mes-snarf.scm (main): Add --mini option. * GNUmakefile (mini-mes): Use it. 2017-03-27 Jan Nieuwenhuizen core: Fix error message when macro is missing. * mes.c (scm_vm_eval_check_func): New symbol. (eval_apply): In eval, evaluate car before evlis. Fixes error message when macro match is missing in (match ... (car x)). (mes_symbols): Add cell_call_with_values, cell_current_module to environment. * scaffold/mini-mes.c (eval_apply): Likewise. 2017-03-29 Jan Nieuwenhuizen test: Add pmatch tests. * tests/pmatch.test: New file. * GNUmakefile (TESTS): Add it. 2017-03-28 Jan Nieuwenhuizen nyacc: prefix globals. 2017-03-27 Jan Nieuwenhuizen scm: Bugfix display of named characters: add port. * module/mes/display.mes (display): Typo, add port. nyacc: Add missing (mes pmatch) include. * module/nyacc/lang/c99/cpp.mes (mes): Include (mes pmatch). 2017-04-01 Jan Nieuwenhuizen nyacc: Use pmatch rather than match for cpp. * module/nyacc/lang/c99/cpp.scm (nyacc lang c99 cpp): Import (system base pmatch) rather than (ice-9 match). (rtokl->string): Rewrite using pmatch. 2017-03-27 Jan Nieuwenhuizen scm: Bugfix drain-input. * module/mes/guile.mes (drain-input): Bugfix: return string. scm: Add assoc-set! * module/mes/scm.mes (assoc-set!): New function. * tests/scm.test ("assoc-set!", "assoc-set! new"): New tests. 2017-03-26 Jan Nieuwenhuizen scm: Add compose. * module/mes/scm.mes (compose): New function. * tests/scm.test ("compose"): New test. scm: Support reading negative hex numbers. * module/mes/read-0.mes (read-hex): Support negative hex numbers. * tests/math.test ("#x-10"): New test. * tests/read.test: Add test. scm: Support map4. * module/mes/base-0.mes (map): Remove. Update callers. * module/mes/base.mes (map): Support map4. nyacc: Add simple split-cppdef for Mes. * module/nyacc/lang/c99/body.scm: Add non-regexp split-cppdef for Mes. scm: Add with-throw-handler hack. * module/mes/catch.mes (with-throw-handler): Add hack for Nyacc 0.75 scm: Add list->char-set. * module/srfi/srfi-14.mes (list->char-set): New function. * tests/srfi-14.test ("list->char-set!"): Test it. 2017-03-26 Jan Nieuwenhuizen mini-mes: Debugging to stderr. * scaffold/mini-mes.c (error, bload_env, main): Send debug info to stderr. throw/catch dinges: URG 2017-03-26 Jan Nieuwenhuizen scripts: Allow running with any mes. * scripts/mescc.mes: Run $MES if set, default to ../scripts/mes. * scripts/repl.mes: Likewise. mini-mes: Include and enable gc. * scaffold/mini-mes.c: Set MES_GC=1. (ARENA_SIZE)[MES_GC]: Reduce to 10,000 cells (WAS: 1,000,000,000 chars). (g_news): New global. (NTYPE, NCAR, NVALUE, NLENGTH, NCDR, NVECTOR): New macros. (mes_symbols)[MES_GC]: Call gc_init_news. (mes_builtins): Include gc.i, gc.environment.i. 2017-04-01 Jan Nieuwenhuizen mini-mes: Workarounds for gc.c. * gc.c (gc_copy)[!__GNUC__]: Avoid by value assignment from array-of struct entry. * scaffold/mini-mes.c (gc_init_cells): Workarounds. 2017-03-26 Jan Nieuwenhuizen core: Prepare gc.c for mescc, non-POSIX_SOURCE. * mes.c (NLENGTH, NVALUE, NVECTOR): New macros. (mes_builtins): Add comment on .i include order. * module/language/c99/compiler.mes (mescc): Add define _POSIX_SOURCE=0. * gc.c (gc_up_arena, gc_flip, gc_loop, gc)[!_POSIX_SOURCE]: Use eputs rather than fprintf. (gc_loop): Use CAR, TYPE, NVECTOR rather than .car, .type, .vector. * gc.c (gc_up_arena)[!_POSIX_SOURCE]: Add non-POSIX mlib.c implementation. mescc: Bugfix for realloc. * module/mes/libc.mes (realloc): Thinko. 2017-03-25 Jan Nieuwenhuizen mescc: Bugfix for neg. * module/language/c99/compiler.mes (expr->accu): Fix neg. * scaffold/t.c (math_test): Test it. * scaffold/mini-mes.c (ash): Remove workaround. mescc: Support rshift, have guile-mini-mes pass math test. * module/mes/as-i386.mes (i386:accu>>base): New function. * module/mes/as-i386.scm (mes): Export it. * module/language/c99/compiler.mes (expr->accu): Support rshift. * scaffold/t.c (math_test): Test it. * scaffold/mini-mes.c (ash): Use it. 2017-03-26 Jan Nieuwenhuizen test: Enable vector read test. * tests/read.test: Enable vector read test. 2017-03-25 Jan Nieuwenhuizen mini-mes: Support vectors. * scaffold/mini-mes.c (REF, MAKE_REF): New macro. Include vector.h, vector.c. (mes_builtins): Include vector.i, vector.environment.i. mini-mes: Workarounds for vector.c. * vector.c (make_vector, vector_set_x, list_to_vector)[!__GNUC__]: Avoid by value assignment from array-of struct entry. core: prepare vector.c for mescc. * vector.c (make_vector, vector_set_x, vector_to_list): Use REF, VALUE rather than .ref, .value. mini-mes: Fully remove reader from core. * scaffold/mini-mes.c (lookup_): Remove. * mes.c: Likewise. * reader.c (lookup_): Enable. * mlib.c (putc): New function. * module/mes/libc.mes (putc): New function. 2017-03-24 Jan Nieuwenhuizen mescc: Support bitwise or. * module/mes/as-i386.mes (i386:accu-or-base): New function. * module/mes/as-i386.scm: Export it. * module/language/c99/compiler.mes (expr->accu): Use it; support bitwise or. * scaffold/t.c (math_test): Test it. * scaffold/mini-mes.c (logior): Use it. mescc: Lshift support non-fixed shift value. * module/mes/as-i386.mes (i386:accu<accu): Use it. * scaffold/t.c (math_test): Test it. mescc: Use signed integer comparison. * module/language/c99/compiler.mes (test->jump->info): * module/mes/as-i386.mes (i386:Xjump-le, i386:Xjump-g, i386:Xjump-l, i386:Xjump-ge): New functions. * module/mes/as-i386.scm: Export them. * scaffold/t.c (math_test): Test them. * tests/scm.test ("iota -1"): Enable for mesc. 2017-03-26 Jan Nieuwenhuizen mescc: Run module/base-0.mes. * gc.c: New file. * vector.c: New file. * mes.c: Remove vector and gc functions, include vector.c, gc.c. * GNUmakefile (mes.o): Add gc, vector dependencies. * scaffold/mini-mes.c (eval_apply): Support primitive-load through read_input_file. (getenv_, open_input_file, current_input_port, set_current_input_port force_output, exit_, values, arity_, xassq, is_p, minus, plus, divide, modulo multiply, logior, ash): New function. (mes_symbols): Add symbols %gnuc, %mesc. * scaffold/mini-mes.c (): New functions. * scaffold/b-0.mes: New file. * scaffold/t-0.mes: New file. test: Allow running with any mes. * test/base.test: Run $MES if set, default to ../scripts/mes. * tests/base.test: Likewise. * tests/catch.test: Likewise. * tests/closure.test: Likewise. * tests/cwv.test: Likewise. * tests/display.test: Likewise. * tests/fluids.test: Likewise. * tests/gc-0.test: Likewise. * tests/gc-1.test: Likewise. * tests/gc-2.test: Likewise. * tests/gc-2a.test: Likewise. * tests/gc-3.test: Likewise. * tests/gc-4.test: Likewise. * tests/gc-5.test: Likewise. * tests/gc-6.test: Likewise. * tests/gc.test: Likewise. * tests/let-syntax.test: Likewise. * tests/let.test: Likewise. * tests/match.test: Likewise. * tests/math.test: Likewise. * tests/module.test: Likewise. * tests/optargs.test: Likewise. * tests/peg.test: Likewise. * tests/psyntax.test: Likewise. * tests/quasiquote.test: Likewise. * tests/read.test: Likewise. * tests/record.test: Likewise. * tests/scm.test: Likewise. * tests/srfi-1.test: Likewise. * tests/srfi-13.test: Likewise. * tests/srfi-14.test: Likewise. * tests/vector.test: Likewise. 2017-04-02 Jan Nieuwenhuizen scm+test: Factor-out math and vector. * module/mes/base-0.mes (quotient): Remove. * module/mes/scm.mes (quotient): Add. * tests/scm.test: Remove arithmetic/math tests. * tests/math.test: New file. * GNUmakefile (TESTS): Add it 2017-03-23 Jan Nieuwenhuizen mescc: Have ungetc remember 2 positions. * doc/examples/t.c (read_test): Test it. * doc/examples/mini-mes.c: * mlibc.c (getchar, ungetc): Support 2 ungetc positions. * module/mes/libc.mes (getchar, ungetc): Likewise. 2017-04-02 Jan Nieuwenhuizen mescc: Add brk, naive malloc. * scaffold/mini-mes.c (gc_init_cells): Use malloc to init g_cells. * scaffold/malloc.c: New file. * GNUmakefile (malloc, guile-malloc): New targets. * module/mes/libc-i386.mes (i386:brk): New function. (i386:libc): Add it. * mlibc.c (brk): New function. (malloc): Use it. (realloc): New function. * module/mes/libc.mes (malloc, realloc): New functions. 2017-03-23 Jan Nieuwenhuizen mescc: Struct fixes. * module/language/c99/compiler.mes (expr->arg, expr->accu, ast->info): Fixes for struct assignment. 2017-03-22 Jan Nieuwenhuizen mescc: Add missing defines. * module/language/c99/compiler.mes (mescc): Set STDIN, STDOUT, STDERR, INT_MIN, INT_MAX. mini-mes: Update display_. * doc/examples/mini-mes.c (display_): Add separator, nicer recursion. * mes.c (display_): Update. mescc: Struct by value assignment fixes. * module/language/c99/compiler.mes (ast->info): Remove g_function hardcoding, fix struct assignment. * doc/examples/t.c (struct_test): Test it. mescc: Fix struct field comparison. * module/language/c99/compiler.mes (expr->accu, ast->info): Some push/pop fixes, fixes struct field comparisons. * doc/examples/t.c (struct_test): Test it. mescc: Run full scheme reader read-0.mes. * lib.c (load_env)[MINI_MES]: Load full reader, module/mes/read-0.mes. * GNUmakefile (module/mes/read-0-32.mo): Update dependency. * module/mes/mini-0.mes: Remove. * doc/examples/t.c (struct_test): * module/mes/read-0-32.mo: New file: bootstrap binary reader. mescc: Mini-mes (gcc-compiled) runs read-0.mes. * module/language/c99/compiler.mes (expr->accu): Add mul. (test->jump->info): Add le, ge. (ast->info): Support int and char* initialization at top level. * module/mes/as-i386.mes (i386:accu*base, i386:Xjump-cz, i386:Xjump-ncz): New function. * module/mes/as-i386.scm: Export them. * doc/examples/t.c (test): Test them. * module/mes/libc.mes (ungetc): New function. (getchar): Support it. (assert_fail, isdigit): New functions. (libc): Export them. * module/mes/mini-0.mes: Load full reader. * mlibc.c (ungetc): New function. (getchar): Support it. (assert_fail, isdigit): New functions. * mes.c (list length error lookup_ getchar ungetchar peekchar peek_byte read_byte unread_byte greater_p less_p): Move functions needed to run read-0.mes into core. * doc/examples/mini-mes.c: Likewise. * lib.c (length, error): Comment-out. * math.c (greater_p, less_p): Comment-out. * posix.c: (getchar, ungetchar, peekchar, peek_byte, read_byte, unread_byte): Comment-out. * reader.c (lookup_): Comment-out. 2017-03-19 Jan Nieuwenhuizen mescc: Cleanup mini-mes build and test. * GNUmakefile (guile-cons-mes guile-m guile-main guile-micro-mes guile-mini-mes guile-t guile-tiny-mes): New targets. (clean): Clean them. * .gitignore: Ignore them. * HACKING: Update. * scaffold/tiny-mes.c (bload_env): Read module/mes/tiny-0-32.mo. * scaffold/cons-mes.c (simple_bload_env): Likewise. * lib.c (dump)[MES_TINY]: Write crafted dump: module/mes/tiny-0-32.mo. (load_env): Read module/mes/mini-0.mes. (bload_env): Read module/mes/read-0-32.mo. * module/mes/mini-0.mes: New file. * module/mes/tiny-0.mes : New file. 2017-04-02 Jan Nieuwenhuizen mescc: Refactor libc. * GNUmakefile (mini-mes): Add include. * mlibc.c: New file: libc bits for GNUC -nostdlib. * mstart.c: New file: _start for GNUC -nostdlib. * scaffold/cons-mes.c: Remove GNUC libc bits. * scaffold/m.c: Likewise. * scaffold/mini-mes.c: Likewise. * scaffold/t.c: Likewise. * scaffold/tiny-mes.c: Litkewise. * module/language/c99/compiler.mes (libc, i386:libc): Remove. * module/language/c99/compiler.scm * module/mes/libc-i386.mes: Remove assembly bits. (_start): New function. * module/mes/libc-i386.scm: Export it, remove assembly exports. * module/mes/as-i386.mes: New file: assembly bits from libc-i386.mes. * module/mes/as-i386.scm: New file: export them. * module/mes/libc.mes (libc,_start): New functions from compiler.mes. * module/mes/libc.scm: Export them. 2017-03-19 Jan Nieuwenhuizen mescc: Refactor ret. * module/mes/libc-i386.mes (i386:ret): Refactor. * module/language/c99/compiler.mes (ast->info): Use it. 2017-03-18 Jan Nieuwenhuizen mescc: Cache text generation. * module/mes/elf-util.mes (functions->text): Add cache. mescc: Refactor function-offset. * module/mes/elf-util.mes (function-offset): Recurse down. Factor 5 speedup on mini-mes.c. mescc: Cache data-offset too. * module/mes/elf-util.mes (data-offset): Add cache. mescc: Support assignment with comparison. * module/language/c99/compiler.mes (expr->accu): Handle assignment -> accu. * doc/examples/t.c (test): Test it. * doc/examples/mini-mes.c (eval_apply): Use it. mescc: Support assignment test. * module/language/c99/compiler.mes (test->jump->info): Handle assignment. * doc/examples/t.c (test): Test it. 2017-03-17 Jan Nieuwenhuizen mescc: Fix simple value tests. * module/language/c99/compiler.mes (test->jump->info): Test accu before jumping. Fixes simple value tests. mescc: Struct by value. * build-aux/mes-snarf.scm (symbol->names, function->header, function->environment): Remove struct by value assignment workarounds. * module/language/c99/compiler.mes (ast->info): Remove struct by value assignment debug printing. mescc: Support generic initializer. * module/language/c99/compiler.mes (ast->info): Support generic declaration using initializer. Supports struct field initializer. * doc/examples/t.c (struct_test): Test it. * doc/examples/mini-mes.c (call_lambda, eval_apply, write_byte, display_): Use it. (call_lambda): (eval_apply, list_of_char_equal_p): Use it. mescc: Remove last hardcodings for identifiers. * module/language/c99/compiler.mes (ident->accu, ident->base): Use local:ptr, type->size to remove hard coding of functionx, c1. (expr->accu): Use type->size to remove hard coding of size byte. (decl->type): Also handle typename, bail out if type not found. (type->size): Print identifier and and bail out if type not found. (formal:ptr): New function. (formals->locals): Use it to set pointer value of parameter. WAS: 0. (ast->info): Remove functionx hardcoding. (getchar): Rename c1 to c. * doc/examples/t.c: Test it. mescc: Support function call with enum value. * doc/examples/mini-mes.c: Remove debug printing. * module/language/c99/compiler.mes (push-global, push-local, push-global-address, push-local-address, push-local-de-ref): Return list of lambda. (push-ident): Support push constant. Fixes mini-mes, cstring_to_list. * doc/examples/t.c (test): Test it. 2017-03-13 Jan Nieuwenhuizen mescc: Fix d-sel comparisons. * module/language/c99/compiler.mes (ast->info): Save base while computing accu. Fix comparison using d-sel in second argument. * doc/examples/t.c: Test it. * doc/examples/mini-mes.c (assq): Use it. mescc: Fix for character array s[0]. * module/language/c99/compiler.mes (expr->arg, expr->accu, ast->info): Use type size to calculate index. * doc/examples/t.c: Test it. * doc/examples/mini-mes.c (cstring_to_list): Simplify. 2017-03-12 Jan Nieuwenhuizen mescc: Support mini-mes running scheme program with builtins. Mini-mes, compiled with either gcc or mescc, now runs a memory dump of this mini-0.mes program (begin (write-byte (make-cell 0 0 65)) (write-byte (make-cell 0 0 66)) (write-byte (make-cell 0 0 67)) (write-byte (make-cell 0 0 10)) #f) when read and dumped by (gcc-compiled) mes-32. * build-aux/mes-snarf.scm: FIXES ..collapse? * module/language/c99/compiler.mes (ast->info): Bail out on unhandled declarations. Was: verbosely skip. 2017-03-12 Jan Nieuwenhuizen mescc: Support [for] itoa. * module/mes/libc-i386.mes (i386:accu%base): New function. * module/mes/libc-i386.scm: Export it. * module/language/c99/compiler.mes (expr->accu): Use it to support mod. * doc/examples/t.c (itoa): New function. (test): Test it. * doc/examples/mini-mes.c (itoa)[!__GNUC__]: New function. mescc: Support do .. while. * module/language/c99/compiler.mes (ast->info): Support do-while. * doc/examples/t.c (test): Test it. 2017-03-10 Jan Nieuwenhuizen core+mini-mes: Replace manual snippets by snarfed includes. * build-aux/mes-snarf.scm (symbol->source, function->header, function->source, function->environment): Add workarounds to avoid struct-copy initializers. * GNUmakefile (mini-mes): Snarf symbols and functions. * scaffold/mini-mes.c: Include mini-mes.h, mini-mes.symbols.h, mini-mes.symbols.i, mini-mes.i, mini-mes.environment.i. Add snarfable symbol/special definitions. (type_t): Prefix all types with `T', update users. (assert_defined, gc_push_frame, gc_peek_frame, gc_init_cells): Mark as internal. * mes.c (type_t): Prefix all types with `T', update users. * scaffold/mini-mes.c (eq_p, type_, car_, cdr_, list_of_char_equal_p, lookup_macro, write_byte): New functions (from mes.c). (assq): Add debugging, workaround. 2017-03-05 Matt Wette nyacc: removed start from lalr-spec -- not needed 2017-03-04 Matt Wette nyacc: working javascript interpreter in guile 2017-03-03 Matt Wette nyacc: lex fixes for char-lit 2017-03-02 Matt Wette nyacc: cleaned up documentation 2017-03-01 Matt Wette nyacc: working on C99 UG as a memo 2017-02-28 Matt Wette nyacc: new release 0.76.5 nyacc: fixed bug in pretty-print-c99 wrt i-sel 2017-02-25 Matt Wette nyacc: merge from 0.76.4 2017-02-24 Matt Wette nyacc: new release 0.76.4 2017-02-23 Matt Wette nyacc: new release 0.76.3 nyacc: more bugs in cpp tokl->string nyacc: new release 0.76.2 nyacc: fixed more CPP issues 2017-02-22 Matt Wette nyacc: new release 0.76.1 nyacc: fixed C99 CPP to deal with numbers correctly 2017-02-20 Matt Wette nyacc: merge master 0.76.0 2017-02-19 Matt Wette nyacc: new release 0.76.0 nyacc: worked c99/util2.scm udecl->mspec nyacc: new release 0.75.6 nyacc: fixed some c99/util2 items 2017-02-17 Matt Wette nyacc: merged in 0.75.5 from master and inc version nyacc: new release 0.75.5 nyacc: new release 0.74.4 nyacc: minor cpp fixes 2017-02-16 Matt Wette nyacc: merge from 0.75.3 nyacc: new release 0.75.3 nyacc: new release 0.75.2 nyacc: new release 0.75.1 nyacc: new release 0.74.0 nyacc: I think cpp is working now 2017-02-15 Matt Wette nyacc: working cpp now, I hope 2017-02-12 Matt Wette nyacc: CPP not yet working for file mode 2017-02-11 Matt Wette nyacc: working on cpp issues 2017-02-05 Matt Wette nyacc: C99 CPP for code is better 2017-01-20 Matt Wette nyacc: starting to work on reframing 2017-01-19 Matt Wette nyacc: more CPP fixes 2017-01-17 Matt Wette nyacc: redesign lang/c99/cppbocy.scm:scan-cpp-input 2017-03-10 Jan Nieuwenhuizen mescc: Support goto in while body. * module/language/c99/compiler.mes (ast->info): Support goto in while body. * doc/examples/t.c (test): Test it. 2017-03-09 Jan Nieuwenhuizen core+mini-mes: Move function name to struct function. * module/language/c99/compiler.mes (expr->arg): Handle char arguments. * doc/examples/cons-mes.c (struct function): Add name field. * doc/examples/mini-mes.c: Likewise. (mes_builtins): Update. * mes.c: Likewise. * build-aux/mes-snarf.scm: Update. 2017-03-09 Jan Nieuwenhuizen mescc: Support strings in struct initialization. * module/mes/elf-util.mes (add-s:-prefix, drop-s:-prefix): New functions. * module/mes/elf-util.scm: Export them. * module/language/c99/compiler.mes (string->global): Add `s:' prefix to global strings. Update users. (expr->arg): Update. (expr->accu): Handle string expressions. (initzer->global): New function. (struct-field): Handle string field. * doc/examples/t.c: Test it. * doc/examples/mini-mes.c: Use it. dun! 2017-03-07 Jan Nieuwenhuizen mescc: Display sexps better. * module/mes/elf.mes (make-elf): Only display data sections smaller than 200 bytes. * doc/examples/mini-mes.c (simple_bload_env): Read mini-0-32.mes. * doc/examples/cons-mes.c (display_): Support symbols and specials. * doc/examples/tiny-mes.c: Likewise. * lib.c: * mes.c: 2017-03-06 Jan Nieuwenhuizen mescc: Compile all of mini-mes. * module/language/c99/compiler.mes (case->jump-info): Support single statement. * module/mes/elf-util.mes (function-prefix): Workaround for reversed functions. FIXME! * module/mes/elf.mes: * scaffold/mini-mes.c (type_t): Rename FUNCTION to TFUNCTION for Nyacc. Add missing symbols. (eval_apply): Uncomment most. * scaffold/tiny-mes.c: * scaffold/cons-mes.c: Remove cruft. 2017-03-02 Jan Nieuwenhuizen mescc: Support struct assignment. * module/mes/libc-i386.mes (i386:base-address->accu-address, i386:accu+n, i386:base+n): New functions. * module/mes/libc-i386.scm: Export them. * module/language/c99/compiler.mes (ast->info): Use them. * doc/examples/t.c: Test them. * doc/examples/cons-mes.c: Drop workarounds. * doc/examples/mini-mes.c: Likewise. * mes.c: mescc: Fix add, sub, lshift. * module/language/c99/compiler.mes (expr->accu): Fix add, sub, lshift. * doc/examples/t.c: Test them. * doc/examples/cons-mes.c: * doc/examples/mini-mes.c: 2017-02-27 Jan Nieuwenhuizen mescc: Support any expression as arg. * module/language/c99/compiler.mes (expr->arg): Also push parameter, always return info. (ast->info): Loop over args. Fixes using function calls in arguments. * module/mes/libc-i386.mes (i386:push-arg): Remove. (i386:call, i386:call-accu): Remove arguments parameter. * doc/examples/t.c: Test it. 2017-03-02 Jan Nieuwenhuizen mescc: Rename expr->accu*. * module/language/c99/compiler.mes (expr->accu*): Rename from expr->accuX. 2017-04-02 Jan Nieuwenhuizen mescc: Fixes for goto. * module/mes/libc-i386.mes (XXjump): New function. * module/mes/libc-i386.scm: Export it. * module/language/c99/compiler.mes (case->jump-info, ast->info): Use it. * scaffold/t.c: Test it. * GNUmakefile (cons-mes): New target. * scaffold/cons-mes.c: New file. * scaffold/mini-mes.c: 2017-02-24 Jan Nieuwenhuizen mescc: Mini-mes runs (cons 0 1) dump. * module/mes/libc-i386.mes (i386:Xjump-z, i386:Xjump-c, i386:Xjump-nc): New functions. * module/mes/libc-i386.scm: Export them. * module/language/c99/compiler.mes (case->jump-info, test-jump->info, ast->info): Use them. * doc/examples/t.c: Test it. * doc/examples/mini-mes.c: Run it. 2017-01-29 Jan Nieuwenhuizen mescc: Run mini-mes. * .gitignore: Ignore tiny-mes and tiny .mo's. * doc/examples/tiny-mes.c: Simplify. * doc/examples/mini-mes.c: Use simplifications from tiny-mes. * doc/examples/t.c (read_test, struct_test): New functions. (test): Add tests for arena, g_cells globals. * module/mes/elf-util.mes (dec->hex): New function. (lambda/label->list): Add text-address parameter. Update callers. * module/language/c99/compiler.mes (make, info, clone): Add init field. (.init): New function. (ident->accu): Add exceptions for globals. * module/mes/elf-util.scm: Export it. * module/mes/libc-i386.mes (i386:accu->base-ref, i386:byte-accu->base-ref, i386:accu->base-ref+n, i386:accu->global-ref, i386:global-ref->accu, i386:global-ref->base, i386:global-add, i386:global->accu):, i386:local-ref->accu, i386:local-ptr->accu, i386:local-ptr->base): New functions. * module/mes/libc-i386.scm: Export them. 2017-01-22 Jan Nieuwenhuizen doc: Add gdb assembly debugging info. * HACKING: Add gdb assembly debugging info. 2017-01-21 Jan Nieuwenhuizen doc: Add fosdem talk. * .gitignore: Ignore beamer/tex stuff. * doc/fosdem/fosdem.org: New file. * doc/fosdem/GuixSD.png: New file. * doc/fosdem/LISP-1-5-page-13-bottom.png: New file. * doc/fosdem/LISP-1.5-page-13-bottom.png: New file. * doc/fosdem/LISP-1.5-page-13.pdf: New file. * doc/fosdem/LISP-1.5-page-13.png: New file. * doc/fosdem/beamercolorthemeX.sty: New file. * doc/fosdem/beamerthemeX.sty: New file. * doc/fosdem/bootstrap-graph.png: New file. * doc/fosdem/egg.jpeg: New file. * doc/fosdem/egg.png: New file. * doc/fosdem/egg.xcf: New file. * doc/fosdem/fosdem.pdf: New file. * doc/fosdem/fsb-logo-guile-guix-gnu.png: New file. * doc/fosdem/fsb-logo-guile-guix-gnu.xcf: New file. * doc/fosdem/fsb-logo-guile-guix-mes.png: New file. * doc/fosdem/fsb-logo-guile-guix-mes.xcf: New file. * doc/fosdem/fsb-logo.png: New file. * doc/fosdem/guix-build-bootstrap-tarballs.log: New file. * doc/fosdem/html.sty: New file. * doc/fosdem/mes.png: New file. * doc/fosdem/mes.xcf: New file. mescc: bugfix: arg as function call. * module/language/c99/compiler.mes (expr->arg): 2017-01-18 Jan Nieuwenhuizen mini-mes: gcc: run (cons 0 1). 2017-01-15 Matt Wette nyacc: new release 0.74.3 nyacc: CPP working better now 2017-01-14 Matt Wette nyacc: something working nyacc: still debugginug 2017-01-12 Matt Wette nyacc: working # and ## I think, but lots of debug output too 2017-01-11 Matt Wette nyacc: exceptions worked on.. still need to fix # nyacc: new release 0.74.2 nyacc: fixed C99 use of 'defined XYZ' (no parens) nyacc: merged master nyacc: working on fixes 2017-01-10 Jan Nieuwenhuizen mescc: Read and display sexp dumped by mes. * lib.c (dump)[MES_HACK]: Dump small hello-world sexp, to be handled by * doc/examples/tiny-mes.c (display_): New function. * module/mes/libc-i386.mes (i386:accu->base, i386:mem->accu, i386:mem+n->accu): New functions. * module/mes/libc-i386.scm: Export them. * GNUmakefile (mes-32): New target. 2017-01-17 Jan Nieuwenhuizen mescc: Support global pointer assignments. * module/mes/libc-i386.mes (base->accu-ref, local-ref->base): New functions. * module/mes/libc-i386.scm: Export them. * module/language/c99/compiler.mes (base->ident-ref, ident-ref->base): New functions. mescc: Add data as loadable ELF section. * module/mes/elf.mes (make-elf): Add data as loadable section too. mescc: Support switch. * module/language/c99/compiler.mes (case->jump-info): New function. (ast->info): Use it. * doc/examples/t.c (swits): Test it. 2017-01-10 Jan Nieuwenhuizen mescc: Handle enums. * module/language/c99/compiler.mes (, ): New slots for info. (make, clone): Add them. (.types, .constants): New accessors. mescc: Update for. * module/language/c99/compiler.mes (ast->info): Rewrite for to use test->jump->info. 2017-01-17 Jan Nieuwenhuizen scm: Add string-delete. * module/srfi/srfi-13.mes (string-delete): New function. 2017-04-02 Jan Nieuwenhuizen mescc: Add open/read C-tests. * scaffold/m.c: New file. * scaffold/tiny-mes.c: New file. * GNUmakefile (m, tiny-mes): New targets. * scaffold/micro-mes.c: Update gcc-libc bits. * scaffold/mini-mes.c: Likewise. 2017-01-10 Jan Nieuwenhuizen mescc: Support ?. * module/language/c99/compiler.mes (ast->info): Support cond-expr. * scaffold/t.c (test): Test it. mescc: Support open, read. * module/mes/libc-i386.mes (i386:write): Fix comment. (i386:open, i386:read): New functions. * module/mes/libc-i386.scm: Export them. * module/language/c99/compiler.mes (i386:libc): Add them. (getchar, putchar): New libc functions. (libc): Add them. mescc: Support globals. * module/language/c99/compiler.mes (write-any): Catch writing of procedure and give more debug information. (ref-local, ref-global): Remove. (push-global-ref, push-global, push-ident-ref): New functions. (push-ident): New function. (expr->arg): Use them. (ident->accu, ident->accu, accu->ident, value->ident, ident->base): Take info parameter, also handle globals. (ident-address->accu, ident->global, cstring->number): New functions. (ast->info): Update. * module/mes/libc-i386.mes (i386:ret-local): Remove. (i386:push-global-ref): Rename from i386:ref-global. (i386:push-local): Rename from i386:ref-local. (i386:value->local): Rename from i386:local-assign. (i386:push-global, i386:push-local-ref, i386:value->global, i386:local-address->accu): New functions. * module/mes/libc-i386.scm: Export them. 2017-01-09 Jan Nieuwenhuizen mescc: Small ELF tweaks allowing debugging with gdb. * module/mes/elf.mes (make-elf): Change note section to comment. Fixes readelf. Add SHF-ALLOC to .text and .data. 2017-01-08 Jan Nieuwenhuizen mescc: Handle && in if and while. * scaffold/t.c (test): Add strcmp tests. * module/language/c99/compiler.mes (expr->arg): (test->jump->info): New function. (ast->info): Use it. * module/mes/libc-i386.mes (i386:global->accu): (i386:base-mem->accu): Rename from i386:mem->accu. (i386:byte-base-mem->accu): Rename from i386:base-mem->accu. (i386:accu-not, i386:global->accu, i386:xor-accu): New functions. * module/mes/libc-i386.scm: Export them. 2017-01-07 Jan Nieuwenhuizen mescc: Proper support for i++,++i,i--,--i. * module/language/c99/compiler.mes (ast->info): Bugfix: locals. Add i--, --i. Properly support i++, ++i. * module/mes/libc-i386.mes (i386:function-locals): Support 8 local vars. * scaffold/t.c (test): Test it. 2017-04-02 Jan Nieuwenhuizen mescc: Beginning of expression and test template. * scaffold/t.c: New file. * GNUmakefile (mescc-check, t-check): New targets. * module/language/c99/compiler.mes (write-any): Catch weirdness. (make): Add slot. (.function): New accessor. (clone): Handle it. (function->info): Set it. (ast->info): Make tests generic in if, for, while. Add goto, label, !, ==, !=, -, &&. * module/mes/elf-util.mes (lambda/label->list): New function. (text->list): Use it. (functions->text, function-prefix): New function. (function-offset): Use it. (label-offset): New function. * module/mes/elf-util.scm (mes): Export them. * module/mes/elf.mes (make-elf): Use text->list. * module/mes/libc-i386.mes (eputs, puts): Remove. (i386:byte-base-sub): Rename from sub-byte-base. (i386:byte-jump-z): Rename from i386:Xjump-byte-z. (i386:byte-mem->accu): Rename from i386:Xmem-byte->accu. (i386:byte-mem->base): Rename from i386:Xmem-byte->base. (i386:accu->local, i386:accu-non-zero?, i386:accu-zero?, i386:base-sub, i386:byte-sub-base, i386:jump-c, i386:jump-cz, i386:jump-nc, i386:jump-ncz, i386:byte-mem->base, i386:sub-base, i386:test-accu, i386:test-base, i386:test-jump-z, i386:value->base, i386:xor-zf): New functions. 2017-01-05 Jan Nieuwenhuizen mescc: Have micro-mes use strcmp to print help. * doc/examples/micro-mes.c (main): Add --help. * module/language/c99/compiler.mes (info?): New function. (expr->accu): Handle function call and sub. (ast->info): Handle if not, and, de-ref, eq, sub, return f (). * module/mes/libc-i386.mes (i386:accu-zero?, i386:Xmem-byte->accu, i386:Xmem-byte->base, i386:jump-byte-nz, i386:jump-byte-z, i386:test-byte-base, i386:Xjump-byte-z, i386:sub-byte-base): New functions. * module/mes/libc-i386.scm: Export them. mescc: Compile specific for loop. * module/language/c99/compiler.mes (ast->info): Handle for, pre-inc. * GNUmakefile (main): New target. * doc/examples/main.c: (exit, write, strlen,puts)[__GNUC__]: New functions; import from micro-mes.c (_start): New function. 2017-01-04 Jan Nieuwenhuizen mescc: Refactor compiler. * module/language/c99/compiler.mes (make, clone): Lightweight functional GOOPS-like list-based info structure. (make-text+globals+locals): Remove. (ast->info): Rename from statement->text+globals+locals, refactor. Update callers. (function->info): Rename from function->globals, refactor. Update callers. (ast-list->info): New function. 2017-01-07 Jan Nieuwenhuizen scm: Fix psyntax/keyword/optargs interaction bug. * module/mes/psyntax-0.mes (self-evaluating?): Add keyword?. * module/mes/pmatch.mes (mes): Add missing psyntax dependency. * module/mes/optargs.scm (rest-arg->keyword-binding-list): Make error messages non-constant. * tests/optargs.test ("clone "): New test. 2017-01-03 Jan Nieuwenhuizen mescc: Compile file supplied on command line. * scripts/mecc.mes: Pass (command-line) to main. nyacc: Add cpp to c99 mes module. * module/nyacc/lang/c99/parser.mes: Include (nyacc lang c99 cpp). mescc: Rename symbols to globals. * module/language/c99/compiler.mes: mescc: Have micro-mes use if not to segfault. * module/language/c99/compiler.mes (write-any): Check explicitly on number?, report error otherwise. (statement->text+symbols+locals): Remove statement-offset. Handle compounds. Handle very specific if. (function->symbols): Remove unused text-offset. * doc/examples/micro-mes.c (main): If argc > 1 print argv1. Fixes segfault :-) * module/mes/elf-util.mes (symbols->text): Loop rather than map, feed text-offset. * module/mes/libc-i386.mes (i386:local-test, i386:jump-le): New functions. * module/mes/libc-i386.scm: Export them. mescc: Have micro-mes print argv. * module/language/c99/compiler.mes (expr->arg): Bugfix argv: Use size=4 (int). (statement->text+symbols+locals): Bugfixes: array-ref, initialize with immediate, initialize with local. (formals->locals): Bugfix: formals counted down from -1 [WAS: down to -1]. * module/mes/libc-i386.mes (i386:call): Reverse args pushes to match formals index changes. (i386:write): Update for changed formals push order. (i386:mem->accu, i386:value->accu): New functions. * module/mes/libc-i386.scm (mes): Export them. * doc/examples/micro-mes.c (eputs, puts, fputs): Make identical with mescc's implementations. (main): Print argv[0] and (unconditionally; crash if not given) argv[1]. mescc: Have micro-mes print argc. * module/language/c99/compiler.mes (accu->ident): New function. (statement->text+symbols+locals): Use it to implement initialization with immediate, local. (_start): Call main with argc,argv [WAS: 0,0]. * module/mes/libc-i386.mes (i386:push-accu, i386:accu->local): New functions. * module/mes/libc-i386.scm: Export them. * doc/examples/micro-mes.c (main): Return argc as exit status. mescc: Support literal .byte in asm (). * module/language/c99/compiler.mes (expr->arg): Handle array-ref (int only). (byte->hex, asm->hex): New functions. (statement->text+symbols+locals): Use it to implement asm (). mescc: Remove data section from disassembly. * module/mes/elf.mes (make-elf): Remove executable bit from data. 2017-01-02 Jan Nieuwenhuizen mescc: Formals, local variables. * module/language/c99/compiler.mes (statement->text+symbols+locals): Rename from statement->text+symbols. Handle locals. (formals->text): Add proper function preamble. (formals->locals): Add formals as locals. (expr->accu, ident->accu, ident->base, ident-ref, global-ref): New functions. (strlen, eputs, fputs, puts): New functions. (libc): New variable. (i386:libc): Rename from libc. Remove eputs and puts. * module/mes/libc-i386.mes (i386:eputs, i386:puts: Remove. (i386:call, i386:ret): Handle locals as argument. (i386:function-locals, i386:function-preamble, i386:jump, i386:local->accu, i386:local-add, i386:local-assign, i386:local->base, i386:ref-global, i386:ref-local, i386:ret-local, i386:mem-byte->accu, i386:test-jump, i386:write): New functions. * module/mes/libc-i386.scm: Export them. mescc: Nicer functions/parameters. * module/mes/libc-i386.mes (eputs, exit, puts): Save stack pointer, fill parameter registers from stack. * module/language/c99/compiler.mes (formal->text): Fill parameter registers from stack memory. (formals->text): Save stack pointer. mini-mes: Parse with Nyacc. * doc/examples/mini-mes.c: Parse with Nyacc. 2017-04-02 Jan Nieuwenhuizen mescc: Scaffolding of Nyacc compile experiments. * scaffold/micro-mes.c: New file. * scaffold/mini-mes.c: New file. * GNUmakefile (mini-mes, micro-mes): New targets. * .gitignore: Ignore them. mescc: Nyacc updates, factor-out elf-util. * module/mes/bytevectors.mes * module/mes/elf-util.mes: New file. * module/mes/elf.mes: Use it. (make-elf): Generate symbol-table string-table. * module/mes/elf-util.scm: New file. * module/mes/elf.scm: Use it. * module/language/c99/compiler.mes: Include it. * module/language/c99/compiler.scm: Include it. * module/mes/libc-i386.mes (call, eputs, exit, puts): New functions. * module/mes/libc-i386.scm: Export them. 2016-12-31 Jan Nieuwenhuizen mescc: Use Nyacc frontend. * module/language/c99/compiler.mes: New file. * module/language/c99/compiler.scm: Include it. * module/mes/elf.mes: Move (mes-use-module) into cond-expand. * module/mes/elf.scm: New file. * module/mes/libc-i386.scm: New file. * module/nyacc/lang/c99/parser.mes: Add missing module includes. * module/nyacc/lang/util.mes: Add missing module include. * scripts/mescc.mes: Use Nyacc. * guile/mescc.scm: New file. * GNUmakefile (guile-mescc): Run it. 2017-01-03 Jan Nieuwenhuizen scm: Avoid xpath's shadowing of filter. * module/sxml/xpath.scm (xpath:filter): Rename from filter. Fixes shadowing of core filter. 2017-01-09 Matt Wette nyacc: fixes didn't get in in 0.74.0 nyacc: ugh. fixes did not take, why? 2017-01-08 Matt Wette nyacc: new release 0.74.0 nyacc: minor fixes nyacc: lots of C99/CPP fixes. now more robust for code mode nyacc: lots of fixes to make CPP more robust; now need to test 2017-01-06 Matt Wette nyacc: updates for cpp-ok/not-ok 2017-01-02 Matt Wette nyacc: fixed c99/CPP bug: need to skip space before lparen nyacc: have something working for in-place include 2017-01-01 Matt Wette nyacc: working on cpp-include fix 2016-12-31 Matt Wette nyacc: creating fixes for 0.73.0 2016-12-26 Matt Wette nyacc: new release 0.73.0 nyacc: misc updates; see ChangeLog 2016-12-03 Matt Wette nyacc: multiple fixes 2016-08-09 Matt Wette nyacc: starting devel on 0.72.0 2016-12-26 Jan Nieuwenhuizen nyacc: Move README.nyacc. * module/nyacc/README.nyacc: Moved from README.nyacc. nyacc: Add README.nyacc. * README.nyacc: New file. 2016-12-25 Jan Nieuwenhuizen tests: Move (ice-9 syncase) into cond-expand. * tests/psyntax.mes: Move (ice-9 syncase) into cond-expand. Fixes guile-2 deprecation messages. 2017-03-26 Jan Nieuwenhuizen nyacc: Move (ice-9 syncase) into cond-expand. * module/nyacc/lalr.scm: Move (ice-9 syncase) into cond-expand. Fixes guile-2 deprecation messages. * module/nyacc/lang/c99/cpp.scm: Likewise. * module/nyacc/lang/c99/parser.scm: Likewise. * module/nyacc/lex.scm: Likewise. 2017-01-04 Jan Nieuwenhuizen core: Move GNUisms inside #if. * mes.c: Move GNUisms inside #if, add Nyacc #ifs. (tmp_num2, tmp_num3): Remove. (make_tmps): Update. (g_free): Make simple int. Update users. * lib.c: Update users. * build-aux/mes-snarf.scm (GCC?): New switch to enable GNU extensions. 2017-01-22 Jan Nieuwenhuizen repl: Fix expand in repl. * module/mes/repl.mes (repl): Fix expand. Remove sc-expand. 2017-01-03 Jan Nieuwenhuizen scm: Error throws rather than hard exit. * module/mes/read-0.mes (read-character, read-string): Call error. * module/mes/scm.mes (error): Call core:error instead of exit. (syntax-error): Likewise. * module/mes/repl.mes (repl): Move read into catch. 2016-12-28 Jan Nieuwenhuizen repl: Use exception handling. * module/mes/repl.mes (repl): Use catch to prevent exit upon error. core: Throw exceptions rather than asserts. * lib.c (error): Throw instead of assert. (check_formals, check_apply): Update. * mes.c (scm_symbol_unbound_variable, scm_symbol_not_a_pair, scm_symbol_system_error, scm_symbol_wrong_number_of_args, scm_symbol_wrong_type_arg, scm_symbol_unbound_variable): New symbols. (car, cdr, set_cdr_x, set_env_x, eval_apply, gc_up_arena): Update. core+scm: Implement exception handling. * mes.c (scm_symbol_throw): New symbol. * module/mes/catch.scm (catch, throw): Implement [WAS: syntactic sugar]. (make-exception, exception?, exception-key, exception-args): Remove. * tests/catch.test ("catch", "catch 22"): Add tests. * module/mes/base-0.scm: Include it. Revert "core: Display me debuggor CPS+CC." This reverts commit 6c327b5bdceae6fc59ac8cce4aed99ea0a491846. 2016-12-28 Jan Nieuwenhuizen core: Display me debuggor CPS+CC. Having display in the core is handy for debugging. This is a courtesy commit intended to prevent bitrot. * GNUmakefile (mes.o): Depend on display. * mes.c: Include display. * display.c: New file. 2016-12-28 Jan Nieuwenhuizen core: Add continuations, call/cc. * mes.c (type_t): Add CONTINUATION. (scm_t): Add continuation; (scm_call_with_current_continuation): New symbol. (scm_symbol_call_with_current_continuation): New special. (g_continuations): New global (CONTINUATION): New field accessor. (MAKE_CONTINUATION): New make_cell helper. (car_): Update. (eval_apply): Implement call/cc. * module/mes/display.mes (display): Handle continuations. * module/mes/type-0.mes (): New type. (cell-type-alist): Add it. (continuation?): New function. * tests/base.test ("call/cc"): New test. core: Rewrite eval_apply in continuation passing style. * mes.c (scm_vm_evlis, scm_vm_evlis2, scm_vm_evlis3, scm_vm_apply, scm_vm_apply2, scm_vm_eval, scm_vm_eval_set_x, scm_vm_eval_macro, scm_vm_eval2, scm_vm_macro_expand, scm_vm_begin, scm_vm_begin_read_input_file, scm_vm_begin2, scm_vm_if, scm_vm_if_expr, scm_vm_call_with_values, scm_vm_call_with_values2, scm_vm_return): New specials. (scm_vm_eval_car, scm_vm_eval_cdr, scm_vm_eval_cons, scm_vm_eval_null_p)[PRIMITIVE-EVAL]: New specials. (eval_apply_t, g_target): Remove. (push_cc): New function. (eval_apply): Rewrite. (vm_call, eval_env, apply_env, eval_env, macro_expand_env, begin_env, call_with_values_env): Remove. * posix.c (stderr_): Update. * reader.c (read_input_file_env): Update. * module/mes/base-0.mes: Update. 2017-01-04 Jan Nieuwenhuizen Support radix for string->number, number->string. * module/mes/scm.mes (string->number, number->string): Support radix. Add string-take, string-drop. * module/srfi/srfi-13.mes (string-take, string-drop): New functions. core: Stderr_ also print numbers. * posix.c (stderr_): Handle numbers. Bugfixes bytevectors. * math.c (modulo): Modulo of negative value correctly. * module/mes/bytevectors.mes (bytevector-u32-native-set!): (bytevector-u16-native-set!): Use ash instead of quotient. Append-map: handle multiple list. * module/srfi/srfi-1.mes (append-map): Add optional rest argument. core: Move GNUisms inside #if. * mes.c: Move GNUisms inside #if, add Nyacc #ifs. (tmp_num2, tmp_num3): Remove. (make_tmps): Update. (g_free): Make simple int. Update users. * lib.c: Update users. * build-aux/mes-snarf.scm (GCC?): New switch to enable GNU extensions. Add drain-input. * module/mes/guile.mes (drain-input): New function. Bugfix for reading #\*eof* character. * module/mes/read-0.mes (read-character): Bugfix for #\*eof*. core: Expose command line. * mes.c (scm_symbol_argv): New symbol (main): Use it to add argv to environment. * module/mes/base.mes (command-line): New function. Include srfi-13 in base. * module/mes/base-0.mes: Include srfi-13. Add filter-map. * module/srfi/srfi-1.mes (filter-map): New function. Add srfi-1:iota. * module/srfi/srfi-1.mes (iota,srf-1:iota): New function. Add pretty-print from Guile. * module/mes/pretty-print.scm: Import. * module/mes/pretty-print.mes: Include it. * AUTHORS: Mention it. Add make-string, object->string. * module/mes/guile.mes (make-string, object->string): New functions. Add list-set!, string-set! * module/mes/scm.mes (list-set!, string-set!): New functions. Fix core:car, core:cdr for specials. * mes.c (car_, cdr_): Return special. Fixes string->list, returning nil. * tests/scm.test ("string-length", "string->list"): New tests. core: Add continuation on stack. * mes.c (r3): New stack variable. (mes_g_stack): Initialize it. (gc_push_frame): Add it. (gc_peek_frame): Set it. core: Uniformize calling of apply. * mes.c (eval_apply): Have apply take one argument, like all other vm functions: r1; cons of function f and argument list x. Sorry John. (r2): Repurpose as save/load register. Update users. (r3): Remove. (vm_call): Remove p2. Update callers. core: Refactor stack handling. * mes.c (gc_pop_frame, gc_push_frame): New Functions. (gc_frame, gc_stack): Remove. (vm_call): Update callers. * lib.c (dump, bload_env): Update callers. Add simple-format. * module/mes/display.mes (simple-format, format): New functions. Display: If possible, show name of closure. * module/mes/display.mes (display): Lookup closure's name and display it. 2016-12-25 Jan Nieuwenhuizen Update documentation. * doc/ANNOUNCE-0.4: New file. * NEWS: Typo. guix hash: 1jpm8m8y2dqsl3sc6flf8da4rpdrqh6zgr2mghzjw0lg34v1r21j Release 0.4. * configure (VERSION): Bump. Remove hardcoded duplication of version. * GNUmakefile (CPPFLAGS): Include VERSION. * mes.c (main): Use it. Add --dump and --load to --help. (scm_symbol_mes_prefix, scm_symbol_mes_version): New sybols. (mes_symbols): Use them to set prefix and version. * module/mes/base-0.mes (effective-version): Use %version. * module/mes/repl.mes (welcome): Likewise. 2016-12-24 Jan Nieuwenhuizen Update documentation. * HACKING: Update status, some ideas where to go next. * NEWS: Update status. * README: Update. * doc/ANNOUNCE: Move from top. * doc/ANNOUNCE-2: Likewise. * doc/ANNOUNCE-0.3: New file. make: Install nyacc scripts too. * make/install.make (install): Add scripts/nyacc.mes, scripts/nyacc-calc.mes. 2016-12-25 Jan Nieuwenhuizen Revert "core: Display me debuggor." This reverts commit 53ec23a0edcfdcb7dd4e32277e5a24e0a8fab5dd. 2016-12-25 Jan Nieuwenhuizen core: Display me debuggor. Having display in the core is handy for debugging. This is a courtesy commit intended to prevent bitrot. * GNUmakefile (mes.o): Depend on display. * mes.c: Include display. * display.c: New file. 2016-12-25 Jan Nieuwenhuizen Revert "core: FAT_C_READER: Show your speed." This reverts commit 5a9b9ac36bd33e497272b287ab1f0db715e01d38. 2016-12-25 Jan Nieuwenhuizen core: FAT_C_READER: Show your speed. scripts/nyacc.mes runs in 4s rather than 18s with fat C reader. This is a courtesy commit intended to prevent bitrot. * mes.c (quasiquote, unquote, unquote_splicing, syntax, quasisyntax, unsyntax, unsyntax_splicing): Add symbols. * reader.c (char_eof, char_nul, char_alarm, char_backspace, char_tab, char_newline, char_vtab, char_page, char_return, char_space)[FAT_C_READER]: New global variables. (make_keyword, read_block_comment, read_character, read_hex, append_char, read_string, fat_c_lookup_, fat_c_eat_whitespace, fat_c_read_word): New functions. (eat_whitespace_, read_word_, lookup_)[FAT_C_READER]: Add hook. 2016-12-24 Jan Nieuwenhuizen Refactor reader. * module/mes/read-0.mes (read-hash): New function. (read-word): Use it. (eat-whitespace): Rewrite. (display): Minimal implementation through core. * lib.c (stderr_): Support printing of strings while booting. core: Remove c3+r abbreviatons. * lib.c (caaar, caadr, caddr, cdadr, cadar, cddar, cdddr, cadddr): Remove. * mes.c: Rewrite callers * module/mes/read-0.mes: Rewrite callers. * module/mes/base.mes (caaar, caadr, caddr, cdadr, cadar, cddar, cdddr, cadddr): New function. core: Move dump, load, bload to lib.c. * lib.c (dump, load, bload): Move from mes.c * mes.c (dump, load, bload): Remove. core: Add getenv, verbose module loading on MES_DEBUG. * mes.c (MAKE_REF, MAKE_STRING): Oops, remove stray semicolon. * posix.c (getenv_): New function. * module/mes/base-0.mes (load): Use it to switch on MES_DEBUG=1. (mes-use-module): Remove commented-out code. core: Add some error checking. * lib.c (length): Return -1 for non-proper lists. (error): New function. (assert_defined): Use it. (check_formals, check_apply): New functions. * mes.c (car, cdr, set_cdr_x, set_env_x, eval_apply): Add error check. * srfi/srfi-1.mes (member): New function. * tests/srfi-1.tests ("member"): New test. core: Move reader and posix functions from mes.c * mes.c (getchar, ungetchar, peekchar, peek_byte, read_byte, unread_byte, write_byte, read_input_file_env_, read_input_file_env): Remove. * posix.c (getchar, ungetchar, peekchar, peek_byte, read_byte, unread_byte, write_byte): Move from mes.c. * reader (read_input_file_env_, read_input_file_env): Move from mes.c. core: Remove unused symbols. * mes.c (scm_symbol_noexpand, scm_symbol_syntax, scm_symbol_quasisyntax, scm_symbol_unsyntax, scm_symbol_unsyntax_splicing, scm_symbol_quasiquote, scm_symbol_unquote, scm_symbol_unquote_splicing, scm_symbol_define, scm_symbol_define_macro): Remove. Add write, add display test, some fixes. * mes.c (write_byte): Rename from write_char. * module/mes/display.mes (display): Fixes for write: char, closure, procedure. (write-char, write, with-output-to-string): New functions. * tests/read.test: Include base-0 to see some output. * tests/display.test: New file. * GNUmakefile (TESTS): Add it. core: Remove display. * posix.c (stderr_): New function. * display.c: Remove. * mes.c: Remove includes. Use stderr_ instead of display_. (gc_loop): Preserve function's name. (arity_): New function. * GNUmakefile (mes.o): Remove dependency on display. * module/mes/read-0.mes: Use core:stderr instead of display, newline. (newline): New function. * module/mes/base-0.mes: Use core:stderr instead of display. Include (mes display). * module/mes/display.mes: New file. * lib.c (assert_defined): Move from mes.c. (string_to_cstring): Move from posix.c * build-aux/mes-snarf.scm (function-environment): Initialize function name with scheme string. Import srfi-26 from Guile. * module/srfi/srfi-26.scm: Import. * module/srfi/srfi-26.mes: Include it. * AUTHORS: Mention it. 2016-12-23 Jan Nieuwenhuizen core: Remove symbol_to_list, char_to_integer, integer_to_char. * mes.c (symbol_to_list, char_to_integer, integer_to_char): Remove * module/mes/read-0.mes (symbol->list, integer->char, symbol->keyword): New function. (read-word): Use symbol->keyword. * module/mes/type-0.mes (char->integer): New function. * module/mes/scm.mes (keyword->symbol): New function. core: Remove string.c. * string.c: Remove. * mes.c (eval_apply): Remove caller. * GNUmakefile (mes.o): Remove dependency on string. * module/mes/psyntax-0.mes (eval): Handle "noexpand". * module/mes/type-0.mes (string->symbol, symbol->list, symbol->string): New function. core: Remove number_to_string. * string.c (number_to_string): Remove. * module/mes/scm.mes (number->string): New function. core: Remove substring. * string.c (substring): Remove. * module/mes/scm.mes (substring): New function. core: Remove string_length. * module/mes/scm.mes (string-length): New function. core: Remove list_to_string. * string.c (list_to_string): Remove. * module/mes/read-0.mes (list->string): New function. * module/mes/scm.mes (list->string): Remove. core: Remove string-append. * string.c (string_append): Remove. * module/mes/type-0.mes (string-append): New function. * module/mes/base-0.mes: Include type-0 without using string-append. core: Remove string. * string.c (string): Remove. * module/mes/type-0.mes (string): New function. Add exit. * lib.c (exit_): Rename from builtin_exit. * module/mes/scm.mes (list): Remove. core: Remove last_pair, list_ref, string_ref. * lib.c (last_pair, list_ref): Remove. * string.c (string_ref): Remove. * module/mes/type-0.mes (string->list): New function. * module/mes/scm.mes (string-ref): New function. core: Make closure real type. * display.c (display_helper): * mes.c (type_t): Add CLOSURE. (scm_t): Add closure. (CLOSURE): New macro. (eval_apply:apply): Update. (eval_apply:eval): Remove closure special-casing. (gc_loop): Handle CLOSURE. * module/mes/read-0.mes: Update types. * module/mes/type-0.mes: Update types. * display.c (display): Update. * module/mes/fluids.mes (env:escape-closure): Check for '*closure. core: Remove quote, quasiquote, quasisyntax. * mes.c (quote, quasiquote, quasisyntax): Remove. core: Remove make_lambda. * mes.c (make_lambda): Remove. core: Remove type.c. * module/mes/type-0.mes: Resurrect. * module/mes/base-0.mes: Include it. * module/mes/read-0.mes (not, pair?, atom?): New functions. * type.c: Remove. * mes.c: Remove callers. * GNUmakefile (mes.o): Remove dependency on type. core: Remove gc_show. * mes.c (gc_show): Remove. core: Remove add_environment. * mes.c (add_environment): Remove. Update callers. (scm_symbol_dot): New global. core: Remove make_string. * mes.c (MAKE_STRING): New macro. (make_string): Remove. Update callers. * string.c: Update callers. core: Remove make_ref. * mes.c (MAKE_REF): New macro. (make_ref): Remove. Update callers. core: Remove make_char. * mes.c (MAKE_CHAR): New macro. (make_char): Remove. Update callers. * reader.c (peek_char, read_char, unread_char): Remove. * module/mes/scm.mes (peek-char, read-char, unread-char): New function. core: Remove make_number. * mes.c (MAKE_NUMBER): New macro. (tmp_num_, tmp_num_2): New function. (make_number): Remove. Update callers. Remove make_function. * mes.c (make_function): Remove. core: Remove make_keyword. * mes.c (make_keyword): Remove. * module/mes/read-0.mes (): New global. (read-word): Use it with make_cell instead fo make-keyword. * strting.c (symbol_to_keyword): Use make_cell instead of make_keyword. core: Remove make_macro. * module/mes/read-0.mes (): New global. (env:macro): Use it with make_cell instead of make_macro. * mes.c (make_macro): Remove. * type.c (car_): Rename from mes_car. (cdr_): Rename from mes_cdr. core: Simplify lookup. * reader.c (lookup_): Rename from lookup. Remove all lookups except for numbers and symbols. Update callers. * mes.c (make_symbol_): Rename from internal_make_symbol. Update callers. * module/mes/read-0.mes (lookup): New function. (read-word): Remove all lookup calls, except for numbers and symbols. Remove lookup-char. * reader.c (lookup_char): Remove. * module/mes/read-0.mes (lookup-char): Remove. (read-word): Rewrite using quote. core: Cleanup symbol initialization and lookup. * build-aux/mes-snarf.scm (symbol->names): New function (function->environment): Initialize symbol. (generate-includes): Also write .symbol-names.i. * mes.c (mes_symbols): Include it. Remove internal_lookup_symbol. * display.c (display): Handle display of nil in symbol list. * reader.c (internal_lookup_symbol): Remove name-fu. 2016-12-22 Jan Nieuwenhuizen core: Remove most of reader. * reader.c (append_char, read_block_comment, read_character, read_hex, read_string): Remove. (eat_whitespace, read_word)[READER]: Remove. * mes.c (list_to_symbol): New function. * module/mes/read-0.mes (list->symbol, read-character, read-hex, read-string): New functions. 2016-12-25 Jan Nieuwenhuizen Refactor reader. * module/mes/read-0.mes (eat-whitespace): More efficient ordering/peeking. * module/mes/read-0.mes (read-word): Handle tab. 2016-12-22 Jan Nieuwenhuizen core: Disable reader. * mes.c (READER): Switch off. * module/mes/read-0.mes (eat-whitespace): Handle #;. core: Do some tail call elimination. * mes.c (eval_apply): Use goto instead of return. core: One big eval_apply. * mes.c (eval_apply): New function. (eval_apply_t): New type. (g_target): New global. (vm_evlis, vm_apply_env, vm_eval_env, vm_expand_macro_env, vm_begin_env, vm_if_env, vm_call_with_values_env): Remove. Update callers. (macro_expand_env): Rename from expand_macro_env. * guile/mes.mes: Update callers. * module/mes/base-0.mes: Likewise. * module/mes/mes-0.mes: Likewise. * module/mes/psyntax-1.mes: Likewise. * module/mes/repl.mes: Likewise. core: Remove vm_call_lambda. * mes.c (vm_call_lambda): Remove. (call_lambda): Use begin_env. Support PEG from Guile. * module/mes/peg.mes: New file. * module/mes/peg/cache.scm: New file. * module/mes/peg/codegen.scm: New file. * module/mes/peg/simplify-tree.scm: New file. * module/mes/peg/string-peg.scm: New file. * module/mes/peg/using-parsers.scm: New file. * tests/peg.test: New file. * GNUmakefile (TESTS): Add it. Support pmatch from Guile. * module/mes/pmatch.scm: New file. * module/mes/pmatch.mes: New file. * AUTHORS: Mention it. Use include-from-path for psyntax.pp. * module/mes/psyntax.pp: Rename from module/mes/psyntax-pp.mes. * module/mes/psyntax.mes: Update. * AUTHORS: Update. Use include-from-path for upstream. * module/mes/lalr.scm: Rename from module/mes/lalr.upstream.mes. * module/mes/lalr.mes: Update. * module/mes/match.scm: Rename from module/mes/match.upstream.mes. * module/mes/match.mes: Update. * module/mes/optargs.scm: Rename from module/mes/optargs.upstream.mes. * module/mes/optargs.mes: Update. * module/mes/quasisyntax.scm: Rename from module/mes/quasisyntax.upstream.mes. * module/mes/quasisyntax.mes: Update. * module/srfi/srfi-1.scm: Rename from module/srfi/srfi-1.upstream.mes. * module/srfi/srfi-1.mes: Update. * module/srfi/srfi-9.scm: Rename from module/srfi/srfi-9.upstream.mes. * module/srfi/srfi-9.mes: Update. * AUTHORS: Update. 2016-12-11 Jan Nieuwenhuizen Add string-copy, string=, string=?, char?, char<=?, char>=?. * module/srfi/srfi-13.mes: New file. * module/mes/scm.mes (char?, char<=?, char>=?): New function. * module/srfi/srfi-13.mes: New file. * tests/srfi-13.test: New file. * string.c (string_to_symbol): Handle "". 2016-12-22 Jan Nieuwenhuizen core: Remove quasiquote, quasisyntax. * quasiquote.c: Remove. * mes.c: Remove callers. * GNUmakefile (mes.o): Remove dependency on quasiquote. core: Disable quasiquote. * mes.c (QUASIQUOTE): Switch off. * tests/read.test: Remove quasiquote tests. Refactor quasiquote. * module/mes/quasiquote.mes (quasiquote): Refactor. * tests/quasiquote.test: Add tests. core: Bugfix append with one argument. * mes.c (append): Handle one argument. * tests/base.test ("append", "append 0" ... "append 5"): New tests. core: Do macro expansion only once. * mes.c (vm_eval_env): I will expand this macro only once. 2016-12-21 Jan Nieuwenhuizen Add psyntax-based quasisyntax. * module/mes/quasisyntax.upstream.mes: Import from Guile. * AUTHORS: Mention it. * module/mes/quasisyntax.mes: New file. * module/mes/psyntax.mes: Include it. core: Remove define. * base-0.mes (cons*): Refactor. * module/mes/read-0.mes: Implement define, define-macro using macros. * define.c: Remove. * mes.c: Remove callers. * GNUmakefile (mes.o): Remove dependency on define. 2016-12-18 Jan Nieuwenhuizen nyacc: Support enhanced Guile-1.8. * module/nyacc/lalr.scm: Export process-spec, reserved?. Use optargs, syncase. * module/nyacc/lex.scm: Use optargs, syncase. * module/nyacc/parse.scm: Use optargs. * module/nyacc/util.scm: Use optargs. * module/nyacc/lang/util.scm: Use optargs. * module/nyacc/lang/c99/cpp.scm: Use syncase. * module/nyacc/lang/c99/parser.scm: Use optargs, syncase. 2016-12-19 Jan Nieuwenhuizen Nyacc example scripts: support Guile-1.8. 2016-12-18 Jan Nieuwenhuizen Add Nyacc example scripts. * guile/nyacc-calc.scm: New file. * guile/nyacc.scm: New file. * scripts/nyacc-calc.mes: New file. * scripts/nyacc.mes: New file. * GNUmakefile (mes-check, guile-check): Run them. nyacc: Add mes modules. * module/nyacc/lang/c99/cpp.mes * module/nyacc/lang/c99/parser.mes * module/nyacc/lang/calc/parser.mes * module/nyacc/lang/util.mes * module/nyacc/lex.mes * module/nyacc/parse.mes * module/nyacc/util.mes nyacc: Use standard \return rather than \cr. 2016-12-17 Jan Nieuwenhuizen Import Nyacc 0.72.0. * module/nyacc: Import module/nyacc. 2016-12-19 Jan Nieuwenhuizen Import psyntax from Guile-1.8: R7RS with-ellipsis. * GNUmakefile (psyntax-import): New target. * module/mes/psyntax.ss: Import. * module/mes/psyntax-pp.mes: Import. * NEWS: Mention it. 2016-12-11 Jan Nieuwenhuizen Prepare for psyntax-6.3..7.3 support. * module/mes/psyntax-0.mes (ormap): New function. (eval): New function. (remprop): New function. ($sc-put-cte, $make-environment, environment?, syntax->list, syntax->vector, literal-identifier=?, $syntax-dispatch, eval-when): New variable. 2016-12-20 Jan Nieuwenhuizen Add abs. * module/mes/scm.mes (abs): New function. core: Bugfix unread_byte. * mes.c (unread_byte): Return SCM value instead of stray int. Add ash. * math.c (ash): New function. * tests/scm.test (ash, ash -1): New tests. Support (sxml xpath) for Nyacc c99. * module/sxml/xpath.mes: New file. * module/sxml/xpath.upstream.mes: Import from Guile. * AUTHORS: Mention it. Partial (rnrs arithmetic bitwise) support for Nyacc c99. * module/rnrs/arithmetic/bitwise.mes: New file. Nicer closure and builtin procedure display. * display.c (display): Show closure as procedure with formal parameters. Display ariry as fake parameters with builtin. Add string->number. * module/mes/scm.mes (string->number): New function. Add unless. * module/mes/scm.mes (unless): New syntax. Add iota. * module/mes/scm.mes: (iota): New function. * tests/scm.test (iota, iota 0, iota -1): New tests. Partial srfi-43 support for Nyacc. * module/srfi/srfi-43.mes: New file. Partial srfi-14 support for Nyacc. * module/srfi/srfi-14.mes: New file. * tests/srfi-14.test: New file. * GNUmakefile (TESTS): Add it. Add delete, delq, vector-copy. * module/mes/scm.mes (filter, delete, delq, vector-copy): New functions. Add negative?, positive?, zero?, 1+ 1-. * module/mes/scm.mes (negative?, positive?, zero?, 1+, 1-): New functions. Add missing srfi-1 functions for Nyacc. * module/srfi/srfi-1.scm (fold, fold-right, remove, append-reverse, remove!): New functions. * tests/srfi-1.test: New file. * GNUmakefile (TESTS): Add it. * module/srfi/srfi-1.upstream.mes: Import bits from Guile-1.8. * AUTHORS: Mention it. Add even?, odd?. * module/mes/scm.mes (even?, odd?): New function. Bugfix: for-each with two lists. * module/mes/scm.mes (for-each): Fix for two lists. Always return *unspecified*. Add and=>. * module/mes/base.scm (and=>): New function. Add eqv?. * module/mes/base.scm (eqv?): New function. 2016-12-19 Jan Nieuwenhuizen Closure is not a pair. * module/mes/base.mes (closure_p, mes_car, mes_cdr): New function. (pair_p): Closure is not a pair. * NEWS: Mention it. * psyntax-0.mes (self-evaluating?): Add closure?. Bugfix: support map^3. * module/mes/base-0.scm (map): Support third list, add more visible error when used with 4 or more list. 2016-12-16 Jan Nieuwenhuizen Resurrect quasisyntax support. * mes.c (the_unsyntaxers): New symbol. (mes_builtins)[QUASISYNTAX]: Initialize it, add to environment. * quasiquote.c (add_unsyntaxers): Use it. (vm_eval_quasisyntax): New function. (eval_quasisyntax): Use it. 2016-12-18 Jan Nieuwenhuizen Add psyntax-based srfi-9. * module/srfi/srfi-9-psyntax.mes: New file. Add support for including Guile files. * module/mes/guile.mes: New file. * module/mes/pretty-print.mes: New file. Support include and include-from-path. * module/mes/base-0.mes (include, include-from-path): New function. Support backslash in string. * reader.c (read_string): Handle '\\'. * tests/read.test: Add it. Support #\alarm, #\vtab. * mes.c (char_alarm): New variable. (char_vtab): Rename from char_vt. * reader.c (read_character): Add alarm, update vtab. * display.c (display): Likewise. * module/language/c/lexer.mes (read-string): Use vtab. Support non-nested #| |# comment. * module/mes/read-0.mes (read-word, read-block-comment): Implement #|. * reader.c (read_word, read_block_comment)[READER]: Likewise. * tests/read.test: Test it. * NEWS: Mention it. Support #; comment. * module/mes/read-0.mes (read-word): Implement #;. * reader.c (read_word)[READER]: Likewise. * tests/read.test: Test it. * NEWS: Mention it. 2016-12-17 Jan Nieuwenhuizen Minimal syntactic exception support. * module/mes/catch.mes: New file. * tests/catch.test: New file. * GNUmakefile (TEST): Add it. Minimal syntactic fluids support. * module/mes/fluids.mes: New file. * tests/fluids.test: New file. * GNUmakefile (TESTS): Add it. Add string-prefix?, symbol-prefix, symbol-append. * module/mes/scm.mes (string-prefix?, symbol-prefix, symbol-append): New function, Add list-head, list-tail. * module/mes/scm (list-head, list-tail): New function. core: Bugfix number-based-cells: allow displaying (current-module). * display.c (display): Handle cell_symbol_quote as symbol. 2016-12-21 Jan Nieuwenhuizen Make guile switchable in GNUmakefile. * GNUmakefile (GUILE): New variable. Update users. * guile/mes-0.scm (mes?, guile-1.8?, guile-2?): New variables. * module/mes/base.mes (guile?): Remove. * module/mes/base-0.mes (effective-version, mes?, guile?, guile-1.8?, guile-2?): New variables. * tests/cwv.test: Support Guile 1.8. 2016-12-17 Jan Nieuwenhuizen Resurrect guile-mescc with guile-2.1.5. * scripts/include.mes: Grep all files. * GNUmakefile (mescc.cat): Update for mes-use-module; list all toplevel inputs. * module/language/c/lexer.mes: Use (system base lalr). * module/language/c/parser.mes: Likewise. * module/language/c/compiler.mes: Likewise. Remove encoding on output port. * scripts/mescc.mes: Remove BROKEN comment. 2016-12-25 Jan Nieuwenhuizen optargs guile 2016-12-16 Jan Nieuwenhuizen Support Guile optargs. * module/mes/optargs.upstream.mes: Import latest non-syntax-case version from Guile. * AUTHORS: Add it. * module/mes/optargs.scm: New file. * tests/optargs.test: New file. * GNUmakefile (TESTS): Add it. * NEWS: Update. Support => in cond. * module/mes/base-0.mes (cond): Support =>. * module/mes/rea-0.mes (cond): Update. * NEWS: Update. core: Support keywords. * display.c (display): Handle keyword. * mes.c (type_t): Add KEYWORD. (eq_p): Handle it. (make_keyword): New function. * reader.c (lookup): Use it. * type.c (keyword_p): New function. * NEWS: Update. Handle form-feed. * module/mes/read-0.mes (eat-whitespace, read-word): Handle form-feed. * reader.c (eat_whitespace, read_word): Likewise. 2016-12-14 Jan Nieuwenhuizen core: Make symbols constants. * mes.c (apply_env,eval_env): Rewrite using switch. * build-aux/mes-snarf.scm (symbol->header): Define constants. (symbol->source): Only update g_free and init cells. 2016-12-13 Jan Nieuwenhuizen Extend Scheme reader, reduce C reader dependency. * mes.c (bload_env): Mark as internal. (load_env): Likewise. Load Scheme reader from source. Remove dumping. (dump): New function. * (vm_begin_env): Allow for gc while read_input_file_env. (mes_builtins): Add *dot*. (read_input_file_env)[!READER]: Invoke read-input-file. * module/mes/read-0.mes (read-env): New function. (read-word): Support quasisyntax. Remove usage of ' thoughout. * module/mes/repl.mes (repl): Use read instead of read-env. * guile/mes.scm (environment): Add *dot*. * guile/reader.mes: Update. * NEWS: Update. Silence garbage collector. * GNUmakefile: unexport MES_DEBUG. Update README. * README: Add a paragraph with current status. 2016-12-12 Jan Nieuwenhuizen guix hash: 0nbdjvmsyarp4vfg3r9hhhnabv11z1b7isw4g09x3kjd0r1lx0mh Release 0.3. * configure (VERSION): Bump to 0.3. * mes.c (main): Likewise. * module/mes/repl.mes: Likewise. Update Mes in Guile. * guile/mes.scm: Update for guile-2.2. * guile/mes.mes: Update from module/mes/mes-0.mes. * guile/reader.mes: Update from module/mes/read-0.mes. Resurrect Mes in Guile. * guile/mes.mes: New file, from the archives. * guile/mes.scm: Updates. Avoid garbage returns. * posix.c (set-current-input-port): Return current-input-port. (force_output): Return scm_unspecified. Update documentation. * README: Add make targets. * INSTALL: Add guix. * HACKING: Add info on sc. core: Resurrect QUASIQUOTE=0. * mes.c (mes_builtins) [!QUASIQUOTE]: Do not add unquoters. * module/mes/base-0.mes (push!, pop!, load, mes-use-module): Rewrite without quasiquote. * module/mes/quasiquote.mes (quasiquote): Rewrite using if, and. * module/srfi/srfi-0 (cond-expand): Rewrite without quasiquote. Add loadable modules. * module/mes/base-0.mes (mes-use-module): Implement. * module/mes: Update users. * HACKING: Update. * NEWS: Update. * configure (main): Use shell expansion for prefix. * make/install.make (install): Substitute prefix. Use syntax rather than psyntax. * module/language/c/parser.mes: Switch to syntax. * module/language/paren.mes: Likewise * scripts/mescc.mes: Likewise * scripts/paren.mes: Likewise * scripts/repl.mes: Likewise * tests/let-syntax.test: Likewise * tests/match.test: Likewise * tests/record.test: Likewise Resurrect syntax.mes. * module/mes/syntax.mes: New file. * AUTHORS: List it. core: use FIXED_PRIMITIVES rather than environment cache. * cache.c: Remove. * define.c: Remove callers. * mes.c: Likewise. (vm_eval_env) [FIXED_PRIMITIVES]: Hardcode car, cdr, cons, null_p. * GNUmakefile: Update. core: Set max arena size. * mes.c (MAX_ARENA_SIZE): New global. (gc): Use it. core: Make arena size configurable. * mes.c (main): Read MES_ARENA. * scripts/repl.mes: Set MES_ARENA to 5000000 if not already set. Fixes repl startup. core: Grow gc arena gradually. * mes.c: (gc_up_arena): New function. (gc): Use it when possible. (gc_init_cells, gc_init_news): New function. (mes_symbols): Use them. core: gc bugfixes. * mes.c (make_tmps): New function. (make_symbols, gc): Use it. (vm_call_with_values_env): New vm function. (call-with-values): Call it. (eval_env): Do not call eval_env inline. * define.c (vm_define_env): Use r2 rather than local name. (g_symbols): Rename from symbols. core: Split-off cache, display, reader. * mes.c: Remove cache, display, reader functions. * cache.c: New file. * display.c: New file. * reader.c: New file. Add reader in Scheme. * module/mes/read-0.mes: New file. * mes.c (char_to_integer, integer_to_char, null_p): Move to core. (peek_byte, read_byte, unread_byte): New function. (main): --dump, --load: New option. * lib.c (char_to_integer, integer_to_char): Remove. * NEWS: Update. core: Cleanup cells. * mes.c: Use accessors rather than g_cell[] access throughout. core: Add function indirection. * mes.c (functions): New array. (scm_t): Change function pointer to index. (make_cell): Handle function. (call): Update for function change. (display_): Likewise. (make_function): New function. * build-aux/mes-snarf.scm (function->source): Update declarations. (function->environment): New function. core: Number based cells. * mes.c (scm_t): Change car, string, ref, cdr, macro, vector into g_cell index [WAS]: scm_t pointer. * define.c: Update. * lib.c: Update. * math.c: Update. * posix.c: Update. * quasiquote.c: Update. * string.c: Update. * type.c: Update. * build-aux/mes-snarf.mes Update. * tests/gc-4.test: New test. * tests/gc-5.test: New test. * tests/gc-6.test: New test. core: Integrate garbage collector/jam scraper. * mes.c (r0, r1, r2, r3, stack): New globals. (gc_loop): Handle MACRO and SCM. (gc_copy): Handle FUNCTION, allow for pre-allocated SCM and SYMBOL. (assq): Flag any BROKEN_HEARTs. (vm_call): New function. Enables moving C stack to GC stack. (evlis_env, apply_env, eval_env, expand_macro_env, begin_env, if_env): Use vm_call-indirection. (call_lambda): New function. (vm_apply_env): Rename from apply_env. Remove parameters, instead use r1, r2 and r0. (vm_evlis_env, vm_eval_env, vm_expand_macro_env, vm_begin_env, vm_if_env): Likewise. (acons): New function. (mes_environment) [!MES_FULL, MES_MINI]: Add cpp switches to create minimally filled environment, for debugging. (main): Print free value at exit. * define.c (define_env): Use vm_call-indirection. (vm_define_env): Rename from define_env. * quasiquote.c (eval_quasiquote): Use vm_call-indirection. (vm_eval_quasiquote): Rename from eval_quasiquote. * tests/gc-2.test: New test. tests/gc-2a.test: New test. tests/gc-3.test: New test. Add sicp garbage example: tests/gc-1.test. core: Make using GC in switchable, set to off; on dumps core. core: Add garbage collector/jam collector experiment. * mes.c (gc, gc_loop, gc_copy, gc_move, gc_relocate_car, gc_relocate_cdr, gc_flip): New function. * tests/gc-0.test: New file. Add mes gc test setup. * tests/gc.test: New file. guix hash: 09axqivywpw0l9lm7pk1ncp6690vfv658z731z674ih73yqs5qma Release 0.2. * configure (VERSION): Bump to 0.2. * mes.c (main): Likewise. * module/mes/repl.mes: Likewise. Update NEWS. test: Run psyntax before record. * GNUmakefile (TESTS): Run psyntax before record. test: Add psyntax closure tests. * tests/closure.test (closure 7, closure 8, closure 9): New test. core: Show more info on apply error. * mes.c (apply_env): Be more specific about what cannot be applied. test: Add toplevel begin define test. * tests/base.test (top begin define): New test. core: Bugfix: report name of undefined variable. * mes.c (assert_defined): Add variable as parmeter, print it. Update callers. core: Use switch in display_helper. *mes (display_helper): Use switch. core: Refactor eval. * mes.c (eval_env): Rename from builtin_eval, Update callers. Use switch. core: One SCM type for function. * mes.c (function_t): New struct. (type): One type for function. (call): Refactor. * build-aux/mes-snarf.mes: Use arity annotation. WAS: args. Update annotations. core: Cleanup macro expansion. * mes.c (builtin_eval): Call expand_macro_env after handling primitives. (expand_macro_env): Include syntax-case expansion, remove skipping of primitives. (sc_expand_env): Remove. core: Factor-out assert_defined. * mes.c (assert_defined): New function. (set_env_x): Use it. (builtin_eval): Use it. Implement load. * mes.c (symbol_primitive_load): New symbol. (builtin_eval): Use it to implement primitive-load. * module/mes/base-0.mes (push!, pop!): New macro. (load): New macro. * tests/data/load.scm: New file. * tests/base.test (load): New test. posix: Implement open-input-file. * posix.c: New file. * mes.c: Include posix.environment.h, posix.environment.i, posix.environment.c. (read_input_file_env): Rename from read_file_env. Update callers. (load_env): Rename from load_file_env. Update callers. * GNUmakefile (mes.o): Add posix.c, posix.environment.h, posix.environment.i dependencies. core: Support switching of input stream. * mes.c (g_stdin): New global. (getchar): New function, use g_stdin. (ungetchar): Use g_stdin. (main): Initialize g_stdin to stdin. Update documentation wrt syntax-case. * HACKING: Update wrt syntax-case. * NEWS: Likewise. * README: Likewise. * guix.scm: Likewise. Update AUTHORS. * AUTHORS: Include information on lalr, match and psyntax. Finalize psyntax integration. * mes.c (sc_expand_env): Exclude primitives, expand native macros. (symbol_expand_macro): New symbol. * module/mes/psyntax-0.mes (properties-alist): New function. * module/mes/psyntax-1.mes: Set expand-macro. (define-syntax, syntax-rules, let-syntax): Remove macro. * module/language/c/parser.mes: Use psyntax modules, remove syntax module. * module/language/paren.mes: Likewise. * scripts/repl.mes: Likewise. * tests/match.test: Likewise. * tests/record.test: Likewise. * tests/psyntax.test (define-syntax swap!): Add test. * module/mes/let-syntax.mes: Remove. * module/mes/syntax.mes: Remove. core: Quoted internals are symbols. * mes.c (begin_env): Rename from begin. Update callers. (scm_begin, scm_if, scm_define, scm_set_x): Rename from symbol_*. (symbol_begin, symbol_define, symbol_if, scm_lambda, scm_set_x): New symbols. (mes_environment): Add them to environment, SYMBOL->SCM. * define.c (define_env): Rename from define. Update callers. * build-aux/mes-snarf.scm: Shadow internals (SCM) by their symbol. test: More values, call-with-values tests. * tests/cwv.test: New file. * GNUmakefile (TESTS): Add it. * tests/scm.test: Remove value and call-with-values tests. psyntax: More tests. * tests/psyntax.test: Add tests. core: Fix quasisyntax reading. * mes.c (readword): Avoid unspecified behaviour in comma list. test: Add new macros. * module/mes/test.mes (pass-if-equal, expect-fail): New macros. repl: Add sc-expand meta command, include syntax-case. * module/mes/repl.mes (,sc-expand): New meta command. * scripts/repl.mes: Include psyntax-0, psyntax-1, psyntax. Not used as basis for match yet. Add syntax-case based syntax-rules. * module/mes/psyntax-1.mes (syntax-rules): New syntax transformer, based on syntax-case. (define-syntax-rule): New macro. (let-syntax): New macro, for syntax-case. * tests/let-syntax.test: Switch to syntax-case. * tests/psyntax.test: Add syntax-rules and syntax-rule test. Bugfix include.mes: skip commented modules. * scripts/include.mes: Make regexp more strict. Initial psyntax integration. * mes.c (sc_expand_env): New function. (builtin_eval): Use it. * module/mes/psyntax-0.mes: New file. * module/mes/psyntax-1.mes: New file. * tests/psyntax.test: New file. * GNUmakefile (TESTS): Add it. psyntax: Add missing (interaction-environment) to eval. * module/mes/psyntax.mes: Add (interaction-environment) to eval. 2016-12-12 Jan Nieuwenhuizen Import psyntax from Guile-1.3a. * module/mes/psyntax.mes: New file. * module/mes/psyntax.ss: New file. commit 230c435383087a1e6ad60d9c98d3ec75dd2c3e49 Author: Mikael Djurfeldt Date: Tue Aug 19 01:28:50 1997 +0000 * syncase.scm: New file: Guile-adaption for syntax-case macros. psyntax.pp, psyntax.ss: Syntax-case macros, portable version 2 by R. Kent Dybvig, Oscar Waddell, Bob Hieb and Carl Bruggeman 2016-12-12 Jan Nieuwenhuizen Exit upon error. * module/mes/scm.mes (error): Add exit 1. Mescc: avoid `if'. * module/language/c/lexer.mes (keywords): Produce `If'. * module/language/c/parser.mes (c-parser): Use `If.' core: Add compile time switch for quasisyntax. * mes.c [QUASISYNTAX]: New switch. Default off. (builtin_eval) [QUASISYNTAX]: Handle syntax, unsyntax, quasisyntax. * quasiquote.c (syntax, unsyntax, unsyntax_splicing, eval_quasisyntax, add_unsyntaxers) [QUASISYNTAX]: Available only. More error handling on apply_env. * mes.c (apply_env): Assert if applying *unspecified*. Bugfix assq_ref_cache for running without environment cache. * mes.c (assq_ref_cache) [!ENV_CACHE]: Return *undefined* if nothing found. Error handling on failing set!. * mes.c (set_env_x): Produce error message [WAS: dump core]. Simplify toplevel read. * mes.c (read_file_env): Rename from read_file. (load_file_env): New function. (main): Use it. boot: fix ignored. * module/mes/loop-0.mes: Wrap read-file in begin. * module/mes/mes-0.mes: Remove ignored. Implement apply with multiple arguments. * module/mes/base-0.mes (apply): Handle multiple arguments. * tests/base.test: (apply, apply 1, apply 2): New test. Fix values. * mes.c (call): Respect any other non-value arguments. * tests/scm.test (values, values 2, values 3, call-with-values): New test. Define garbage collector/jam collector primitives. * mes.c (make_cell): New primitive alongside make_vector for allocation. (cons, make_char, make_macro, make_number, make_ref, internal_make_symbol, make_vector): Use it. Implement strings and symbols as list of characters [WAS: c-string]. * mes.c (scm_t): Add string field. (make_string, internal_lookup_symbol, internal_make_symbol, make_symbol, lookup, readword): Take scm*. Update callers. (display_helper): Support string field. (append_char): New function. (readstring): Use it. Produce scm*. (cstring_to_list): New function. (add_environment, internal_make_symbol): Use it. (list_of_char_equal_p): New function. (internal_lookup_symbol): Use it. * lib.c (list_ref): New function. * string.c (string_ref): Use it. (string, string_append, string_length, substring, number_to_string, string_to_symbol, symbol_to_string): Update to list-of-characters implementation. Environment cache bugfix for define. * define.c (define): Invalidate cache. Fixes vector test. * GNUmakefile (mes-check, guile-check): Use set -e. Fixes skipping over errors. 2016-12-12 Jan Nieuwenhuizen Introduce reference type, use vectors of SCM. * mes.c (type): Add REF. (scm_t): Add ref, change vector to *scm_t. Update users. (alloc): New function. (cons, make_char, make_macro, make_number, make_string, internal_make_symbol, make_vector): Use it. (make_ref): New function. (vector_entry): New function. (make_vector, list_to_vector, vector_set_x): Use it. (vector_ref): Dereference REF entry. (display_helper): Handle REF. * lib.c (vector_to_list): Handle REF. * type.c (ref_p): New function. * tests/vector.test (vector list): New test. Bugfix vector-ref. * mes.c (vector-ref): Make copies of simple values. Fixes lalr. * tests/vector.test (vector-set! 3): New test. 2016-12-12 Jan Nieuwenhuizen Guile gc experiment: remove global scan variable. Guile gc experiment: add garbage collection. Guile gc experiment: add lists and display. * guile/gc.scm (gc-nil, gc-null?, gc-list, gc-display, make-symbol): New function. Guile gc experiment: add pairs. * guile/gc.scm (cell-type, cell-index, gc-cons, gc-car, gc-cdr): New function. Guile gc experiment. guile/gc.scm: New file. Revert "Speedup boot eval/apply." This reverts commit 6326b3103156fd79cd7bebbb351194626cc8a64b. Speedup boot eval/apply. * module/mes/mes-0.scm (apply-env, evlis, eval-expand, eval-quasiquote): use IF iso COND: factor 3. (apply-env): Use lambda iso let: another 30%. guix hash: 115jycdz8i1r5sj2fsjqcrh456mayxzaykb8cxxxc3wxfkj8nagf 2016-11-20 Jan Nieuwenhuizen Release 0.1. * configure (VERSION): Bump to 0.1. * mes.c (main): Likewise. * module/mes/repl.mes: Likewise. Documentation update. * HACKING: Target is R6RS-like, at least having syntax-case. * README: Likewise. * guix.scm: Likewise. 2016-10-23 Jan Nieuwenhuizen Avoid gratuitous consing with begin and quasiquote. * mes.c (apply_env, main): Call begin rather than eval with cons'ed symbol begin. * module/mes/mes-0.mes (apply-env): Likewise. * quasiquote.c (add_unquoters): cons global unquoters rather than creating it fresh. * module/mes/mes-0.mes (add-unquoters): Likewise. 2016-10-22 Jan Nieuwenhuizen Remove dead code. * mes.c (mes_environment): Remove dead code. Move other post-boot and derived functions to lib.c. * mes.c (c*r, length, last_pair, builtin_list, vector_to_list, integer_to_char, char_to_integer, builtin_exit): Move to lib.c. * lib.c: New file. * GNUmakefile (mes.o): Depend on lib snarf output. Move strings to string.c. * mes.c (string, string_append, list_to_string, string_length, string_ref, substring, number_to_string, string_to_symbol, symbol_to_string): Move to string.c * string.c: New file. * GNUmakefile (mes.o): Depend on string snarf output. Move arithmetic functions to math.c. * mes.c (greater_p, less_p, is_p, minus, divide, modulo, multiply, logior): Move to math.c. * math.c: New file. * GNUmakefile (mes.o): Depend on math snarf output. Move define, define-macro to define.c. * mes.c (define, define-macro): Move to define.c * define.c: New file. * GNUmakefile (mes.o): Depend on define snarf output. Move quasiquote to quasiquote.c. * mes.c (unquote, unquote_splicing, syntax, unsyntax, unsyntax_splicing, eval_quasiquote, eval_quasisyntax, add_unquoters, add_unsyntaxers): Move to quasiquote.c * quasiquote.c: New file. * GNUmakefile (mes.o): Depend on quasiquote snarf output. Move optional type predicates to type.c. * mes.c (char_p, macro_p, number_p, pair_p, string_p, symbol_p, vector_p, builtin_p, boolean_p): Move to type.c * type.c: New file. * GNUmakefile (mes.o): Depend on type snarf output. * module/mes/loop-0.mes (cond, map, let, or, and not, evlis-env, apply-env, eval-expand, uquote, add-unquoters, eval, expand-macro-env, eval-begin-env, eval-if-env, sexp:define, env:define, env:macro): Move to mes-0.mes. * module/mes/mes-0.mes: New file. * module/mes/type-0.mes: New file. * scripts/include.mes: If BOOT, also include mes-0.mes. If TYPE0, also include type-0.mes. 2016-12-12 Jan Nieuwenhuizen Update NEWS. * NEWS: Note specials fix and booting with smaller core. 2016-10-21 Jan Nieuwenhuizen Generate C header and includes using snarfing. * mes.c: Move specific renames and n-args to alist annotation. * build-aux/mes-snarf.scm: New file. * GNUmakefile (mes.environment.h): Use it. (mes.h): Remove. (clean): Update. (mes.o): New dependency rule. * .gitignore: Update. 2016-10-22 Jan Nieuwenhuizen Revert "Flip sign of cached symbols: only search cache if symbol is cached." This reverts commit cef058be0d6ef5322f74e644bbcd96f1725c6327. 2016-10-21 Jan Nieuwenhuizen Flip sign of cached symbols: only search cache if symbol is cached. * mes.c (cache_save): Flip sign when caching and invalidating. (cache_invalidate): Flip sign when invalidating. 2016-10-20 Jan Nieuwenhuizen named let-fu FIXME 2016-10-21 Jan Nieuwenhuizen boot: fix builtin? tests. * tests/scm.test: Test primitives, not eval. Environment cache heuristicts. * mes.c (ENV_HEAD): New define. (assq_ref_cache): Use it. boot: support apply. * module/mes/loop-0.mes (eval-env): Add clause for apply-env. boot: Remove label support from Scheme. * module/mes/loop-0.scm (apply-env): Remove label clause. boot: vector support. * mes.c (make_vector): Change to scm interface. (temp_number): New global. (list_to_vector): Use it. * module/mes/scm.mes (c:make-vector): New function. * tests/scm.test: Remove vector tests. * tests/vector.test: New file. * GNUmakefile (TESTS): Add it. Avoid let* in scm.mes. * module/mes/scm.mes (case, max, min): Avoid let*. 2016-10-20 Jan Nieuwenhuizen loop-0: define and, let and cache-invalidate-range. boot: support quasiquote in eval. * module/mes/loop-0.mes (eval-env): Add quasiquote support. 2016-10-18 Jan Nieuwenhuizen Remove evcon from loop-0. * module/mes/loop-0.mes (loop-0): Handle define-macro. (cond): New macro. (eval-env-expand): Remove 'cond clause. (evcon): Remove. 2016-10-20 Jan Nieuwenhuizen Switch fat-c/boot using environment variable BOOT. * GNUmakefile: check for BOOT, set CFLAGS. * mes.c: Remove hardcoded BOOT define. * scripts/include.mes: include loop-0 when BOOT is set. 2016-10-16 Jan Nieuwenhuizen Implement eval/apply in Scheme. * module/mes/loop-0.mes: New file. * module/mes/mes.mes: Remove 2016-10-20 Jan Nieuwenhuizen Reduce eval/apply in core, extend in Scheme. * mes.c (eval_env_)[BOOT]: Rename from eval_env. Remove define, defin-macro. (eval_env): New function. (make_macro): Swap parameter ordering. (apply_env)[BOOT]: Support label. 2016-10-19 Jan Nieuwenhuizen Avoid adding top of environment to cache. * mes.c (assq_ref_cache): Only consider caching symbols deeper than 4*CACHE_SIZE depth. 50% speedup. Implement environment cache. * mes.c (cache_save, cache_lookup, cache_invalidate, cache_invalidate_range): Implement cache for environment. (assq_ref_cache): New function, perform cached lookups. (builtin_eval,lookup_macro): Use it. (set_cdr_x): Invalidate cache. (set_x): Likewise. (apply_env): Likewise. 2016-10-20 Jan Nieuwenhuizen Introduce SCM type for special symbols. * GNUmakefile (mes.h): Also export SCM to symbols.i * mes.c: Introduce SCM type for special symbols. (builtin_eval): Rename from eval_env. Update callers. * module/mes/base-0.mes (eval): Remove. * module/mes/repl.mes (repl): Use eval. Remove static primitives hack. * mes.c (internal_primitive_p, internal_p, lookup_primitive, mes_primitives): Remove. 2016-10-19 Jan Nieuwenhuizen Refactor primitives lookup. * mes.c (lookup_primitive_): Rename from internal_lookup_primitive, use scm-compatible signature. (lookup): Update caller. (eval_env): Check for builtins first. 2016-10-18 Jan Nieuwenhuizen Remove unused symbol. * mes.c (symbol_cond): Remove. Add report to closure test. * tests/closure.test: Add report. Remove dead code from let.mes. * module/mes/let.mes (simple-let, named-let, let): Remove dead code. Avoid cons* in base. * module/mes/base-0.mes (cond, simple-let, let): Rewrite without cons*. * module/mes/base.mes (or): Likewise. Differentiate apply asserts. * mes.c (apply_env): Split bool assert into bool, number and string. Add display tag for builtin procedures. * mes.c (display_helper): Show builtin functions as #. 2016-10-17 Jan Nieuwenhuizen Remove macro expansion from apply. mes.c (apply_env): Remove macro expansion. 2016-10-18 Jan Nieuwenhuizen Add paredit workaround in scripts. * scripts/elf.mes: Add paredit parsing comment. * scripts/repl.mes: Likewise. make tests standalone executable. * tests/closure.test: Add shebang and boot-0 include. * tests/let-syntax.test: Likewise. * tests/let.test: Likewise. * tests/match.test: Likewise. * tests/quasiquote.test: Likewise. * tests/record.test: Likewise. * tests/scm.test: Likewise. * GNUmakefile (mes-check): Run tests by exec'ing. make clean: remove symbols.i. * GNUmakefile (clean): remove symbols.i. Update documentation. * HACKING: Describe (mes-use-modules). * NEWS: Update. Add --help, --version. * mes.c (main): Handle --help, --version. * scripts/include.mes: Handle --help. * scripts/elf.mes: Pass any arguments on to mes. * scripts/mescc.mes: Likewise. * scripts/paren.mes: Likewise. * scripts/repl.mes: Likewise. guix hash: 0g6lcms2hv1i8hdkfh2xz0g7jmsayisr7bcwkp47blkbapqpzpsf Update guix hash. * make/install.make (update-hash): New target. * guix.scm: Prepare for update. 2016-10-16 Jan Nieuwenhuizen Add installation instructions. * INSTALL: New file. Add guix.scm package recipe. * guix.scm: New file. 2016-10-15 Jan Nieuwenhuizen Prepare for 0.1 release: update READMEs. * NEWS: New file. * AUTHORS: Add info about files taken from Scheme48. * HACKING: Update with info from TODO. * TODO: Remove. 2016-10-16 Jan Nieuwenhuizen Prepare for 0.1 release: make install. * make/install.make (install): Install documentation. Prepare for 0.1 release: installable scripts. * scripts/mes: New symlink. * scripts/elf.mes: Use it. * scripts/mescc.mes: Likewise, read all mes modules with include.mes. * scripts/paren.mes: Likewise. * scripts/repl.mes: Likewise. 2016-10-15 Jan Nieuwenhuizen Prepare for 0.1 release: gnu-build-system. * configure: New file. * make/install.make: New file. * .gitignore: Ignore generated files. * build-aux/gitlog-to-changelog: New file. 2016-10-12 Jan Nieuwenhuizen Prepare for 0.1 release: new directory structure. * scripts/elf.mes: New file. * scripts/include.mes: New file. * scripts/mescc.mes: New file. * scripts/paren.mes: New file. * scripts/repl.mes: New file. * doc/examples/main.c: Move from ./main.c. * module/mes/base-0.mes: Move from ./base0.mes. * module/mes/base.mes: Move from top. * module/mes/elf.mes: Likewise. * module/mes/let-syntax.mes: Likewise. * module/mes/let.mes: Likewise. * module/mes/mes.mes: Likewise. * module/mes/quasiquote.mes: Likewise. * module/mes/repl.mes: Likewise. * module/mes/scm.mes: Likewise. * module/mes/syntax.mes: Likewise. * module/mes/lalr-0.mes: Move from lib/lalr.mes. * module/mes/lalr.mes: Move from lib/lalr.scm. * module/mes/match.mes: Move from lib/match.scm. * module/mes/record-0.mes: Move from lib/record.mes. * module/mes/record.mes: Move from lib/record.scm. * module/mes/test.mes: Move flom lib/. * module/rnrs/bytevectors.mes: Move from lib/rnrs. * module/srfi/srfi-0.mes: Move from lib/srfi. * module/srfi/srfi-1.mes: Likewise. * module/srfi/srfi-9.mes: Likewise. * module/language/c/lexer.mes: Move from ./c-lexer.scm. * module/language/c/parser.mes: Move from ./mescc.scm. * module/language/c/compiler.mes: New file, split from parser.mes. * module/language/paren.mes: Move from ./paren.scm. * module/mes/libc-i386.mes: New file, split from elf.mes. * tests/base.test: Move from test/. * tests/closure.test: Likewise. * tests/let-syntax.test: Likewise. * tests/let.test: Likewise. * tests/match.test: Likewise. * tests/quasiquote.test: Likewise. * tests/record.test: Likewise. * tests/scm.test: Likewise. * hello.S: Remove. * hello.c: Remove. * loop2.mes: Remove. * test/foo.test: Remove. 2016-10-15 Jan Nieuwenhuizen Remove evcon (Sorry John). * mes.c (evcon): Remove, remove callers. * base0-if.mes (cond): Rename from disabled-cond. Support quasisyntax. * mes.c (eval_quasisyntax, add_unsyntaxers): New functions. (eval_env): Use them. 2016-10-16 Jan Nieuwenhuizen Add REPL. * mes.c (expand_macro_env, force_output): New function. Use STRING_MAX for string buffers throughout. (eval_env, eval_begin_env): Rename from eval, eval_begin. Update callers. * repl.mes: New file. * base.mes (list?): Move from scm.mes. * scm.mes (eval, apply, primitive-eval, expand-macro): New function. * GNUmakefile: New repl target. 2016-10-12 Jan Nieuwenhuizen Avoid 90% of cdr'ing environment, assuming static primitives. * mes.c (internal_primitive_p)[STATIC_PRIMITIVES: New function. (lookup_macro)[STATIC_PRIMITIVES]: Use it. (internal_lookup_primitive)[STATIC_PRIMITIVES]: New function. (lookup)[STATIC_PRIMITIVES]: Use it. (mes_primitives)[STATIC_PRIMITIVES]: New function. (main): Use it. * base0-if.mes (disabled-cond): Rename from xcond. * GNUmakefile: Add commented profiling CFLAGS. 2016-10-16 Jan Nieuwenhuizen Do not use quasiquote in base0. * base0.scm (defined?): Rewrite without quasiquote. 2016-10-12 Jan Nieuwenhuizen Add procedure? to base. * base.mes (procedure?): Move from scm.mes. 2016-10-08 Jan Nieuwenhuizen speedup: use ->car etc. 2016-10-11 Jan Nieuwenhuizen Avoid out-of-spec strncat usage. mes.c (readword): Use character assignment instead of strncat. Fixes Valgrind nit. Discern between primitive atoms and symbols. * mes.c (internal_symbol_p): New function. (eval): Use it. 2016-10-10 Jan Nieuwenhuizen resurrect mescc. cleanup and doc update. syntax.mes: silence syntax error. test/scm.test: update. 2016-10-11 Jan Nieuwenhuizen test/match.test: pass. 2016-10-10 Jan Nieuwenhuizen lib/match: ugly hygiene hack. FIXME. let-syntax.mes: implement. 2016-10-08 Jan Nieuwenhuizen speedup: use ->car etc. use IF as primitive, drop using cond/evcon only option. c++ type-safety. assq: use while instead of recursion. mes.c: uniquify symbols. mes-check: separate target. 2016-09-25 Jan Nieuwenhuizen Updates to README, TODO. 2016-08-14 Jan Nieuwenhuizen mescc.scm: compile simple, well-behaved for-loop. elf.mes: for loop. mescc.scm: print two strings. 2016-08-13 Jan Nieuwenhuizen mescc.scm: first a.out produced from main.c. lib/match.scm: import. lib/srfi/srfi-1.scm: add append-map, filter, find. elf.mes: make-elf. elf.mes: use elf32-* remove set!. elf.mes: remove text-free, softcode data-offset. elf.mes: put marker in note section. Revert "elf.mes: drop .note section." This reverts commit b2b5b73b91308407ec82a5ba658aca025512c542. elf.mes: drop .note section. elf.mes: softcode more. mes.c: implement string->list. elf.mes: compute text-free, text-offset. lib/rnrs/bytevectors.scm: minimal rnrs bytevectors. elf.mes: separate-out text, text-free and data sections. 2016-08-12 Jan Nieuwenhuizen resurrect guile-mescc, use write-int and (current-error-port) iso `2'. 2016-09-25 Jan Nieuwenhuizen Revert "mes.c: use single malloc with arena." This reverts commit 38c364faeff430a5ee28f402d24b073f6bf9a548. 2016-08-12 Jan Nieuwenhuizen mes.c: use single malloc with arena. elf.mes: a.out runs. elf.mes: error-free header, no program yet. elf.mes: readelf -h a.out shows some info. mescc/elf.mes: write minimal ELF header. mes.c: display, newline: take optional port; add write-char, read hex #xXX. remove debug output to stdout. 2016-07-27 Jan Nieuwenhuizen syntax-if.mes: TODO. Use IF iso COND as primitive; keep COND primitive as option. let.scm: cleanups. 2016-07-26 Jan Nieuwenhuizen macro hax0rz Revert "lib/lalr-debug.scm" This reverts commit 084d1bea33d45f0653cdc6bef44dc295faef6b72. lib/lalr-debug.scm quasiquote.mes: disable, too slow. 2016-07-25 Jan Nieuwenhuizen split-up test suite, implement quasiquote in scheme. 2016-07-26 Jan Nieuwenhuizen hello.c, hello.S: hello world target for C compiler. 2016-07-24 Jan Nieuwenhuizen mescc: mes parses simplest main with lalr. scm.mes: add port-location dummies. mes.c: add set-cdr, substring, string-ref. mes.c: support whitespace characters. mescc.scm: parse simple main.c. TODO/HACKING: update: lalr/paren.scm runs. mes.c: when reading `EOF', defer read control to program. mes.c, scm.c: add read-char, peek-char, char=?, char-alphabetic?. scm.mes: add list-ref. mes.c: add logior. scm.mes: add expt. scm.mes: remainder. scm.mes: implement do. scm.mes: add max, min. <=, >=: take multiple arguments. mes.c: add quotient and modulo. mes.c: less_p, greater_p, is_p: take multiple arguments. mes.c: display_helper fix for vector. scm.mes: make-vector: fix fill. paren.scm revert mes.c: fix apply. fix for-each. lalr paren test 2016-10-18 Jan Nieuwenhuizen ADD .gitignore. lib/lalr.scm 2016-07-24 Jan Nieuwenhuizen mes.c: grok #\tab. 2016-07-23 Jan Nieuwenhuizen mes.c: add syntax, quasisyntax to reader.... srfi-9 records! mes.c: refactor begin and closures. Fixes bugs/top.mes. bugs/top.mes: document toplevel begin bug; probable reason for record/syntax-case failure. check: resurrect guile-check. mes.c: remove hacks trying to get records up....WIP srfi-9 lib/record.scm: import. lib/srfi/srfi-0.scm: add. mes.c: barf on unknown symbols. syntax.mes: update from scheme48-1.1. Add header to syntax.mes MERGE scm.mes: add last-pair. test.mes: enable vector tests for mes. 2016-07-22 Jan Nieuwenhuizen scm.mes: add assq-set!, assq-ref. Update documentation, remove old bug files, move bugs into bugs/. mes.c: add new macro type, junk *macro* hack. mes.c: store actual environment with closures. fix closure 5 2016-07-19 Jan Nieuwenhuizen mes.c: store enviroment depth in closures. Fixes c1, c3 and more. mes.c: move begin_env into eval, decruft. 2016-07-18 Jan Nieuwenhuizen fix some tests. test: hack: show expected/actual remove booting into mes (would need VM), boot.mes; rewrite test.mes. c0.mes, c1.mes: update. 2016-07-17 Jan Nieuwenhuizen unquoting fix. no closuring in macro body... add equal?, member, for-each. closures: mostly supported... syntax.mes: more debugging. mes.c: single-statement body lambda closures. c0.mes: simpler bug. TODO: update closure.mes: document mes closure bug. mes.c: add boolean_p. mes.c: fix symbol? for nil. test.mes: disable call-with-values test, prints too much debugging. mes.c: evcon: support clause without cdr. Fixes or. add simple <=, >= and list?. scm.mes: and: bugfix, return #f for (and #f 1 2 3). syntax.mes: use cond iso if. rode harink hax0rz..ugh + next name? test in macro.mes. mes.c: another macro clue-bat in apply. now macro.mes equals guile -s macro.mes. mes.c: begin_env: bugfix, keep going in body after set! mes.c: bugfix for eval_quasiquote: stay in quasiquote mode after next quote. 2016-07-16 Jan Nieuwenhuizen guile runs macro-based mes:define-syntax, mes runs but yields *undefined*. support define-macro inside eval (i.e., inside define-macro) mes.c: move define, define-macro into begin_env, remove loop. fixes inner defines. define-syntax... 2016-10-18 Jan Nieuwenhuizen syntax... 2016-07-16 Jan Nieuwenhuizen implement variable-argument and, or. implement let loop. cleanup let, let*, letrec implement unquote-splicing, cleanup some macros update macro, fix andmap. add scheme apply, rename apply-> apply_env. syntax.mes: experiments... support cond without match, define-macro x (lambda)). 2016-07-11 Jan Nieuwenhuizen *unspecified* harder. add number->string, string->symbol, symbol->string. add procedure? add variable argument append. +,-,*,/: take n arguments. add call-with-values, values. add memq/memv. rename assoc to assq. add vectors. 2016-07-10 Jan Nieuwenhuizen add length. remove disabled code. add chars. add strings. TODO: new file. add begin. add letrec. fix for set! inside lambda. add not, if. add +,/,*,=. loop2.mes: separate from scm.mes. ignore add set!. 2016-07-09 Jan Nieuwenhuizen snarf scm functions and environment. eval: disarm lambda. map: support two lists. add simple map. fix evlis argumuent execution order. add let*. reader: handle whitespace and comments inside lists. move mes language additions to scm.mes. hack to print (current-module). mes.c, mes.mes: support quasiquote, unquote. boot.mes: generate from mes.mes, scm.mes, test.mes. 2016-07-08 Jan Nieuwenhuizen mes.c: support `.' and add let. boot.mes: support macros, add and, or. 2016-05-29 Jan Nieuwenhuizen boot.mes: boostrap into mes. 2016-07-09 Jan Nieuwenhuizen Leave pure LISP. * GNUmakefile: New file. * mes.c: Lots of work. * mes.mes: New file, split-off from mes.scm. (builtin, number): New function. (apply): Use them. * mes.test: New file. * scm.mes: New file, split-off from mes.scm. Add LISP interpreter in C. mes.c: New file. 2016-05-28 Jan Nieuwenhuizen Add Guile version of John McCarthy's Maxwell Equations of Software. * .gitignore: New file. * AUTHORS: Idem. * COPYING: Idem. * README: Idem. * mes.scm: Idem. 2016-05-15 Jan Nieuwenhuizen Initial. -*- org -*- #+TITLE: ChangeLog Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. Normally a ChangeLog is generated at "make dist" time and available in source tarballs.