[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