Update of /cvsroot/scsh/scsh-0.6/scsh
In directory usw-pr-cvs1:/tmp/cvs-serv30979
Modified Files:
newports.scm procobj.scm scsh-interfaces.scm scsh-package.scm
Added Files:
weaktables.scm
Log Message:
+ Added a simple version of weak-tables. Only tail weak for now.
+ Replaced forgotten vector-ref in newports.scm
--- NEW FILE ---
;;; Tail-weak tables. This is for internal use only, for real life
;;; applications we have to provide a more general interface with the
;;; 3 combinations of head and tail weakness.
(define make-weak-table make-table)
(define (weak-table-set! table number set-me)
(table-set! table number (make-weak-pointer set-me)))
(define (weak-table-ref table number)
(let ((ref (table-ref table number)))
(if (weak-pointer? ref) (weak-pointer-ref ref) ref)))
(define (weak-table-walk proc table)
(table-walk
(lambda (number value)
(if (weak-pointer? value) (weak-pointer-ref value) value))
table))
(define (strengthen-weak-table-ref table number)
(table-set! table number (weak-table-ref table number)))
(define (weaken-weak-table-ref table number)
(weak-table-set! table number (weak-table-ref table number)))
Index: newports.scm
===================================================================
RCS file: /cvsroot/scsh/scsh-0.6/scsh/newports.scm,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -r1.10 -r1.11
*** newports.scm 2001/06/21 08:30:51 1.10
--- newports.scm 2001/07/07 19:29:29 1.11
***************
*** 10,32 ****
; Vector of weak pointers mapping fd -> fdport.
- (define (weak-table-set! table number set-me)
- (table-set! table number (make-weak-pointer set-me)))
-
- (define (weak-table-ref table number)
- (let ((ref (table-ref table number)))
- (if (weak-pointer? ref) (weak-pointer-ref ref) ref)))
-
- (define (weak-table-walk proc table)
- (table-walk
- (lambda (number value)
- (if (weak-pointer? value) (weak-pointer-ref value) value))
- table))
-
- (define (strengthen-weak-table-ref table number)
- (table-set! table number (weak-table-ref vector number)))
-
- (define (weaken-weak-table-ref table number)
- (weak-table-set! table number (weak-table-ref vector number)))
-
(define fdports (make-integer-table))
--- 10,13 ----
***************
*** 523,527 ****
(ch (fdport-data:channel fdport*))
(old-fd (channel-os-index ch))
! (old-vector-ref (vector-ref fdports old-fd)))
(set-fdport-data:revealed fdport* new-revealed)
(table-set! fdports old-fd #f)
--- 504,508 ----
(ch (fdport-data:channel fdport*))
(old-fd (channel-os-index ch))
! (old-vector-ref (table-ref fdports old-fd)))
(set-fdport-data:revealed fdport* new-revealed)
(table-set! fdports old-fd #f)
Index: procobj.scm
===================================================================
RCS file: /cvsroot/scsh/scsh-0.6/scsh/procobj.scm,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -r1.10 -r1.11
*** procobj.scm 2001/04/09 08:05:58 1.10
--- procobj.scm 2001/07/07 19:29:29 1.11
***************
*** 59,74 ****
(weak-table-set! (auto-init-value process-table) n val))
- (define (weak-table-ref t n)
- (let ((r (table-ref t n)))
- (if (weak-pointer? r)
- (weak-pointer-ref r)
- (error "there was a non-weak-pointer" r))))
-
- (define (weak-table-set! t n s)
- (table-set! t n (make-weak-pointer s)))
-
- ;(define (weaken-table-ref! t n)
- ; (weak-table-set! t n (weak-table-ref t n)))
-
(define (maybe-pid->proc pid)
(process-table-ref pid))
--- 59,62 ----
Index: scsh-interfaces.scm
===================================================================
RCS file: /cvsroot/scsh/scsh-0.6/scsh/scsh-interfaces.scm,v
retrieving revision 1.20
retrieving revision 1.21
diff -C2 -r1.20 -r1.21
*** scsh-interfaces.scm 2001/06/20 16:12:40 1.20
--- scsh-interfaces.scm 2001/07/07 19:29:29 1.21
***************
*** 593,596 ****
--- 593,600 ----
real->exact-integer))
+ (define-interface weak-tables-interface
+ (export make-weak-table weak-table-set! weak-table-ref weak-table-walk
+ strengthen-weak-table-ref weaken-weak-table-ref))
+
;;; semi-standard network magic numbers
;;; should be available on all platforms
Index: scsh-package.scm
===================================================================
RCS file: /cvsroot/scsh/scsh-0.6/scsh/scsh-package.scm,v
retrieving revision 1.20
retrieving revision 1.21
diff -C2 -r1.20 -r1.21
*** scsh-package.scm 2001/06/06 11:06:05 1.20
--- scsh-package.scm 2001/07/07 19:29:29 1.21
***************
*** 39,42 ****
--- 39,47 ----
)
+ (define-structure weak-tables weak-tables-interface
+ (open scheme
+ weak
+ tables)
+ (files weaktables))
;;; This guy goes into the FOR-SYNTAX part of scsh's syntax exports.
***************
*** 159,163 ****
handle
fluids
! weak
scsh-char-set-low-level-lib ; rdelim.scm needs it.
--- 164,168 ----
handle
fluids
! weak-tables
scsh-char-set-low-level-lib ; rdelim.scm needs it.
|