operatorAdd method
Implementation
FutureOr<ASTValue> operatorAdd(
VMContext context, ASTValue val1, ASTValue val2) {
var t1 = val1.type;
var t2 = val2.type;
if (t1 is ASTTypeString || t2 is ASTTypeString) {
var v1 = val1.getValue(context);
var v2 = val2.getValue(context);
if (v1.isResolved && v2.isResolved) {
var r = '$v1$v2';
return ASTValueString(r);
} else {
return <FutureOr>[v1, v2].resolveAllJoined((l) {
return ASTValueString(l.join());
});
}
}
if (t1 is ASTTypeInt) {
if (t2 is ASTTypeInt) {
var v1 = val1.getValue(context) as int;
var v2 = val2.getValue(context) as int;
var r = v1 + v2;
return ASTValueInt(r);
} else if (t2 is ASTTypeDouble) {
var v1 = val1.getValue(context) as int;
var v2 = val2.getValue(context) as double;
var r = v1 + v2;
return ASTValueDouble(r);
}
}
if (t1 is ASTTypeDouble) {
if (t2 is ASTTypeNum) {
var v1 = val1.getValue(context) as double;
var v2 = val2.getValue(context) as num;
var r = v1 + v2;
return ASTValueDouble(r);
}
}
throwOperationError('+', t1, t2);
}