[Openmcl-devel] New snapshots available

Phil pbpublist at comcast.net
Thu Feb 15 21:11:05 PST 2007


On Feb 15, 2007, at 9:02 PM, Gary Byers wrote:

>
>
> On Wed, 14 Feb 2007, Phil wrote:
>
>>
>> On Feb 14, 2007, at 7:18 PM, Gary Byers wrote:
>>
>>> On Wed, 14 Feb 2007, Phil wrote:
>>>> Gary,
>>>> Great to see progress on supporting Leopard/Obj-C 2.0.  I did  
>>>> have a couple of questions re: the release notes...
>>>> On Feb 14, 2007, at 5:32 AM, Gary Byers wrote:
>>> The bug that I'm aware of has to do with the fact that SEND  
>>> considers
>>> the set of method type signatures in effect when it's used to be  
>>> closed,
>>> so if "foo" is a message declared to return :int at some point in  
>>> time,
>>> a (SEND x 'foo) will compile to something that expects an integer
>>> to be returned and doesn't expect any sort of ambiguity.
>>> If new interfaces are loaded (after that first SEND was compiled)  
>>> and
>>> some disjoint class defines a method on FOO that returns :FLOAT,  
>>> then
>>> any subsequent SEND -should- consider the message to have an  
>>> ambiguous
>>> type signature and should expand into code which does runtime  
>>> typechecking
>>> of the receiver and does a CASE or COND or something to select the
>>> right implementation.
>>> The original SEND - compiled in a simpler world - won't get  
>>> recompiled.
>>> Is this what you're referring to ?  Or are there other cases which
>>> lose ?
>>
>> That would be the issue as I've generated CDB's for many  
>> additional frameworks which work flawlessly for all methods which  
>> don't result in the ambiguous return type scenario.  All releases  
>> I've tried including OpenMCL 1.1-pre-061024, do not appear to be  
>> successful in performing the runtime check so, effectively these  
>> ambiguous methods become uncallable.
>
> Hmm.  Could you give me an example of something that fails once
> ambiguity is introduced ?
>
> I did run into (and hopefully fixed) one case where the type dispatch
> wasn't the correct way of resolving ambiguity.  Many methods are
> defined on some "Protocol" rather than on a class or metaclass, and
> classes that conform to a Protocol inherit that Protocol's methods.
> It's possible for a given message to have methods that're defined
> on both classes and on Protocols, and for those methods to have
> different type signatures.  Any dispatching code has to figure out
> whether a Protocol or class method is applicable in that case (at
> most one method can be applicable.)
>

(ccl::slet ((frame-size (ccl::send (CCL::MAKE-OBJC-INSTANCE
					     'NS-attributed-string
					     :INIT-WITH-STRING
					     "testing") "size"))))

results in:

NonSTRET SEND in (CCL::SEND (CCL::MAKE-OBJC-INSTANCE
                               'NS-ATTRIBUTED-STRING
                               :INIT-WITH-STRING
                               "testing")
                             "size")
    [Condition of type SIMPLE-ERROR]

Restarts:
   0: [ABORT-REQUEST] Abort handling SLIME request.
   1: [ABORT-BREAK] Reset this process
   2: [ABORT] Kill this process

Backtrace:
   0: (CCL::SLETIFY '(CCL::SEND (CCL::MAKE-OBJC-INSTANCE 'NS- 
ATTRIBUTED-STRING :INIT-WITH-STRING "testing") "size") 'T)
   1: (CCL::SLET '(CCL::SLET ((FRAME-SIZE #))) 'NIL)
   2: (FUNCALL #<Compiled-function CCL::SLET Macroexpander #x88C3A9E>)
   3: (MACROEXPAND-1 '(CCL::SLET ((FRAME-SIZE #))) #<PROCESS new-repl- 
thread(223) [Active] #x99835AE>)
   4: (CCL::CHEAP-EVAL-IN-ENVIRONMENT '(#<RESTART ABORT-BREAK  
#x2CC2DDE> #<RESTART ABORT #x2CC2E06>) #<PROCESS new-repl-thread(223)  
[Active] #x99835AE>)
   5: (SWANK::EVAL-REGION "(ccl::slet ((frame-size (ccl::send  
(CCL::MAKE-OBJC-INSTANCE
					     'NS-attributed-string
					     :INIT-WITH-STRING
					     \"testing\") \"size\"))))
" 'T)
   6: (#<Anonymous Function #x95B3626> "(ccl::slet ((frame-size  
(ccl::send (CCL::MAKE-OBJC-INSTANCE
					     'NS-attributed-string
					     :INIT-WITH-STRING
					     \"testing\") \"size\"))))
")


So then I try (which I wouldn't expect to work):

(ccl::send (CCL::MAKE-OBJC-INSTANCE
		     'NS-attributed-string
		     :INIT-WITH-STRING
		     "testing") "size")

results in:

The message "size" must be sent using SEND/STRET
    [Condition of type SIMPLE-ERROR]

Restarts:
   0: [ABORT-REQUEST] Abort handling SLIME request.
   1: [ABORT-BREAK] Reset this process
   2: [ABORT] Kill this process

Backtrace:
   0: (CCL::BUILD-INTERNAL-CALL-FROM-METHOD-INFO #<OBJC-METHOD-INFO - 
[NSAttributedString size] #x98DC686> 'NIL 'NIL '#:G11818 "size" 'NIL  
'NIL)
   1: (CCL::BUILD-SEND-CASE '((#<OBJC-METHOD-INFO - 
[DOMHTMLSelectElement #1=size] #x98DC7AE>) (#<OBJC-METHOD-INFO - 
[NSAttributedString #1#] #x98DC686> #<OBJC-METHOD-INFO -[NSImage #1#]  
#x98DC636> #<OBJC-METHOD-INFO -[NSImageRep #1#] #x98DC5D6>) (#<OBJC- 
METHOD-INFO -[DOMHTMLHRElement #1#] #x98DCA0E> #<OBJC-METHOD-INFO - 
[DOMHTMLFontElement #1#] #x98DC976> #<OBJC-METHOD-INFO - 
[DOMHTMLBaseFontElement #1#] #x98DC8CE> #<OBJC-METHOD-INFO - 
[DOMHTMLInputElement #1#] #x98DC836> #<OBJC-METHOD-INFO - 
[DOMCSSStyleDeclaration #1#] #x98DC706>)) 'NIL 'NIL '#:G11818 "size"  
'NIL 'NIL)
   2: (CCL::BUILD-AMBIGUOUS-SEND-FORM #S(CCL::OBJC-MESSAGE- 
INFO :MESSAGE-NAME #1="size" :METHODS (#5=#<OBJC-METHOD-INFO - 
[NSImageRep #1#] #x98DC5D6> #4=#<OBJC-METHOD-INFO -[NSImage #1#]  
#x98DC636> #3=#<OBJC-METHOD-INFO -[NSAttributedString #1#] #x98DC686>  
#10=#<OBJC-METHOD-INFO -[DOMCSSStyleDeclaration #1#] #x98DC706>  
#2=#<OBJC-METHOD-INFO -[DOMHTMLSelectElement #1#] #x98DC7AE>  
#9=#<OBJC-METHOD-INFO -[DOMHTMLInputElement #1#] #x98DC836> #8=#<OBJC- 
METHOD-INFO -[DOMHTMLBaseFontElement #1#] #x98DC8CE> #7=#<OBJC-METHOD- 
INFO -[DOMHTMLFontElement #1#] #x98DC976> #6=#<OBJC-METHOD-INFO - 
[DOMHTMLHRElement #1#] #x98DCA0E>) :AMBIGUOUS-METHODS ((#2#) (#3# #4#  
#5#) (#6# #7# #8# #9# #10#)) :REQ-ARGS 0 :FLAGS ...) 'NIL 'NIL  
'(CCL::MAKE-OBJC-INSTANCE 'NS-ATTRIBUTED-STRING :INIT-WITH-STRING  
"testing") "size" 'NIL 'NIL 'NIL 'NIL)
   3: (CCL::MAKE-OPTIMIZED-SEND '(CCL::MAKE-OBJC-INSTANCE 'NS- 
ATTRIBUTED-STRING :INIT-WITH-STRING "testing") "size" 'NIL 'NIL)
   4: (CCL::SEND '(CCL::SEND (CCL::MAKE-OBJC-INSTANCE 'NS-ATTRIBUTED- 
STRING :INIT-WITH-STRING "testing") "size") 'NIL)
   5: (FUNCALL #<Compiled-function CCL::SEND Macroexpander #x88CD5D6>)
   6: (MACROEXPAND-1 '(CCL::SEND (CCL::MAKE-OBJC-INSTANCE 'NS- 
ATTRIBUTED-STRING :INIT-WITH-STRING "testing") "size") #<PROCESS new- 
repl-thread(221) [Active] #x99635AE>)
   7: (CCL::CHEAP-EVAL-IN-ENVIRONMENT '(#<RESTART ABORT-BREAK  
#x2CC2DDE> #<RESTART ABORT #x2CC2E06>) #<PROCESS new-repl-thread(221)  
[Active] #x99635AE>)
   8: (SWANK::EVAL-REGION "(ccl::send (CCL::MAKE-OBJC-INSTANCE
		     'NS-attributed-string
		     :INIT-WITH-STRING
		     \"testing\") \"size\")
" 'T)
   9: (#<Anonymous Function #x95B3626> "(ccl::send (CCL::MAKE-OBJC- 
INSTANCE
		     'NS-attributed-string
		     :INIT-WITH-STRING
		     \"testing\") \"size\")
")

>>



More information about the Openmcl-devel mailing list