edi@agharta.de wrote:
Hmm, SBCL's error message is not very helpful, I'm afraid. My /guess/ is that it looks at the macro-expansion of REGISTER-GROUPS-BIND and infers that NAME or INDEX-STRING could in theory be NIL and thus aren't valid arguments for STRING= or PARSE-INTEGER. However, in this particular case it is perfectly clear that his won't happen - the body of the macro will only be executed if there's a match; and if there's a match, then all registers will match as well.
I'd propose that you ask the SBCL experts if my guess is right and if so how one can convince the compiler to be a bit less overzealous.
That guess is right. A couple of ways to decrease the zeal:
* Just muffle the warning by adding the following declaration at the start of the function:
#+sbcl (declare (sb-ext:muffle-conditions warning))
* Ensure that the compiler also knows that it really can't happen by replacing:
(when (string= name parameter-name) (parse-integer index-string))
With:
(when (and (string= name parameter-name) index-string) (parse-integer index-string))