public override void Visit(CallStatement statement) { var tcv = new TypeCheckVisitor(); if (statement.ArgumentExpressions.Count != statement.Target.Parameters.Count) throw new Exception("Parameter count mismatch"); for (var i = 0; i < statement.ArgumentExpressions.Count; i++) { statement.ArgumentExpressions[i].AcceptVisitor(tcv); if (tcv.ResultType != statement.Target.Parameters[i].Type.ToReflectionType()) throw new Exception("Parameter type mismatch"); } }
public override void Visit(CallStatement statement) { var tcv = new TypeCheckVisitor(); if (statement.ArgumentExpressions.Count != statement.Target.Parameters.Count) { throw new Exception("Parameter count mismatch"); } for (var i = 0; i < statement.ArgumentExpressions.Count; i++) { statement.ArgumentExpressions[i].AcceptVisitor(tcv); if (tcv.ResultType != statement.Target.Parameters[i].Type.ToReflectionType()) { throw new Exception("Parameter type mismatch"); } } }
void VerifyElements() { var tcv = new TypeCheckVisitor(); var csv = new CallStatementVisitor(); foreach (var element in Elements) element.AcceptVisitor(tcv); foreach (var call in Elements.Where(ele => ele is CallStatement)) call.AcceptVisitor(csv); }