aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien George2017-07-07 11:47:38 +1000
committerDamien George2017-07-07 11:47:38 +1000
commitf69ab79ec8347c1f5ff0c6f31947ec06073fbd52 (patch)
treea84ff982244ae882ed3bb81feacf4f539698ba9b
parent145796f037715e180b441b38c1ec1ba45ff77797 (diff)
py/objgenerator: Allow to hash generators and generator instances.
Adds nothing to the code size, since it uses existing empty slots in the type structures.
-rw-r--r--py/objgenerator.c2
-rw-r--r--tests/basics/builtin_hash_gen.py7
-rwxr-xr-xtests/run-tests1
3 files changed, 10 insertions, 0 deletions
diff --git a/py/objgenerator.c b/py/objgenerator.c
index 8cb0e60cc..9d6e636b3 100644
--- a/py/objgenerator.c
+++ b/py/objgenerator.c
@@ -74,6 +74,7 @@ const mp_obj_type_t mp_type_gen_wrap = {
{ &mp_type_type },
.name = MP_QSTR_generator,
.call = gen_wrap_call,
+ .unary_op = mp_generic_unary_op,
};
mp_obj_t mp_obj_new_gen_wrap(mp_obj_t fun) {
@@ -235,6 +236,7 @@ const mp_obj_type_t mp_type_gen_instance = {
{ &mp_type_type },
.name = MP_QSTR_generator,
.print = gen_instance_print,
+ .unary_op = mp_generic_unary_op,
.getiter = mp_identity_getiter,
.iternext = gen_instance_iternext,
.locals_dict = (mp_obj_dict_t*)&gen_instance_locals_dict,
diff --git a/tests/basics/builtin_hash_gen.py b/tests/basics/builtin_hash_gen.py
new file mode 100644
index 000000000..d42e5ebfb
--- /dev/null
+++ b/tests/basics/builtin_hash_gen.py
@@ -0,0 +1,7 @@
+# test builtin hash function, on generators
+
+def gen():
+ yield
+
+print(type(hash(gen)))
+print(type(hash(gen())))
diff --git a/tests/run-tests b/tests/run-tests
index f65124286..bd4a1363c 100755
--- a/tests/run-tests
+++ b/tests/run-tests
@@ -323,6 +323,7 @@ def run_tests(pyb, tests, args, base_path="."):
skip_tests.update({'basics/%s.py' % t for t in 'with_break with_continue with_return'.split()}) # require complete with support
skip_tests.add('basics/array_construct2.py') # requires generators
skip_tests.add('basics/bool1.py') # seems to randomly fail
+ skip_tests.add('basics/builtin_hash_gen.py') # requires yield
skip_tests.add('basics/class_bind_self.py') # requires yield
skip_tests.add('basics/del_deref.py') # requires checking for unbound local
skip_tests.add('basics/del_local.py') # requires checking for unbound local