
class Xyzzy : Object {
    private string name;
    
    public Xyzzy(string name) {
        this.name = name;
    }
    
    ~Xyzzy() {
        debug("DTOR Xyzzy %s", name);
    }
    
    public static Xyzzy decode(string name) {
        return new Xyzzy(name);
    }
    
    public static Xyzzy decode_throws(string name) throws Error {
        return new Xyzzy(name);
    }
}

void func(Xyzzy x) {
}

void main() {
    new Xyzzy("1");
    
    Xyzzy.decode("2");
    
    try {
        Xyzzy.decode_throws("3");
    } catch (Error err) {
    }
    
    func(new Xyzzy("4"));
    
    func(Xyzzy.decode("5"));
    
    // Floating reference
    try {
        func(Xyzzy.decode_throws("6"));
    } catch (Error err) {
    }
    
    try {
        Xyzzy x = Xyzzy.decode_throws("7");
        func(x);
    } catch (Error err) {
    }
}

