Damien George
2c7a3061d5
py/runtime: Remove nlr protection when calling __next__ in mp_resume.
...
And remove related comment about needing such protection when calling send.
Reasoning for removal is as follows:
- mp_resume is only called by the VM in YIELD_FROM opcode
- if send_value != MP_OBJ_NULL then throw_value == MP_OBJ_NULL
- so if __next__ or send are called then throw_value == MP_OBJ_NULL
- if __next__ or send raise an exception without nlr protection then the
exception will be handled by the global exception handler of the VM
- this handler already has code to handle exceptions raised in YIELD_FROM,
including correct handling of StopIteration
- this handler doesn't handle the case of injection of GeneratorExit, but
this won't be needed because throw_value == MP_OBJ_NULL
Note that it's already possible for mp_resume() to raise an exception
(including StopIteration) from the unprotected call to type->iternext(), so
that's why the VM already has code to handle the case of exceptions coming
out of mp_resume().
This commit reduces code size by a bit, and significantly reduces C stack
usage when using yield-from, from 88 bytes down to 40 for Thumb2, and 152
down to 72 bytes for x86-64 (better than half). (Note that gcc doesn't
seem to tail-call optimise the call from mp_resume() to mp_obj_gen_resume()
so this saving in C stack usage helps all uses of yield-from.)
2018-09-28 22:16:56 +10:00
..
2018-09-20 14:33:10 +10:00
2018-08-16 13:45:24 +10:00
2018-09-27 23:39:08 +10:00
2017-12-08 19:07:00 +11:00
2016-12-09 22:50:58 +11:00
2018-09-27 23:39:08 +10:00
2018-09-27 23:39:08 +10:00
2018-09-27 23:39:08 +10:00
2018-09-27 23:39:08 +10:00
2018-09-27 23:39:08 +10:00
2018-09-27 23:39:08 +10:00
2018-09-16 00:43:24 +10:00
2018-09-27 23:39:08 +10:00
2017-10-05 10:49:44 +11:00
2017-10-10 10:37:38 +11:00
2017-10-04 12:37:50 +11:00
2017-11-16 13:17:51 +11:00
2017-08-17 16:19:35 +10:00
2018-06-27 14:54:40 +10:00
2017-10-04 12:37:50 +11:00
2018-07-08 21:31:09 +10:00
2018-02-20 18:00:44 +11:00
2018-09-27 23:39:08 +10:00
2018-09-15 12:17:09 +10:00
2018-09-15 13:00:11 +10:00
2018-09-15 13:00:11 +10:00
2018-05-23 00:22:47 +10:00
2018-09-15 22:39:27 +10:00
2018-09-15 12:17:09 +10:00
2018-09-20 14:33:10 +10:00
2018-09-20 14:33:10 +10:00
2018-09-04 14:31:28 +10:00
2018-09-28 00:04:10 +10:00
2018-09-04 14:31:28 +10:00
2018-09-04 14:31:28 +10:00
2018-09-15 22:39:27 +10:00
2018-09-04 14:31:28 +10:00
2018-03-01 17:00:02 +11:00
2017-07-31 18:35:40 +10:00
2017-07-31 18:35:40 +10:00
2017-07-31 18:35:40 +10:00
2018-08-14 16:11:21 +10:00
2018-06-12 11:55:29 +10:00
2018-06-22 17:00:29 +10:00
2018-06-12 12:17:43 +10:00
2017-07-31 18:35:40 +10:00
2018-05-10 23:14:23 +10:00
2018-03-16 23:54:06 +11:00
2018-02-22 12:48:51 +11:00
2018-07-09 14:40:02 +10:00
2018-08-02 14:17:24 +10:00
2018-05-18 23:31:00 +10:00
2017-11-15 11:56:58 +11:00
2018-06-12 13:53:43 +10:00
2017-07-31 18:35:40 +10:00
2018-09-20 14:41:35 +10:00
2017-08-30 21:02:00 +10:00
2018-02-21 22:39:25 +11:00
2017-08-30 21:02:00 +10:00
2018-06-12 12:29:26 +10:00
2018-09-26 15:03:04 +10:00
2018-04-04 14:24:03 +10:00
2017-09-01 11:11:09 +10:00
2018-06-20 15:57:10 +10:00
2017-12-11 13:49:09 +11:00
2017-02-22 12:58:11 +11:00
2018-09-26 15:03:04 +10:00
2018-05-01 15:53:25 +10:00
2017-07-31 18:35:40 +10:00
2017-12-07 10:31:14 +02:00
2017-07-31 18:35:40 +10:00
2017-07-31 18:35:40 +10:00
2018-06-12 15:06:11 +10:00
2017-07-18 11:57:39 +10:00
2018-05-21 12:48:26 +10:00
2017-12-29 14:05:48 +11:00
2018-09-15 22:39:27 +10:00
2017-12-29 22:24:53 +11:00
2017-12-29 22:24:46 +11:00
2017-12-28 16:46:30 +11:00
2018-04-27 15:10:42 +10:00
2017-12-29 22:24:46 +11:00
2018-05-15 11:17:28 +10:00
2017-12-28 16:46:30 +11:00
2018-09-20 14:33:10 +10:00
2018-09-26 15:34:59 +10:00
2018-09-11 15:10:10 +10:00
2018-06-18 13:40:53 +10:00
2017-07-31 18:35:40 +10:00
2017-10-04 12:37:50 +11:00
2017-12-11 13:49:09 +11:00
2017-07-31 18:35:40 +10:00
2017-07-31 18:35:40 +10:00
2018-09-20 14:33:10 +10:00
2018-05-11 13:44:50 +10:00
2018-09-27 15:14:12 +10:00
2017-07-31 18:35:40 +10:00
2018-03-17 00:31:40 +11:00
2018-03-17 00:31:40 +11:00
2017-07-31 18:35:40 +10:00
2018-09-27 15:21:25 +10:00
2018-09-15 22:39:27 +10:00
2018-07-10 16:33:57 +10:00
2018-09-27 15:18:24 +10:00
2017-07-31 18:35:40 +10:00
2017-10-04 12:37:50 +11:00
2018-09-20 14:33:10 +10:00
2018-09-20 14:33:10 +10:00
2018-09-27 15:15:29 +10:00
2017-09-18 00:06:43 +03:00
2017-10-24 22:39:36 +11:00
2018-03-13 14:03:15 +11:00
2017-07-31 18:35:40 +10:00
2018-09-27 15:16:24 +10:00
2018-02-20 17:56:58 +11:00
2017-11-20 09:30:06 +02:00
2017-11-20 09:30:06 +02:00
2017-10-04 12:37:50 +11:00
2017-12-12 16:53:44 +11:00
2017-10-04 12:37:50 +11:00
2017-10-04 12:37:50 +11:00
2018-02-14 23:17:06 +11:00
2017-10-04 12:37:50 +11:00
2017-12-19 14:01:19 +11:00
2017-10-04 12:37:50 +11:00
2018-09-27 11:23:31 +10:00
2018-09-26 15:29:41 +10:00
2017-11-16 13:53:04 +11:00
2018-04-10 13:41:32 +10:00
2017-06-09 17:33:01 +03:00
2018-02-14 18:19:22 +11:00
2017-10-04 12:37:50 +11:00
2017-08-29 13:16:30 +10:00
2018-09-20 14:33:10 +10:00
2018-06-08 11:48:25 +10:00
2017-07-31 18:35:40 +10:00
2017-11-24 14:48:23 +11:00
2018-09-20 14:33:10 +10:00
2017-07-31 18:35:40 +10:00
2018-09-20 22:06:41 +10:00
2017-07-31 18:35:40 +10:00
2017-07-31 18:35:40 +10:00
2017-07-31 18:35:40 +10:00
2018-02-14 18:41:17 +11:00
2016-11-16 18:13:50 +11:00
2018-09-08 00:07:23 +10:00
2018-02-19 00:26:14 +11:00
2017-12-11 13:49:09 +11:00
2017-11-29 17:01:39 +11:00
2018-02-19 16:12:44 +11:00
2018-09-20 14:41:35 +10:00
2018-06-06 14:28:23 +10:00
2017-03-14 11:52:05 +11:00
2018-05-18 15:23:02 +10:00
2017-07-31 18:35:40 +10:00
2017-07-18 11:57:39 +10:00
2018-09-27 23:39:08 +10:00
2017-12-05 00:38:41 +02:00
2018-09-28 22:16:56 +10:00
2018-09-26 15:34:59 +10:00
2017-03-20 15:20:26 +11:00
2017-07-31 18:35:40 +10:00
2018-09-27 23:39:08 +10:00
2017-10-04 12:37:50 +11:00
2017-10-05 10:49:44 +11:00
2017-07-31 18:35:40 +10:00
2017-12-11 22:39:12 +11:00
2017-12-11 13:49:09 +11:00
2017-07-31 18:35:40 +10:00
2018-08-14 17:36:08 +10:00
2018-08-14 17:36:08 +10:00
2018-02-14 18:19:22 +11:00
2017-09-06 16:43:09 +10:00
2018-09-28 11:39:35 +10:00
2017-10-05 10:49:44 +11:00
2017-09-21 20:29:41 +10:00
2017-09-26 11:59:11 +10:00