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 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 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)); }
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))); }
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))); }
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 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 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)))); }
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!"); }
public IInterpetedResult <IInterpetedMember <TOut> > Invoke(IInterpetedMember <TIn> input) { var thing = Backing(input.Value); return(InterpetedResult.Create(Member(thing.Convert(TransformerExtensions.NewConversionContext()), thing))); }
public IInterpetedResult <IInterpetedMember <IBoxedBool> > Interpet(InterpetedContext interpetedContext) { return(InterpetedResult.Create(TypeManager.BoolMember(TypeManager.Bool(Value)))); }
public IInterpetedResult <IInterpetedMember <IBoxedString> > Interpet(InterpetedContext interpetedContext) { return(InterpetedResult.Create(TypeManager.StringMember(TypeManager.String(Value)))); }
public IInterpetedResult <IInterpetedMember <T> > Interpet(InterpetedContext interpetedContext) { return(InterpetedResult.Create(interpetedContext.GetMember <T>(MemberDefinition.Key))); }
public IInterpetedResult <IInterpetedMember <IInterpedEmpty> > Interpet(InterpetedContext interpetedContext) { return(InterpetedResult.Create(TypeManager.EmptyMember(TypeManager.Empty()))); }
public IInterpetedResult <IInterpetedMember <IBoxedDouble> > Interpet(InterpetedContext interpetedContext) { return(InterpetedResult.Create(TypeManager.NumberMember(TypeManager.Double(Value)))); }