v22.2b14/
v22.2b14/Win32/
v22.2b14/compat/
v22.2b14/testsuite/
v22.2b14/testsuite/clone/
v22.2b14/testsuite/command/
v22.2b14/testsuite/data/
v22.2b14/testsuite/etc/
v22.2b14/testsuite/include/
v22.2b14/testsuite/inherit/
v22.2b14/testsuite/inherit/master/
v22.2b14/testsuite/log/
v22.2b14/testsuite/single/
v22.2b14/testsuite/single/tests/compiler/
v22.2b14/testsuite/single/tests/efuns/
v22.2b14/testsuite/single/tests/operators/
v22.2b14/testsuite/u/
v22.2b14/tmp/
object prev;

void create() {
    prev = previous_object();
}

nomask void i_am_bad() {
}

void do_tests() {
    object ob;
#ifndef __NO_SHADOWS__
    ASSERT(catch(shadow(this_object())));
    ASSERT(catch(shadow(master())));
    new(__DIR__ "badshad", 1);

    ASSERT(shadow(this_object(), 0) == 0);
    ASSERT((object)this_object()->foo() == this_object());

    ob = new(__DIR__ "goodshad", 1);
    ASSERT(shadow(this_object(), 0) == ob);
    ASSERT((object)this_object()->foo() == ob);
    ASSERT((object)new(__FILE__)->bar() == ob);

    ASSERT(catch(shadow(ob)));
    ASSERT(catch(shadow(new(__FILE__))));

#endif
}

object foo() {
    printf("%O\n", file_name());
    return this_object();
}

object bar() {
    return (object)prev->foo();
}