On 26 Jul 2014, at 00:00, Thierry Goubier <thierry.goub...@gmail.com> wrote:

> Le 25/07/2014 23:46, Marcus Denker a écrit :
>> On 25 Jul 2014, at 23:44, Marcus Denker <marcus.den...@inria.fr> wrote:
>> 
>>> On 25 Jul 2014, at 23:28, Thierry Goubier <thierry.goub...@gmail.com> wrote:
>>> 
>>>> Le 25/07/2014 23:15, Marcus Denker a écrit :
>>>>> On 25 Jul 2014, at 21:51, Thierry Goubier <thierry.goub...@gmail.com> 
>>>>> wrote:
>>>>> 
>>>>>> Le 25/07/2014 21:42, kilon alios a écrit :
>>>>>>> ok we are getting somewhere, the problem is that if I do
>>>>>>> 
>>>>>>> (SomeClass compiledMethodAt: #nameOfMethod it will look only in the 
>>>>>>> instance side for method, how I look also for class methods ?  Also how 
>>>>>>> I can return source of class ? to be specific I need the names of 
>>>>>>> instance variables, class variables and class instance variables .
>>>>>> For the class method:
>>>>>> 
>>>>>> SomeClass class compiledMethodAt: #nameOfClassMethod
>>>>>> 
>>>>>> For the instance variable, etc... SomeClass definition will give you 
>>>>>> that. But it's a bit tricky to parse; for example, if you want a 
>>>>>> reification (instance variable name is recognized as instance variable 
>>>>>> name in the ast), I have some code which does: parse, rewrite and 
>>>>>> reparse on a class definition (for the smart suggestion thing).
>>>>>> 
>>>>> Yes, we need that…
>>>>> there is code on the issue tracker, too:
>>>>> 
>>>>>   
>>>>> https://pharo.fogbugz.com/f/cases/10983/Represent-a-class-definition-with-AST-structure
>>>> Yes. What about the class definition format change described by Camillo?
>>> Slowly working on it… very early (and right now broken) stage is in the 
>>> image.
>>> And it is not yet decided how it  will look like exactly… the only thing 
>>> clear is
>>> that we need to use
>>> 
>>> {#ivar1. #ivar2 . #boolean =>  BooleanSlot }
>>> 
>>> instead of the strings… both for ivars and class vars… I want to finish and 
>>> debug the machinery around and then
>>> start to play with it.
>>> 
>>> I am a bit tempted to go the “backward compatible” way and not use the term 
>>> Slot but something like this:
>>> 
>>> TestCase subclass: #RBProgramNodeTest
>>>     instanceVariables :{#ivar1. #ivar2 . #boolean =>  BooleanSlot }
>>>     classVariables: {#MyGlobal}
>>>     category: 'AST-Tests-Core’
> I'd be tempted not to write an adhoc mini-language inside the 
> instanceVariables array. Why not just something like:
> 

What I like with the #name=>Var notation is that it puts the name of the 
variable first. And it is just an expression
(you can evaluate it, it’s the same as BooleanSlot named: #boolean)

So it is just an expession, and e.g. classes could create slots:

{Integer typedSlotNamed: #i}



> If you want the grand show, I'll make you a wizard for creating classes with 
> at least 10 steps ;)
>>> 
>>> Ah, and we need to think about “category”… as we now have packages.
>>> 
>> But for the “we need some kind of AST like structure” it changes nothing: 
>> this is still a message send,
>> but we need to reason about a class definition if we want to have 
>> suggestions (and with them e.g. BreakPoints
>> on variables) working.
>> 
>>      Marcus
>> 
> I have that working without a real "ClassDefinition node" at the moment. 
> Really very convenient to have the refactorings on instance variables working 
> straight out of the class description text pane by just selecting the 
> instance variable name in the string.
> 
> Class definitions are either normal messages (for example in code creating a 
> class by hand) or descriptions visible in browsers (interactive use).
> 
> In the first case, you should not interpret them as class definitions since 
> the class may/probably does not exist at that point. It is then just a 
> message.
> 
> In the second case, the GUI can ask for interpretation of the message into a 
> class definition. I think this is how Gisela solution works, no?
> 
Yes!

        Marcus


Reply via email to