/*===
basic
object object
object object true prototype
===*/

print('basic');

function basicTest() {
    var obj;
    var proto;
    var t;

    proto = null;
    obj = Object.create(proto);
    t = Object.getPrototypeOf(obj);
    print(typeof obj, typeof t);

    proto = { proto: 'prototype' };
    obj = Object.create(proto);
    t = Object.getPrototypeOf(obj);
    print(typeof obj, typeof t, t === proto, obj.proto);
}

try {
    basicTest();
} catch (e) {
    print(e);
}

/*===
firstarg
TypeError
TypeError
TypeError
TypeError
TypeError
TypeError
TypeError
ok
ok
ok
===*/

print('firstarg');

function firstArgTest() {
    function test(arg, is_noarg) {
        var t;

        try {
            if (is_noarg) {
                t = Object.getPrototypeOf();
            } else {
                t = Object.getPrototypeOf(arg);
            }
            print('ok');
        } catch (e) {
            print(e.name);
        }
    }

    test(undefined, true);
    test(undefined);
    test(null);
    test(true);
    test(false);
    test(123);
    test('foo');
    test([1,2,3]);
    test({ foo: 1, bar: 2 });
    test(function(){});
}

try {
    firstArgTest();
} catch (e) {
    print(e);
}

