Properly wrap data from c eval

This commit is contained in:
Justin Ethier 2016-02-04 22:08:38 -05:00
parent 88f5d29930
commit 4fbd1bf1da

View file

@ -53,10 +53,23 @@
(let ((env (if (null? _env) *global-environment* (car _env)))) (let ((env (if (null? _env) *global-environment* (car _env))))
(eval (wrapc exp) env))) (eval (wrapc exp) env)))
;; Expressions received from C code are already evaluated, but sometimes too much so.
;; Try to wrap
(define (wrapc exp) (define (wrapc exp)
(cond (cond
((symbol? exp) ((application? exp)
`(quote ,exp)) (cond
((compound-procedure? (car exp))
(cons
(car exp)
(map
(lambda (e)
(if (self-evaluating? e)
e
`(quote ,e)))
(cdr exp))))
(else
exp)))
(else (else
exp))) exp)))