+++ /dev/null
---- g-wrap-1.9.8/lib/srfi/srfi-35.scm.orig 1970-01-01 01:00:00.000000000 +0100
-+++ g-wrap-1.9.8/lib/srfi/srfi-35.scm 2006-11-05 14:57:30.000000000 +0100
-@@ -0,0 +1,237 @@
-+(define-module (srfi srfi-35)
-+ #:use-module (oop goops)
-+ #:use-module (oop goops util)
-+ #:use-module (srfi srfi-1)
-+
-+ ;; (oop goops util) and (srfi srfi-1) both define any, every
-+ ;; #:duplicates last ; inhibits the warning, but Guile 1.7 only
-+
-+ #:export (make-condition-type
-+ condition-type? condition-has-type?
-+
-+ &condition
-+ make-condition make-compound-condition
-+ condition? extract-condition
-+ condition-ref
-+
-+ &message
-+ message-condition? condition-message
-+
-+ &serious
-+ serious-condition?
-+
-+ &error
-+ error?
-+
-+ ;; Not part of the SRFI
-+ &compound-condition
-+ %make-compound-condition-helper
-+ handle-condition)
-+ #:export-syntax (define-condition-type condition))
-+
-+(define-class &condition-meta (<class>))
-+
-+(define-class &condition ()
-+ (%name #:accessor condition-type-name)
-+ #:metaclass &condition-meta)
-+
-+(define (condition-type? thing)
-+ (is-a? thing &condition-meta))
-+
-+(define (condition-type-all-fields type)
-+ (fold-right (lambda (slot lst)
-+ (let ((name (car slot)))
-+ (if (eq? name '%name)
-+ lst
-+ (cons name lst))))
-+ '()
-+ (class-slots type)))
-+
-+(define (make-condition-type name supertype fields)
-+ (if (not (symbol? name))
-+ (error "make-condition-type: name is not a symbol"
-+ name))
-+ (if (not (condition-type? supertype))
-+ (error "make-condition-type: supertype is not a condition type"
-+ supertype))
-+ (if (not
-+ (null? (lset-intersection eq?
-+ (condition-type-all-fields supertype)
-+ fields)))
-+ (error "make-condition-type: duplicate field name" ))
-+
-+ (make-class (list supertype) (map list fields) #:name name))
-+
-+(define-macro (define-condition-type ?name ?supertype ?predicate . ?field-acc)
-+ `(begin
-+ (define ,?name
-+ (make-condition-type ',?name
-+ ,?supertype
-+ (map car ',?field-acc)))
-+ (define (,?predicate thing)
-+ (and (condition? thing)
-+ (condition-has-type? thing ,?name)))
-+ ,@(map
-+ (lambda (f-a)
-+ `(define (,(cadr f-a) condition)
-+ (condition-ref (extract-condition condition ,?name)
-+ ',(car f-a))))
-+ ?field-acc)))
-+
-+;; Stolen from oop/goops.scm
-+(define (list2set l)
-+ (let loop ((l l)
-+ (res '()))
-+ (cond
-+ ((null? l) res)
-+ ((memq (car l) res) (loop (cdr l) res))
-+ (else (loop (cdr l) (cons (car l) res))))))
-+
-+;; This should be in goops.scm, really
-+(define (class-supers c)
-+ (letrec ((allsubs (lambda (c)
-+ (cons c (mapappend allsubs
-+ (class-direct-supers c))))))
-+ (list2set (cdr (allsubs c)))))
-+
-+(define (condition-subtype? subtype supertype)
-+ (or (equal? subtype supertype)
-+ (memq supertype (class-supers subtype))))
-+
-+(define (condition-type-field-supertype condition-type field)
-+ (let loop ((condition-type condition-type))
-+ (cond ((not condition-type) #f)
-+ ((memq field (condition-type-fields condition-type))
-+ condition-type)
-+ (else
-+ (loop (condition-type-supertype condition-type))))))
-+
-+(define (condition? thing)
-+ (is-a? thing &condition))
-+
-+(define (make-condition type . field-plist)
-+ (let ((alist (let loop ((plist field-plist))
-+ (if (null? plist)
-+ '()
-+ (cons (cons (car plist)
-+ (cadr plist))
-+ (loop (cddr plist)))))))
-+ (if (not (lset<= eq?
-+ (map car alist)
-+ (condition-type-all-fields type)))
-+ (error "condition fields don't match condition type"
-+ (condition-type-all-fields type) (map car alist)))
-+ (let ((condition (make type)))
-+ (for-each (lambda (pr)
-+ (slot-set! condition (car pr) (cdr pr)))
-+ alist)
-+ condition)))
-+
-+(define-method (condition-has-type? condition type)
-+ (if (memq type (condition-types condition))
-+ #t #f))
-+
-+(define condition-ref slot-ref)
-+
-+(define (type-field-alist-ref type-field-alist field)
-+ (let loop ((alist type-field-alist))
-+ (cond ((null? alist) #f)
-+ ((assq field (cdr (car alist)))
-+ => identity)
-+ (else
-+ (loop (cdr alist))))))
-+
-+(define-class &compound-condition (&condition)
-+ (%components #:init-keyword #:components))
-+
-+(define (make-compound-condition condition-1 . conditions)
-+ (if (null? conditions)
-+ condition-1
-+ (make &compound-condition
-+ #:components (cons condition-1 conditions))))
-+
-+(define-method (extract-condition (condition &condition)
-+ (type &condition-meta))
-+ (if (not (condition-subtype? (class-of condition) type))
-+ (error "extract-condition: invalid condition type"
-+ condition type))
-+ condition)
-+
-+(define-method (extract-condition (condition &compound-condition)
-+ (type &condition-meta))
-+ (any (lambda (component)
-+ (if (condition-has-type? component type)
-+ (extract-condition component type)
-+ #f))
-+ (slot-ref condition '%components)))
-+
-+(define (%make-compound-condition-helper type-field-alist)
-+ (apply
-+ make-compound-condition
-+ (map
-+ (lambda (form)
-+ (apply make-condition
-+ (cons
-+ (car form)
-+ ;; Fold to plist
-+ (fold (lambda (entry lst)
-+ (cons (car entry) (cons (cadr entry) lst)))
-+ '()
-+ (cdr form)))))
-+ ;; Extend entries
-+ (map (lambda (entry)
-+ (cons (car entry)
-+ (fold (lambda (field rest)
-+ (let ((pr (or (assq field (cdr entry))
-+ (type-field-alist-ref type-field-alist
-+ field))))
-+ (if pr
-+ (cons pr rest)
-+ rest)))
-+ '() (condition-type-all-fields (car entry)))))
-+ type-field-alist))))
-+
-+(define-macro (condition . forms)
-+ ;; forms: ((type1 (field1 value1) ...) ...)
-+ (list
-+ '%make-compound-condition-helper
-+ (list
-+ 'quasiquote
-+ (map
-+ (lambda (form)
-+ ;;(format #t "form ~S\n" form)
-+ (cons
-+ (list 'unquote (car form))
-+ (map (lambda (entry)
-+ ;;(format #t "entry ~S\n" entry)
-+ (list (car entry) (list 'unquote (cadr entry))))
-+ (cdr form))))
-+ forms))))
-+
-+(define-method (condition-types (condition &condition))
-+ (let ((own-class (class-of condition)))
-+ (cons own-class (class-direct-supers own-class))))
-+
-+(define-method (condition-types (condition &compound-condition))
-+ (mapappend condition-types (slot-ref condition '%components)))
-+
-+(define-condition-type &message &condition
-+ message-condition?
-+ (message condition-message))
-+
-+(define-condition-type &serious &condition
-+ serious-condition?)
-+
-+(define-condition-type &error &serious
-+ error?)
-+
-+(define-method (handle-condition (c &condition))
-+ (error "unhandled condition" c))
-+
-+(define-method (handle-condition (c &message))
-+ (error "unhandled message condition" (condition-message c)))
-+
-+(define-method (handle-condition (c &serious))
-+ (error "unhandled serious condition" c))
-+
-+;;; arch-tag: 1145fba2-0008-4c99-8304-a53cdcea50f9