chiark / gitweb /
src/method-impl.lisp: Initialize `suppliedp' flags properly.
[sod] / src / final.lisp
index 071ebc9b056bd15afecbb03259c66310c57f095c..1b87c26cc2b4090dc05cc7fa98e86913b4bd6fa5 100644 (file)
@@ -50,6 +50,29 @@ (defun test-module (path reason)
                   :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.