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) { ResultType = statement.Target.ReturnType.ToReflectionType(); }
public abstract void Visit(CallStatement statement);