print.x = print;
assert print === print('from print()');
assert print === print.x('from print.x()');
assert print === print.x['x']('from print.x["x"]()');

// Demonstrate skip-mode's effect on function calls:
false && print.x.y.z(foo);
true || print.x.y.z(foo);

(print.x)('from (print.x)()');

var o = {
  p: print
};
assert print === o.p('from o.p()');

if(s2.isCallable){
  assert s2.isCallable(false, s2.isCallable);
  assert s2.isCallable(true, s2.isCallable);
  assert s2.isCallable(s2.isCallable);
  o = {
    prototype: proc(){
        ++this.value;
    },
    name: 'anObject',
    value: 0
  };
  assert 0 === o.value;
  o(1,2,3);
  assert 1 === o.value;
  assert s2.isCallable(o) /* searches up through prototypes */;
  assert !s2.isCallable(false,o) /* does not search prototypes */;
  assert s2.isCallable(true,o) /* searches up through prototypes */;
}
