-(defun test-module (path reason)
- "Reset the translator's state, read a module from PATH and output it with
- REASON, returning the result as a string."
- (setf *module-map* (make-hash-table :test #'equal))
- (with-open-file (out *debugout-pathname*
- :direction :output
- :if-exists :supersede
- :if-does-not-exist :create)
- (output-module (read-module path) reason out)))
+(defun test-module (path &key reason clear backtrace)
+ "Read a module from PATH, to exercise the machinery.
+
+ If CLEAR is non-nil, then reset the translator's state before proceeding.
+
+ If REASON is non-nil, then output the module to `*debugout-pathname*' with
+ that REASON.
+
+ Return a two-element list (NERROR NWARNING) of the number of errors and
+ warnings encountered while processing the module."
+ (when clear (clear-the-decks))
+ (multiple-value-bind (module nerror nwarning)
+ (if backtrace (read-module path)
+ (count-and-report-errors () (read-module path)))
+ (when (and module reason)
+ (with-open-file (out *debugout-pathname*
+ :direction :output
+ :if-exists :supersede
+ :if-does-not-exist :create)
+ (output-module module reason out)))
+ (list nerror nwarning)))