Skip to content

Commit 3d09404

Browse files
committed
Merge remote-tracking branch 'origin/main'
2 parents f7c2599 + 9a0fa5c commit 3d09404

File tree

2 files changed

+37
-13
lines changed

2 files changed

+37
-13
lines changed

locale/circuitpython.pot

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -400,10 +400,6 @@ msgstr ""
400400
msgid "3-arg pow() not supported"
401401
msgstr ""
402402

403-
#: shared-module/msgpack/__init__.c
404-
msgid "64 bit types"
405-
msgstr ""
406-
407403
#: ports/atmel-samd/common-hal/alarm/pin/PinAlarm.c
408404
#: ports/atmel-samd/common-hal/countio/Counter.c
409405
#: ports/atmel-samd/common-hal/rotaryio/IncrementalEncoder.c
@@ -1271,6 +1267,10 @@ msgstr ""
12711267
msgid "Invalid data_pins[%d]"
12721268
msgstr ""
12731269

1270+
#: shared-module/msgpack/__init__.c
1271+
msgid "Invalid format"
1272+
msgstr ""
1273+
12741274
#: shared-module/audiocore/WaveFile.c
12751275
msgid "Invalid format chunk size"
12761276
msgstr ""

shared-module/msgpack/__init__.c

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,16 @@ STATIC uint32_t read4(msgpack_stream_t *s) {
102102
return res;
103103
}
104104

105+
STATIC uint64_t read8(msgpack_stream_t *s) {
106+
uint64_t res = 0;
107+
read(s, &res, 8);
108+
int n = 1;
109+
if (*(char *)&n == 1) {
110+
res = __builtin_bswap64(res);
111+
}
112+
return res;
113+
}
114+
105115
STATIC size_t read_size(msgpack_stream_t *s, uint8_t len_index) {
106116
size_t res = 0;
107117
switch (len_index) {
@@ -207,7 +217,7 @@ STATIC void pack_bin(msgpack_stream_t *s, const uint8_t *data, size_t len) {
207217
}
208218
}
209219

210-
STATIC void pack_ext(msgpack_stream_t *s, int8_t code, const uint8_t *data, size_t len) {
220+
STATIC void pack_ext(msgpack_stream_t *s, int8_t code, const uint8_t *data, size_t len) {
211221
if (len == 1) {
212222
write1(s, 0xd4);
213223
} else if (len == 2) {
@@ -424,22 +434,39 @@ STATIC mp_obj_t unpack(msgpack_stream_t *s, mp_obj_t ext_hook, bool use_list) {
424434
return unpack_bytes(s, read_size(s, code - 0xc4));
425435
}
426436
case 0xcc: // uint8
437+
return MP_OBJ_NEW_SMALL_INT((uint8_t)read1(s));
427438
case 0xd0: // int8
428439
return MP_OBJ_NEW_SMALL_INT((int8_t)read1(s));
429440
case 0xcd: // uint16
441+
return MP_OBJ_NEW_SMALL_INT((uint16_t)read2(s));
430442
case 0xd1: // int16
431443
return MP_OBJ_NEW_SMALL_INT((int16_t)read2(s));
432444
case 0xce: // uint32
445+
return mp_obj_new_int_from_uint((uint32_t)read4(s));
433446
case 0xd2: // int32
434-
return MP_OBJ_NEW_SMALL_INT((int32_t)read4(s));
435-
case 0xca: {
436-
union Float { mp_float_t f;
437-
uint32_t u;
447+
return mp_obj_new_int((int32_t)read4(s));
448+
case 0xcf: // uint 64
449+
return mp_obj_new_int_from_ull((uint64_t)read8(s));
450+
case 0xd3: // int 64
451+
return mp_obj_new_int_from_ll((int64_t)read8(s));
452+
case 0xca: { // float
453+
union Float {
454+
mp_float_t f;
455+
uint32_t u;
438456
};
439457
union Float data;
440458
data.u = read4(s);
441459
return mp_obj_new_float(data.f);
442460
}
461+
case 0xcb: { // double
462+
union Double {
463+
uint64_t u;
464+
double d;
465+
};
466+
union Double data;
467+
data.u = read8(s);
468+
return mp_obj_new_float_from_d(data.d);
469+
}
443470
case 0xd9:
444471
case 0xda:
445472
case 0xdb: {
@@ -483,11 +510,8 @@ STATIC mp_obj_t unpack(msgpack_stream_t *s, mp_obj_t ext_hook, bool use_list) {
483510
// ext 8, 16, 32
484511
return unpack_ext(s, read_size(s, code - 0xc7), ext_hook);
485512
case 0xc1: // never used
486-
case 0xcb: // float 64
487-
case 0xcf: // uint 64
488-
case 0xd3: // int 64
489513
default:
490-
mp_raise_NotImplementedError(translate("64 bit types"));
514+
mp_raise_ValueError(translate("Invalid format"));
491515
}
492516
}
493517

0 commit comments

Comments
 (0)