[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 (*)).

    2.4.5 Double-Quote

    Syntax: "<<text>>"

    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.

__Pascal Bourguignon__
"Le mercure monte ?  C'est le moment d'acheter !"

More information about the ecl-devel mailing list