Add support for (quote) literal forms in compiler.ss.
This commit is contained in:
parent
0b0b352dd6
commit
14b2a1570a
12
compiler.ss
12
compiler.ss
|
|
@ -21,7 +21,7 @@
|
|||
[(cdr) '%cdr]
|
||||
[(cons) '%cons])
|
||||
(cdr form))]
|
||||
[(%bind %if %tail-call %apply %lambda %set! %cons %car %cdr) form]
|
||||
[(%bind %if %tail-call %apply %lambda %set! %cons %car %cdr quote) form]
|
||||
[else (simplify-funcall form)])
|
||||
(if (eq? form '()) '%nil form)))
|
||||
|
||||
|
|
@ -34,7 +34,7 @@
|
|||
(cond
|
||||
[(pair? after) (cons subform after)]
|
||||
[(or (not (pair? subform))
|
||||
(memq (first subform) '(%apply %car %cdr %cons %bind %if)))
|
||||
(memq (first subform) '(%apply %car %cdr %cons %bind %if quote)))
|
||||
`((set! ,(second form) ,subform))]
|
||||
[(and (pair? subform) (eq? (first subform) '%tail-call))
|
||||
`(,subform)] ; The %set! wouldn't be executed anyway.
|
||||
|
|
@ -331,6 +331,7 @@
|
|||
(if (memq old-var (second form))
|
||||
form
|
||||
`(%bind ,(second form) ,@(map recurse (cddr form))))]
|
||||
[(quote) form]
|
||||
[(%if %tail-call %apply %lambda %set! %cons %car %cdr)
|
||||
`(,(first form) ,@(map recurse (cdr form)))]
|
||||
[else (error "Unsimplified form:" form)])
|
||||
|
|
@ -352,7 +353,7 @@
|
|||
frm
|
||||
(map cons (second form) new-vars)))
|
||||
(cddr form))))]
|
||||
[(%if %tail-call %apply %lambda %set! %cons %car %cdr) form]
|
||||
[(%if %tail-call %apply %lambda %set! %cons %car %cdr quote) form]
|
||||
[else (error "Unsimplified form:" form)])
|
||||
form))
|
||||
|
||||
|
|
@ -370,7 +371,7 @@
|
|||
(list new-form)))
|
||||
(map flatten-binds (cddr form)))])
|
||||
`(%bind ,bound-vars ,@subforms))]
|
||||
[(%if %tail-call %apply %set! %lambda %cons %car %cdr) form]
|
||||
[(%if %tail-call %apply %set! %lambda %cons %car %cdr quote) form]
|
||||
[else (error "Unsimplified form:" form)])
|
||||
form))
|
||||
|
||||
|
|
@ -387,6 +388,7 @@
|
|||
[(%set!) (if output?
|
||||
(cons (second form) (recurse (third form)))
|
||||
(recurse (third form)))]
|
||||
[(quote) '()]
|
||||
[(%if %tail-call %apply %lambda %cons %car %cdr)
|
||||
(remove-duplicates (append-map recurse (cdr form)))]
|
||||
[else
|
||||
|
|
@ -411,6 +413,7 @@
|
|||
(let ([ref-vars (remove-duplicates (append-map free-variables (cddr form)))])
|
||||
`(%bind ,(filter (lambda (x) (memq x ref-vars)) (second form))
|
||||
,@(map reduce-variables (cddr form))))]
|
||||
[(quote) form]
|
||||
[(%if %tail-call %apply %set! %lambda %cons %car %cdr)
|
||||
`(,(first form) ,@(map reduce-variables (cdr form)))]
|
||||
[else (error "Unsimplified form:" form)])
|
||||
|
|
@ -433,6 +436,7 @@
|
|||
(cons subform after)))
|
||||
'()
|
||||
(map reduce-set! (cddr form)))))]
|
||||
[(quote) form]
|
||||
[(%if %tail-call %apply %set! %lambda %cons %car %cdr)
|
||||
`(,(first form) ,@(map reduce-set! (cdr form)))]
|
||||
[else (error "Unsimplified form:" form)])
|
||||
|
|
|
|||
Loading…
Reference in New Issue