Пример #1
0
            public IInterpetedResult <IInterpetedMember <TOut> > Invoke(IInterpetedMember <TIn> input)
            {
                var res = Scope.Create();

                res.GetMember <TIn>(ParameterDefinition.Key).Cast <IInterpetedMemberSet <TIn> >().Set(input.Value);

                var scope = Context.Child(res);

                foreach (var line in Body)
                {
                    var result = line.Interpet(scope);
                    if (result.IsReturn(out var resMember, out var value))
                    {
                        return(InterpetedResult.Create(resMember.Cast <IInterpetedMember <TOut> >()));
                    }
                }

                // does this work??
                // wierd stuff around the way I am doing types
                // life would be so much simpler if I just pulled it all out
                // I should just pull it all out
                // clearly I should
                //
                if (typeof(IInterpedEmpty).IsAssignableFrom(typeof(TOut)))
                {
                    var hack = TypeManager.Empty();
                    return(InterpetedResult.Create(Member <TOut>(hack.Convert(TransformerExtensions.NewConversionContext()), hack.Cast <TOut>())));
                }

                throw new System.Exception("method did not return!");
            }
Пример #2
0
        public IInterpetedResult <IInterpetedMember <T> > Interpet(InterpetedContext interpetedContext)
        {
            var member = TypeManager.Member <T>(Type);

            if (!interpetedContext.TryAddMember(Key, member))
            {
                throw new Exception("bad, shit");
            }

            return(InterpetedResult.Create(member));
        }
Пример #3
0
        public IInterpetedResult <IInterpetedMember <T> > Interpet(InterpetedContext interpetedContext)
        {
            var leftResult = Left.Interpet(interpetedContext);

            if (leftResult.IsReturn(out var leftReturned, out var leftValue))
            {
                return(InterpetedResult.Return <IInterpetedMember <T> >(leftReturned));
            }

            return(InterpetedResult.Create(leftValue.Value.GetMember <T>(Right.Key)));
        }
Пример #4
0
        public override IInterpetedResult <IInterpetedMember <T> > Interpet(InterpetedContext interpetedContext)
        {
            var argumentResult = Argument.Interpet(interpetedContext);

            if (argumentResult.IsReturn(out var argumentReturned, out var argumentValue))
            {
                return(InterpetedResult.Return <IInterpetedMember <T> >(argumentReturned));
            }

            return(InterpetedResult.Return <IInterpetedMember <T> >(argumentValue));
        }
Пример #5
0
        public IInterpetedResult <IInterpetedMember <IInterpetedScope> > Interpet(InterpetedContext interpetedContext)
        {
            var scope = ScopeTemplate.Create();

            var context = interpetedContext.Child(scope);

            foreach (var line in StaticInitialization)
            {
                line.Interpet(context);
            }

            return(InterpetedResult.Create(TypeManager.Member(scope.Convert(TransformerExtensions.NewConversionContext()), scope)));
        }
Пример #6
0
        public IInterpetedResult <IInterpetedMember <IInterpetedMethod <TIn, TOut> > > Interpet(InterpetedContext interpetedContext)
        {
            var thing = TypeManager.InternalMethod <TIn, TOut>(
                ParameterDefinition,
                Body,
                interpetedContext,
                Scope,
                MethodType);

            return(InterpetedResult.Create(
                       TypeManager.Member(
                           thing.Convert(TransformerExtensions.NewConversionContext()),
                           thing)));
        }
Пример #7
0
        public IInterpetedResult <IInterpetedMember <IInterpedEmpty> > Interpet(InterpetedContext interpetedContext)
        {
            var scope = interpetedContext.Child(Scope.Create());

            foreach (var line in Body)
            {
                var result = line.Interpet(scope);
                if (result.IsReturn(out var res, out var value))
                {
                    return(InterpetedResult.Return <IInterpetedMember <IInterpedEmpty> >(res));
                }
            }

            return(InterpetedResult.Create());
        }
        public override IInterpetedResult <IInterpetedMember <IBoxedBool> > Interpet(InterpetedContext interpetedContext)
        {
            var leftResult = Left.Interpet(interpetedContext);

            if (leftResult.IsReturn(out var leftReturned, out var leftValue))
            {
                return(InterpetedResult.Return <IInterpetedMember <IBoxedBool> >(leftReturned));
            }

            var rightResult = Right.Interpet(interpetedContext);

            if (rightResult.IsReturn(out var rightReturned, out var rightValue))
            {
                return(InterpetedResult.Return <IInterpetedMember <IBoxedBool> >(rightReturned));
            }

            return(InterpetedResult.Create(TypeManager.BoolMember(TypeManager.Bool(rightValue.Cast <IInterpetedMemberSet <TRight> >().TrySet(leftValue.Value)))));
        }
