micropython/ports/unix
Jim Mussared 692d36d779 py: Implement partial PEP-498 (f-string) support.
This implements (most of) the PEP-498 spec for f-strings and is based on
https://github.com/micropython/micropython/pull/4998 by @klardotsh.

It is implemented in the lexer as a syntax translation to `str.format`:
  f"{a}" --> "{}".format(a)

It also supports:
  f"{a=}" --> "a={}".format(a)

This is done by extracting the arguments into a temporary vstr buffer,
then after the string has been tokenized, the lexer input queue is saved
and the contents of the temporary vstr buffer are injected into the lexer
instead.

There are four main limitations:
- raw f-strings (`fr` or `rf` prefixes) are not supported and will raise
  `SyntaxError: raw f-strings are not supported`.

- literal concatenation of f-strings with adjacent strings will fail
    "{}" f"{a}" --> "{}{}".format(a)    (str.format will incorrectly use
                                         the braces from the non-f-string)
    f"{a}" f"{a}" --> "{}".format(a) "{}".format(a) (cannot concatenate)

- PEP-498 requires the full parser to understand the interpolated
  argument, however because this entirely runs in the lexer it cannot
  resolve nested braces in expressions like
    f"{'}'}"

- The !r, !s, and !a conversions are not supported.

Includes tests and cpydiffs.

Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
2021-08-14 16:58:40 +10:00
..
variants unix/variants: Enable help and help("modules") on standard and dev. 2021-07-13 16:18:15 +10:00
.gitignore unix: Rename unix binaries to micropython-variant (not _variant). 2020-01-12 10:37:40 +11:00
Makefile unix/Makefile: Add back LIB_SRC_C to list of object files. 2021-07-13 15:58:39 +10:00
alloc.c all: Reformat C and Python source code with tools/codeformat.py. 2020-02-28 10:33:03 +11:00
coverage.c py/repl: Autocomplete builtin modules. 2021-05-02 23:11:14 +10:00
coveragecpp.cpp esp32,unix: Support building C++ code. 2020-10-29 15:29:50 +11:00
fatfs_port.c unix/fatfs_port: Fix month offset in timestamp calculation. 2020-09-02 00:19:06 +10:00
gccollect.c all: Update to point to files in new shared/ directory. 2021-07-12 17:08:10 +10:00
input.c all: Update to point to files in new shared/ directory. 2021-07-12 17:08:10 +10:00
input.h ports: Make new ports/ sub-directory and move all ports there. 2017-09-06 13:40:51 +10:00
main.c all: Update to point to files in new shared/ directory. 2021-07-12 17:08:10 +10:00
modffi.c unix/modffi: Add option to lock GC in callback, and cfun access. 2021-06-24 23:12:26 +10:00
modjni.c py: Introduce and use mp_raise_type_arg helper. 2021-07-15 00:12:41 +10:00
modmachine.c extmod/machine_mem: Only allow integers in machine.memX subscript. 2020-11-13 11:13:37 +11:00
modos.c unix/modos: Support larger integer range in uos.stat fields. 2020-09-01 12:36:28 +10:00
modtermios.c all: Reformat C and Python source code with tools/codeformat.py. 2020-02-28 10:33:03 +11:00
modtime.c unix/modtime: Fix time() precision on unix ports with non-double floats. 2021-01-23 16:55:24 +11:00
moduos_vfs.c all: Reformat C and Python source code with tools/codeformat.py. 2020-02-28 10:33:03 +11:00
moduselect.c unix/moduselect: Don't allow both posix and non-posix configurations. 2021-02-16 14:59:52 +11:00
modusocket.c all: Format code to add space after C++-style comment start. 2020-04-23 11:24:25 +10:00
mpbthciport.c extmod/nimble: Make stm32 and unix NimBLE ports use synchronous events. 2020-11-13 17:19:05 +11:00
mpbtstackport.h unix: Implement BLE H4 HCI UART for btstack/nimble. 2020-09-08 12:53:24 +10:00
mpbtstackport_common.c unix/mpbtstackport_common: Implement mp_bluetooth_hci_active. 2021-02-12 12:07:05 +11:00
mpbtstackport_h4.c unix: Implement BLE H4 HCI UART for btstack/nimble. 2020-09-08 12:53:24 +10:00
mpbtstackport_usb.c extmod/modbluetooth: Refactor stack/hci/driver/port bindings. 2020-09-08 11:41:31 +10:00
mpconfigport.h py: Implement partial PEP-498 (f-string) support. 2021-08-14 16:58:40 +10:00
mpconfigport.mk unix/mpconfigport.mk: Update comment about TLS implementations. 2019-06-05 15:28:30 +10:00
mphalport.h all: Update to point to files in new shared/ directory. 2021-07-12 17:08:10 +10:00
mpnimbleport.c extmod/nimble: Make stm32 and unix NimBLE ports use synchronous events. 2020-11-13 17:19:05 +11:00
mpnimbleport.h unix: Implement BLE H4 HCI UART for btstack/nimble. 2020-09-08 12:53:24 +10:00
mpthreadport.c all: Update to point to files in new shared/ directory. 2021-07-12 17:08:10 +10:00
mpthreadport.h unix: Implement MICROPY_BEGIN/END_ATOMIC_SECTION protection macros. 2020-04-13 21:44:09 +10:00
qstrdefsport.h all: Add *FORMAT-OFF* in various places. 2020-02-28 10:31:07 +11:00
unix_mphal.c py/mpstate: Schedule KeyboardInterrupt on main thread. 2021-06-19 09:49:00 +10:00