From 51b299aa18e882681dd681acb51c9cb1b44f3b4e Mon Sep 17 00:00:00 2001 From: Zelphir Kaltstahl Date: Sat, 18 Mar 2023 16:06:05 +0100 Subject: [PATCH] lisp/ob-scheme.el: * ob-scheme.el (org-babel-expand-body:scheme, org-babel-expand-header-arg-vars:scheme): Change the way header argument :var variables are expanded for for Scheme source blocks. Use `define' instead of wrapping using `let'. Wrapping binding definitions using `let' can lead to issues with GNU Guile and potentially other Scheme dialects. GNU Guile will only get to the body of the let at evaluation time, not at macro expansion time. If the let form wraps any imports of libraries that define macros, then those imported macros are seen too late and their corresponding forms inside the body of the let are not expanded. Using `define' to define bindings avoids this problem, at least in GNU Guile. --- lisp/ob-scheme.el | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/lisp/ob-scheme.el b/lisp/ob-scheme.el index 9f12f42cb..f837dedd2 100644 --- a/lisp/ob-scheme.el +++ b/lisp/ob-scheme.el @@ -79,6 +79,14 @@ (defvar org-babel-default-header-args:scheme '() "Default header arguments for scheme code blocks.") +(defun org-babel-expand-header-arg-vars:scheme (vars) + "Expand :var header arguments given as VARS." + (mapconcat + (lambda (var) + (format "(define %s %S)" (car var) (cdr var))) + vars + "\n")) + (defun org-babel-expand-body:scheme (body params) "Expand BODY according to PARAMS, return the expanded body." (let ((vars (org-babel--get-vars params)) @@ -86,16 +94,9 @@ (postpends (cdr (assq :epilogue params)))) (concat (and prepends (concat prepends "\n")) (if (null vars) body - (format "(let (%s)\n%s\n)" - (mapconcat - (lambda (var) - (format "%S" (print `(,(car var) ',(cdr var))))) - vars - "\n ") - body)) + (concat (org-babel-expand-header-arg-vars:scheme vars) body)) (and postpends (concat "\n" postpends))))) - (defvar org-babel-scheme-repl-map (make-hash-table :test #'equal) "Map of scheme sessions to session names.") -- 2.25.1