Object lexicalDoScope := method(target, locals, scope := Object clone scope doLexicalScope := Object clone scope doLexicalScope target := getSlot("target") scope doLexicalScope locals := getSlot("locals") scope forward := method( targetHasSlot := doLexicalScope getSlot("target") hasSlot(call message name) call message doInContext(if(targetHasSlot, doLexicalScope getSlot("target"), doLexicalScope getSlot("locals"))) ) scope removeAllProtos scope ) Object do := method( call argAt(0) doInContext(lexicalDoScope(getSlot("self"), call sender)) getSlot("self") )