RosettaCodeData/Task/Add-a-variable-to-a-class-instance-at-runtime/Smalltalk/add-a-variable-to-a-class-instance-at-runtime-1.st

17 lines
467 B
Smalltalk
Raw Permalink Normal View History

2013-04-10 14:58:50 -07:00
|addSlot p|
addSlot :=
[:obj :slotName |
|anonCls newObj|
anonCls := obj class
subclass:(obj class name,'+') asSymbol
instanceVariableNames:slotName
classVariableNames:''
poolDictionaries:'' category:nil
inEnvironment:nil.
anonCls compile:('%1 ^ %1' bindWith:slotName).
anonCls compile:('%1:v %1 := v' bindWith:slotName).
newObj := anonCls cloneFrom:obj.
obj become:newObj.
].