private IFunctionType SpecifyFunc(GenericFunctionWrapper wrapper, Environment env) { if (Handle == null) { var exprTypes = Exprs.Select(expr => expr.Type); return(wrapper.ResolveByParameterPosition(exprTypes)); } var resolutions = Handle.ResolveByIdentifier(wrapper.Handle, env); return(wrapper.ResolveByIdentifier(resolutions)); }
internal override Node Bind(Binder b) { var funcs = Compilation.Get(WellKnownTypes.XSharp_RT_Functions); var expr = IdExpr.Bound(b.Lookup(funcs, QOutName)); var args = new ArgList(new List <Arg>(Exprs.Select(x => new Arg(x)))); b.Bind(ref args); Expr self, writeBack; var sym = b.BindMethodCall(expr, expr.Symbol, args, out self, out writeBack); if (self != null || writeBack != null) { throw Error(ErrorCode.Internal); } QOutCall = MethodCallExpr.Bound(expr, sym, null, args); return(null); }
private void AssertExprsMatchesConstructor(FunctionType funcType) { var paramTypes = funcType.ParameterTypes; var exprTypes = Exprs.Select(expr => expr.Type).ToList(); var exprCount = exprTypes.Count; var paramCount = paramTypes.Count; if (exprCount != paramCount) { throw new TranspilationException($"Class constructor takes {paramCount} parameters, but got {exprCount}", Location); } var i = 1; foreach (var(expr, param) in exprTypes.Zip(paramTypes)) { if (!expr.Equals(param)) { throw new TranspilationException($"Class constructor could not be invoked: parameter {i} must be of type '{param.AsNativeName()}', but was '{expr.AsNativeName()}'", Location); } i++; } }
public override string ToString() => $"({String.Join(',', Exprs.Select(a => a.ToString()))} : {String.Join(',', Operators.Select(a => a))})";