bind takes two arguments and returns two arguments (so all args can be passed to the bind funtion): _bind(selector, receiver, arg1, arg2, ...) => (method, receiver, arg1, arg2, ...) (where method might or might not be [derived from] the original selector) fix temp problems: [ | foo | ..... ] " <---- open-coded block " foo ... " <---- still in scope " -> push then pop new environment, without increasing nesting level (or pop them off the end of the env when scope exits) mangle member names ('default' is not a valid member name) { include } and similar... { import foo bar baz } { include } separate compilation interfaces compilation to .so shared literals (1 instance of each value) ---------------------------------------------------------------- (define (class Object) nil ()) (define (send Object integer: anInteger) (stdio.printf "Object.integer: %s!\n" (integer-value anInteger)) self) (send Object integer: (integer-object 42))