Пример #1
0
        protected override bool assignableFrom(IType other)
        {
            var otherType = other as TypeFunction;

            if (otherType != null)
            {
                return(otherType.ArgType.AssignableFrom(ArgType) && ReturnType.AssignableFrom(otherType.ReturnType));
            }
            return(false);
        }
Пример #2
0
 public static Variable GetAssignableTo(this IEnumerable <Variable> self, string name, IType assignableTo)
 {
     foreach (var variable in self)
     {
         if (variable.Name == name && (assignableTo == null || assignableTo.AssignableFrom(variable.Type)))
         {
             return(variable);
         }
     }
     return(null);
 }
Пример #3
0
        public Expr Analyze(ExprBuilderObj builder, IType expectedType)
        {
            if (ExpectedType == expectedType)
            {
                return(builder.Build(this));
            }
            var expr = builder.Build(WithExpectedType(expectedType));

            if (expectedType != null && !expectedType.AssignableFrom(expr.Type))
            {
                Fail("Unexpected type: " + expr.Type + ", expected: " + expectedType, builder);
            }
            return(expr);
        }
Пример #4
0
 public static bool Matches(this IType a, IType b)
 => a == b || (a.AssignableFrom(b) && b.AssignableFrom(a));
Пример #5
0
 public bool AssignableFrom(IType other)
 => wrappedType.AssignableFrom(other.ConcreteType);