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); }
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); }
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); }
public static bool Matches(this IType a, IType b) => a == b || (a.AssignableFrom(b) && b.AssignableFrom(a));
public bool AssignableFrom(IType other) => wrappedType.AssignableFrom(other.ConcreteType);