Hi Andrei,

> On Dec 4, 2015, at 11:29 AM, Andrei Chis <chisvasileand...@gmail.com> wrote:
> 
> 
> 
>> On Sat, Nov 21, 2015 at 3:25 PM, Nicolai Hess <nicolaih...@gmail.com> wrote:
>> 
>> 
>> 2015-11-20 22:57 GMT+01:00 Eliot Miranda <eliot.mira...@gmail.com>:
>>> Hi Nicolai,
>>> 
>>>> On Fri, Nov 20, 2015 at 1:37 PM, Nicolai Hess <nicolaih...@gmail.com> 
>>>> wrote:
>>>> GTDummyExamples class
>>>> d: anInteger
>>>>     <gtExample>
>>>>     <label: 'Dummy #d:, depends #c:'>
>>>>     <description: 'should raise an exception as the argument is not 
>>>> anInteger'>
>>>>     <depends: #c:>
>>>>     <raises: Literal constant expected -> MessageNotUnderstood>
>>>>     
>>>>     ^ 1 + anInteger
>>>> 
>>>> The old Parser complains about the class name "MessageNotUnderstood" used 
>>>> as a pragma
>>>> argument without being a string or symbol
>>>> 
>>>> Opal does not complain
>>>> 
>>>> Is Opals behavior intended ?
>>> 
>>> IMO no.  The pragma design is that the only valid syntax is of a message 
>>> pattern with only literal arguments except for the one piece of syntactic 
>>> sugar where the error temporary name in a primitive call with an error can 
>>> be given as an identifier, e.g.
>>> 
>>> addressField
>>>     <primitive: 'primAddressField' module: 'IA32ABI' error: errorCode>
>>>     ^self primitiveFailed
>>> 
>>> instead of 
>>> 
>>> addressField
>>>     <primitive: 'primAddressField' module: 'IA32ABI' error: 'errorCode'>
>>>     ^self primitiveFailed
>>> 
>>> 
>>> The issues are class reference, class redefinition, class removal etc.  I 
>>> guess we could extend the pragma syntax to allow class references but 
>>> there's a lot of impact.  I would prefer if we keep things restricted.  
>>> There's nothing to stop one using a symbol and mapping it to a class name, 
>>> e.g.
>>> 
>>> 
>>> GTDummyExamples class
>>> d: anInteger
>>>     <gtExample>
>>>     <label: 'Dummy #d:, depends #c:'>
>>>     <description: 'should raise an exception as the argument is not 
>>> anInteger'>
>>>     <depends: #c:>
>>>     <raises: #MessageNotUnderstood>
>>>     
>>>     ^ 1 + anInteger
>> 
>> 
>> Thanks eliot
>> 
>> Yes, we have this code too, I think, using the global var instead of a 
>> symbol happened by accident.
>> 
>> @andrei (and stefan?) can you check the GTDummyExamples methods
>> and replace classes with symbol names.
>> 
>> After this is removed I will change the parser to notify about this.
> 
> I updated the pragmas to use symbols.

They should be instances of Message, and the Message should hold onto the 
selector symbol and the argument.  There should also be a Pragma class with an 
api that supports access.  I'll gather up the relevant Squeak code (including 
tests) as a guide.  Ok?

> 
> Cheers,
> Andrei
>  
>> 
>>  
>>> 
>>> Also, I *hate* this style of pragma.  Why not
>>> 
>>> GTDummyExamples class
>>> d: anInteger
>>>     <gtExampleLabel: 'Dummy #d:, depends #c:'
>>>      description: 'should raise an exception as the argument is not 
>>> anInteger'
>>>      depends: #c:
>>>      raises: #MessageNotUnderstood>
>>>     
>>>     ^ 1 + anInteger
>>> 
>>> ?
>> 
>> no idea.
>> 
>>  
>>> 
>>> That's how the system is designed to be used.  Then the message can be 
>>> implemented by a builder which performs the selector from a visitor.
>>> 
>>>> From squeaks bugtracker : http://bugs.squeak.org/view.php?id=7770
>>>> 
>>>> Cascading message sends to super.
>>>> 
>>>> Compiler refuses to compile 
>>>> super 
>>>>     initialize;
>>>>     setListProperties      
>>>> 
>>>> 
>>>> It looks like Opal would compile this to
>>>> 
>>>> super initialize.
>>>> super setListProperties.
>>>> 
>>>> Intended ? Do we want to keep it?
>>>> 
>>>> NBNativeCodeGen
>>>> parseOptions: optionsArray
>>>> uses association symbol -> block instead of block -> block
>>>> for caseOf arguments.
>>>> The old parser does not accept this.
>>> 
>>> 
>>> 
>>> -- 
>>> _,,,^..^,,,_
>>> best, Eliot
> 

Reply via email to