From 29d285dc451848de2db8206b6d35e3d625ec32b8 Mon Sep 17 00:00:00 2001 From: alpha Date: Mon, 15 Aug 2022 23:25:36 +0000 Subject: [PATCH] 10.1.4 FossilOrigin-Name: f49d9465e02a773fe8b1add8537291fd03620b1c6f14f3b0846a4aa4d362ee5f --- ruby/lib/lox/interpreter.rb | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ruby/lib/lox/interpreter.rb b/ruby/lib/lox/interpreter.rb index 703389e..28904cc 100644 --- a/ruby/lib/lox/interpreter.rb +++ b/ruby/lib/lox/interpreter.rb @@ -141,10 +141,13 @@ module Lox end def visit_call(expr) - callee = evaluate(expr.callee) + func = evaluate(expr.callee) args = expr.args.map { evaluate(_1) } - callee.call(self, args) + raise RuntimeError.new(expr.paren, "Can only call functions and classes.") unless func.respond_to?(:call) + raise RuntimeError.new(expr.paren, "Expected #{func.arity} arguments but got #{args.size}.") unless args.size == func.arity + + func.call(self, args) end private