// Test protect()
using namespace oadl;

class foo {
    public var bar;
}

proc main()
{
    var a;

    a = new Array(3);
    a[0] = 0; a[1] = 1; a[2] = 2;
    a = protect(a);
    try { a[0] = 0; } catch(e) { "Caught exception, as expected\n"; }

    a = new foo();
    a.bar = 1;
    a = protect(a);
    try { a.bar = 0; } catch(e) { "Caught exception, as expected\n"; }

    a = <<< "hi", 0, "there", 1 >>>;
    a["hi"] = 1;
    a = protect(a);
    try { a["hi"] = 0; } catch(e) { "Caught exception, as expected\n"; }
}