public override bool canConvertTo(CClass klass) { CFunctionType target = klass as CFunctionType; if (target == null) { return(base.canConvertTo(klass)); } UpdateName(); target.UpdateName(); return(Name == target.Name); }
public static bool PossibleMatch(CFunctionType from, CFunctionType to) { if (from.Target.Arguments.Count != to.Target.Arguments.Count) return false; for (int i = 0; i < from.Target.Arguments.Count; i++) { if (from.Target.Arguments[i].Direction.Value != to.Target.Arguments[i].Direction.Value) return false; if (from.Target.Arguments[i].Type.Resolved && to.Target.Arguments[i].Type.Resolved && from.Target.Arguments[i].Type.ActualType != to.Target.Arguments[i].Type.ActualType) return false; } return true; }
internal CStatementBlock StartInitialize(CFunction containingFunction, CFile containingFile, CTypeRef tref, CArgumentList args) { if (lambdaFunction != null) throw new InvalidOperationException("Lambdas can only be initalized once"); CClass @class = null; string extra = ""; if (containingFunction != null) { @class = containingFunction.Class; extra += containingFunction.RawName; } lambdaFunction = new CLambdaFunction(Token, containingFunction, containingFile, "Lambda_" + extra + "_" + lambdaId, tref, args); base.LoadType(lambdaType = new CFunctionType(Token, lambdaFunction, false)); lambdaFunction.Class = @class; return lambdaFunction.Statements; }
public static bool PossibleMatch(CFunctionType from, CFunctionType to) { if (from.Target.Arguments.Count != to.Target.Arguments.Count) { return(false); } for (int i = 0; i < from.Target.Arguments.Count; i++) { if (from.Target.Arguments[i].Direction.Value != to.Target.Arguments[i].Direction.Value) { return(false); } if (from.Target.Arguments[i].Type.Resolved && to.Target.Arguments[i].Type.Resolved && from.Target.Arguments[i].Type.ActualType != to.Target.Arguments[i].Type.ActualType) { return(false); } } return(true); }
internal CStatementBlock StartInitialize(CFunction containingFunction, CFile containingFile, CTypeRef tref, CArgumentList args) { if (lambdaFunction != null) { throw new InvalidOperationException("Lambdas can only be initalized once"); } CClass @class = null; string extra = ""; if (containingFunction != null) { @class = containingFunction.Class; extra += containingFunction.RawName; } lambdaFunction = new CLambdaFunction(Token, containingFunction, containingFile, "Lambda_" + extra + "_" + lambdaId, tref, args); base.LoadType(lambdaType = new CFunctionType(Token, lambdaFunction, false)); lambdaFunction.Class = @class; return(lambdaFunction.Statements); }