[Ecls-list] Automatic string conversion - wanted or needed?
Pascal J. Bourguignon
pjb at informatimago.com
Sat Apr 26 20:38:55 UTC 2014
"Philipp Marek" <philipp at marek.priv.at> writes:
> Hi everybody,
> on my way through the quicklisp systems I encountered a failure in closure-common, which
> is needed by eg. dbus (through cxml).
> In cxml/xml/xml-parse.lisp there's a definition
> (defstruct (internal-entdef
> (value (error "missing argument") :type rod)
> and closure-common/utf8.lisp has
> (deftype rune () 'character)
> (deftype rod () '(vector rune))
> In ECL the double_quote_reader() in src/c/read.d included a
> conversion, so that
> (TYPE-OF "Σ") has CHARACTERS, but
> (TYPE-OF "a") "only" BASE-CHARs.
> But with that conversion the :TYPE ROD in INTERNAL-ENTDEF
> isn't satiesfied anymore.
> Now, my question - is it okay to remove the type conversion as
> in the attached patch? Or should it be kept that way, because
> of some CL requirements?
> (I checked SBCL, ABCL, and CLISP - all of these return
> CHARACTERS for _both_ of the above TYPE-OF forms.)
CLHS is clear about it, the standard reader macro #\" must read a
SIMPLE-STRING, which is a (simple-array character (*)).
The double-quote is used to begin and end a _string_.
The accumulated characters up to but not including the matching
double-quote are made into a _simple_string_ and returned. It is
implementation-dependent which attributes of the accumulated
_characters_ are removed in this process.
string n. a specialized vector that is of type string, and whose
elements are of type character or a subtype of type character.
… When used as a type specifier for object creation, simple-string
means (simple-array character (size)).
So (simple-array character (size)) should be the type of the returned
Therefore this is a conformity error, and your patch should be applied.
"Le mercure monte ? C'est le moment d'acheter !"
More information about the ecl-devel