:if-does-not-exist :create)
(output-module (read-module path) reason out)))
+(export 'test-parse-c-type)
+(defun test-parse-c-type (string)
+ "Parse STRING as a C type, with optional kernel, and show the results."
+ (with-input-from-string (in string)
+ (let* ((*module-type-map* (make-hash-table))
+ (charscan (make-instance 'charbuf-scanner
+ :stream in
+ :filename "<string>"))
+ (tokscan (make-instance 'sod-token-scanner
+ :char-scanner charscan
+ :filename "<string>")))
+ (with-parser-context (token-scanner-context :scanner tokscan)
+ (multiple-value-bind (value winp consumedp)
+ (parse (seq ((decls (parse-c-type tokscan))
+ (type (parse-declarator tokscan decls :abstractp t))
+ :eof)
+ type))
+ (declare (ignore consumedp))
+ (if winp
+ (values t (car value) (cdr value)
+ (princ-to-string (car value)))
+ (values nil value)))))))
+
(export 'test-parser)
(defmacro test-parser ((scanner &key) parser input)
"Convenient macro for testing parsers at the REPL.