- implemented uninstall-library.
This commit is contained in:
parent
5d3e70fa83
commit
c7d68432e3
|
@ -1 +1 @@
|
||||||
1667
|
1668
|
||||||
|
|
|
@ -415,6 +415,7 @@
|
||||||
[wstatus-received-signal i]
|
[wstatus-received-signal i]
|
||||||
[kill i]
|
[kill i]
|
||||||
[installed-libraries i]
|
[installed-libraries i]
|
||||||
|
[uninstall-library i]
|
||||||
[library-path i]
|
[library-path i]
|
||||||
[library-extensions i]
|
[library-extensions i]
|
||||||
[current-primitive-locations $boot]
|
[current-primitive-locations $boot]
|
||||||
|
|
|
@ -22,7 +22,8 @@
|
||||||
annotation-stripped
|
annotation-stripped
|
||||||
read-library-source-file
|
read-library-source-file
|
||||||
library-version-mismatch-warning
|
library-version-mismatch-warning
|
||||||
file-locator-resolution-error)
|
file-locator-resolution-error
|
||||||
|
label-binding set-label-binding!)
|
||||||
(import
|
(import
|
||||||
(only (ikarus.compiler) eval-core)
|
(only (ikarus.compiler) eval-core)
|
||||||
(only (ikarus.reader.annotated) read-library-source-file)
|
(only (ikarus.reader.annotated) read-library-source-file)
|
||||||
|
@ -59,5 +60,10 @@
|
||||||
(set-rtd-printer! (type-descriptor name)
|
(set-rtd-printer! (type-descriptor name)
|
||||||
printer)))]
|
printer)))]
|
||||||
[(_ name (field* ...))
|
[(_ name (field* ...))
|
||||||
(define-struct name (field* ...))])))
|
(define-struct name (field* ...))]))
|
||||||
|
|
||||||
|
(define (set-label-binding! label binding)
|
||||||
|
(set-symbol-value! label binding))
|
||||||
|
(define (label-binding label)
|
||||||
|
(and (symbol-bound? label) (symbol-value label))))
|
||||||
|
|
||||||
|
|
|
@ -643,6 +643,7 @@
|
||||||
(define label->binding
|
(define label->binding
|
||||||
(lambda (x r)
|
(lambda (x r)
|
||||||
(cond
|
(cond
|
||||||
|
((not x) '(displaced-lexical))
|
||||||
((imported-label->binding x) =>
|
((imported-label->binding x) =>
|
||||||
(lambda (b)
|
(lambda (b)
|
||||||
(cond
|
(cond
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
(export imported-label->binding library-subst installed-libraries
|
(export imported-label->binding library-subst installed-libraries
|
||||||
visit-library library-name library-version library-exists?
|
visit-library library-name library-version library-exists?
|
||||||
find-library-by-name install-library library-spec invoke-library
|
find-library-by-name install-library library-spec invoke-library
|
||||||
current-library-expander
|
current-library-expander uninstall-library
|
||||||
current-library-collection library-path library-extensions
|
current-library-collection library-path library-extensions
|
||||||
serialize-all current-precompiled-library-loader)
|
serialize-all current-precompiled-library-loader)
|
||||||
(import (rnrs) (psyntax compat) (rnrs r5rs))
|
(import (rnrs) (psyntax compat) (rnrs r5rs))
|
||||||
|
@ -35,7 +35,11 @@
|
||||||
(else (cons x ls))))
|
(else (cons x ls))))
|
||||||
(case-lambda
|
(case-lambda
|
||||||
(() set)
|
(() set)
|
||||||
((x) (set! set (set-cons x set))))))
|
((x) (set! set (set-cons x set)))
|
||||||
|
((x del?)
|
||||||
|
(if del?
|
||||||
|
(set! set (remq x set))
|
||||||
|
(set! set (set-cons x set)))))))
|
||||||
|
|
||||||
(define current-library-collection
|
(define current-library-collection
|
||||||
;;; this works now because make-collection is a lambda
|
;;; this works now because make-collection is a lambda
|
||||||
|
@ -264,6 +268,21 @@
|
||||||
(lambda (x) (equal? (library-name x) name)))
|
(lambda (x) (equal? (library-name x) name)))
|
||||||
(find-external-library name)))
|
(find-external-library name)))
|
||||||
|
|
||||||
|
(define uninstall-library
|
||||||
|
(case-lambda
|
||||||
|
[(name err?)
|
||||||
|
(define who 'uninstall-library)
|
||||||
|
;;; FIXME: check that no other import is in progress
|
||||||
|
;;; FIXME: need to unintern labels and locations of
|
||||||
|
;;; library bindings
|
||||||
|
(let ([lib
|
||||||
|
(find-library-by
|
||||||
|
(lambda (x) (equal? (library-name x) name)))])
|
||||||
|
(when (and err? (not lib))
|
||||||
|
(assertion-violation who "library not installed" name))
|
||||||
|
((current-library-collection) lib #t))]
|
||||||
|
[(name) (uninstall-library name #t)]))
|
||||||
|
|
||||||
(define (library-exists? name)
|
(define (library-exists? name)
|
||||||
(and (find-library-by
|
(and (find-library-by
|
||||||
(lambda (x) (equal? (library-name x) name)))
|
(lambda (x) (equal? (library-name x) name)))
|
||||||
|
@ -276,7 +295,6 @@
|
||||||
(assertion-violation #f
|
(assertion-violation #f
|
||||||
"cannot find library with required spec" spec))))
|
"cannot find library with required spec" spec))))
|
||||||
|
|
||||||
(define label->binding-table (make-eq-hashtable))
|
|
||||||
|
|
||||||
(define (install-library-record lib)
|
(define (install-library-record lib)
|
||||||
(let ((exp-env (library-env lib)))
|
(let ((exp-env (library-env lib)))
|
||||||
|
@ -292,7 +310,7 @@
|
||||||
((global-macro!)
|
((global-macro!)
|
||||||
(cons 'global-macro! (cons lib (cdr binding))))
|
(cons 'global-macro! (cons lib (cdr binding))))
|
||||||
(else binding))))
|
(else binding))))
|
||||||
(hashtable-set! label->binding-table label binding))))
|
(set-label-binding! label binding))))
|
||||||
exp-env))
|
exp-env))
|
||||||
((current-library-collection) lib))
|
((current-library-collection) lib))
|
||||||
|
|
||||||
|
@ -316,7 +334,7 @@
|
||||||
(install-library-record lib))))))
|
(install-library-record lib))))))
|
||||||
|
|
||||||
(define (imported-label->binding lab)
|
(define (imported-label->binding lab)
|
||||||
(hashtable-ref label->binding-table lab #f))
|
(label-binding lab))
|
||||||
|
|
||||||
(define (invoke-library lib)
|
(define (invoke-library lib)
|
||||||
(let ((invoke (library-invoke-state lib)))
|
(let ((invoke (library-invoke-state lib)))
|
||||||
|
|
Loading…
Reference in New Issue