Mark H Weaver <m...@netris.org> writes: > Tommi Höynälänmaa <tommi.hoynalan...@gmail.com> writes: > >> The following code causes command "guild compile" to hang: >> ---cut here--- >> (define (select-nearest-methods binder >> index v-fixed-args v-rest-arg vb-included) >> (dwl4 "select-nearest-methods") >> (assert (is-binder? binder)) >> (let ((n (vector-length vb-included))) >> (do ((i 0 (+ i 1))) ((>= i n)) >> (if (vector-ref vb-included i) >> (let ((t1 (get-item-at-index >> (vector-ref v-fixed-args i) >> (vector-ref v-rest-arg i) >> index))) >> (do ((j 0 (+ j 1))) ((>= j n)) >> (if (and (not (= i j)) >> (vector-ref vb-included j)) >> (let ((t2 (get-item-at-index >> (vector-ref v-fixed-args j) >> (vector-ref v-rest-arg j) >> index))) >> (if (is-t-subtype? binder t1 t2) >> ;; t2 is excluded >> (vector-set! vb-included j #f)))))))))) >> ---cut here---
Further investigation reveals that the loop in compute-significant-bits in (language cps specialize-numbers) fails to terminate. I instrumented it as follows: --8<---------------cut here---------------start------------->8--- diff --git a/module/language/cps/specialize-numbers.scm b/module/language/cps/specialize-numbers.scm index d5587037b..7be0b5e33 100644 --- a/module/language/cps/specialize-numbers.scm +++ b/module/language/cps/specialize-numbers.scm @@ -211,9 +211,21 @@ "Given the locally inferred types @var{types}, compute a map of VAR -> BITS indicating the significant bits needed for a variable. BITS may be #f to indicate all bits, or a non-negative integer indicating a bitmask." - (let ((preds (invert-graph (compute-successors cps kfun)))) + (pk 'compute-significant-bits cps types kfun) + (when (getenv "GUILE_DEBUG_CPS") + (format (current-warning-port) "CPS:\n") + (for-each (match-lambda + ((k . v) (format (current-warning-port) " ~s --> ~s\n" k v))) + (reverse (intmap-fold acons cps '()))) + (format (current-warning-port) "TYPES:\n") + (for-each (match-lambda + ((k . v) (format (current-warning-port) " ~s --> ~s\n" k v))) + (reverse (intmap-fold acons types '())))) + (pk 'compute-significant-bits-result + (let ((preds (pk 'preds (invert-graph (compute-successors cps kfun))))) (let lp ((worklist (intmap-keys preds)) (visited empty-intset) (out empty-intmap)) + (pk 'lp 'worklist worklist 'visited visited 'out out) (match (intset-prev worklist) (#f out) (label @@ -276,7 +288,7 @@ (add-unknown-uses out args)))) (($ $prompt escape? tag handler) (add-unknown-use out tag))))) - (_ out))))))))) + (_ out)))))))))) (define (specialize-operations cps) (define (visit-cont label cont cps types sigbits) --8<---------------cut here---------------end--------------->8--- and here's a reformatted version of the resulting output when compiling Tommi's code above: --8<---------------cut here---------------start------------->8--- ;;; (compute-significant-bits #<intmap 0-103> #<intmap 13+0-90> 13) CPS: 0 --> #<cps (kfun () 0 12 1)> 1 --> #<cps (kclause (() () #f () #f) 2)> 2 --> #<cps (kargs () () (continue 3 (primcall current-module)))> 3 --> #<cps (kargs (module) (1) (continue 4 (const 0)))> 4 --> #<cps (kargs (scope) (2) (continue 5 (primcall cache-current-module! 1 2)))> 5 --> #<cps (kargs () () (continue 6 (closure 13 0)))> 6 --> #<cps (kargs (arg) (3) (continue 7 (const select-nearest-methods)))> 7 --> #<cps (kargs (name) (4) (continue 8 (primcall define! 4)))> 8 --> #<cps (kargs (box) (5) (continue 9 (closure 13 0)))> 9 --> #<cps (kargs (#f) (6) (continue 10 (primcall box-set! 5 6)))> 10 --> #<cps (kargs () () (continue 11 (unspecified)))> 11 --> #<cps (kargs (unspecified) (7) (continue 12 (values 7)))> 12 --> #<cps (ktail)> 13 --> #<cps (kfun ((name . select-nearest-methods)) 8 103 14)> 14 --> #<cps (kclause ((binder index v-fixed-args v-rest-arg vb-included) () #f () #f) 15)> 15 --> #<cps (kargs (binder index v-fixed-args v-rest-arg vb-included) (9 10 11 12 13) (continue 16 (const dwl4)))> 16 --> #<cps (kargs (name) (14) (continue 17 (const #t)))> 17 --> #<cps (kargs (bound?) (15) (continue 18 (const 0)))> 18 --> #<cps (kargs (scope) (16) (continue 19 (primcall cached-toplevel-box 16 14 15)))> 19 --> #<cps (kargs (box) (17) (continue 20 (primcall box-ref 17)))> 20 --> #<cps (kargs (arg) (18) (continue 21 (const "select-nearest-methods")))> 21 --> #<cps (kargs (arg) (19) (continue 22 (call 18 19)))> 22 --> #<cps (kreceive () vals 23)> 23 --> #<cps (kargs (tmp) (20) (continue 24 (const assert)))> 24 --> #<cps (kargs (name) (21) (continue 25 (primcall cached-toplevel-box 16 21 15)))> 25 --> #<cps (kargs (box) (22) (continue 26 (primcall box-ref 22)))> 26 --> #<cps (kargs (arg) (23) (continue 27 (const is-binder?)))> 27 --> #<cps (kargs (name) (24) (continue 28 (primcall cached-toplevel-box 16 24 15)))> 28 --> #<cps (kargs (box) (25) (continue 29 (primcall box-ref 25)))> 29 --> #<cps (kargs (arg) (26) (continue 30 (call 26 9)))> 30 --> #<cps (kreceive (arg) rest 31)> 31 --> #<cps (kargs (tmp tmp) (27 28) (continue 32 (call 23 27)))> 32 --> #<cps (kreceive () vals 33)> 33 --> #<cps (kargs (tmp) (29) (continue 34 (primcall vector-length 13)))> 34 --> #<cps (kargs (u64) (30) (continue 35 (primcall u64->scm 30)))> 35 --> #<cps (kargs (n) (31) (continue 36 (branch 101 (primcall >= 16 31))))> 36 --> #<cps (kargs () () (continue 37 (primcall scm->u64 16)))> 37 --> #<cps (kargs (unboxed) (32) (continue 38 (primcall vector-ref 13 32)))> 38 --> #<cps (kargs (arg) (33) (continue 67 (branch 39 (values 33))))> 39 --> #<cps (kargs () () (continue 40 (const get-item-at-index)))> 40 --> #<cps (kargs (name) (34) (continue 41 (primcall cached-toplevel-box 16 34 15)))> 41 --> #<cps (kargs (box) (35) (continue 42 (primcall box-ref 35)))> 42 --> #<cps (kargs (arg) (36) (continue 43 (primcall vector-ref 11 32)))> 43 --> #<cps (kargs (arg) (37) (continue 44 (primcall vector-ref 12 32)))> 44 --> #<cps (kargs (arg) (38) (continue 45 (call 36 37 38 10)))> 45 --> #<cps (kreceive (t1) rest 46)> 46 --> #<cps (kargs (tmp tmp) (39 40) (continue 47 (values 16)))> 47 --> #<cps (kargs (j) (41) (continue 48 (branch 67 (primcall >= 41 31))))> 48 --> #<cps (kargs () () (continue 49 (branch 65 (primcall = 16 41))))> 49 --> #<cps (kargs () () (continue 50 (primcall scm->u64 41)))> 50 --> #<cps (kargs (unboxed) (42) (continue 51 (primcall vector-ref 13 42)))> 51 --> #<cps (kargs (arg) (43) (continue 65 (branch 52 (values 43))))> 52 --> #<cps (kargs () () (continue 53 (primcall box-ref 35)))> 53 --> #<cps (kargs (arg) (44) (continue 54 (primcall vector-ref 11 42)))> 54 --> #<cps (kargs (arg) (45) (continue 55 (primcall vector-ref 12 42)))> 55 --> #<cps (kargs (arg) (46) (continue 56 (call 44 45 46 10)))> 56 --> #<cps (kreceive (t2) rest 57)> 57 --> #<cps (kargs (tmp tmp) (47 48) (continue 58 (const is-t-subtype?)))> 58 --> #<cps (kargs (name) (49) (continue 59 (primcall cached-toplevel-box 16 49 15)))> 59 --> #<cps (kargs (box) (50) (continue 60 (primcall box-ref 50)))> 60 --> #<cps (kargs (arg) (51) (continue 61 (call 51 9 39 47)))> 61 --> #<cps (kreceive (arg) rest 62)> 62 --> #<cps (kargs (tmp tmp) (52 53) (continue 65 (branch 63 (values 52))))> 63 --> #<cps (kargs () () (continue 64 (const #f)))> 64 --> #<cps (kargs (arg) (54) (continue 65 (primcall vector-set! 13 42 54)))> 65 --> #<cps (kargs () () (continue 66 (const 1)))> 66 --> #<cps (kargs (arg) (55) (continue 47 (primcall add 41 55)))> 67 --> #<cps (kargs () () (continue 68 (const 1)))> 68 --> #<cps (kargs (arg) (56) (continue 69 (const 1)))> 69 --> #<cps (kargs (i) (57) (continue 70 (branch 101 (primcall >= 57 31))))> 70 --> #<cps (kargs () () (continue 71 (primcall scm->u64 57)))> 71 --> #<cps (kargs (unboxed) (58) (continue 72 (primcall vector-ref 13 58)))> 72 --> #<cps (kargs (arg) (59) (continue 100 (branch 73 (values 59))))> 73 --> #<cps (kargs () () (continue 74 (const get-item-at-index)))> 74 --> #<cps (kargs (name) (60) (continue 75 (primcall cached-toplevel-box 16 60 15)))> 75 --> #<cps (kargs (box) (61) (continue 76 (primcall box-ref 61)))> 76 --> #<cps (kargs (arg) (62) (continue 77 (primcall vector-ref 11 58)))> 77 --> #<cps (kargs (arg) (63) (continue 78 (primcall vector-ref 12 58)))> 78 --> #<cps (kargs (arg) (64) (continue 79 (call 62 63 64 10)))> 79 --> #<cps (kreceive (t1) rest 80)> 80 --> #<cps (kargs (tmp tmp) (65 66) (continue 81 (values 16)))> 81 --> #<cps (kargs (j) (67) (continue 82 (branch 100 (primcall >= 67 31))))> 82 --> #<cps (kargs () () (continue 83 (branch 99 (primcall = 57 67))))> 83 --> #<cps (kargs () () (continue 84 (primcall scm->u64 67)))> 84 --> #<cps (kargs (unboxed) (68) (continue 85 (primcall vector-ref 13 68)))> 85 --> #<cps (kargs (arg) (69) (continue 99 (branch 86 (values 69))))> 86 --> #<cps (kargs () () (continue 87 (primcall box-ref 61)))> 87 --> #<cps (kargs (arg) (70) (continue 88 (primcall vector-ref 11 68)))> 88 --> #<cps (kargs (arg) (71) (continue 89 (primcall vector-ref 12 68)))> 89 --> #<cps (kargs (arg) (72) (continue 90 (call 70 71 72 10)))> 90 --> #<cps (kreceive (t2) rest 91)> 91 --> #<cps (kargs (tmp tmp) (73 74) (continue 92 (const is-t-subtype?)))> 92 --> #<cps (kargs (name) (75) (continue 93 (primcall cached-toplevel-box 16 75 15)))> 93 --> #<cps (kargs (box) (76) (continue 94 (primcall box-ref 76)))> 94 --> #<cps (kargs (arg) (77) (continue 95 (call 77 9 65 73)))> 95 --> #<cps (kreceive (arg) rest 96)> 96 --> #<cps (kargs (tmp tmp) (78 79) (continue 99 (branch 97 (values 78))))> 97 --> #<cps (kargs () () (continue 98 (const #f)))> 98 --> #<cps (kargs (arg) (80) (continue 99 (primcall vector-set! 13 68 80)))> 99 --> #<cps (kargs () () (continue 81 (primcall add 67 56)))> 100 --> #<cps (kargs () () (continue 69 (primcall add 57 56)))> 101 --> #<cps (kargs () () (continue 102 (unspecified)))> 102 --> #<cps (kargs (val) (81) (continue 103 (values 81)))> 103 --> #<cps (ktail)> TYPES: 13 --> #(#<intmap> #<intmap 8+0>) 14 --> #(#<intmap 8+0> #<intmap 8+0-5>) 15 --> #(#<intmap 8+0-5> #<intmap 8+0-6>) 16 --> #(#<intmap 8+0-6> #<intmap 8+0-7>) 17 --> #(#<intmap 8+0-7> #<intmap 8+0-8>) 18 --> #(#<intmap 8+0-8> #<intmap 8+0-9>) 19 --> #(#<intmap 8+0-9> #<intmap 8+0-10>) 20 --> #(#<intmap 8+0-10> #<intmap 8+0-11>) 21 --> #(#<intmap 8+0-11> #<intmap 8+0-11>) 22 --> #(#<intmap 8+0-11> #<intmap 8+0-12>) 23 --> #(#<intmap 8+0-12> #<intmap 8+0-13>) 24 --> #(#<intmap 8+0-13> #<intmap 8+0-14>) 25 --> #(#<intmap 8+0-14> #<intmap 8+0-15>) 26 --> #(#<intmap 8+0-15> #<intmap 8+0-16>) 27 --> #(#<intmap 8+0-16> #<intmap 8+0-17>) 28 --> #(#<intmap 8+0-17> #<intmap 8+0-18>) 29 --> #(#<intmap 8+0-18> #<intmap 8+0-18>) 30 --> #(#<intmap 8+0-18> #<intmap 8+0-20>) 31 --> #(#<intmap 8+0-20> #<intmap 8+0-20>) 32 --> #(#<intmap 8+0-20> #<intmap 8+0-21>) 33 --> #(#<intmap 8+0-21> #<intmap 8+0-22>) 34 --> #(#<intmap 8+0-22> #<intmap 8+0-23>) 35 --> #(#<intmap 8+0-23> #<intmap 8+0-23> #<intmap 8+0-23>) 36 --> #(#<intmap 8+0-23> #<intmap 8+0-24>) 37 --> #(#<intmap 8+0-24> #<intmap 8+0-25>) 38 --> #(#<intmap 8+0-25> #<intmap 8+0-25> #<intmap 8+0-25>) 39 --> #(#<intmap 8+0-25> #<intmap 8+0-26>) 40 --> #(#<intmap 8+0-26> #<intmap 8+0-27>) 41 --> #(#<intmap 8+0-27> #<intmap 8+0-28>) 42 --> #(#<intmap 8+0-28> #<intmap 8+0-29>) 43 --> #(#<intmap 8+0-29> #<intmap 8+0-30>) 44 --> #(#<intmap 8+0-30> #<intmap 8+0-30>) 45 --> #(#<intmap 8+0-30> #<intmap 8+0-32>) 46 --> #(#<intmap 8+0-32> #<intmap 8+0-33>) 47 --> #(#<intmap 8+0-33> #<intmap 8+0-33> #<intmap 8+0-33>) 48 --> #(#<intmap 8+0-33> #<intmap 8+0-33> #<intmap 8+0-33>) 49 --> #(#<intmap 8+0-33> #<intmap 8+0-34>) 50 --> #(#<intmap 8+0-34> #<intmap 8+0-35>) 51 --> #(#<intmap 8+0-35> #<intmap 8+0-35> #<intmap 8+0-35>) 52 --> #(#<intmap 8+0-35> #<intmap 8+0-36>) 53 --> #(#<intmap 8+0-36> #<intmap 8+0-37>) 54 --> #(#<intmap 8+0-37> #<intmap 8+0-38>) 55 --> #(#<intmap 8+0-38> #<intmap 8+0-38>) 56 --> #(#<intmap 8+0-38> #<intmap 8+0-40>) 57 --> #(#<intmap 8+0-40> #<intmap 8+0-41>) 58 --> #(#<intmap 8+0-41> #<intmap 8+0-42>) 59 --> #(#<intmap 8+0-42> #<intmap 8+0-43>) 60 --> #(#<intmap 8+0-43> #<intmap 8+0-43>) 61 --> #(#<intmap 8+0-43> #<intmap 8+0-45>) 62 --> #(#<intmap 8+0-45> #<intmap 8+0-45> #<intmap 8+0-45>) 63 --> #(#<intmap 8+0-45> #<intmap 8+0-46>) 64 --> #(#<intmap 8+0-46> #<intmap 8+0-46>) 65 --> #(#<intmap 8+0-33> #<intmap 8+0-33,47>) 66 --> #(#<intmap 8+0-33,47> #<intmap 8+0-33,47>) 67 --> #(#<intmap 8+0-25> #<intmap 8+0-25,48>) 68 --> #(#<intmap 8+0-25,48> #<intmap 8+0-25,48-49>) 69 --> #(#<intmap 8+0-25,48-49> #<intmap 8+0-25,48-49> #<intmap 8+0-25,48-49>) 70 --> #(#<intmap 8+0-25,48-49> #<intmap 8+0-25,48-50>) 71 --> #(#<intmap 8+0-25,48-50> #<intmap 8+0-25,48-51>) 72 --> #(#<intmap 8+0-25,48-51> #<intmap 8+0-25,48-51> #<intmap 8+0-25,48-51>) 73 --> #(#<intmap 8+0-25,48-51> #<intmap 8+0-25,48-52>) 74 --> #(#<intmap 8+0-25,48-52> #<intmap 8+0-25,48-53>) 75 --> #(#<intmap 8+0-25,48-53> #<intmap 8+0-25,48-54>) 76 --> #(#<intmap 8+0-25,48-54> #<intmap 8+0-25,48-55>) 77 --> #(#<intmap 8+0-25,48-55> #<intmap 8+0-25,48-56>) 78 --> #(#<intmap 8+0-25,48-56> #<intmap 8+0-25,48-56>) 79 --> #(#<intmap 8+0-25,48-56> #<intmap 8+0-25,48-58>) 80 --> #(#<intmap 8+0-25,48-58> #<intmap 8+0-25,48-59>) 81 --> #(#<intmap 8+0-25,48-59> #<intmap 8+0-25,48-59> #<intmap 8+0-25,48-59>) 82 --> #(#<intmap 8+0-25,48-59> #<intmap 8+0-25,48-59> #<intmap 8+0-25,48-59>) 83 --> #(#<intmap 8+0-25,48-59> #<intmap 8+0-25,48-60>) 84 --> #(#<intmap 8+0-25,48-60> #<intmap 8+0-25,48-61>) 85 --> #(#<intmap 8+0-25,48-61> #<intmap 8+0-25,48-61> #<intmap 8+0-25,48-61>) 86 --> #(#<intmap 8+0-25,48-61> #<intmap 8+0-25,48-62>) 87 --> #(#<intmap 8+0-25,48-62> #<intmap 8+0-25,48-63>) 88 --> #(#<intmap 8+0-25,48-63> #<intmap 8+0-25,48-64>) 89 --> #(#<intmap 8+0-25,48-64> #<intmap 8+0-25,48-64>) 90 --> #(#<intmap 8+0-25,48-64> #<intmap 8+0-25,48-66>) 91 --> #(#<intmap 8+0-25,48-66> #<intmap 8+0-25,48-67>) 92 --> #(#<intmap 8+0-25,48-67> #<intmap 8+0-25,48-68>) 93 --> #(#<intmap 8+0-25,48-68> #<intmap 8+0-25,48-69>) 94 --> #(#<intmap 8+0-25,48-69> #<intmap 8+0-25,48-69>) 95 --> #(#<intmap 8+0-25,48-69> #<intmap 8+0-25,48-71>) 96 --> #(#<intmap 8+0-25,48-71> #<intmap 8+0-25,48-71> #<intmap 8+0-25,48-71>) 97 --> #(#<intmap 8+0-25,48-71> #<intmap 8+0-25,48-72>) 98 --> #(#<intmap 8+0-25,48-72> #<intmap 8+0-25,48-72>) 99 --> #(#<intmap 8+0-25,48-59> #<intmap 8+0-25,48-59>) 100 --> #(#<intmap 8+0-25,48-51> #<intmap 8+0-25,48-51>) 101 --> #(#<intmap 8+0-23> #<intmap 8+0-23,73>) 102 --> #(#<intmap 8+0-23,73> #<intmap 8+0-23,73>) 103 --> #(#<intmap 8+0-23,73>) ;;; (preds #<intmap 13+0-90>) ;;; (lp worklist #<intset 13-103> visited #<intset> out #<intmap>) ;;; (lp worklist #<intset 13-102> visited #<intset 103> out #<intmap>) ;;; (lp worklist #<intset 13-101> visited #<intset 102-103> out #<intmap 81+0>) ;;; (lp worklist #<intset 13-100> visited #<intset 101-103> out #<intmap 81+0>) ;;; (lp worklist #<intset 13-99> visited #<intset 100-103> out #<intmap 56+0-1,25>) ;;; (lp worklist #<intset 13-98> visited #<intset 99-103> out #<intmap 56+0-1,11,25>) ;;; (lp worklist #<intset 13-97> visited #<intset 98-103> out #<intmap 13+0,43-44,54-55,67-68>) ;;; (lp worklist #<intset 13-96> visited #<intset 97-103> out #<intmap 13+0,43-44,54-55,67-68>) ;;; (lp worklist #<intset 13-95> visited #<intset 96-103> out #<intmap 13+0,43-44,54-55,65-68>) ;;; (lp worklist #<intset 13-94> visited #<intset 95-103> out #<intmap 13+0,43-44,54-55,65-68>) ;;; (lp worklist #<intset 13-93> visited #<intset 94-103> out #<intmap 9+0,4,47-48,56,58-59,64,68-72>) ;;; (lp worklist #<intset 13-92> visited #<intset 93-103> out #<intmap 9+0,4,47-48,56,58-59,64,67-72>) ;;; (lp worklist #<intset 13-91> visited #<intset 92-103> out #<intmap 9+0,4,6-7,47-48,56,58-59,64,66-72>) ;;; (lp worklist #<intset 13-90> visited #<intset 91-103> out #<intmap 9+0,4,6-7,47-48,56,58-59,64-72>) ;;; (lp worklist #<intset 13-89> visited #<intset 90-103> out #<intmap 9+0,4,6-7,47-48,56,58-59,64-72>) ;;; (lp worklist #<intset 13-88> visited #<intset 89-103> out #<intmap 9+0-1,4,6-7,47-48,56,58-59,61-72>) ;;; (lp worklist #<intset 13-87> visited #<intset 88-103> out #<intmap 9+0-1,3-4,6-7,47-48,56,58-59,61-72>) ;;; (lp worklist #<intset 13-86> visited #<intset 87-103> out #<intmap 9+0-4,6-7,47-48,56,58-59,61-72>) ;;; (lp worklist #<intset 13-85> visited #<intset 86-103> out #<intmap 9+0-4,6-7,47-48,52,56,58-59,61-72>) ;;; (lp worklist #<intset 13-84> visited #<intset 85-103> out #<intmap 9+0-4,6-7,47-48,52,56,58-72>) ;;; (lp worklist #<intset 13-83> visited #<intset 84-103> out #<intmap 9+0-4,6-7,47-48,52,56,58-72>) ;;; (lp worklist #<intset 13-82> visited #<intset 83-103> out #<intmap 9+0-4,6-7,47-48,52,56,58-72>) ;;; (lp worklist #<intset 13-81> visited #<intset 82-103> out #<intmap 9+0-4,6-7,47-48,52,56,58-72>) ;;; (lp worklist #<intset 13-80,99> visited #<intset 81-103> out #<intmap 9+0-4,6-7,22,47-48,52,56,58-72>) ;;; (lp worklist #<intset 13-80,82,85,96,98> visited #<intset 81-103> out #<intmap 9+0-4,6-7,22,47-48,52,56,58-72>) ;;; (lp worklist #<intset 13-80,82,85,96> visited #<intset 81-103> out #<intmap 9+0-4,6-7,22,47-48,52,56,58-72>) ;;; (lp worklist #<intset 13-80,82,85> visited #<intset 81-103> out #<intmap 9+0-4,6-7,22,47-48,52,56,58-72>) ;;; (lp worklist #<intset 13-80,82> visited #<intset 81-103> out #<intmap 9+0-4,6-7,22,47-48,52,56,58-72>) ;;; (lp worklist #<intset 13-81> visited #<intset 81-103> out #<intmap 9+0-4,6-7,22,47-48,52,56,58-72>) ;;; (lp worklist #<intset 13-80,99> visited #<intset 81-103> out #<intmap 9+0-4,6-7,22,47-48,52,56,58-72>) ;;; (lp worklist #<intset 13-80,82,85,96,98> visited #<intset 81-103> out #<intmap 9+0-4,6-7,22,47-48,52,56,58-72>) ;;; (lp worklist #<intset 13-80,82,85,96> visited #<intset 81-103> out #<intmap 9+0-4,6-7,22,47-48,52,56,58-72>) ;;; (lp worklist #<intset 13-80,82,85> visited #<intset 81-103> out #<intmap 9+0-4,6-7,22,47-48,52,56,58-72>) ;;; (lp worklist #<intset 13-80,82> visited #<intset 81-103> out #<intmap 9+0-4,6-7,22,47-48,52,56,58-72>) ;;; (lp worklist #<intset 13-81> visited #<intset 81-103> out #<intmap 9+0-4,6-7,22,47-48,52,56,58-72>) ;;; (lp worklist #<intset 13-80,99> visited #<intset 81-103> out #<intmap 9+0-4,6-7,22,47-48,52,56,58-72>) ;;; (lp worklist #<intset 13-80,82,85,96,98> visited #<intset 81-103> out #<intmap 9+0-4,6-7,22,47-48,52,56,58-72>) ;;; (lp worklist #<intset 13-80,82,85,96> visited #<intset 81-103> out #<intmap 9+0-4,6-7,22,47-48,52,56,58-72>) ;;; (lp worklist #<intset 13-80,82,85> visited #<intset 81-103> out #<intmap 9+0-4,6-7,22,47-48,52,56,58-72>) ;;; (lp worklist #<intset 13-80,82> visited #<intset 81-103> out #<intmap 9+0-4,6-7,22,47-48,52,56,58-72>) ;;; (lp worklist #<intset 13-81> visited #<intset 81-103> out #<intmap 9+0-4,6-7,22,47-48,52,56,58-72>) ;;; [the 6 loop states above repeat forever] --8<---------------cut here---------------end--------------->8--- To be continued ... Mark