Marcus, can you do inheritence / masking of a hierarchy of system dictionaries ?
Could be used to make "kind of" sandboxes, around, say, user code so that it does not have the ability to override a certain system core. Thierry 2018-05-23 11:45 GMT+02:00 Marcus Denker <[email protected]>: >> >> A second iteration now makes it work correctly for assignments: >> >> https://github.com/pharo-project/pharo/pull/1397 >> >> Smalltalk compiler >> bindings: {(#test -> Point)} asDictionary; >> evaluate: 'test := 42’. > > While #bindings: allows us now to add additional bindings or override global > bindings from Smalltalk globals, there is another feature missing that would > be nice: be able to set the global environment > > I want to be able to tell the compiler: Do not use Smalltalk globals, but > this SystemDictionary instead. > > https://github.com/pharo-project/pharo/pull/1406 > > with this, we can create a SystemDictionary with just one binding in it: > > environment := SystemDictionary new. > environment at: #MyClass put: Point. > > then we compile a method: > > method := Smalltalk compiler > environment: environment; > compile: 'tt ^MyClass’. > > and if we execute it, it shows that compilation used the environment: > > return := method valueWithReceiver: nil arguments: #(). > self assert: return equals: Point. > > If we try to compile a ref to Object, we get a nil ref: > > method := Smalltalk compiler > environment: environment; > compile: 'tt ^Object'. > return := method valueWithReceiver: nil arguments: #(). > self assert: return equals: nil. > > But, as the Undeclared mechanism is not aware of it, it puts an undeclared > for Object there. > > In the same direction, all objects the compiler creates come still from > Smalltalk globals (CompiledMethod, all Literals…). > > But all this can be improved, we do pass the environment down the compiler > chain already so that it is even available in the Parser/Scanner. Thus we > could e.g. create Literals as instances from the classes in the environment. > But how exactly has to be seen. > > Marcus > > >
