コード例 #1
0
 internal static IInterpetedMethod <TIn, TOut> InternalMethod <TIn, TOut>(InterpetedMemberDefinition <TIn> parameterDefinition,
                                                                          IInterpetedOperation <IInterpetedAnyType>[] body,
                                                                          InterpetedContext context,
                                                                          IInterpetedScopeTemplate scope,
                                                                          IMethodType methodType)
     where TIn : IInterpetedAnyType
     where TOut : IInterpetedAnyType
 => Root(new Func <IRunTimeAnyRoot, RunTimeAnyRootEntry>[] { InterpetedMethodIntention <TIn, TOut>(parameterDefinition, body, context, scope, methodType) }).Has <IInterpetedMethod <TIn, TOut> >();
コード例 #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
 internal static Func <IRunTimeAnyRoot, RunTimeAnyRootEntry> InterpetedMethodIntention <TIn, TOut>(
     InterpetedMemberDefinition <TIn> parameterDefinition,
     IInterpetedOperation <IInterpetedAnyType>[] body,
     InterpetedContext context,
     IInterpetedScopeTemplate scope,
     IMethodType methodType)
     where TIn : IInterpetedAnyType
     where TOut : IInterpetedAnyType
 => root => {
     var item = new InterpetedMethod <TIn, TOut>(parameterDefinition, body, context, scope, methodType, root);
     return(new RunTimeAnyRootEntry(item, methodType));
 };
コード例 #6
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)));
        }
コード例 #7
0
 public InterpetedMethod(
     InterpetedMemberDefinition <TIn> parameterDefinition,
     IInterpetedOperation <IInterpetedAnyType>[] body,
     InterpetedContext context,
     IInterpetedScopeTemplate scope,
     IMethodType methodType,
     IRunTimeAnyRoot root) : base(root)
 {
     ParameterDefinition = parameterDefinition ?? throw new System.ArgumentNullException(nameof(parameterDefinition));
     Body       = body ?? throw new System.ArgumentNullException(nameof(body));
     Context    = context ?? throw new System.ArgumentNullException(nameof(context));
     Scope      = scope ?? throw new System.ArgumentNullException(nameof(scope));
     MethodType = methodType ?? throw new ArgumentNullException(nameof(methodType));
 }
コード例 #8
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());
        }
コード例 #9
0
 public InterpetedImplementation(
     InterpetedMemberDefinition <TMethodIn> parameterDefinition,
     InterpetedMemberDefinition <TIn> contextDefinition,
     IInterpetedOperation <IInterpetedAnyType>[] body,
     InterpetedContext context,
     IInterpetedScopeTemplate scope,
     IImplementationType implementationType,
     IRunTimeAnyRoot root) : base(root)
 {
     ParameterDefinition    = parameterDefinition ?? throw new ArgumentNullException(nameof(parameterDefinition));
     this.contextDefinition = contextDefinition ?? throw new ArgumentNullException(nameof(contextDefinition));
     Body = body ?? throw new ArgumentNullException(nameof(body));
     InterpetedContext  = context ?? throw new ArgumentNullException(nameof(context));
     Scope              = scope ?? throw new ArgumentNullException(nameof(scope));
     ImplementationType = implementationType ?? throw new ArgumentNullException(nameof(implementationType));
 }
コード例 #10
0
        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)))));
        }
コード例 #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
ファイル: InterpetedPathPart.cs プロジェクト: rauldoblem/Tac
 public IInterpetedResult <IInterpetedMember <T> > Interpet(InterpetedContext interpetedContext)
 {
     return(InterpetedResult.Create(interpetedContext.GetMember <T>(MemberDefinition.Key)));
 }
コード例 #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 abstract IInterpetedResult <IInterpetedMember <TOut> > Interpet(InterpetedContext interpetedContext);
コード例 #17
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))));
        }
コード例 #18
0
 internal static IInterpetedImplementation <TIn, TMethodIn, TMethodOut> Implementation <TIn, TMethodIn, TMethodOut>(InterpetedMemberDefinition <TMethodIn> parameterDefinition,
                                                                                                                    InterpetedMemberDefinition <TIn> contextDefinition,
                                                                                                                    IInterpetedOperation <IInterpetedAnyType>[] body,
                                                                                                                    InterpetedContext context,
                                                                                                                    IInterpetedScopeTemplate scope,
                                                                                                                    IImplementationType implementationType)
     where TIn : class, IInterpetedAnyType
     where TMethodIn : class, IInterpetedAnyType
     where TMethodOut : class, IInterpetedAnyType
 => Root(new Func <IRunTimeAnyRoot, RunTimeAnyRootEntry>[] { InterpetedImplementationIntention <TIn, TMethodIn, TMethodOut>(parameterDefinition, contextDefinition, body, context, scope, implementationType) }).Has <IInterpetedImplementation <TIn, TMethodIn, TMethodOut> >();
コード例 #19
0
 public IInterpetedResult <IInterpetedMember <IInterpedEmpty> > Interpet(InterpetedContext interpetedContext)
 {
     return(InterpetedResult.Create(TypeManager.EmptyMember(TypeManager.Empty())));
 }
コード例 #20
0
        public IInterpetedResult <IInterpetedMember <IInterpetedImplementation <TIn, TMethodIn, TMethodOut> > > Interpet(InterpetedContext interpetedContext)
        {
            var thing = TypeManager.Implementation <TIn, TMethodIn, TMethodOut>(
                ParameterDefinition,
                ContextDefinition,
                MethodBody,
                interpetedContext,
                Scope,
                ImplementationType);

            return(InterpetedResult.Create(
                       TypeManager.Member(
                           thing.Convert(TransformerExtensions.NewConversionContext()),
                           thing
                           )));
        }
コード例 #21
0
 public IInterpetedResult <IInterpetedMember <IBoxedDouble> > Interpet(InterpetedContext interpetedContext)
 {
     return(InterpetedResult.Create(TypeManager.NumberMember(TypeManager.Double(Value))));
 }