"A collection of methods which use implicit-context sends to implement more conventional control-flow syntax. The general idea is that the context/block/ method can be considered taking a role in control-flow." "Usage note: implicit context sends work within other expressions, just requiring some parentheses to denote the scope of the keyword-sends." "Implementation note: True and False themselves haven't been dispatched in their positions, since this can be done with an inliner." _@(Method traits) if: boolean then: trueBlock [ boolean ifTrue: trueBlock ]. _@(Method traits) if: boolean then: trueBlock else: falseBlock [ boolean ifTrue: trueBlock ifFalse: falseBlock ]. _@(Method traits) do: body while: testBlock "Evaluates the body block once, and then again as long as the testBlock returns True, and returns the last return value of the body." [| result | [result: body do. testBlock do] whileTrue. result ]. _@(Method traits) do: block until: testBlock "Evaluates the body block once, and then again as long as the testBlock returns False, and returns the last return value of the body." [| result | [result: body do. testBlock do] whileFalse. result ]. _@lobby the: name@(Symbol traits) of: obj "Answer the value of the slot with the given name in the object. This implementation is too naive." [ obj atSlotNamed: name ].