From c51c883cc84bb680dcc810a81e81dd1df879a07c Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
Date: Sat, 3 Sep 2016 00:19:02 +1000
Subject: [PATCH] tools/mpy-tool.py: Support freezing of complex numbers.

---
 tools/mpy-tool.py | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/tools/mpy-tool.py b/tools/mpy-tool.py
index bfb2a5da7..bc8ac4fbd 100755
--- a/tools/mpy-tool.py
+++ b/tools/mpy-tool.py
@@ -320,6 +320,9 @@ class RawCode:
                 print('STATIC const mp_obj_float_t %s = {{&mp_type_float}, %.16g};'
                     % (obj_name, obj))
                 print('#endif')
+            elif type(obj) is complex:
+                print('STATIC const mp_obj_complex_t %s = {{&mp_type_complex}, %.16g, %.16g};'
+                    % (obj_name, obj.real, obj.imag))
             else:
                 # TODO
                 raise FreezeError(self, 'freezing of object %r is not implemented' % (obj,))
@@ -485,6 +488,15 @@ def freeze_mpy(base_qstrs, raw_codes):
     print('#endif')
     print()
 
+    print('#if MICROPY_PY_BUILTINS_COMPLEX')
+    print('typedef struct _mp_obj_complex_t {')
+    print('    mp_obj_base_t base;')
+    print('    mp_float_t real;')
+    print('    mp_float_t imag;')
+    print('} mp_obj_complex_t;')
+    print('#endif')
+    print()
+
     print('enum {')
     for i in range(len(new)):
         if i == 0:
-- 
GitLab