X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/3e21ae3fa660b188bc20caec8c96c1f678405c25..caa6f4b99a79f95d15a6cc1e5b8dd27ea48b4d03:/src/final.lisp diff --git a/src/final.lisp b/src/final.lisp index 071ebc9..1b87c26 100644 --- a/src/final.lisp +++ b/src/final.lisp @@ -50,6 +50,29 @@ :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 "")) + (tokscan (make-instance 'sod-token-scanner + :char-scanner charscan + :filename ""))) + (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.