/*
 *  A newly created function always has a fresh object as its
 *  prototype.
 *
 *  E5 Sections 15.3.2.1, 15.3.5.2, 15.3.4.5.
 */

var f, g;
var a;

/*===
object
true
object
false
object
object
===*/

f = function() { print("f"); };
print(typeof f.prototype);
print(f.prototype.constructor === f);

function func() { print("func"); }
print(typeof func.prototype);

print(f === func);

a = {
   get x() { print(typeof arguments.callee.prototype); },
   set x() { print(typeof arguments.callee.prototype); }
};

t = a.x;
a.x = 1;

/*===
f 1 2 undefined
undefined
===*/

f = function(x,y) { print("f", this, x, y); };
g = f.bind(1, 2);
g();

/* g.prototype should be missing, see E5 Section 15.3.4.5 */
/* Note: v8 fails this test */
d = Object.getOwnPropertyDescriptor(g, 'prototype');
print(typeof d);

