blueloveTH 2 years ago
parent
commit
e107531862
2 changed files with 7 additions and 11 deletions
  1. 0 3
      python/builtins.py
  2. 7 8
      src/pocketpy.cpp

+ 0 - 3
python/builtins.py

@@ -4,9 +4,6 @@ def print(*args, sep=' ', end='\n'):
     s = sep.join([str(i) for i in args])
     _sys.stdout.write(s + end)
 
-def abs(x):
-    return -x if x < 0 else x
-
 def max(*args, key=None):
     if key is None:
         key = lambda x: x

+ 7 - 8
src/pocketpy.cpp

@@ -139,14 +139,6 @@ void init_builtins(VM* _vm) {
         return VAR(MappingProxy(mod));
     });
 
-    // def round(x, ndigits=0):
-    //     assert ndigits >= 0
-    //     if ndigits == 0:
-    //         return int(x + 0.5) if x >= 0 else int(x - 0.5)
-    //     if x >= 0:
-    //         return int(x * 10**ndigits + 0.5) / 10**ndigits
-    //     else:
-    //         return int(x * 10**ndigits - 0.5) / 10**ndigits
     _vm->bind(_vm->builtins, "round(x, ndigits=0)", [](VM* vm, ArgsView args) {
         f64 x = CAST(f64, args[0]);
         int ndigits = CAST(int, args[1]);
@@ -161,6 +153,13 @@ void init_builtins(VM* _vm) {
         }
     });
 
+    _vm->bind_builtin_func<1>("abs", [](VM* vm, ArgsView args) {
+        if(is_int(args[0])) return VAR(std::abs(_CAST(i64, args[0])));
+        if(is_float(args[0])) return VAR(std::abs(_CAST(f64, args[0])));
+        vm->TypeError("bad operand type for abs()");
+        return vm->None;
+    });
+
     _vm->bind_builtin_func<1>("id", [](VM* vm, ArgsView args) {
         PyObject* obj = args[0];
         if(is_tagged(obj)) return vm->None;