mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-15 17:02:53 +08:00
support Tab
This commit is contained in:
parent
6b63c13bef
commit
dad0a82b3a
@ -2641,3 +2641,43 @@ TEST(parser, hex_iteral) {
|
|||||||
args_deinit(buffs);
|
args_deinit(buffs);
|
||||||
EXPECT_EQ(pikaMemNow(), 0);
|
EXPECT_EQ(pikaMemNow(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(parser, tab) {
|
||||||
|
pikaMemInfo.heapUsedMax = 0;
|
||||||
|
Args* buffs = New_strBuff();
|
||||||
|
char* lines =
|
||||||
|
"for i in range(0, 100):\n"
|
||||||
|
"\tprint(i)\n"
|
||||||
|
"\n";
|
||||||
|
char* tokens_str = Lexer_printTokens(buffs, Lexer_getTokens(buffs, lines));
|
||||||
|
printf("%s\n", tokens_str);
|
||||||
|
printf("%s", lines);
|
||||||
|
char* pikaAsm = Parser_multiLineToAsm(buffs, lines);
|
||||||
|
printf("%s", pikaAsm);
|
||||||
|
EXPECT_STREQ(pikaAsm,
|
||||||
|
"B0\n"
|
||||||
|
"2 NUM 0\n"
|
||||||
|
"2 NUM 100\n"
|
||||||
|
"1 RUN range\n"
|
||||||
|
"0 RUN iter\n"
|
||||||
|
"0 OUT _l0\n"
|
||||||
|
"0 REF _r1\n"
|
||||||
|
"0 REF _r2\n"
|
||||||
|
"0 OUT _l0.a2\n"
|
||||||
|
"0 OUT _l0.a1\n"
|
||||||
|
"B0\n"
|
||||||
|
"0 RUN _l0.__next__\n"
|
||||||
|
"0 OUT i\n"
|
||||||
|
"0 EST i\n"
|
||||||
|
"0 JEZ 2\n"
|
||||||
|
"B1\n"
|
||||||
|
"1 REF i\n"
|
||||||
|
"0 RUN print\n"
|
||||||
|
"B0\n"
|
||||||
|
"0 JMP -1\n"
|
||||||
|
"B0\n"
|
||||||
|
"0 DEL _l0\n"
|
||||||
|
"B0\n");
|
||||||
|
args_deinit(buffs);
|
||||||
|
EXPECT_EQ(pikaMemNow(), 0);
|
||||||
|
}
|
||||||
|
@ -713,7 +713,7 @@ void obj_shellLineProcess(PikaObj* self,
|
|||||||
obj_setStr(self, "shell_buff", shell_buff_new);
|
obj_setStr(self, "shell_buff", shell_buff_new);
|
||||||
strsDeinit(&buffs);
|
strsDeinit(&buffs);
|
||||||
/* go out from block */
|
/* go out from block */
|
||||||
if (rxBuff[0] != ' ') {
|
if ((rxBuff[0] != ' ') && (rxBuff[0] != '\t')) {
|
||||||
is_in_block = 0;
|
is_in_block = 0;
|
||||||
input_line = obj_getStr(self, "shell_buff");
|
input_line = obj_getStr(self, "shell_buff");
|
||||||
if (SHELL_STATE_EXIT ==
|
if (SHELL_STATE_EXIT ==
|
||||||
|
@ -1553,7 +1553,13 @@ char* Parser_parsePyLines(Args* outBuffs,
|
|||||||
lines_index++;
|
lines_index++;
|
||||||
Args buffs = {0};
|
Args buffs = {0};
|
||||||
/* get single line by pop multiline */
|
/* get single line by pop multiline */
|
||||||
char* line = strsGetFirstToken(&buffs, py_lines + lines_offset, '\n');
|
char* line_origin =
|
||||||
|
strsGetFirstToken(&buffs, py_lines + lines_offset, '\n');
|
||||||
|
char* line = line_origin;
|
||||||
|
/* support Tab */
|
||||||
|
if (strIsContain(line_origin, '\t')) {
|
||||||
|
line = strsReplace(&buffs, line_origin, "\t", " ");
|
||||||
|
}
|
||||||
/* filter for not end \n */
|
/* filter for not end \n */
|
||||||
if (lines_index != lines_num) {
|
if (lines_index != lines_num) {
|
||||||
if (Parser_isVoidLine(line)) {
|
if (Parser_isVoidLine(line)) {
|
||||||
@ -1587,7 +1593,7 @@ char* Parser_parsePyLines(Args* outBuffs,
|
|||||||
byteCodeFrame_appendFromAsm(bytecode_frame, single_ASM);
|
byteCodeFrame_appendFromAsm(bytecode_frame, single_ASM);
|
||||||
}
|
}
|
||||||
next_line:
|
next_line:
|
||||||
line_size = strGetSize(line);
|
line_size = strGetSize(line_origin);
|
||||||
lines_offset = lines_offset + line_size + 1;
|
lines_offset = lines_offset + line_size + 1;
|
||||||
strsDeinit(&buffs);
|
strsDeinit(&buffs);
|
||||||
/* exit when finished */
|
/* exit when finished */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user