示例#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 bool TryAddMember(IKey key, IInterpetedMember member)
 {
     if (object.ReferenceEquals(member, Backing.GetOrAdd(key, member)))
     {
         return(true);
     }
     return(false);
 }
示例#3
0
 public bool TryAddMember <T>(IKey key, IInterpetedMember <T> member) where T : IInterpetedAnyType
 {
     if (object.ReferenceEquals(member, Backing.GetOrAdd(key, member)))
     {
         return(true);
     }
     return(false);
 }
示例#4
0
            public IInterpetedResult <IInterpetedMember> Invoke(IInterpetedMember input)
            {
                var context = InterpetedContext.Child(TypeManager.InstanceScope((contextDefinition.Key, input)));

                ImplementationType.OutputType.SafeIs(out MethodType outputMethod);
                var thing = InternalMethod(
                    ParameterDefinition,
                    Body,
                    context,
                    Scope,
                    Tac.Model.Instantiated.MethodType.CreateAndBuild(
                        outputMethod.InputType,
                        outputMethod.OutputType));

                return
                    (InterpetedResult.Create(
                         Member(
                             thing.Convert(TransformerExtensions.NewConversionContext()),
                             thing)));
            }
示例#5
0
            public IInterpetedResult <IInterpetedMember> Invoke(IInterpetedMember input)
            {
                var res = Scope.Create();

                res.GetMember(ParameterDefinition.Key).CastTo <IInterpetedMemberSet>().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.CastTo <IInterpetedMember>()));
                    }
                }

                if (MethodType.OutputType is EmptyType)
                {
                    return(InterpetedResult.Create(TypeManager.EmptyMember(TypeManager.Empty())));
                }

                throw new System.Exception("method did not return!");
            }
            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)));
            }
示例#7
0
            public IInterpetedResult <IInterpetedMember> Invoke(IInterpetedMember input)
            {
                var thing = Backing(input.Value);

                return(InterpetedResult.Create(Member(thing.Convert(TransformerExtensions.NewConversionContext()), thing)));
            }
 internal bool TryAddMember <T>(IKey key, IInterpetedMember <T> member) where T : IInterpetedAnyType
 {
     return(Scopes.First().TryAddMember(key, member));
 }
 internal bool TryAddMember(IKey key, IInterpetedMember member)
 {
     return(Scopes[0].TryAddMember(key, member));
 }