additiveExpression method
Parser
additiveExpression(
)
override
Implementation
@override
Parser additiveExpression() => super.additiveExpression().map((c) {
Expression left = c[0];
for (var item in c[1]) {
Expression right = item[1];
if (item[0].value == '+') {
if (left is Expression<Number> && right is Expression<Number>) {
left = PlusNumberExpression(left, right);
continue;
}
if (left is Expression<String> && right is Expression<String>) {
left = PlusStringExpression(left, right);
continue;
}
if (left is Expression<String> && right is Expression<Number>) {
left =
PlusStringExpression(left, ToStringFunctionExpression(right));
continue;
}
if (left is Expression<Number> && right is Expression<String>) {
left =
PlusStringExpression(ToStringFunctionExpression(left), right);
continue;
}
if (left is Expression<Duration> && right is Expression<DateTime>) {
left = DateTimePlusDurationExpression(right, left);
continue;
}
if (left is Expression<DateTime> && right is Expression<Duration>) {
left = DateTimePlusDurationExpression(left, right);
continue;
}
if (left is Expression<Duration> && right is Expression<Duration>) {
left = PlusDurationExpression(left, right);
continue;
}
}
if (item[0].value == '-') {
if ((left is Expression<Number>) && (right is Expression<Number>)) {
left = MinusNumberExpression(left, right);
continue;
}
if ((left is Expression<DateTime>) &&
(right is Expression<Duration>)) {
left = DateTimeMinusDurationExpression(left, right);
continue;
}
if ((left is Expression<Duration>) &&
(right is Expression<Duration>)) {
left = MinusDurationExpression(left, right);
continue;
}
}
throw UnknownExpressionTypeException(
'Unknown additive expression type');
}
return left;
});