[Openmcl-devel] slot-value != struct-ref? (sometimes)
alex crain
alexcrain at mail.widgetworks.com
Mon May 30 15:18:26 PDT 2005
Hi All -
The good news is that most of my hemlock package seems to work as
advertised with bleeding_edge+G4+Tiger.
I do have a couple of issues, though, and I'm not sure who owns the
cocoa bridge right now.
1) structure returns don't work - doing anything in the form (define-
obj-method foo (((:struct :<NSR>ect bar) :argname argval) class-
name) ....)
dies trying to load #<FOREIGN-RECORD-TYPE (:STRUCT :<NSR>ANGE)
#x6D52626> from the database. Interestingly, (:struct :_<NSR>ect bar)
sucessfully loads, but things still break later on.
2) I've been working on POSTPROCESS-OBJC-METHOD-INFO to make the
checking a little smarter - currently
the code sets the :ambiguous flag for a variety of cases where method
signatures arn't necessarily supposed to
match.
So - I want to add a check that ensures that class methods arn't
compared against object methods. I've got some
debugging code that looks like this:
(dolist (m methods) ; methods is a list of
objc-method-info structures
(format t "M=~A~%" m)
(format t "(objc-message-info-flags m) = ~S~%" (objc-
message-info-flags m))
(format t "(slot-value m 'flags) = ~S~%" (slot-value m
'flags))
(break)
)
and the output looks like this:
M=#<OBJC-METHOD-INFO +[TypeoutWindowController show] #x6B8AD96>
(objc-message-info-flags m) = NIL
(slot-value m 'flags) = (:CLASS T)
> Break in process listener(1):
> While executing: CCL::POSTPROCESS-OBJC-MESSAGE-INFO
> Type :GO to continue, :POP to abort.
> If continued: Return from BREAK.
Type :? for other options.
1 >
huh? If I examine the flags from the break loop, everything works as
expected ....
1 > (:v 0 0)
#S(OBJC-MESSAGE-INFO :MESSAGE-NAME "show" :METHODS (#<OBJC-METHOD-
INFO -[InspectorWindowController show] #x6CAE73E> #<OBJC-METHOD-INFO +
[TypeoutWindowController show] #x6B8AD96> #<OBJC-METHOD-INFO -
[TypeoutWindowController show] #x6B8677E> #<OBJC-METHOD-INFO +
[PreferencesPanel show] #x69AA596> #<OBJC-METHOD-INFO -
[PreferencesPanel show] #x69A8D9E>) :REQ-ARGS 0 :FLAGS (:AMBIGUOUS T))
1 > (objc-message-info-methods *)
(#<OBJC-METHOD-INFO -[InspectorWindowController show] #x6CAE73E>
#<OBJC-METHOD-INFO +[TypeoutWindowController show] #x6B8AD96> #<OBJC-
METHOD-INFO -[TypeoutWindowController show] #x6B8677E> #<OBJC-METHOD-
INFO +[PreferencesPanel show] #x69AA596> #<OBJC-METHOD-INFO -
[PreferencesPanel show] #x69A8D9E>)
1 > (elt * 1)
#<OBJC-METHOD-INFO +[TypeoutWindowController show] #x6B8AD96>
1 > (objc-method-info-flags *)
(:CLASS T)
So I'm thinking compiler bug, which would break the code in all kinds
of interesting ways since structure references are used all over the
place in the bridge.
:alex
More information about the Openmcl-devel
mailing list