Kenny bf849ff674 async def syntax rigor and __await__ magic method
Some examples of improved compliance with CPython that currently
have divergent behavior in CircuitPython are listed below:

* yield from is not allowed in async methods
```
>>> async def f():
...     yield from 'abc'
...
Traceback (most recent call last):
  File "<stdin>", line 2, in f
SyntaxError: 'yield from' inside async function
```

* await only works on awaitable expressions
```
>>> async def f():
...     await 'not awaitable'
...
>>> f().send(None)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in f
AttributeError: 'str' object has no attribute '__await__'
```

* only __await__()able expressions are awaitable
Okay this one actually does not work in circuitpython at all today.
This is how CPython works though and pretending __await__ does not
exist will only bite users who write both.
```
>>> class c:
...     pass
...
>>> def f(self):
...     yield
...     yield
...     return 'f to pay respects'
...
>>> c.__await__ = f  # could just as easily have put it on the class but this shows how it's wired
>>> async def g():
...     awaitable_thing = c()
...     partial = await awaitable_thing
...     return 'press ' + partial
...
>>> q = g()
>>> q.send(None)
>>> q.send(None)
>>> q.send(None)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration: press f to pay respects
```
2020-10-10 15:45:08 -07:00
..
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-09-21 16:44:26 -05:00
2020-09-21 16:44:26 -05:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-03-03 10:55:50 -08:00
2020-07-17 17:15:03 -07:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2019-04-05 21:38:32 +02:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-08-02 11:36:38 -04:00
2018-10-18 10:37:42 -07:00
2020-07-06 19:16:25 +01:00
2020-08-19 14:23:28 -07:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-13 22:54:52 -05:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2019-01-18 11:53:09 -08:00
2020-08-04 18:42:09 -05:00
2020-08-19 14:23:28 -07:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-08-04 18:42:09 -05:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-09-12 15:11:29 -05:00
2020-07-06 19:16:25 +01:00
2020-08-04 14:45:45 -05:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-09-21 16:44:26 -05:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2018-05-14 17:41:17 -04:00
2018-05-14 17:41:17 -04:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-04-21 22:40:12 -04:00
2020-04-21 22:40:12 -04:00
2020-08-21 11:00:02 -07:00
2020-08-21 11:00:02 -07:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00
2020-07-06 19:16:25 +01:00