r5rs
srfi-0
srfi-4
-srfi-6
srfi-13
srfi-14
+srfi-23
+srfi-39
+srfi-55
+srfi-61
+srfi-105
@end example
Other SRFI feature symbols are defined once their code has been loaded
;;; <feature-identifier>s `guile' and `r5rs', so that programs can
;;; determine the implementation type and the supported standard.
;;;
-;;; Currently, the following feature identifiers are supported:
-;;;
-;;; guile r5rs srfi-0 srfi-4 srfi-6 srfi-13 srfi-14 srfi-55 srfi-61 srfi-105
-;;;
;;; Remember to update the features list when adding more SRFIs.
;;;
(define %cond-expand-features
- ;; Adjust the above comment when changing this.
+ ;; This should contain only features that are present in core Guile,
+ ;; before loading any modules. Modular features are handled by
+ ;; placing 'cond-expand-provide' in the relevant module.
'(guile
guile-2
r5rs
srfi-0 ;; cond-expand itself
- srfi-4 ;; homogenous numeric vectors
- srfi-6 ;; open-input-string etc, in the guile core
+ srfi-4 ;; homogeneous numeric vectors
+ ;; We omit srfi-6 because the 'open-input-string' etc in Guile
+ ;; core are not conformant with SRFI-6; they expose details
+ ;; of the binary I/O model and may fail to support some characters.
srfi-13 ;; string library
srfi-14 ;; character sets
srfi-23 ;; `error` procedure
random-source-make-reals)
#:use-module (srfi srfi-9))
+(cond-expand-provide (current-module) '(srfi-27))
+
(define-record-type :random-source
(%make-random-source state)
random-source?
(define-module (srfi srfi-31)
#:export (rec))
+(cond-expand-provide (current-module) '(srfi-31))
+
(define-syntax rec
(syntax-rules ()
"Return the given object, defined in a lexical environment where
#:use-module (srfi srfi-69)
#:use-module (system vm trap-state))
+(cond-expand-provide (current-module) '(srfi-38))
;; A printer that shows all sharing of substructures. Uses the Common
;; Lisp print-circle notation: #n# refers to a previous substructure
parameterize
current-input-port current-output-port current-error-port))
+(cond-expand-provide (current-module) '(srfi-39))
+
(define (with-parameters* params values thunk)
(let more ((params params)
(values values)
f64vector? make-f64vector f64vector f64vector-length f64vector-ref
f64vector-set! f64vector->list list->f64vector))
+(cond-expand-provide (current-module) '(srfi-4))
;; Need quasisyntax to do this effectively using syntax-case
(define-macro (define-bytevector-type tag infix size)
vector-ec
vector-of-length-ec))
+(cond-expand-provide (current-module) '(srfi-42))
+
(include-from-path "srfi/srfi-42/ec.scm")
#:replace (delay force promise?)
#:use-module (srfi srfi-9))
+(cond-expand-provide (current-module) '(srfi-45))
+
(define-record-type promise (make-promise val) promise?
(val promise-val promise-val-set!))
#:replace (string-compare string-compare-ci)
#:use-module (srfi srfi-27))
+(cond-expand-provide (current-module) '(srfi-67))
+
(include-from-path "srfi/srfi-67/compare.scm")
#:re-export (string-hash)
#:replace (hash make-hash-table hash-table?))
-(cond-expand-provide (current-module) '(srfi-37))
+(cond-expand-provide (current-module) '(srfi-69))
\f
;;;; Internal helper macros