From: Alejandro R SedeƱo Date: Wed, 20 Feb 2013 17:54:53 +0000 (-0500) Subject: parser.lisp: tweak method parsing X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=commitdiff_plain;ds=sidebyside;h=6ac9510;hp=eedd521f2e11242910c37c526d3b2de0bac8fe00;p=cl-protobufs.git parser.lisp: tweak method parsing Don't assume that returning no options meant there was no body in the method declaration. An empty body may have been there instead. Distinguish that scenario with a second return value from PARSE-PROTO-METHOD-OPTIONS and use that value in PARSE-PROTO-METHOD determine whether or not to look for a semicolon. --- diff --git a/parser.lisp b/parser.lisp index 30924c5..d80387f 100644 --- a/parser.lisp +++ b/parser.lisp @@ -771,8 +771,9 @@ (out (prog2 (expect-char stream #\( () "service") (parse-token stream) (expect-char stream #\) () "service"))) - (opts (let ((opts (parse-proto-method-options stream))) - (when (or (null opts) (eql (peek-char nil stream nil) #\;)) + (opts (multiple-value-bind (opts bodyp) + (parse-proto-method-options stream) + (when (or (not bodyp) (eql (peek-char nil stream nil) #\;)) (expect-char stream #\; () "service")) (maybe-skip-comments stream) opts)) @@ -836,7 +837,8 @@ (defun parse-proto-method-options (stream) "Parse any options in a Protobufs method from 'stream'. - Returns a list of 'protobuf-option' objects." + Returns a list of 'protobuf-option' objects. + If a body was parsed, returns a second value T." (when (eql (peek-char nil stream nil) #\{) (expect-char stream #\{ () "service") (maybe-skip-comments stream) @@ -849,4 +851,4 @@ (collect-option (parse-proto-option stream nil))) (expect-char stream #\} '(#\;) "service") (maybe-skip-comments stream) - options))) + (values options t)))