public ILanguageType VerifyType_SymbolicExpression(MathematicaScalar sc, OperandsByName operands) { var s = new StringBuilder(); var varTypes = new Dictionary <string, MathematicaAtomicType>(); foreach (var pair in operands.OperandsDictionary) { //var lhs_type = this.GMacSymbolTable.Scalar var rhsType = pair.Value.ExpressionType; if (rhsType.IsBoolean()) { varTypes.Add(pair.Key, MathematicaAtomicType.Boolean); } if (rhsType.IsInteger()) { varTypes.Add(pair.Key, MathematicaAtomicType.Integer); } if (rhsType.IsScalar()) { varTypes.Add(pair.Key, MathematicaAtomicType.Real); } else { s.Append("cannot assign RHS expression of type "); s.Append(rhsType.TypeSignature); s.Append(" to symbolic expression parameter "); s.Append(pair.Key); } } if (s.Length > 0) { return(Context.CreateTypeMismatch(s.ToString())); } var assumeExpr = Cas.CreateAssumeExpr(varTypes); if (sc.IsBooleanScalar(assumeExpr)) { return(GMacRootAst.BooleanType); } //if (sc.IsIntegerScalar(assumeExpr)) // return GMacRootAst.IntegerType; if (sc.IsRealScalar(assumeExpr)) { return(GMacRootAst.ScalarType); } return (sc.IsComplexScalar(assumeExpr) ? GMacRootAst.ScalarType : Context.CreateTypeMismatch("Symbolic expression type cannot be determined")); }