- in p/document, check types of user-supplied arguments for better error

messages
- documents parsed from octet vectors don't have a base sysid, so don't try
  to merge it into  sysids referenced in such documents
This commit is contained in:
dlichteblau
2005-04-06 19:23:53 +00:00
parent 99546f169e
commit 013867cf4e

View File

@ -828,14 +828,14 @@
(defstruct (internal-entdef (defstruct (internal-entdef
(:include entdef) (:include entdef)
(:constructor make-internal-entdef (value)) (:constructor make-internal-entdef (value))
(:conc-name #:ENTDEF-)) (:conc-name #:entdef-))
(value (error "missing argument") :type rod) (value (error "missing argument") :type rod)
(expansion nil)) (expansion nil))
(defstruct (external-entdef (defstruct (external-entdef
(:include entdef) (:include entdef)
(:constructor make-external-entdef (extid ndata)) (:constructor make-external-entdef (extid ndata))
(:conc-name #:ENTDEF-)) (:conc-name #:entdef-))
(extid (error "missing argument") :type extid) (extid (error "missing argument") :type extid)
(ndata nil :type (or rod null))) (ndata nil :type (or rod null)))
@ -875,8 +875,10 @@
(defun absolute-uri (sysid source-stream) (defun absolute-uri (sysid source-stream)
(let ((base-sysid (zstream-base-sysid source-stream))) (let ((base-sysid (zstream-base-sysid source-stream)))
(assert (not (null base-sysid))) ;; XXX is the IF correct?
(puri:merge-uris sysid base-sysid))) (if base-sysid
(puri:merge-uris sysid base-sysid)
sysid)))
(defstruct (extid (:constructor make-extid (public system))) (defstruct (extid (:constructor make-extid (public system)))
(public nil :type (or rod null)) (public nil :type (or rod null))
@ -2533,10 +2535,16 @@
(car (nth-value 1 (peek-token input))) (car (nth-value 1 (peek-token input)))
(cdr (nth-value 1 (peek-token input)))))) (cdr (nth-value 1 (peek-token input))))))
(consume-token input))) (consume-token input)))
(defun p/document (defun p/document
(input handler (input handler
&key validate dtd root entity-resolver disallow-internal-subset) &key validate dtd root entity-resolver disallow-internal-subset)
;; check types of user-supplied arguments for better error messages:
(check-type validate boolean)
(check-type dtd (or null extid))
(check-type root (or null rod))
(check-type entity-resolver (or null function symbol))
(check-type disallow-internal-subset boolean)
(let ((*ctx* (let ((*ctx*
(make-context :handler handler (make-context :handler handler
:entity-resolver entity-resolver :entity-resolver entity-resolver