requires: {#Root. #Boolean}. provides: {#Namespace}. "Some utility methods for Namespace objects." ns@(Namespace traits) flattened "Creates a new single Namespace object with all the slot-values and inherited slot values of the original Namespace structure." [| newNS | newNS: Namespace clone. newNS addSlotsFrom: ns. ns allDelegatesDo: [| :each | (each isSameAs: ns) ifTrue: [ns addSlotsFrom: each]]. ns ]. x@(Root traits) ensureNamespace: name [ (x hasSlotNamed: name) ifTrue: [| old | old: (x atSlotNamed: name). (old is: Namespace) ifTrue: [old] ifFalse: [x atSlotNamed: name put: Namespace clone]] ifFalse: [x addImmutableSlot: name valued: Namespace clone] ]. x@(Root traits) ensureDelegatedNamespace: name [ (x hasDelegateNamed: name) ifTrue: [| old | old: (x atSlotNamed: name). (old is: Namespace) ifTrue: [old] ifFalse: [x atSlotNamed: name put: Namespace clone]] ifFalse: [x addImmutableDelegate: name valued: Namespace clone] ].