mytrace.lsp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. (de newname (n)
  2. (intern (compress (cons '~ (explode n)))))
  3. (de myargcount (ff)
  4. (if (member 'psl lispsystem*)
  5. (code-number-of-arguments (getfcodepointer ff))
  6. (length (caddr (getd ff)))))
  7. (de mytrace (name)
  8. (prog (g d a r nargs l)
  9. (cond
  10. ((null (getd name)) (return (list '***** name 'not 'defined)))
  11. ((flagp name 'traced) (return (list '***** name 'traced 'already)))
  12. ((flagp name 'lose)
  13. (remflag (list name) 'lose)
  14. (setq l t)))
  15. (setq nargs (myargcount name))
  16. (setq g (newname name))
  17. (copyd g name)
  18. (while (not (zerop nargs))
  19. (progn
  20. (setq nargs (sub1 nargs))
  21. (setq a (cons (gensym) a))))
  22. (setq r (gensym))
  23. (putd name 'expr (list 'lambda a
  24. (list 'prog (list r)
  25. (list 'myprintargs (list 'quote name) (cons 'list a))
  26. (list 'setq r (cons g a))
  27. (list 'myprintresult (list 'quote name) r)
  28. (list 'return r))))
  29. (cond
  30. (l (flag (list name) 'lose)))
  31. (flag (list name) 'traced)
  32. (return name)))
  33. (de myprintwidth (u)
  34. (length (explode u)))
  35. (de myprin (u)
  36. (cond
  37. ((atom u)
  38. (when (greaterp (plus (posn) (myprintwidth u)) 60) (terpri))
  39. (prin1 u))
  40. (t (prog (sep)
  41. (setq sep '!()
  42. (while (not (atom u)) (progn
  43. (when (greaterp (posn) 60) (terpri))
  44. (prin2 sep)
  45. (setq sep '! )
  46. (myprin (car u))
  47. (setq u (cdr u))))
  48. (cond
  49. (u
  50. (when (greaterp (posn) 58) (terpri))
  51. (prin2 " . ")
  52. (myprin u)))
  53. (when (greaterp (posn) 60) (terpri))
  54. (prin2 '!))))))
  55. (de myprintargs (name args)
  56. (prog (i)
  57. (prin2 "Calling ") (print name)
  58. (setq i 0)
  59. (while args
  60. (progn
  61. (prin2 "arg") (prin2 (setq i (add1 i))) (prin2 ": ")
  62. (myprin (car args))
  63. (terpri)
  64. (setq args (cdr args))))))
  65. (de myprintresult (name value)
  66. (prin1 name)
  67. (princ " = ")
  68. (myprin value)
  69. (terpri))
  70. % end of mytrace.lsp