top.scm 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. ; Part of Scheme 48 1.9. See file COPYING for notices and license.
  2. ; Authors: Richard Kelsey, Mike Sperber
  3. ; Debugging aids
  4. (define *bad-ids* '())
  5. (define *all-procs?* #f)
  6. (define *checkpoints* '())
  7. (define all-checkpoints
  8. '(node-made
  9. simplify1
  10. protocols
  11. simplify2
  12. node->vector
  13. pre-simplify-proc
  14. envs-added
  15. ))
  16. (define (debug-breakpoint loc id data)
  17. (if (and (memq? loc *checkpoints*)
  18. (or (not id)
  19. *all-procs?*
  20. (memq? id *bad-ids*)))
  21. (breakpoint "~S at ~S is ~S" id loc data)))
  22. (define (add-checks . locs)
  23. (receive (okay wrong)
  24. (partition-list (lambda (l) (memq? l all-checkpoints))
  25. locs)
  26. (set! *checkpoints* (union okay *checkpoints*))
  27. (for-each (lambda (l)
  28. (format #t '"~&~S is not a checkpoint~%" l))
  29. wrong)
  30. *checkpoints*))
  31. (define (clear-checks . locs)
  32. (set! *checkpoints*
  33. (if (null? locs)
  34. '()
  35. (set-difference *checkpoints* locs))))
  36. (define (add-procs . locs)
  37. (if (null? locs)
  38. (set! *all-procs?* #t)
  39. (set! *bad-ids* (union locs *bad-ids*))))
  40. (define (clear-procs . locs)
  41. (cond ((null? locs)
  42. (set! *all-procs?* #f)
  43. (set! *bad-ids* '()))
  44. (else
  45. (set! *bad-ids*
  46. (if (null? locs)
  47. '()
  48. (set-difference *bad-ids* locs))))))
  49. (define add-check add-checks)
  50. (define clear-check clear-checks)
  51. (define add-proc add-procs)
  52. (define clear-proc clear-procs)
  53. ;------------------------------------------------------------------------------
  54. (define *remove-cells?* #f)
  55. (define *flow-values?* #f)
  56. (define (simplify-all node id)
  57. (debug-breakpoint 'node-made id node)
  58. (simplify-node node)
  59. (debug-breakpoint 'simplify1 id node)
  60. (determine-protocols)
  61. (debug-breakpoint 'protocols id node)
  62. (if (integrate-jump-procs! node)
  63. (simplify-node node))
  64. (cond (*remove-cells?*
  65. (remove-cells-from-tree node (make-lambda-list))
  66. (simplify-node node)))
  67. (cond (*flow-values?*
  68. (flow-values node (make-lambda-list))
  69. (simplify-node node)))
  70. (debug-breakpoint 'simplify2 id node)
  71. (values))
  72. (define (determine-protocols)
  73. (walk-lambdas (lambda (l)
  74. (cond ((and (eq? 'proc (lambda-type l))
  75. (node? (node-parent l))
  76. (find-calls l))
  77. => (lambda (calls)
  78. (determine-lambda-protocol l calls)))))))