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 */;
}