diff options
| -rw-r--r-- | elisp/geiser-r6rs.el | 50 | 
1 files changed, 50 insertions, 0 deletions
| diff --git a/elisp/geiser-r6rs.el b/elisp/geiser-r6rs.el new file mode 100644 index 0000000..48c33d9 --- /dev/null +++ b/elisp/geiser-r6rs.el @@ -0,0 +1,50 @@ +;;; geiser-r6rs.el -- Generic support for R6RS implementations + +;; Copyright (C) 2009 Jose Antonio Ortega Ruiz + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the Modified BSD License. You should +;; have received a copy of the license along with this program. If +;; not, see <http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5>. + +;; Start date: Thu Sep 24, 2009 15:06 + + +(require 'geiser-impl) +(require 'geiser-base) + + + +(defun geiser-r6rs--marshall-procedure (proc) +  `(eval ,proc '(geiser))) + +(defun geiser-r6rs--find-library (&optional name) +  (cond ((null name) +         (save-excursion +           (while (not (zerop (geiser-syntax--nesting-level))) +             (backward-up-list)) +           (when (re-search-forward "\\=(library +(" nil t) +             (backward-char) +             (geiser-syntax--read/list)))) +        ((listp name) name) +        ((stringp name) +         (let ((name (car (geiser-syntax--read-from-string name)))) +           (and (listp name) name))))) + +(defun geiser-r6rs--check () +  (save-excursion +    (goto-char (point-min)) +    (re-search-forward "^(library[ \t]" nil t))) + + +;;; Base class for R6RS implementations: + +(geiser-impl--define load-file-name 'r6rs nil +                     '(marshall-procedure geiser-r6rs--marshall-procedure) +                     '(find-module geiser-r6rs--find-library) +                     '(check-buffer geiser-r6rs--check)) + + +(provide 'geiser-r6rs) +;;; geiser-r6rs.el ends here + | 
