summaryrefslogtreecommitdiff
path: root/tests/basics/io_stringio_base.py
diff options
context:
space:
mode:
authorJim Mussared <jim.mussared@gmail.com>2022-09-16 23:57:38 +1000
committerDamien George <damien@micropython.org>2022-09-19 19:06:13 +1000
commit6da41b59007c9e9a2443ae17278d32210034a63f (patch)
tree7acd771be49b744b64571426c3e4c185abf31175 /tests/basics/io_stringio_base.py
parent3c6127dfcfc63a2b48c31f751d1ae2c385874c8a (diff)
py/obj: Merge getiter and iternext mp_obj_type_t slots.
The goal here is to remove a slot (making way to turn make_new into a slot) as well as reduce code size by the ~40 references to mp_identity_getiter and mp_stream_unbuffered_iter. This introduces two new type flags: - MP_TYPE_FLAG_ITER_IS_ITERNEXT: This means that the "iter" slot in the type is "iternext", and should use the identity getiter. - MP_TYPE_FLAG_ITER_IS_CUSTOM: This means that the "iter" slot is a pointer to a mp_getiter_iternext_custom_t instance, which then defines both getiter and iternext. And a third flag that is the OR of both, MP_TYPE_FLAG_ITER_IS_STREAM: This means that the type should use the identity getiter, and mp_stream_unbuffered_iter as iternext. Finally, MP_TYPE_FLAG_ITER_IS_GETITER is defined as a no-op flag to give the default case where "iter" is "getiter". Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
Diffstat (limited to 'tests/basics/io_stringio_base.py')
-rw-r--r--tests/basics/io_stringio_base.py24
1 files changed, 24 insertions, 0 deletions
diff --git a/tests/basics/io_stringio_base.py b/tests/basics/io_stringio_base.py
new file mode 100644
index 000000000..dffc87907
--- /dev/null
+++ b/tests/basics/io_stringio_base.py
@@ -0,0 +1,24 @@
+# Checks that an instance type inheriting from a native base that uses
+# MP_TYPE_FLAG_ITER_IS_STREAM will still have a getiter.
+
+try:
+ import uio as io
+except ImportError:
+ import io
+
+a = io.StringIO()
+a.write("hello\nworld\nmicro\npython\n")
+a.seek(0)
+
+for line in a:
+ print(line)
+
+class X(io.StringIO):
+ pass
+
+b = X()
+b.write("hello\nworld\nmicro\npython\n")
+b.seek(0)
+
+for line in b:
+ print(line)