 <p>Smalltalk's keyword-like syntax for method calls inherently defines the arity of the method. There's no <code>&amp;rest</code> pattern like in Common Lisp.</p> <p>You can of course have a method take a list, like <code>BlockClosure&gt;&gt;valueWithArguments:</code> but that's hardly the same thing.</p> <p>You might modify <code>Compiler</code> to support variadic method calls. Maybe the call would simply have <code>with:</code> between each of the variables:</p> <p>(condition) ifTrue: aBlock elseIf: aBoolean with: aSecondBlock with: anotherBoolean with: aThirdBlock</p>