Переглянути джерело

Modify string constructor to allow no arguments (#226)

* Modify String Constructor

* Add check to restrict arguments
Anurag Bhat 2 роки тому
батько
коміт
2ab819a724
2 змінених файлів з 6 додано та 1 видалено
  1. 5 1
      src/pocketpy.cpp
  2. 1 0
      tests/04_str.py

+ 5 - 1
src/pocketpy.cpp

@@ -496,7 +496,11 @@ void init_builtins(VM* _vm) {
     });
 
     // tp_str
-    _vm->bind_constructor<2>(_vm->_t(VM::tp_str), PK_LAMBDA(vm->py_str(args[1])));
+    _vm->bind_constructor<-1>(_vm->_t(VM::tp_str), [](VM* vm, ArgsView args) {
+        if(args.size() == 1) return VAR(Str());
+        if(args.size() > 2) vm->TypeError("str() takes at most 1 argument");
+        return vm->py_str(args[1]);
+    });
 
     _vm->bind__hash__(VM::tp_str, [](VM* vm, PyObject* _0) {
         return (i64)_CAST(Str&, _0).hash();

+ 1 - 0
tests/04_str.py

@@ -14,6 +14,7 @@ assert repr('\\\n\t\'\r\b\x48') == r"'\\\n\t\'\r\bH'"
 a = ''
 b = 'test'
 c ='test'
+assert a == str()
 assert len(a) == 0
 assert len(b) == 4
 assert b == c