// Demonstrate array/object precedence in arithmetic expressions. // Prints "hello, world" class str { var sVal; public proc create(a) { sVal = a; } public proc set(a) { sVal = a; } public proc get() { return sVal; } operator + (rhs) { var rightStr; switch (?? rhs) { case String : rightStr = rhs; case Object : if (!(rhs ?= str)) throw oadl::TypeCheck; rightStr = rhs.get(); default : throw oadl::TypeCheck; } return new str(sVal ## rightStr); } operator \+ (lhs) { var leftStr; switch (?? lhs) { case String : leftStr = lhs; case Object : if (!(lhs ?= str)) throw oadl::TypeCheck; leftStr = lhs.get(); default : throw oadl::TypeCheck; } return new str(leftStr ## sVal); } } proc main() { var a; var b; a = new str("hello ") {}; b = a + "world"; "", b.get(), "\n"; }