Stephen Compall wrote:
> Arthur Smyles wrote:
>> I was following the tutorial about defining new types ( 
>> http://common-lisp.net/project/cffi/manual/html_node/Tutorial_002dTypes.html#Tutorial_002dTypes).
>>  When I tried to redefine the type translator for an enum type 
>> (translate-from-foreign), the type was not being changed. I took a look at 
>> the source code and discovered that translate-type-from-foreign is 
>> specialized on enum types. However, unlike the unspecialized method, this 
>> method doesn't call translate-from-foreign. Either the manual is out of 
>> date, or there is a bug here.
>
> Translation is done only for foreign-typedefs, which are created with
> define-foreign-type.
>
> I don't think more general type-translation extension can be done well
> without aligning the framework more with CLOS.
>

I've updated the translate-type-{to/from}-foreign methods to call the 
translate-{from/to}-foreign methods if they are specialized. Otherwise it does 
what it did before. This fixes the problem that I was having at least.

Arthur

(defmethod translate-type-from-foreign (value (type foreign-enum))
  (if (find-method #'translate-from-foreign nil `(t (eql ,(name type))) nil)
    (translate-from-foreign value (name type))
    (%foreign-enum-keyword type value)))

(defmethod translate-type-to-foreign (value (type foreign-enum))
  (if (find-method #'translate-to-foreign nil `(t (eql ,(name type))) nil)
    (translate-to-foreign value (name type))
    (if (keywordp value)
      (%foreign-enum-value type value)
      value)))
_______________________________________________
cffi-devel mailing list
cffi-devel@common-lisp.net
http://common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel

Reply via email to