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!"); }
public bool TryAddMember(IKey key, IInterpetedMember member) { if (object.ReferenceEquals(member, Backing.GetOrAdd(key, member))) { return(true); } return(false); }
public bool TryAddMember <T>(IKey key, IInterpetedMember <T> member) where T : IInterpetedAnyType { if (object.ReferenceEquals(member, Backing.GetOrAdd(key, member))) { return(true); } return(false); }
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))); }
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))); }
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)); }