Specifically I'm getting "The value NIL is not of type CXML::STREAM-NAME" in the lambda function passed to find-if. For reference:
(defun zstream-push (new-xstream zstream) (cond ((find-if (lambda (x) (and (xstream-p x) (eql (stream-name-entity-name (xstream-name x)) (stream-name-entity-name (xstream-name new-xstream))) (eql (stream-name-entity-kind (xstream-name x)) (stream-name-entity-kind (xstream-name new-xstream))))) (zstream-input-stack zstream)) (wf-error zstream "Infinite recursion."))) (push new-xstream (zstream-input-stack zstream)) zstream)
FWIW, I'm parsing an XML string that looks like this:
<!DOCTYPE request [ <!ENTITY amp "&#38;"> ]> <document>&</document>
The problem is that the 'x' argument -- which refers to the xstream for the entire document -- has no name. It's NIL. It was generated via the call chain PARSE-ROD > STRING->XSTREAM > MAKE-ROD-XSTREAM. string->xstream doesn't supply a name to make-rod-xstream.
So, should it? Or should the lambda function be testing for a non-NIL name? I'm guessing the latter but I'd rather not guess.
Donavon Keithley
Quoting Donavon Keithley (keithley@easystreet.com):
The problem is that the 'x' argument -- which refers to the xstream for the entire document -- has no name. It's NIL. It was generated via the call chain PARSE-ROD > STRING->XSTREAM > MAKE-ROD-XSTREAM. string->xstream doesn't supply a name to make-rod-xstream.
Thank you, I have checked in a fix.
So, should it? Or should the lambda function be testing for a non-NIL name? I'm guessing the latter but I'd rather not guess.
For the purposes of the XML parser, every xstream should have a stream-name structure, I think.
d.