mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-29 17:22:56 +08:00
support addIndentMuti for parser
This commit is contained in:
parent
d7087248c6
commit
8b22298a07
4
port/linux/.vscode/launch.json
vendored
4
port/linux/.vscode/launch.json
vendored
@ -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}",
|
||||
|
@ -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:
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user