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)))); }
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!"); }