X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/9ec578d9fe450b7e7f9030dc9d930185593aa991..7a35400d896e6697902c2880afeba66965bd0f38:/src/module-parse.lisp diff --git a/src/module-parse.lisp b/src/module-parse.lisp index df4ea27..9cad3d4 100644 --- a/src/module-parse.lisp +++ b/src/module-parse.lisp @@ -197,9 +197,16 @@ (parse-message-item (sub-pset type name) ;; message-item ::= ;; declspec+ declarator -!- (method-body | `;') - (make-sod-message class name type sub-pset scanner) - (parse (or #\; (parse-method-item sub-pset - type nick name)))) + ;; + ;; Don't allow a method-body here if the message takes a + ;; varargs list, because we don't have a name for the + ;; `va_list' parameter. + (let ((message (make-sod-message class name type + sub-pset scanner))) + (if (varargs-message-p message) + (parse #\;) + (parse (or #\; (parse-method-item sub-pset + type nick name)))))) (parse-method-item (sub-pset type sub-nick name) ;; method-item ::= @@ -335,13 +342,13 @@ ;; (which might be dotted). So we parse that here and ;; dispatch based on what we find. (parse (or (plug class-item scanner class sub-pset) - ;(peek + (peek (seq ((ds (parse-c-type scanner)) (dc (parse-maybe-dotted-declarator ds)) (nil (class-item-dispatch sub-pset ds (car dc) - (cdr dc)))));) + (cdr dc)))))) (and "class" (parse-initializer-item sub-pset