示例#1
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)));
        }
        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));
        }
        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)))));
        }
        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))));
        }
示例#6
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));
        }
        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!");
        }