Skip to content

Commit ee3a2c8

Browse files
committed
support [] index for bytes
1 parent ed5aa1b commit ee3a2c8

File tree

3 files changed

+56
-0
lines changed

3 files changed

+56
-0
lines changed

package/PikaStdLib/PikaStdLib_SysObj.c

+15
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,13 @@ Arg* PikaStdLib_SysObj___get__(PikaObj* self, Arg* key, Arg* obj) {
161161
char_buff[0] = str_pyload[index];
162162
return arg_setStr(NULL, "", char_buff);
163163
}
164+
if (ARG_TYPE_BYTES == obj_type) {
165+
int index = arg_getInt(key);
166+
uint8_t* bytes_pyload = arg_getBytes(obj);
167+
uint8_t byte_buff[] = " ";
168+
byte_buff[0] = bytes_pyload[index];
169+
return arg_setBytes(NULL, "", byte_buff, 1);
170+
}
164171
if (ARG_TYPE_OBJECT == obj_type) {
165172
PikaObj* arg_obj = arg_getPtr(obj);
166173
obj_setArg(arg_obj, "__key", key);
@@ -198,6 +205,14 @@ void PikaStdLib_SysObj___set__(PikaObj* self,
198205
str_pyload[index] = str_val[0];
199206
obj_setStr(self, obj_str, str_pyload);
200207
}
208+
if (ARG_TYPE_BYTES == obj_type) {
209+
int index = arg_getInt(key);
210+
uint8_t* bytes_val = arg_getBytes(val);
211+
uint8_t* bytes_pyload = arg_getBytes(obj);
212+
size_t bytes_len = arg_getBytesSize(obj);
213+
bytes_pyload[index] = bytes_val[0];
214+
obj_setBytes(self, obj_str, bytes_pyload, bytes_len);
215+
}
201216
if (ARG_TYPE_OBJECT == obj_type) {
202217
PikaObj* arg_obj = arg_getPtr(obj);
203218
obj_setArg(arg_obj, "__key", key);

port/linux/package/pikascript/pikascript-lib/PikaStdLib/PikaStdLib_SysObj.c

+15
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,13 @@ Arg* PikaStdLib_SysObj___get__(PikaObj* self, Arg* key, Arg* obj) {
161161
char_buff[0] = str_pyload[index];
162162
return arg_setStr(NULL, "", char_buff);
163163
}
164+
if (ARG_TYPE_BYTES == obj_type) {
165+
int index = arg_getInt(key);
166+
uint8_t* bytes_pyload = arg_getBytes(obj);
167+
uint8_t byte_buff[] = " ";
168+
byte_buff[0] = bytes_pyload[index];
169+
return arg_setBytes(NULL, "", byte_buff, 1);
170+
}
164171
if (ARG_TYPE_OBJECT == obj_type) {
165172
PikaObj* arg_obj = arg_getPtr(obj);
166173
obj_setArg(arg_obj, "__key", key);
@@ -198,6 +205,14 @@ void PikaStdLib_SysObj___set__(PikaObj* self,
198205
str_pyload[index] = str_val[0];
199206
obj_setStr(self, obj_str, str_pyload);
200207
}
208+
if (ARG_TYPE_BYTES == obj_type) {
209+
int index = arg_getInt(key);
210+
uint8_t* bytes_val = arg_getBytes(val);
211+
uint8_t* bytes_pyload = arg_getBytes(obj);
212+
size_t bytes_len = arg_getBytesSize(obj);
213+
bytes_pyload[index] = bytes_val[0];
214+
obj_setBytes(self, obj_str, bytes_pyload, bytes_len);
215+
}
201216
if (ARG_TYPE_OBJECT == obj_type) {
202217
PikaObj* arg_obj = arg_getPtr(obj);
203218
obj_setArg(arg_obj, "__key", key);

port/linux/test/pikaMain-test.cpp

+26
Original file line numberDiff line numberDiff line change
@@ -833,6 +833,32 @@ TEST(pikaMain, str__index__) {
833833
EXPECT_EQ(pikaMemNow(), 0);
834834
}
835835

836+
TEST(pikaMain, bytes__index__) {
837+
/* init */
838+
pikaMemInfo.heapUsedMax = 0;
839+
PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
840+
/* run */
841+
__platform_printf("BEGIN\n");
842+
obj_run(pikaMain,
843+
"s = b'test'\n"
844+
"res = s[2]\n"
845+
"res2 = b'eqrt'[2]\n"
846+
"s[2] = b'q'\n"
847+
"\n");
848+
/* collect */
849+
uint8_t* res = obj_getBytes(pikaMain, "res");
850+
uint8_t* res2 = obj_getBytes(pikaMain, "res2");
851+
uint8_t* s = obj_getBytes(pikaMain, "s");
852+
/* assert */
853+
EXPECT_STREQ((char*)res, "s");
854+
EXPECT_STREQ((char*)res2, "r");
855+
EXPECT_EQ(s[2], 'q');
856+
// EXPECT_STREQ(s, "teqt");
857+
/* deinit */
858+
obj_deinit(pikaMain);
859+
EXPECT_EQ(pikaMemNow(), 0);
860+
}
861+
836862
TEST(pikaMain, list_index) {
837863
/* init */
838864
pikaMemInfo.heapUsedMax = 0;

0 commit comments

Comments
 (0)