// Test interception of protected assignments by the "assign" method
proc bletch(prop, val)
{
    // This will throw an AccessCheck since this is not a method call
    self.(prop) = val;
}

class foo {
    protected var a;
    protected var b;

    public proc bar(prop, val) {
        // This will attempt to redirect the assignemnt
        // to a non-method, which will fail
        bletch(prop, val);
    }
}


proc main()
{
    var x = new foo();
    try {
        x.bar(b, 4);
    }
    catch (e) {
        "Caught ", e, '\n';
    }
}