From 07f526067e207f23529b4f2234baffd74ce1f35c Mon Sep 17 00:00:00 2001 From: Damien George Date: Fri, 8 Apr 2022 14:09:08 +1000 Subject: [PATCH] tools/mpy-tool.py: Intern more strings when freezing. Signed-off-by: Damien George --- tools/mpy-tool.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tools/mpy-tool.py b/tools/mpy-tool.py index f4a8ef642..3ebbdd110 100755 --- a/tools/mpy-tool.py +++ b/tools/mpy-tool.py @@ -62,6 +62,11 @@ import struct sys.path.append(sys.path[0] + "/../py") import makeqstrdata as qstrutil +# Threshold of str length below which it will be turned into a qstr when freezing. +# This helps to reduce frozen code size because qstrs are more efficient to encode +# as objects than full mp_obj_str_t instances. +PERSISTENT_STR_INTERN_THRESHOLD = 25 + class MPYReadError(Exception): def __init__(self, filename, msg): @@ -1187,6 +1192,9 @@ def read_obj(reader, segments): reader.read_byte() # read and discard null terminator if obj_type == MP_PERSISTENT_OBJ_STR: obj = str_cons(buf, "utf8") + if len(obj) < PERSISTENT_STR_INTERN_THRESHOLD: + if not global_qstrs.find_by_str(obj): + global_qstrs.add(obj) elif obj_type == MP_PERSISTENT_OBJ_BYTES: obj = buf elif obj_type == MP_PERSISTENT_OBJ_INT: