#-*-c++-*-

layerinfo "type" = "core";
layerinfo "majorversion" = 1;

class Foo {
    var string member;
}

property string blah;
set "blah" = "foo";

function void {
}

function side_effect : Foo {
    print "side-effect!\n";
    return new Foo;
}

function main ()
{
    # integers are boolable
    var int i = 5;
    println $i ? "pass" : "fail";
    if ($i) {
        println "pass.";
    } else {
        println "fail.";
    }
    if (0) {
        println "fail.";
    } elseif ($i) {
        println "pass.";
    }

    # objs are boolable
    var Foo fd = new Foo;
    println $fd ? "pass" : "fail";
    if ($fd) {
        println "pass.";
    } else {
        println "fail.";
    }
    if (0) {
        println "fail.";
    } elseif ($fd) {
        println "pass.";
    }

    # objs are boolable
    $fd = null Foo;
    println $fd ? "fail" : "pass";
    if ($fd) {
        println "fail.";
    } else {
        println "pass.";
    }
    if (0) {
        println "fail.";
    } elseif ($fd) {
        println "fail.";
    } else {
        println "pass.";
    }

    var string[] arr;
    println $arr ? "fail." : "pass.";
    $arr[0] = "test";
    println $arr ? "pass." : "fail.";

    var string{} hash;
    println $hash ? "fail." : "pass.";
    $hash{"bar"} = "foo";
    println $hash ? "pass." : "fail.";

    #if (void()) {
    #    print "FAIL.\n";
    #}

    println side_effect() ? "pass." : "fail.";
    

}



