Skip to content

Commit 8b22298

Browse files
committed
support addIndentMuti for parser
1 parent d708724 commit 8b22298

9 files changed

Lines changed: 62 additions & 32 deletions

File tree

port/linux/.vscode/launch.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
// "--gtest_filter=builtin.write_fn"
1515
// "--gtest_filter=builtin.base_type"
1616
// "--gtest_filter=parser.comprehension"
17-
// "--gtest_filter=parser.*"
17+
"--gtest_filter=parser.*"
1818
// "--gtest_filter=pikaMain.slice2"
19-
"--gtest_filter=re.match"
19+
// "--gtest_filter=re.match"
2020
],
2121
"stopAtEntry": false,
2222
"cwd": "${workspaceFolder}",

port/linux/format.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ def format_files_in_dir(dir_path, dir_skip):
3939
dirs = ['package/pikascript/pikascript-lib',
4040
'package/pikascript/pikascript-core', 'test']
4141

42-
dir_skip = ['package/pikascript/pikascript-lib/re']
42+
dir_skip = ['package/pikascript/pikascript-lib/re',
43+
'package/pikascript/pikascript-lib/PikaNN']
4344

4445
# 对每个目录进行处理
4546
for dir_path_str in dirs:

src/PikaParser.c

Lines changed: 42 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1951,18 +1951,8 @@ AST* AST_parseStmt(AST* ast, char* sStmt) {
19511951
return ast;
19521952
}
19531953

