// 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";
}