10.1.4
FossilOrigin-Name: f49d9465e02a773fe8b1add8537291fd03620b1c6f14f3b0846a4aa4d362ee5f
change okvttvrlqsurxllxxptqlvoyulzmslrr
commit 73c4dad1bb84ced91979face29fff0c9da100a25
author alpha <alpha@kejadlen.dev>
date
parent owtnpzpq
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