From 4fbd1bf1dadf9c0a05e797b6ce77b5e79ffddc34 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 4 Feb 2016 22:08:38 -0500 Subject: [PATCH] Properly wrap data from c eval --- scheme/eval.sld | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/scheme/eval.sld b/scheme/eval.sld index 3338e550..d5354990 100644 --- a/scheme/eval.sld +++ b/scheme/eval.sld @@ -53,10 +53,23 @@ (let ((env (if (null? _env) *global-environment* (car _env)))) (eval (wrapc exp) env))) +;; Expressions received from C code are already evaluated, but sometimes too much so. +;; Try to wrap (define (wrapc exp) (cond - ((symbol? exp) - `(quote ,exp)) + ((application? exp) + (cond + ((compound-procedure? (car exp)) + (cons + (car exp) + (map + (lambda (e) + (if (self-evaluating? e) + e + `(quote ,e))) + (cdr exp)))) + (else + exp))) (else exp)))