10.1.4
FossilOrigin-Name: f49d9465e02a773fe8b1add8537291fd03620b1c6f14f3b0846a4aa4d362ee5f
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