From c8b71d922356e2642d03f3ab0ca0aef680314e3a Mon Sep 17 00:00:00 2001 From: BLUELOVETH Date: Mon, 7 Aug 2023 17:21:13 +0800 Subject: [PATCH] fix https://github.com/blueloveTH/pocketpy/issues/126 --- src/pocketpy.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/pocketpy.cpp b/src/pocketpy.cpp index 9f2be850..09677fe5 100644 --- a/src/pocketpy.cpp +++ b/src/pocketpy.cpp @@ -366,12 +366,14 @@ void init_builtins(VM* _vm) { /************ int ************/ _vm->bind_constructor<-1>("int", [](VM* vm, ArgsView args) { if(args.size() == 1+0) return VAR(0); + // 1 arg if(args.size() == 1+1){ if (is_type(args[1], vm->tp_float)) return VAR((i64)CAST(f64, args[1])); if (is_type(args[1], vm->tp_int)) return args[1]; if (is_type(args[1], vm->tp_bool)) return VAR(_CAST(bool, args[1]) ? 1 : 0); } if(args.size() > 1+2) vm->TypeError("int() takes at most 2 arguments"); + // 2 args if (is_type(args[1], vm->tp_str)) { int base = 10; if(args.size() == 1+2) base = CAST(i64, args[2]); @@ -430,7 +432,10 @@ void init_builtins(VM* _vm) { #undef INT_BITWISE_OP /************ float ************/ - _vm->bind_constructor<2>("float", [](VM* vm, ArgsView args) { + _vm->bind_constructor<-1>("float", [](VM* vm, ArgsView args) { + if(args.size() == 1+0) return VAR(0.0); + if(args.size() > 1+1) vm->TypeError("float() takes at most 1 argument"); + // 1 arg if (is_type(args[1], vm->tp_int)) return VAR((f64)CAST(i64, args[1])); if (is_type(args[1], vm->tp_float)) return args[1]; if (is_type(args[1], vm->tp_bool)) return VAR(_CAST(bool, args[1]) ? 1.0 : 0.0); @@ -445,7 +450,7 @@ void init_builtins(VM* _vm) { vm->ValueError("invalid literal for float(): " + s.escape()); } } - vm->TypeError("float() argument must be a int, float, bool or str"); + vm->TypeError("invalid arguments for float()"); return vm->None; });