mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 20:00:19 +02:00
Instead of defining a separate module, given that "read" calls are quite all over the place, we're just going to replace the boot "read" binding with read.scm. This way, we'll be able to remove support for reader options in the boot reader, as it will only ever be used for a finite set of files. * NEWS: Update. * module/Makefile.am (ice-9/boot-9.go): Depend on read.scm. (SOURCES): * am/bootstrap.am (SOURCES): Don't build a ice-9/read.go, as we include it. * module/ice-9/boot-9.scm (read-syntax): Define here, as "include" now uses it. (read-hash-procedures, read-hash-procedure, read-hash-extend): New procedures. Will replace C variants. (read, read-syntax): Include read.scm to define these. * module/ice-9/psyntax-pp.scm (include): Regenerate. * module/ice-9/psyntax.scm (include): Use read-syntax, so we get better source information. * module/ice-9/read.scm (let*-values): New local definition, to avoid loading srfi-11. (%read): Use list->typed-array instead of u8-list->bytevector. * module/language/scheme/spec.scm: Remove (ice-9 read) import; read-syntax is there in the boot environment
63 lines
2.6 KiB
Scheme
63 lines
2.6 KiB
Scheme
;;; Guile Scheme specification
|
|
|
|
;; Copyright (C) 2001, 2009, 2010, 2011, 2012, 2021 Free Software Foundation, Inc.
|
|
|
|
;;;; This library is free software; you can redistribute it and/or
|
|
;;;; modify it under the terms of the GNU Lesser General Public
|
|
;;;; License as published by the Free Software Foundation; either
|
|
;;;; version 3 of the License, or (at your option) any later version.
|
|
;;;;
|
|
;;;; This library is distributed in the hope that it will be useful,
|
|
;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
;;;; Lesser General Public License for more details.
|
|
;;;;
|
|
;;;; You should have received a copy of the GNU Lesser General Public
|
|
;;;; License along with this library; if not, write to the Free Software
|
|
;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
;;; Code:
|
|
|
|
(define-module (language scheme spec)
|
|
#:use-module (system base compile)
|
|
#:use-module (system base language)
|
|
#:use-module (language scheme compile-tree-il)
|
|
#:use-module (language scheme decompile-tree-il)
|
|
#:export (scheme))
|
|
|
|
;;;
|
|
;;; Language definition
|
|
;;;
|
|
|
|
(define-language scheme
|
|
#:title "Scheme"
|
|
#:reader (lambda (port env)
|
|
;; Use the binding of current-reader from the environment.
|
|
;; FIXME: Handle `read-options' as well?
|
|
((or (and=> (and=> (module-variable env 'current-reader)
|
|
variable-ref)
|
|
fluid-ref)
|
|
read-syntax)
|
|
port))
|
|
|
|
#:compilers `((tree-il . ,compile-tree-il))
|
|
#:decompilers `((tree-il . ,decompile-tree-il))
|
|
#:evaluator (lambda (x module) (primitive-eval x))
|
|
#:printer write
|
|
#:make-default-environment
|
|
(lambda ()
|
|
;; Ideally we'd duplicate the whole module hierarchy so that `set!',
|
|
;; `fluid-set!', etc. don't have any effect in the current environment.
|
|
(let ((m (make-fresh-user-module)))
|
|
;; Provide a separate `current-reader' fluid so that
|
|
;; compile-time changes to `current-reader' are
|
|
;; limited to the current compilation unit.
|
|
(module-define! m 'current-reader (make-fluid))
|
|
|
|
;; Default to `simple-format', as is the case until
|
|
;; (ice-9 format) is loaded. This allows
|
|
;; compile-time warnings to be emitted when using
|
|
;; unsupported options.
|
|
(module-set! m 'format simple-format)
|
|
|
|
m)))
|