chiark / gitweb /
src/module-parse.lisp: Abstract out `parse-maybe-dotted-name'.
authorMark Wooding <mdw@distorted.org.uk>
Sun, 26 Mar 2017 14:16:18 +0000 (15:16 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Fri, 8 Jun 2018 18:58:28 +0000 (19:58 +0100)
src/module-parse.lisp

index 3f6c22460f520181d3e9f7dd7f75191729d576c7..fb60b4947b3b12d331372ded8fab51659da60277 100644 (file)
@@ -277,23 +277,23 @@ (defun parse-class-body (scanner pset name supers)
                                  pset scanner))
           (nick (sod-class-nickname class)))
 
-      (labels ((parse-maybe-dotted-declarator (base-type)
-                ;; Parse a declarator or dotted-declarator, i.e., one whose
-                ;; centre is
-                ;;
+      (labels ((parse-maybe-dotted-name ()
                 ;; maybe-dotted-name ::= [id `.'] id
                 ;;
                 ;; A plain identifier is returned as a string, as usual; a
                 ;; dotted identifier is returned as a cons cell of the two
                 ;; names.
-                (parse-declarator
-                 scanner base-type
-                 :keywordp t
-                 :kernel (parser ()
-                           (seq ((name-a :id)
-                                 (name-b (? (seq (#\. (id :id)) id))))
-                             (if name-b (cons name-a name-b)
-                                 name-a)))))
+                (parse (seq ((name-a :id)
+                             (name-b (? (seq (#\. (id :id)) id))))
+                         (if name-b (cons name-a name-b)
+                             name-a))))
+
+              (parse-maybe-dotted-declarator (base-type)
+                ;; Parse a declarator or dotted-declarator, i.e., one whose
+                ;; centre is maybe-dotted-name above.
+                (parse-declarator scanner base-type
+                                  :keywordp t
+                                  :kernel #'parse-maybe-dotted-name))
 
               (parse-message-item (sub-pset type name)
                 ;; message-item ::=