blueloveTH 2 سال پیش
والد
کامیت
c7ec20a11e
1فایلهای تغییر یافته به همراه5 افزوده شده و 8 حذف شده
  1. 5 8
      src/vm.h

+ 5 - 8
src/vm.h

@@ -356,7 +356,7 @@ public:
 inline PyObject* NativeFunc::operator()(VM* vm, Args& args) const{
     int args_size = args.size() - (int)method;  // remove self
     if(argc != -1 && args_size != argc) {
-        vm->TypeError("expected " + std::to_string(argc) + " arguments, but got " + std::to_string(args_size));
+        vm->TypeError(fmt("expected ", argc, " arguments, but got ", args_size));
     }
     return f(vm, args);
 }
@@ -695,15 +695,12 @@ inline PyObject* VM::_py_call(PyObject* callable, ArgsView args, ArgsView kwargs
     FastLocals locals(co);
 
     int i = 0;
-    for(int index: fn.decl->args){
-        if(i < args.size()){
-            locals[index] = args[i++];
-        }else{
-            StrName name = co->varnames[index];
-            TypeError(fmt("missing positional argument ", name.escape()));
-        }
+    if(args.size() < fn.decl->args.size()){
+        vm->TypeError(fmt("expected ", fn.decl->args.size(), " positional arguments, but got ", args.size()));
     }
 
+    // prepare args
+    for(int index: fn.decl->args) locals[index] = args[i++];
     // prepare kwdefaults
     for(auto& kv: fn.decl->kwargs) locals[kv.key] = kv.value;