mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-23 12:00:21 +02:00
be smarter about allocating local variables, reusing slots if possible
* module/language/Makefile.am: OK, we can compile compile-ghil.scm now, thankfully. * module/language/ecmascript/compile-ghil.scm (ormatch): New macro, a wrapper around pmatch to avoid some of the more egregious non-tail recursiveness. (comp): Use ormatch. * module/language/ghil.scm (unparse-ghil): The body of bind and mv-bind is a single expression, not a list of expressions. * module/language/ghil/compile-glil.scm (codegen): Be more clever when allocating "local" variables -- if a variable goes out of scope, its index can be re-used later. * module/language/glil.scm (parse-glil, unparse-ghil): The "rest" of a mv-bind is a flag, not a list. The "ra" of an mv-call is a label, not a GLIL expression. * module/language/objcode/spec.scm (collapse-locals, decompile-value): When decompiling a value, process the bindings list differently. Comments in the code. * module/language/scheme/compile-ghil.scm (define-scheme-translator): Fix the generated error procedure. (let): Re-indent. (letrec): Re-indent. * module/system/base/syntax.scm (record-case): If the body of a clause is null, fill it with the unspecified value.
This commit is contained in:
parent
81d677eb12
commit
594d9d4c48
9 changed files with 138 additions and 41 deletions
|
@ -175,7 +175,7 @@
|
|||
(pmatch (cdr exp)
|
||||
,@clauses
|
||||
,@(if (assq 'else clauses) '()
|
||||
'((else
|
||||
`((else
|
||||
(syntax-error l (format #f "bad ~A" ',sym) exp))))))))
|
||||
|
||||
(define-scheme-translator quote
|
||||
|
@ -261,8 +261,8 @@
|
|||
(maybe-name-value! (retrans (cadr b)) (car b)))
|
||||
bindings)))
|
||||
(call-with-ghil-bindings e (map car bindings)
|
||||
(lambda (vars)
|
||||
(make-ghil-bind e l vars vals (trans-body e l body)))))))
|
||||
(lambda (vars)
|
||||
(make-ghil-bind e l vars vals (trans-body e l body)))))))
|
||||
|
||||
(define-scheme-translator let*
|
||||
;; (let* ((SYM VAL) ...) BODY...)
|
||||
|
@ -275,12 +275,12 @@
|
|||
;; (letrec ((SYM VAL) ...) BODY...)
|
||||
((,bindings . ,body) (guard (valid-bindings? bindings))
|
||||
(call-with-ghil-bindings e (map car bindings)
|
||||
(lambda (vars)
|
||||
(let ((vals (map (lambda (b)
|
||||
(maybe-name-value!
|
||||
(retrans (cadr b)) (car b)))
|
||||
bindings)))
|
||||
(make-ghil-bind e l vars vals (trans-body e l body)))))))
|
||||
(lambda (vars)
|
||||
(let ((vals (map (lambda (b)
|
||||
(maybe-name-value!
|
||||
(retrans (cadr b)) (car b)))
|
||||
bindings)))
|
||||
(make-ghil-bind e l vars vals (trans-body e l body)))))))
|
||||
|
||||
(define-scheme-translator cond
|
||||
;; (cond (CLAUSE BODY...) ...)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue