public Expr Multiply(MultiplyExpr multi) { var tail = multi.Tail(); var expr1 = Builder.Multiply(multi.Args.First().Visit(this), tail); var expr2 = Builder.Multiply(multi.Args.First(), tail.Visit(this)); return Builder.Add(expr1, expr2); }
protected IType CheckExpr(MultiplyExpr expr) { IType a = CheckExpr(expr.Expr1); IType b = CheckExpr(expr.Expr2); if (!(a is NumericType) || !a.CompatibleWith(b)) { AddError(String.Format("Multiplication not possible. Incompatible types: '{0}', '{1}'. Only numeric types are supported.", a.ToString(), b.ToString()), true, expr.SourcePosition); return NumericType.Instance; } return (a is RealType || b is RealType) ? (IType)RealType.Instance : (IType)IntType.Instance; }
public Number Multiply(MultiplyExpr multi) { return EvaluateMulti(multi, (x1, x2) => x1 * x2); }