예제 #1
0
        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());
        }
예제 #2
0
        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());
        }
예제 #3
0
 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);
     }
 }
예제 #4
0
        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> >());
        }
예제 #5
0
 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);
     }
 }