From b6bdf18debfd75e9d39c2e8452c7b4ade448bcc5 Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
Date: Fri, 2 Sep 2016 15:10:45 +1000
Subject: [PATCH] tools/mpy-tool.py: Compute the hash value for str/bytes
 objects.

This makes it more efficient at runtime to hash str/bytes objects.
---
 tools/mpy-tool.py | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/tools/mpy-tool.py b/tools/mpy-tool.py
index c5bbf88e8..bfb2a5da7 100755
--- a/tools/mpy-tool.py
+++ b/tools/mpy-tool.py
@@ -283,15 +283,15 @@ class RawCode:
         # generate constant objects
         for i, obj in enumerate(self.objs):
             obj_name = 'const_obj_%s_%u' % (self.escaped_name, i)
-            if is_str_type(obj):
-                obj = bytes_cons(obj, 'utf8')
-                print('STATIC const mp_obj_str_t %s = '
-                    '{{&mp_type_str}, 0, %u, (const byte*)"%s"};'
-                    % (obj_name, len(obj), ''.join(('\\x%02x' % b) for b in obj)))
-            elif is_bytes_type(obj):
-                print('STATIC const mp_obj_str_t %s = '
-                    '{{&mp_type_bytes}, 0, %u, (const byte*)"%s"};'
-                    % (obj_name, len(obj), ''.join(('\\x%02x' % b) for b in obj)))
+            if is_str_type(obj) or is_bytes_type(obj):
+                if is_str_type(obj):
+                    obj = bytes_cons(obj, 'utf8')
+                    obj_type = 'mp_type_str'
+                else:
+                    obj_type = 'mp_type_bytes'
+                print('STATIC const mp_obj_str_t %s = {{&%s}, %u, %u, (const byte*)"%s"};'
+                    % (obj_name, obj_type, qstrutil.compute_hash(obj, config.MICROPY_QSTR_BYTES_IN_HASH),
+                        len(obj), ''.join(('\\x%02x' % b) for b in obj)))
             elif is_int_type(obj):
                 if config.MICROPY_LONGINT_IMPL == config.MICROPY_LONGINT_IMPL_NONE:
                     # TODO check if we can actually fit this long-int into a small-int
-- 
GitLab