support addIndentMuti for parser

This commit is contained in:
Lyon 2023-07-25 19:11:14 +08:00
parent d7087248c6
commit 8b22298a07
9 changed files with 62 additions and 32 deletions

View File

@ -14,9 +14,9 @@
// "--gtest_filter=builtin.write_fn"
// "--gtest_filter=builtin.base_type"
// "--gtest_filter=parser.comprehension"
// "--gtest_filter=parser.*"
"--gtest_filter=parser.*"
// "--gtest_filter=pikaMain.slice2"
"--gtest_filter=re.match"
// "--gtest_filter=re.match"
],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",

View File

@ -39,7 +39,8 @@ if len(dirs) == 0:
dirs = ['package/pikascript/pikascript-lib',
'package/pikascript/pikascript-core', 'test']
dir_skip = ['package/pikascript/pikascript-lib/re']
dir_skip = ['package/pikascript/pikascript-lib/re',
'package/pikascript/pikascript-lib/PikaNN']
# 对每个目录进行处理
for dir_path_str in dirs:

View File

@ -1951,18 +1951,8 @@ __exit:
return ast;
}
static int32_t _getSpaceNum(char* sLine) {
uint32_t uSize = strGetSize(sLine);
for (uint32_t i = 0; i < uSize; i++) {
if (sLine[i] != ' ') {
return i;
}
}
return 0;
}
static int32_t Parser_getPyLineBlockDeepth(char* sLine) {
int32_t iSpaceNum = _getSpaceNum(sLine);
int32_t iSpaceNum = strGetIndent(sLine);
if (0 == iSpaceNum % 4) {
return iSpaceNum / 4;
}
@ -2403,22 +2393,56 @@ static pika_bool _check_is_multi_assign(char* sArgList) {
return bRes;
}
static Arg* arg_strAddSpaces(Arg* aStrIn, int num) {
Arg* aRet = aStrIn;
/* add space */
for (int i = 0; i < num; i++) {
aRet = arg_strAppend(aRet, " ");
Arg* arg_strAddIndent(Arg* aStrIn, int indent) {
if (0 == indent) {
return aStrIn;
}
/* add space */
char* sSpaces = pikaMalloc(indent + 1);
pika_platform_memset(sSpaces, ' ', indent);
sSpaces[indent] = '\0';
Arg* aRet = arg_newStr(sSpaces);
aRet = arg_strAppend(aRet, arg_getStr(aStrIn));
pikaFree(sSpaces, indent + 1);
arg_deinit(aStrIn);
return aRet;
}
Arg* arg_strAddIndentMulti(Arg* aStrInMuti, int indent) {
if (0 == indent) {
return aStrInMuti;
}
char* sStrInMuti = arg_getStr(aStrInMuti);
char* sLine = NULL;
int iLineNum = strGetLineNum(sStrInMuti);
Arg* aStrOut = arg_newStr("");
Args buffs = {};
for (int i = 0; i < iLineNum; i++) {
sLine = strsPopLine(&buffs, &sStrInMuti);
Arg* aLine = arg_newStr(sLine);
aLine = arg_strAddIndent(aLine, indent);
sLine = arg_getStr(aLine);
aStrOut = arg_strAppend(aStrOut, sLine);
if (i != iLineNum - 1) {
aStrOut = arg_strAppend(aStrOut, "\n");
}
arg_deinit(aLine);
}
strsDeinit(&buffs);
arg_deinit(aStrInMuti);
return aStrOut;
}
static char* Suger_multiAssign(Args* out_buffs, char* sLine) {
#if PIKA_NANO_ENABLE
return sLine;
#endif
if (!strIsContain(sLine, '=') || !strIsContain(sLine, ',')) {
return sLine;
}
Args buffs = {0};
char* sLineOut = sLine;
int iSpaceNum = _getSpaceNum(sLine);
int iIndent = strGetIndent(sLine);
pika_bool bAssign = pika_false;
Arg* aStmt = arg_newStr("");
Arg* aOutList = arg_newStr("");
@ -2457,9 +2481,6 @@ static char* Suger_multiAssign(Args* out_buffs, char* sLine) {
arg_getStr(aStmt));
/* add space */
for (int i = 0; i < iSpaceNum; i++) {
aLineOut = arg_strAppend(aLineOut, " ");
}
aLineOut = arg_strAppend(aLineOut, sLineItem);
sOutList = arg_getStr(aOutList);
@ -2471,16 +2492,12 @@ static char* Suger_multiAssign(Args* out_buffs, char* sLine) {
char* sLineItem = strsFormat(&buffs, PIKA_LINE_BUFF_SIZE,
"%s = $tmp[%d]\n", item, iOutNum);
/* add space */
aLineOut = arg_strAddSpaces(aLineOut, iSpaceNum);
aLineOut = arg_strAppend(aLineOut, sLineItem);
iOutNum++;
}
/* add space */
for (int i = 0; i < iSpaceNum; i++) {
aLineOut = arg_strAppend(aLineOut, " ");
}
aLineOut = arg_strAppend(aLineOut, "del $tmp");
aLineOut = arg_strAddIndentMulti(aLineOut, iIndent);
sLineOut = strsCopy(out_buffs, arg_getStr(aLineOut));
goto __exit;
__exit:

View File

@ -172,6 +172,8 @@ ByteCodeFrame* byteCodeFrame_appendFromAsm(ByteCodeFrame* bf, char* pikaAsm);
Cursor_forEachExistPs(cursor, stmt)
uint16_t TokenStream_getSize(char* tokenStream);
Arg* arg_strAddIndent(Arg* aStrIn, int indent);
Arg* arg_strAddIndentMuti(Arg* aStrIn, int indent);
#endif

View File

@ -1,5 +1,5 @@
#define PIKA_VERSION_MAJOR 1
#define PIKA_VERSION_MINOR 12
#define PIKA_VERSION_MICRO 4
#define PIKA_VERSION_MAJOR 1
#define PIKA_VERSION_MINOR 12
#define PIKA_VERSION_MICRO 4
#define PIKA_EDIT_TIME "2023/07/23 19:00:47"
#define PIKA_EDIT_TIME "2023/07/25 19:10:31"

View File

@ -131,6 +131,10 @@ int32_t strCountSign(char* strIn, char sign) {
return _strCountSign(strIn, sign, 0);
}
int32_t strGetLineNum(char* strIn) {
return strCountSign(strIn, '\n') + 1;
}
char* strReplaceChar(char* strIn, char src, char dst) {
while (*strIn) {
if (*strIn == src) {

View File

@ -51,6 +51,7 @@ char* strRemovePrefix(char* inputStr, char* prefix, char* outputStr);
int32_t strGetToken(char* string, char** argv, char sign);
char* strPopFirstToken(char** strIn, char sign);
int32_t strCountSign(char* strIn, char sign);
int32_t strGetLineNum(char* strIn);
int32_t strGetTokenNum(char* strIn, char sign);
char* strGetFirstToken(char* strOut, char* strIn, char sign);
char* strGetLastToken(char* strOut, char* strIn, char sign);

View File

@ -104,6 +104,10 @@ char* strsPopToken(Args* buffs_p, char** tokens, char sign) {
return strsCopy(buffs_p, strPopFirstToken(tokens, sign));
}
char* strsPopLine(Args* buffs_p, char** tokens) {
return strsCopy(buffs_p, strPopFirstToken(tokens, '\n'));
}
char* strsCopy(Args* buffs_p, char* source) {
pika_assert(source != NULL);
int32_t size = strGetSize(source);

View File

@ -34,6 +34,7 @@ Args* New_strBuff(void);
char* strsGetFirstToken(Args* buffs, char* strIn, char sign);
char* strsGetLastToken(Args* buffs, char* arg_Path, char sign);
char* strsPopToken(Args* buffs, char** tokens, char sign);
char* strsPopLine(Args* buffs_p, char** tokens);
char* strsCopy(Args* buffs, char* source);
char* strsDeleteChar(Args* buff, char* strIn, char ch);
char* strsCut(Args* buffs, char* strIn, char startSign, char endSign);