mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-15 17:02:53 +08:00
parse for slice is ok
This commit is contained in:
parent
9ab1c55564
commit
a3096e9266
@ -2767,3 +2767,22 @@ TEST(parser, slice1) {
|
|||||||
args_deinit(buffs);
|
args_deinit(buffs);
|
||||||
EXPECT_EQ(pikaMemNow(), 0);
|
EXPECT_EQ(pikaMemNow(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(parser, slice2) {
|
||||||
|
pikaMemInfo.heapUsedMax = 0;
|
||||||
|
Args* buffs = New_strBuff();
|
||||||
|
char* lines = "a = recv_buf[1:4:2]\n";
|
||||||
|
printf("%s", lines);
|
||||||
|
char* pikaAsm = Parser_multiLineToAsm(buffs, lines);
|
||||||
|
printf("%s", pikaAsm);
|
||||||
|
EXPECT_STREQ(pikaAsm,
|
||||||
|
"B0\n"
|
||||||
|
"1 REF recv_buf\n"
|
||||||
|
"1 NUM 1\n"
|
||||||
|
"1 NUM 4\n"
|
||||||
|
"1 NUM 2\n"
|
||||||
|
"0 RUN __slice__\n"
|
||||||
|
"0 OUT a\n");
|
||||||
|
args_deinit(buffs);
|
||||||
|
EXPECT_EQ(pikaMemNow(), 0);
|
||||||
|
}
|
||||||
|
@ -755,54 +755,41 @@ static void __getSlicePars(Args* outBuffs,
|
|||||||
char** pEnd,
|
char** pEnd,
|
||||||
char** pStep) {
|
char** pStep) {
|
||||||
Args buffs = {0};
|
Args buffs = {0};
|
||||||
uint8_t colon_num = 0;
|
|
||||||
*pStart = "";
|
*pStart = "";
|
||||||
*pEnd = "";
|
*pEnd = "";
|
||||||
*pStep = "";
|
*pStep = "";
|
||||||
|
|
||||||
/* count colon_num */
|
/* slice */
|
||||||
|
uint8_t colon_i = 0;
|
||||||
ParserState_forEachToken(ps, inner) {
|
ParserState_forEachToken(ps, inner) {
|
||||||
ParserState_iterStart(&ps);
|
ParserState_iterStart(&ps);
|
||||||
if (strEqu(ps.token1.pyload, ":") && ps.branket_deepth == 0) {
|
if (strEqu(ps.token1.pyload, ":") && ps.branket_deepth == 0) {
|
||||||
colon_num++;
|
colon_i++;
|
||||||
|
goto iter_continue1;
|
||||||
}
|
}
|
||||||
|
if (colon_i == 0) {
|
||||||
|
*pStart = strsAppend(&buffs, *pStart, ps.token1.pyload);
|
||||||
|
}
|
||||||
|
if (colon_i == 1) {
|
||||||
|
*pEnd = strsAppend(&buffs, *pEnd, ps.token1.pyload);
|
||||||
|
}
|
||||||
|
if (colon_i == 2) {
|
||||||
|
*pStep = strsAppend(&buffs, *pStep, ps.token1.pyload);
|
||||||
|
}
|
||||||
|
iter_continue1:
|
||||||
ParserState_iterEnd(&ps);
|
ParserState_iterEnd(&ps);
|
||||||
}
|
}
|
||||||
ParserState_deinit(&ps);
|
ParserState_deinit(&ps);
|
||||||
|
if (colon_i == 1) {
|
||||||
/* just a index */
|
*pStep = "1";
|
||||||
if (colon_num == 0) {
|
}
|
||||||
*pStart = inner;
|
if (colon_i == 0) {
|
||||||
*pEnd = strsAppend(&buffs, *pStart, " + 1");
|
*pEnd = strsAppend(&buffs, *pStart, " + 1");
|
||||||
*pStep = "1";
|
*pStep = "1";
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* slice without step */
|
|
||||||
if (colon_num == 1) {
|
|
||||||
uint8_t colon_i = 0;
|
|
||||||
*pStep = "1";
|
|
||||||
ParserState_forEachToken(ps, inner) {
|
|
||||||
ParserState_iterStart(&ps);
|
|
||||||
if (strEqu(ps.token1.pyload, ":") && ps.branket_deepth == 0) {
|
|
||||||
colon_i++;
|
|
||||||
goto iter_continue;
|
|
||||||
}
|
|
||||||
if (colon_i == 0) {
|
|
||||||
*pStart = strsAppend(&buffs, *pStart, ps.token1.pyload);
|
|
||||||
}
|
|
||||||
if (colon_i == 1) {
|
|
||||||
*pEnd = strsAppend(&buffs, *pEnd, ps.token1.pyload);
|
|
||||||
}
|
|
||||||
iter_continue:
|
|
||||||
ParserState_iterEnd(&ps);
|
|
||||||
}
|
|
||||||
ParserState_deinit(&ps);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* slice with step */
|
/* slice with step */
|
||||||
|
|
||||||
exit:
|
|
||||||
/* output */
|
/* output */
|
||||||
*pStart = strsCopy(outBuffs, *pStart);
|
*pStart = strsCopy(outBuffs, *pStart);
|
||||||
*pEnd = strsCopy(outBuffs, *pEnd);
|
*pEnd = strsCopy(outBuffs, *pEnd);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user