* gash/compat.scm [mes] (X_OK): New variable.
[mes] (program-arguments): New procedure.
[mes] (delete-duplicates!): New procedure.
[mes] (flush-all-ports): New procedure.
[mes] (file-port?): New procedure.
[mes] (input-port?): New procedure.
[mes] (output-port?): New procedure.
[mes] (dup): Redefine to support an optional 'new' argument.
* gash/compat.scm [mes] (define-inlinable): New syntax.
[mes] (*fluid-accessor*): New variable.
[mes] (make-parameter): New procedure.
[mes] (parameterize): New syntax.
[mes] (set-port-line!): New procedure.
[mes] (string-every): New procedure.
* gash/compat/textual-ports.scm [mes] (<soft-input-port>): New
record type.
[mes] (make-soft-port): New procedure.
[mes] (push-soft-input-port-buffer!): New procedure.
[mes] (pop-soft-input-port-buffer!): New procedure.
[mes] (get-char): New procedure.
[mes] (unget-char): New procedure.
[mes] (lookahead-char): New procedure.
* gash/lexer.scm: Import '(gash compat)' and '(srfi srfi-14)'.
* gash/arithmetic.scm: New file.
* Makefile.am (SOURCES): Add it.
* gash/lexer.scm (get-arithmetic-expansion): New procedure.
(get-expansion): Check for "$((" and use the new procedure to read an
arithmetic expansion.
* gash/eval.scm (word->qword): Handle '<sh-arithmetic>'.
* tests/unit/eval.scm: Add tests.
* tests/spec/Makefile.am (TESTS): Add 'arith'.
* tests/spec/oil.scm: Patch seven of its tests and filter out fifteen
others.
* doc/gash.texi, doc/syntax.txt: Add '<sh-arithmetic>' syntax.
This adjustment paves the way for writing a compiler.
* gash/word.scm (eval-cmd-sub, string-not-null?, word->qword,
expand-word): Move these...
* gash/eval.scm: ...to this module.
* tests/unit/word.scm: Adjust qword tests to use 'expand-qword', and
move non-qword (evaluation) tests to...
* tests/unit/eval.scm: ...this new file, adjusting them to use
'eval-word'.
* Makefile.am (UNIT_TESTS): Add the new file.
* doc/gash.texi (Internal representation examples): In the section
on pipelines, change a redirect in the result to "ice-cream.txt" to
match its input.
* Makefile.am (AM_TESTS_ENVIRONMENT): New variable.
* tests/redirects.org (Files opened for redirect can be executed
immediately): Use an environment variable instead of hard-coding
'/bin/sh'.
This broke when we started building the 'version.texi' file
reproducibly (cf. 6f598de23a).
* guix.scm: Make sure 'make-select' includes the '.git' directory;
add 'git-minimal' to the main package's 'native-inputs'.
* Makefile.am (dist-hook, gen-ChangeLog): Test for mere existence of
.git instead of asserting a directory.
Co-authored-by: Timothy Sample <samplet@ngyro.com>
* build-aux/gitlog-to-changelog-repro.patch: New file.
* Makefile.am (EXTRA_DIST): Add it.
(build-aux/gitlog-to-changelog-repro): New rule.
(gen-ChangeLog): Use 'gitlog-to-changelog-repro'.
(DISTCLEANFILES): Add 'build-aux/gitlog-to-changelog-repro'.
* gash/shell.scm (swap-and-shift-pairs): Remove procedure.
(make-pipes): Remove procedure.
(plumb): Accept another port as an argument and close it when setting
up the child process.
(sh:pipeline): Do not use 'make-pipes' to create all the pipe ports
upfront, but rather create them as needed and give them directly to
'plumb'.
* gash/shell.scm (redir->parameter+port): Rename this...
(process-redirect): ...to this, and make it return a list with the
third element being a boolean indicating if the port was opened by us.
(sh:with-redirects): Close ports when the new boolean is set.