[Vm-dev] reorganizing opensmalltalk-vm

Tobias Pape Das.Linux at gmx.de
Mon Oct 29 20:03:24 UTC 2018


> On 29.10.2018, at 20:03, Levente Uzonyi <leves at caesar.elte.hu> wrote:
> 
> On Fri, 26 Oct 2018, Tobias Pape wrote:
> 
>> Think I have a method with a very long selector, eg MCClassDefinition:
>> 
>> 
>> initializeWithName: nameString
>> superclassName: superclassString
>> traitComposition: traitCompositionString
>> classTraitComposition: classTraitCompositionString
>> category: categoryString instVarNames: ivarArray
>> classVarNames: cvarArray
>> poolDictionaryNames: poolArray
>> classInstVarNames: civarArray
>> type: typeSymbol
>> comment: commentString
>> commentStamp: stampStringOrNil
>> 	name := nameString asSymbol.
>> 	superclassName := superclassString ifNil: ['nil'] ifNotNil: [superclassString asSymbol].
>> 	traitComposition := traitCompositionString.
>> 	classTraitComposition := classTraitCompositionString.
>> 	category := categoryString.
>> 	type := typeSymbol.
>> 	comment := commentString withSqueakLineEndings.
>> 	commentStamp := stampStringOrNil ifNil: [self defaultCommentStamp].
>> 	variables := OrderedCollection  new.
>> 	self addVariables: ivarArray ofType: MCInstanceVariableDefinition.
>> 	self addVariables: cvarArray sorted ofType: MCClassVariableDefinition.
>> 	self addVariables: poolArray sorted ofType: MCPoolImportDefinition.
>> 	self addVariables: civarArray ofType: MCClassInstanceVariableDefinition
>> 
>> 
>> Seeing the Tonel format, this formatting of the selector, even if it is uncommon, would not be preserved, right?
> 
> I just checked, and the formatting is preserved, even comments and white spaces between the selector part and the argument names appear as written.
> The only nuance is that no parser can optimally separate the method body from its signature, so there are edge cases with unexpected results. E.g.:
> 
> If you add type information as comments like below, the last comment will appear if it were part of the method body:
> 
> Object >> foo: foo "Integer" bar: bar "String"
> 
> 	^foo asString, bar
> 
> will be stored as
> 
> Object >> foo: foo "Integer" bar: bar [ "String"
> 
> 	^foo asString, bar
> ]

Interesting!




More information about the Vm-dev mailing list