support bytes(list)

This commit is contained in:
pikastech 2022-09-19 10:01:16 +08:00
parent f2e184aa81
commit 4e447d89af
3 changed files with 49 additions and 0 deletions

View File

@ -394,6 +394,23 @@ Arg* PikaStdLib_SysObj_bytes(PikaObj* self, Arg* val) {
Arg* bytes = arg_newBytes((uint8_t*)arg_getStr(val), size);
return bytes;
}
#if !PIKA_NANO_ENABLE
if (argType_isObject(type)) {
PikaObj* obj = arg_getPtr(val);
PikaObj* New_PikaStdData_List(Args * args);
PikaObj* New_PikaStdData_Tuple(Args * args);
if (obj->constructor == New_PikaStdData_List ||
obj->constructor == New_PikaStdData_Tuple) {
PikaList* list = obj_getPtr(obj, "list");
Arg* bytes = arg_newBytes(NULL, list_getSize(list));
uint8_t* bytes_raw = arg_getBytes(bytes);
for (size_t i = 0; i < list_getSize(list); i++) {
bytes_raw[i] = (uint8_t)list_getInt(list, i);
}
return bytes;
}
}
#endif
obj_setErrorCode(self, 1);
__platform_printf("Error: input arg type not supported.\r\n");
return arg_newNull();

View File

@ -394,6 +394,23 @@ Arg* PikaStdLib_SysObj_bytes(PikaObj* self, Arg* val) {
Arg* bytes = arg_newBytes((uint8_t*)arg_getStr(val), size);
return bytes;
}
#if !PIKA_NANO_ENABLE
if (argType_isObject(type)) {
PikaObj* obj = arg_getPtr(val);
PikaObj* New_PikaStdData_List(Args * args);
PikaObj* New_PikaStdData_Tuple(Args * args);
if (obj->constructor == New_PikaStdData_List ||
obj->constructor == New_PikaStdData_Tuple) {
PikaList* list = obj_getPtr(obj, "list");
Arg* bytes = arg_newBytes(NULL, list_getSize(list));
uint8_t* bytes_raw = arg_getBytes(bytes);
for (size_t i = 0; i < list_getSize(list); i++) {
bytes_raw[i] = (uint8_t)list_getInt(list, i);
}
return bytes;
}
}
#endif
obj_setErrorCode(self, 1);
__platform_printf("Error: input arg type not supported.\r\n");
return arg_newNull();

View File

@ -296,4 +296,19 @@ TEST(stddata, list_bytes) {
EXPECT_EQ(pikaMemNow(), 0);
}
TEST(stddata, bytes_list) {
/* init */
pikaMemInfo.heapUsedMax = 0;
PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
/* run */
__platform_printf("BEGIN\r\n");
obj_run(pikaMain, "bytes([1,2,3,4])");
/* collect */
/* assert */
EXPECT_STREQ(log_buff[0], "b'\\x01\\x02\\x03\\x04'\r\n");
/* deinit */
obj_deinit(pikaMain);
EXPECT_EQ(pikaMemNow(), 0);
}
#endif