mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-17 17:20:29 +02:00
more work towards compiling and interpreting keyword args
* libguile/_scm.h (SCM_OBJCODE_MINOR_VERSION): Bumparoo * libguile/vm-i-system.c (push-rest, bind-rest): Logically there are actually two rest binders -- one that pops, conses, and pushes, and one that pops, conses, and local-sets. The latter is used on keyword arguments, because the keyword arguments themselves have been shuffled up on the stack. Renumber ops again. * module/language/tree-il/compile-glil.scm (flatten): Attempt to handle compilation of lambda-case with keyword arguments. Might need some help. * module/ice-9/psyntax.scm (build-lambda-case): An attempt to handle the interpreted case correctly. This might need a couple iterations, but at least it looks like the compile-glil code. * module/ice-9/psyntax-pp.scm: Regenerated. * module/language/glil.scm (<glil>): Rename "rest?" to "rest" in <glil-opt-prelude> and <glil-kw-prelude>, as it is no longer a simple boolean, but if true is an integer: the index of the local variable to which the rest should be bound. * module/language/glil/compile-assembly.scm (glil->assembly): Adapt to "rest" vs "rest?". In the keyword case, use "bind-rest" instead of "push-rest". * test-suite/tests/tree-il.test: Update for opt-prelude change.
This commit is contained in:
parent
7e01997e88
commit
899d37a6cf
8 changed files with 2373 additions and 2197 deletions
|
@ -30,12 +30,12 @@
|
|||
glil-std-prelude-nreq glil-std-prelude-nlocs glil-std-prelude-else-label
|
||||
|
||||
<glil-opt-prelude> make-glil-opt-prelude glil-opt-prelude?
|
||||
glil-opt-prelude-nreq glil-opt-prelude-nopt glil-opt-prelude-rest?
|
||||
glil-opt-prelude-nreq glil-opt-prelude-nopt glil-opt-prelude-rest
|
||||
glil-opt-prelude-nlocs glil-opt-prelude-else-label
|
||||
|
||||
<glil-kw-prelude> make-glil-kw-prelude glil-kw-prelude?
|
||||
glil-kw-prelude-nreq glil-kw-prelude-nopt glil-kw-prelude-kw
|
||||
glil-kw-prelude-allow-other-keys? glil-kw-prelude-rest?
|
||||
glil-kw-prelude-allow-other-keys? glil-kw-prelude-rest
|
||||
glil-kw-prelude-nlocs glil-kw-prelude-else-label
|
||||
|
||||
<glil-bind> make-glil-bind glil-bind?
|
||||
|
@ -84,8 +84,8 @@
|
|||
;; Meta operations
|
||||
(<glil-program> meta body)
|
||||
(<glil-std-prelude> nreq nlocs else-label)
|
||||
(<glil-opt-prelude> nreq nopt rest? nlocs else-label)
|
||||
(<glil-kw-prelude> nreq nopt rest? kw allow-other-keys? nlocs else-label)
|
||||
(<glil-opt-prelude> nreq nopt rest nlocs else-label)
|
||||
(<glil-kw-prelude> nreq nopt rest kw allow-other-keys? nlocs else-label)
|
||||
(<glil-bind> vars)
|
||||
(<glil-mv-bind> vars rest)
|
||||
(<glil-unbind>)
|
||||
|
@ -111,10 +111,10 @@
|
|||
(make-glil-program meta (map parse-glil body)))
|
||||
((std-prelude ,nreq ,nlocs ,else-label)
|
||||
(make-glil-std-prelude nreq nlocs else-label))
|
||||
((opt-prelude ,nreq ,nopt ,rest? ,nlocs ,else-label)
|
||||
(make-glil-opt-prelude nreq nopt rest? nlocs else-label))
|
||||
((kw-prelude ,nreq ,nopt ,rest? ,kw ,allow-other-keys? ,nlocs ,else-label)
|
||||
(make-glil-kw-prelude nreq nopt rest? kw allow-other-keys? nlocs else-label))
|
||||
((opt-prelude ,nreq ,nopt ,rest ,nlocs ,else-label)
|
||||
(make-glil-opt-prelude nreq nopt rest nlocs else-label))
|
||||
((kw-prelude ,nreq ,nopt ,rest ,kw ,allow-other-keys? ,nlocs ,else-label)
|
||||
(make-glil-kw-prelude nreq nopt rest kw allow-other-keys? nlocs else-label))
|
||||
((bind . ,vars) (make-glil-bind vars))
|
||||
((mv-bind ,vars ,rest) (make-glil-mv-bind vars rest))
|
||||
((unbind) (make-glil-unbind))
|
||||
|
@ -138,10 +138,10 @@
|
|||
`(program ,meta ,@(map unparse-glil body)))
|
||||
((<glil-std-prelude> nreq nlocs else-label)
|
||||
`(std-prelude ,nreq ,nlocs ,else-label))
|
||||
((<glil-opt-prelude> nreq nopt rest? nlocs else-label)
|
||||
`(opt-prelude ,nreq ,nopt ,rest? ,nlocs ,else-label))
|
||||
((<glil-kw-prelude> nreq nopt rest? kw allow-other-keys? nlocs else-label)
|
||||
`(kw-prelude ,nreq ,nopt ,rest? ,kw ,allow-other-keys? ,nlocs ,else-label))
|
||||
((<glil-opt-prelude> nreq nopt rest nlocs else-label)
|
||||
`(opt-prelude ,nreq ,nopt ,rest ,nlocs ,else-label))
|
||||
((<glil-kw-prelude> nreq nopt rest kw allow-other-keys? nlocs else-label)
|
||||
`(kw-prelude ,nreq ,nopt ,rest ,kw ,allow-other-keys? ,nlocs ,else-label))
|
||||
((<glil-bind> vars) `(bind ,@vars))
|
||||
((<glil-mv-bind> vars rest) `(mv-bind ,vars ,rest))
|
||||
((<glil-unbind>) `(unbind))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue