Hi, esp. wingo
Here is the defenition and uses of *freeze-map* in my file parse.scm,
(define *freeze-map* (make-fluid (make-hash-table)))
(define (clear-tokens)
(fluid-set! *freeze-map* (make-hash-table)))
(clear-tokens)
(let ((val (hash-ref (pk 'freeze (fluid-ref *freeze-map*))
(cons* N M tok) #f))
...)
(hash-set! (fluid-ref *freeze-map*)
(cons* n m tok) (list X XL N M XX ... val2)))
(hash-set! (fluid-ref *freeze-map*)
(cons* n m tok) val2))
(with-fluids ((*freeze-map* (pk 22 (fluid-ref *freeze-map*))))
(clear-tokens)
sometimes this fails sometimes not when using the code e.g.
;;; (freeze (#f . #(() () () () () () () () () () () () () () () () () () () () () () () () () () () () () () ())))
ERROR: In procedure hash-ref:
Sometimes when I comile with a change of whitespaces I can make the code run else I get
this mysterious error. This is a clue that there might be a bug in 2.1, guile-log is a bit naughty
so I don't want to put the blame on guile, just hint that there might be a fundamental bug in there
I tracked it down to the clear-tokens function, that ,x clear-tokens assembly is
0 (assert-nargs-ee/locals 1 3) ;; 0 args, 3 locals at logic/guile-log/parser.scm:64:0
1 (toplevel-box 0 57143 36139 36137 #t);; `*freeze-map*'
6 (box-ref 0 0)
7 (toplevel-box 1 57139 36133 36121 #t);; `make-hash-table'
12 (box-ref 3 1)
13 (call 3 1) at logic/guile-log/parser.scm:65:27
15 (receive 1 3 4)
17 (module-box 2 41407 34463 41405 #t);; `(@@ (guile) fluid-set!)'
22 (box-ref 2 2) at logic/guile-log/parser.scm:65:2
23 (mov 3 2)
24 (mov 2 1)
25 (mov 1 0)
26 (mov 0 3)
27 (tail-call 3)
I'm wondering if the receive value 4 is protected by the frame that is the return of make-hash-table.
Regards
Stefan