public IReadOnlyList <IMemberDefinition> TryAssignOperation(ITryAssignOperation tryAssignOperation) { var implementationClosure = Walk(tryAssignOperation.Operands); return(implementationClosure .Except(staticMembers) .Except(tryAssignOperation.Scope.Members.Select(x => x.Value.Value)).ToArray()); }
public Nothing TryAssignOperation(ITryAssignOperation tryAssignOperation) { var owner = GetOwner(); foreach (var entry in tryAssignOperation.Scope.Members.Values.Select(x => x.Value)) { lookup.AddLocal(owner, entry); } Push(tryAssignOperation).Walk(tryAssignOperation.Operands); return(new Nothing()); }
public IInterpetedOperation TryAssignOperation(ITryAssignOperation co) { if (backing.TryGetValue(co, out var res)) { return(res); } else { var op = new InterpetedTryAssignOperation(); backing.Add(co, op); op.Init( co.Left.Convert(this), co.Right.Convert(this), co.Block.Convert(this), new InterpetedScopeTemplate(co.Scope, co.Scope.ToVerifiableType())); return(op); } }
public IInterpetedOperation <IInterpetedAnyType> TryAssignOperation(ITryAssignOperation co) { var method = GetMethod(new Type[] { TypeMap.MapType(co.Left.Returns()), TypeMap.MapType(co.Right.Returns()) }, nameof(TryAssignOperation)); return(method.Invoke(this, new object[] { co }).Cast <IInterpetedOperation <IInterpetedAnyType> >()); }
private IInterpetedOperation <IInterpetedAnyType> TryAssignOperation <TLeft, TRight>(ITryAssignOperation co) where TRight : class, IInterpetedAnyType where TLeft : class, IInterpetedAnyType { if (backing.TryGetValue(co, out var res)) { return(res); } else { var op = new InterpetedTryAssignOperation <TLeft, TRight>(); backing.Add(co, op); op.Init( co.Left.Convert(this).Cast <IInterpetedOperation <TLeft> >(), co.Right.Convert(this).Cast <IInterpetedOperation <TRight> >()); return(op); } }