From 71e9bfa20dd02457e73c2bec85102b6faf527a33 Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
Date: Fri, 18 Apr 2014 23:28:12 +0100
Subject: [PATCH] py: Add mp_binary_set_val_array_from_int, to store an int
 directly.

---
 py/binary.c | 20 +++++++++++++++-----
 py/binary.h |  1 +
 2 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/py/binary.c b/py/binary.c
index 1ddf4569b..d3dd00954 100644
--- a/py/binary.c
+++ b/py/binary.c
@@ -151,11 +151,21 @@ mp_obj_t mp_binary_get_val(char struct_type, char val_type, byte **ptr) {
 }
 
 void mp_binary_set_val_array(char typecode, void *p, int index, mp_obj_t val_in) {
-    machine_int_t val = 0;
-    if (MP_OBJ_IS_INT(val_in)) {
-        val = mp_obj_int_get(val_in);
+    switch (typecode) {
+#if MICROPY_ENABLE_FLOAT
+        case 'f':
+            ((float*)p)[index] = mp_obj_float_get(val_in);
+            break;
+        case 'd':
+            ((double*)p)[index] = mp_obj_float_get(val_in);
+            break;
+#endif
+        default:
+            mp_binary_set_val_array_from_int(typecode, p, index, mp_obj_get_int(val_in));
     }
+}
 
+void mp_binary_set_val_array_from_int(char typecode, void *p, int index, machine_int_t val) {
     switch (typecode) {
         case 'b':
             ((int8_t*)p)[index] = val;
@@ -187,10 +197,10 @@ void mp_binary_set_val_array(char typecode, void *p, int index, mp_obj_t val_in)
 #endif
 #if MICROPY_ENABLE_FLOAT
         case 'f':
-            ((float*)p)[index] = mp_obj_float_get(val_in);
+            ((float*)p)[index] = val;
             break;
         case 'd':
-            ((double*)p)[index] = mp_obj_float_get(val_in);
+            ((double*)p)[index] = val;
             break;
 #endif
     }
diff --git a/py/binary.h b/py/binary.h
index e9fb38f13..538d6e7f2 100644
--- a/py/binary.h
+++ b/py/binary.h
@@ -6,3 +6,4 @@ int mp_binary_get_size(char typecode);
 mp_obj_t mp_binary_get_val_array(char typecode, void *p, int index);
 mp_obj_t mp_binary_get_val(char struct_type, char val_type, byte **ptr);
 void mp_binary_set_val_array(char typecode, void *p, int index, mp_obj_t val_in);
+void mp_binary_set_val_array_from_int(char typecode, void *p, int index, machine_int_t val);
-- 
GitLab