// Test class type decorations class foo { public var v = "foo"; } class bar { public var v : foo; } class bletch(foo) { public var v = "bletch"; } var g : foo; foo oFoo {} bar oBar {} bletch oBletch {} proc ack(o : foo) { "", o.v, '\n'; } proc check(e, num) { if (e == oadl::TypeCheck) "TypeCheck #", num, '\n'; } proc main() { var x : foo; // Test OK assignments x = oFoo; g = oFoo; ack(oFoo); oBar.v = oFoo; oadl::typecheck(foo, x); // Test more OK assignments x = oBletch; g = oBletch; ack(oBletch); oBar.v = oBletch; oadl::typecheck(foo, x); // Test bad assignments try { x = oBar; } catch(e) { check(e, 1); } try { g = oBar; } catch(e) { check(e, 2); } try { ack(oBar); } catch(e) { check(e, 3); } try { oBar.v = oBar; } catch(e) { check(e, 4); } try { oadl::typecheck(bar, x); } catch(e) { check(e, 5); } }