Пример #9
0
            public IInterpetedResult <IInterpetedMember <IInterpetedMethod <TMethodIn, TMethodOut> > > Invoke(IInterpetedMember <TIn> input)
            {
                var context = InterpetedContext.Child(TypeManager.InstanceScope((contextDefinition.Key, input)));
                var thing   = InternalMethod <TMethodIn, TMethodOut>(
                    ParameterDefinition,
                    Body,
                    context,
                    Scope,
                    MethodType.CreateAndBuild(
                        ImplementationType.InputType,
                        ImplementationType.OutputType));

                return
                    (InterpetedResult.Create(
                         Member(
                             thing.Convert(TransformerExtensions.NewConversionContext()),
                             thing)));
            }
Пример #10
0
        public override IInterpetedResult <IInterpetedMember <IBoxedDouble> > Interpet(InterpetedContext interpetedContext)
        {
            var leftResult = Left.Interpet(interpetedContext);

            if (leftResult.IsReturn(out var leftReturned, out var leftValue))
            {
                return(InterpetedResult.Return <IInterpetedMember <IBoxedDouble> >(leftReturned));
            }

            var rightResult = Right.Interpet(interpetedContext);

            if (rightResult.IsReturn(out var rightReturned, out var rightValue))
            {
                return(InterpetedResult.Return <IInterpetedMember <IBoxedDouble> >(rightReturned));
            }

            return(InterpetedResult.Create(TypeManager.NumberMember(TypeManager.Double(
                                                                        leftValue.Value.Value -
                                                                        rightValue.Value.Value))));
        }
Пример #11
0
        public override IInterpetedResult <IInterpetedMember <TLeft> > Interpet(InterpetedContext interpetedContext)
        {
            var leftResult = Left.Interpet(interpetedContext);

            if (leftResult.IsReturn(out var leftReturned, out var leftValue))
            {
                return(InterpetedResult.Return <IInterpetedMember <TLeft> >(leftReturned));
            }

            var rightResult = Right.Interpet(interpetedContext);

            if (rightResult.IsReturn(out var rightReturned, out var rightValue))
            {
                return(InterpetedResult.Return <IInterpetedMember <TLeft> >(rightReturned));
            }

            rightValue.Cast <IInterpetedMemberSet <TRight> >().Set(leftValue.Value);

            return(InterpetedResult.Create(leftValue));
        }
Пример #12
0
        public override IInterpetedResult <IInterpetedMember <TOut> > Interpet(InterpetedContext interpetedContext)
        {
            var leftResult = Left.Interpet(interpetedContext);

            if (leftResult.IsReturn(out var leftReturned, out var leftValue))
            {
                return(InterpetedResult.Return <IInterpetedMember <TOut> >(leftReturned));
            }

            var rightResult = Right.Interpet(interpetedContext);

            if (rightResult.IsReturn(out var rightReturned, out var rightValue))
            {
                return(InterpetedResult.Return <IInterpetedMember <TOut> >(rightReturned));
            }

            if (!rightValue.Value.Invoke(leftValue).IsReturn(out var _, out var value))
            {
                return(InterpetedResult.Create(value));
            }

            throw new Exception("should never get here!");
        }
Пример #13
0
            public IInterpetedResult <IInterpetedMember <TOut> > Invoke(IInterpetedMember <TIn> input)
            {
                var thing = Backing(input.Value);

                return(InterpetedResult.Create(Member(thing.Convert(TransformerExtensions.NewConversionContext()), thing)));
            }
Пример #14
0
 public IInterpetedResult <IInterpetedMember <IBoxedBool> > Interpet(InterpetedContext interpetedContext)
 {
     return(InterpetedResult.Create(TypeManager.BoolMember(TypeManager.Bool(Value))));
 }
Пример #15
0
 public IInterpetedResult <IInterpetedMember <IBoxedString> > Interpet(InterpetedContext interpetedContext)
 {
     return(InterpetedResult.Create(TypeManager.StringMember(TypeManager.String(Value))));
 }
Пример #16
0
 public IInterpetedResult <IInterpetedMember <T> > Interpet(InterpetedContext interpetedContext)
 {
     return(InterpetedResult.Create(interpetedContext.GetMember <T>(MemberDefinition.Key)));
 }
Пример #17
0
 public IInterpetedResult <IInterpetedMember <IInterpedEmpty> > Interpet(InterpetedContext interpetedContext)
 {
     return(InterpetedResult.Create(TypeManager.EmptyMember(TypeManager.Empty())));
 }
Пример #18
0
 public IInterpetedResult <IInterpetedMember <IBoxedDouble> > Interpet(InterpetedContext interpetedContext)
 {
     return(InterpetedResult.Create(TypeManager.NumberMember(TypeManager.Double(Value))));
 }