diff --git a/alterator/interfaces/guile/security/wrap.scm b/alterator/interfaces/guile/security/wrap.scm index 6966ebd..17b00ab 100644 --- a/alterator/interfaces/guile/security/wrap.scm +++ b/alterator/interfaces/guile/security/wrap.scm @@ -44,9 +44,36 @@ (let* ((result (prepare-definitions )) (defs (car result)) (insts (cdr result))) - `(let ,(map (lambda(x) (list x #f)) defs) - ,@(let ((convert (map (lambda(x) (if (definition? x) `(set! ,@(cdr x)) x)) insts))) - (if (eq? (car insts) 'list) (list convert) convert))))) + `(let ,(append (map (lambda(x) (list x #f)) defs) + `((:list: '()))) + ,@(let ((convert (map (lambda(x) + (if (definition? x) + `(set! ,@(cdr x)) + x)) + insts))) + (if (eq? (car insts) 'list) + (append + (fold (lambda (x xs) + (if (and (pair? x) + (eq? (car x) 'set!)) + (append xs (list x)) + (if (or (null? xs) + (not (eq? (cadr (last xs)) ':list:))) + (append xs + (list + `(set! :list: + (append :list: + ,(append `(list) (list x)))))) + (append (drop-right xs 1) + (list + `(set! :list: + (append :list: + ,(append (cadr (cdaddr (last xs))) + (list x))))))))) + `() + (cdr convert)) + `(:list:)) + convert))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;