Beispiel #1
0
        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);
        }
Beispiel #3
0
        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++;
            }
        }
Beispiel #4
0
 public override string ToString() => $"({String.Join(',', Exprs.Select(a => a.ToString()))} : {String.Join(',', Operators.Select(a => a))})";