1954-
static int32_t _getSpaceNum(char* sLine) {
1955-
uint32_t uSize = strGetSize(sLine);
1956-
for (uint32_t i = 0; i < uSize; i++) {
1957-
if (sLine[i] != ' ') {
1958-
return i;
1959-
}
1960-
}
1961-
return 0;
1962-
}
1963-
19641954
static int32_t Parser_getPyLineBlockDeepth(char* sLine) {
1965-
int32_t iSpaceNum = _getSpaceNum(sLine);
1955+
int32_t iSpaceNum = strGetIndent(sLine);
19661956
if (0 == iSpaceNum % 4) {
19671957
return iSpaceNum / 4;
19681958
}
@@ -2403,22 +2393,56 @@ static pika_bool _check_is_multi_assign(char* sArgList) {
24032393
return bRes;
24042394
}
24052395

2406-
static Arg* arg_strAddSpaces(Arg* aStrIn, int num) {
2407-
Arg* aRet = aStrIn;
2408-
/* add space */
2409-
for (int i = 0; i < num; i++) {
2410-
aRet = arg_strAppend(aRet, " ");
2396+
Arg* arg_strAddIndent(Arg* aStrIn, int indent) {
2397+
if (0 == indent) {
2398+
return aStrIn;
24112399
}
2400+
/* add space */
2401+
char* sSpaces = pikaMalloc(indent + 1);
2402+
pika_platform_memset(sSpaces, ' ', indent);
2403+
sSpaces[indent] = '\0';
2404+
Arg* aRet = arg_newStr(sSpaces);
2405+
aRet = arg_strAppend(aRet, arg_getStr(aStrIn));
2406+
pikaFree(sSpaces, indent + 1);
2407+
arg_deinit(aStrIn);
24122408
return aRet;
24132409
}
24142410

2411+
Arg* arg_strAddIndentMulti(Arg* aStrInMuti, int indent) {
2412+
if (0 == indent) {
2413+
return aStrInMuti;
2414+
}
2415+
char* sStrInMuti = arg_getStr(aStrInMuti);
2416+
char* sLine = NULL;
2417+
int iLineNum = strGetLineNum(sStrInMuti);
2418+
Arg* aStrOut = arg_newStr("");
2419+
Args buffs = {};
2420+
for (int i = 0; i < iLineNum; i++) {
2421+
sLine = strsPopLine(&buffs, &sStrInMuti);
2422+
Arg* aLine = arg_newStr(sLine);
2423+
aLine = arg_strAddIndent(aLine, indent);
2424+
sLine = arg_getStr(aLine);
2425+
aStrOut = arg_strAppend(aStrOut, sLine);
2426+
if (i != iLineNum - 1) {
2427+
aStrOut = arg_strAppend(aStrOut, "\n");
2428+
}
2429+
arg_deinit(aLine);
2430+
}
2431+
strsDeinit(&buffs);
2432+
arg_deinit(aStrInMuti);
2433+
return aStrOut;
2434+
}
2435+
24152436
static char* Suger_multiAssign(Args* out_buffs, char* sLine) {
24162437
#if PIKA_NANO_ENABLE
24172438
return sLine;
24182439
#endif
2440+
if (!strIsContain(sLine, '=') || !strIsContain(sLine, ',')) {
2441+
return sLine;
2442+
}
24192443
Args buffs = {0};
24202444
char* sLineOut = sLine;
2421-
int iSpaceNum = _getSpaceNum(sLine);
2445+
int iIndent = strGetIndent(sLine);
24222446
pika_bool bAssign = pika_false;
24232447
Arg* aStmt = arg_newStr("");
24242448
Arg* aOutList = arg_newStr("");
@@ -2457,9 +2481,6 @@ static char* Suger_multiAssign(Args* out_buffs, char* sLine) {
24572481
arg_getStr(aStmt));
24582482

24592483
/* add space */
2460-
for (int i = 0; i < iSpaceNum; i++) {
2461-
aLineOut = arg_strAppend(aLineOut, " ");
2462-
}
24632484
aLineOut = arg_strAppend(aLineOut, sLineItem);
24642485

24652486
sOutList = arg_getStr(aOutList);
@@ -2471,16 +2492,12 @@ static char* Suger_multiAssign(Args* out_buffs, char* sLine) {
24712492
char* sLineItem = strsFormat(&buffs, PIKA_LINE_BUFF_SIZE,
24722493
"%s = $tmp[%d]\n", item, iOutNum);
24732494
/* add space */
2474-
aLineOut = arg_strAddSpaces(aLineOut, iSpaceNum);
24752495
aLineOut = arg_strAppend(aLineOut, sLineItem);
24762496
iOutNum++;
24772497
}
24782498
/* add space */
2479-
for (int i = 0; i < iSpaceNum; i++) {
2480-
aLineOut = arg_strAppend(aLineOut, " ");
2481-
}
24822499
aLineOut = arg_strAppend(aLineOut, "del $tmp");
2483-
2500+
aLineOut = arg_strAddIndentMulti(aLineOut, iIndent);
24842501
sLineOut = strsCopy(out_buffs, arg_getStr(aLineOut));
24852502
goto __exit;
24862503
__exit:

src/PikaParser.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,8 @@ ByteCodeFrame* byteCodeFrame_appendFromAsm(ByteCodeFrame* bf, char* pikaAsm);
172172
Cursor_forEachExistPs(cursor, stmt)
173173

174174
uint16_t TokenStream_getSize(char* tokenStream);
175+
Arg* arg_strAddIndent(Arg* aStrIn, int indent);
176+
Arg* arg_strAddIndentMuti(Arg* aStrIn, int indent);
175177

176178
#endif
177179

src/PikaVersion.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
#define PIKA_VERSION_MAJOR 1
2-
#define PIKA_VERSION_MINOR 12
3-
#define PIKA_VERSION_MICRO 4
1+
#define PIKA_VERSION_MAJOR 1
2+
#define PIKA_VERSION_MINOR 12
3+
#define PIKA_VERSION_MICRO 4
44

5-
#define PIKA_EDIT_TIME "2023/07/23 19:00:47"
5+
#define PIKA_EDIT_TIME "2023/07/25 19:10:31"

src/dataString.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,10 @@ int32_t strCountSign(char* strIn, char sign) {
131131
return _strCountSign(strIn, sign, 0);
132132
}
133133

134+
int32_t strGetLineNum(char* strIn) {
135+
return strCountSign(strIn, '\n') + 1;
136+
}
137+
134138
char* strReplaceChar(char* strIn, char src, char dst) {
135139
while (*strIn) {
136140
if (*strIn == src) {

src/dataString.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ char* strRemovePrefix(char* inputStr, char* prefix, char* outputStr);
5151
int32_t strGetToken(char* string, char** argv, char sign);
5252
char* strPopFirstToken(char** strIn, char sign);
5353
int32_t strCountSign(char* strIn, char sign);
54+
int32_t strGetLineNum(char* strIn);
5455
int32_t strGetTokenNum(char* strIn, char sign);
5556
char* strGetFirstToken(char* strOut, char* strIn, char sign);
5657
char* strGetLastToken(char* strOut, char* strIn, char sign);

src/dataStrs.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,10 @@ char* strsPopToken(Args* buffs_p, char** tokens, char sign) {
104104
return strsCopy(buffs_p, strPopFirstToken(tokens, sign));
105105
}
106106

107+
char* strsPopLine(Args* buffs_p, char** tokens) {
108+
return strsCopy(buffs_p, strPopFirstToken(tokens, '\n'));
109+
}
110+
107111
char* strsCopy(Args* buffs_p, char* source) {
108112
pika_assert(source != NULL);
109113
int32_t size = strGetSize(source);

src/dataStrs.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ Args* New_strBuff(void);
3434
char* strsGetFirstToken(Args* buffs, char* strIn, char sign);
3535
char* strsGetLastToken(Args* buffs, char* arg_Path, char sign);
3636
char* strsPopToken(Args* buffs, char** tokens, char sign);
37+
char* strsPopLine(Args* buffs_p, char** tokens);
3738
char* strsCopy(Args* buffs, char* source);
3839
char* strsDeleteChar(Args* buff, char* strIn, char ch);
3940
char* strsCut(Args* buffs, char* strIn, char startSign, char endSign);

0 commit comments

Comments
 (0)