@@ -73,7 +73,7 @@ char* Cursor_popLastToken(Args* outBuffs, char** pStmt, char* str) {
7373 Arg * poped_arg = arg_newStr ("" );
7474 Cursor_forEach (cs , stmts ) {
7575 Cursor_iterStart (& cs );
76- if (cs .branket_deepth == 0 ) {
76+ if (cs .bracket_deepth == 0 ) {
7777 if (strEqu (str , cs .token1 .pyload )) {
7878 divider_index = cs .iter_index ;
7979 }
@@ -903,22 +903,22 @@ void Cursor_iterStart(struct Cursor* cs) {
903903 LexToken_update (& cs -> token1 );
904904 LexToken_update (& cs -> token2 );
905905 if (strEqu (cs -> token1 .pyload , "(" )) {
906- cs -> branket_deepth ++ ;
906+ cs -> bracket_deepth ++ ;
907907 }
908908 if (strEqu (cs -> token1 .pyload , ")" )) {
909- cs -> branket_deepth -- ;
909+ cs -> bracket_deepth -- ;
910910 }
911911 if (strEqu (cs -> token1 .pyload , "[" )) {
912- cs -> branket_deepth ++ ;
912+ cs -> bracket_deepth ++ ;
913913 }
914914 if (strEqu (cs -> token1 .pyload , "]" )) {
915- cs -> branket_deepth -- ;
915+ cs -> bracket_deepth -- ;
916916 }
917917 if (strEqu (cs -> token1 .pyload , "{" )) {
918- cs -> branket_deepth ++ ;
918+ cs -> bracket_deepth ++ ;
919919 }
920920 if (strEqu (cs -> token1 .pyload , "}" )) {
921- cs -> branket_deepth -- ;
921+ cs -> bracket_deepth -- ;
922922 }
923923}
924924
@@ -932,7 +932,7 @@ void _Cursor_init(struct Cursor* cs) {
932932 cs -> tokenStream = NULL ;
933933 cs -> length = 0 ;
934934 cs -> iter_index = 0 ;
935- cs -> branket_deepth = 0 ;
935+ cs -> bracket_deepth = 0 ;
936936 cs -> last_token = NULL ;
937937 cs -> iter_buffs = NULL ;
938938 cs -> buffs_p = New_strBuff ();
@@ -974,10 +974,36 @@ void _Cursor_beforeIter(struct Cursor* cs) {
974974 cs -> last_token = arg_newStr (TokenStream_pop (cs -> buffs_p , & cs -> tokenStream ));
975975}
976976
977+ uint8_t Token_isBranketStart (LexToken * token ) {
978+ if (token -> type != TOKEN_devider ) {
979+ return PIKA_FALSE ;
980+ }
981+ if (strEqu (token -> pyload , "(" ) || strEqu (token -> pyload , "[" ) ||
982+ strEqu (token -> pyload , "{" )) {
983+ return PIKA_TRUE ;
984+ }
985+ return PIKA_FALSE ;
986+ }
987+
988+ uint8_t Token_isBranketEnd (LexToken * token ) {
989+ if (token -> type != TOKEN_devider ) {
990+ return PIKA_FALSE ;
991+ }
992+ if (strEqu (token -> pyload , ")" ) || strEqu (token -> pyload , "]" ) ||
993+ strEqu (token -> pyload , "}" )) {
994+ return PIKA_TRUE ;
995+ }
996+ return PIKA_FALSE ;
997+ }
998+
999+ uint8_t Token_isBranket (LexToken * token ) {
1000+ return Token_isBranketStart (token ) || Token_isBranketEnd (token );
1001+ }
1002+
9771003uint8_t _Cursor_count (char * stmt ,
9781004 TokenType type ,
9791005 char * pyload ,
980- PIKA_BOOL bSkipBranket ) {
1006+ PIKA_BOOL bSkipbracket ) {
9811007 /* fast return */
9821008 if (!strstr (stmt , pyload )) {
9831009 return PIKA_FALSE ;
@@ -987,10 +1013,16 @@ uint8_t _Cursor_count(char* stmt,
9871013 Cursor_forEach (cs , stmt ) {
9881014 Cursor_iterStart (& cs );
9891015 if (cs .token1 .type == type && (strEqu (cs .token1 .pyload , pyload ))) {
990- if (bSkipBranket && cs .branket_deepth > 0 ) {
991- /* skip branket */
992- Cursor_iterEnd (& cs );
993- continue ;
1016+ if (bSkipbracket ) {
1017+ uint8_t branket_deepth_check = 0 ;
1018+ if (Token_isBranketStart (& cs .token1 )) {
1019+ branket_deepth_check = 1 ;
1020+ }
1021+ if (cs .bracket_deepth > branket_deepth_check ) {
1022+ /* skip bracket */
1023+ Cursor_iterEnd (& cs );
1024+ continue ;
1025+ }
9941026 }
9951027 res ++ ;
9961028 }
@@ -1019,7 +1051,7 @@ char* Cursor_popToken(Args* buffs, char** pStmt, char* devide) {
10191051 Cursor_forEach (cs , * pStmt ) {
10201052 Cursor_iterStart (& cs );
10211053 if (!is_find_devide ) {
1022- if ((cs .branket_deepth == 0 && strEqu (cs .token1 .pyload , devide )) ||
1054+ if ((cs .bracket_deepth == 0 && strEqu (cs .token1 .pyload , devide )) ||
10231055 cs .iter_index == cs .length ) {
10241056 is_find_devide = PIKA_TRUE ;
10251057 Cursor_iterEnd (& cs );
@@ -1048,14 +1080,14 @@ char* Cursor_popToken(Args* buffs, char** pStmt, char* devide) {
10481080
10491081char * Cursor_splitCollect (Args * buffs , char * stmt , char * devide , int index ) {
10501082 Arg * aOut = arg_newStr ("" );
1051- int expect_branket = 0 ;
1083+ int expect_bracket = 0 ;
10521084 if (devide [0 ] == '(' || devide [0 ] == '[' || devide [0 ] == '{' ) {
1053- expect_branket = 1 ;
1085+ expect_bracket = 1 ;
10541086 }
10551087 int i = 0 ;
10561088 Cursor_forEach (cs , stmt ) {
10571089 Cursor_iterStart (& cs );
1058- if (cs .branket_deepth == expect_branket &&
1090+ if (cs .bracket_deepth == expect_bracket &&
10591091 strEqu (cs .token1 .pyload , devide )) {
10601092 i ++ ;
10611093 Cursor_iterEnd (& cs );
@@ -1092,7 +1124,7 @@ static void Slice_getPars(Args* outBuffs,
10921124 uint8_t colon_i = 0 ;
10931125 Cursor_forEach (cs , inner ) {
10941126 Cursor_iterStart (& cs );
1095- if (strEqu (cs .token1 .pyload , ":" ) && cs .branket_deepth == 0 ) {
1127+ if (strEqu (cs .token1 .pyload , ":" ) && cs .bracket_deepth == 0 ) {
10961128 colon_i ++ ;
10971129 goto iter_continue1 ;
10981130 }
@@ -1251,7 +1283,7 @@ char* Suger_format(Args* outBuffs, char* right) {
12511283 PIKA_BOOL is_format = PIKA_FALSE ;
12521284 Cursor_forEach (ps1 , right ) {
12531285 Cursor_iterStart (& ps1 );
1254- if (ps1 .branket_deepth == 0 && strEqu (ps1 .token1 .pyload , "%" )) {
1286+ if (ps1 .bracket_deepth == 0 && strEqu (ps1 .token1 .pyload , "%" )) {
12551287 is_format = PIKA_TRUE ;
12561288 }
12571289 Cursor_iterEnd (& ps1 );
@@ -1452,7 +1484,7 @@ char* Parser_popSubStmt(Args* outbuffs, char** psStmt, char* delimiter) {
14521484 Cursor_iterEnd (& cs );
14531485 continue ;
14541486 }
1455- if (cs .branket_deepth > 0 ) {
1487+ if (cs .bracket_deepth > 0 ) {
14561488 /* ignore */
14571489 aSubstmt = arg_strAppend (aSubstmt , cs .token1 .pyload );
14581490 Cursor_iterEnd (& cs );
@@ -1485,21 +1517,25 @@ int Parser_getSubStmtNum(char* subStmts, char* delimiter) {
14851517 return _Cursor_count (subStmts , TOKEN_devider , delimiter , PIKA_TRUE );
14861518}
14871519
1488- char * Parser_popLastSubStmt (Args * outbuffs , char * * stmt_p , char * delimiter ) {
1520+ char * _Parser_popLastSubStmt (Args * outbuffs ,
1521+ char * * stmt_p ,
1522+ char * delimiter ,
1523+ PIKA_BOOL bSkipBracket ) {
14891524 uint8_t last_stmt_i = 0 ;
14901525 char * stmt = * stmt_p ;
14911526 Cursor_forEach (cs , stmt ) {
14921527 Cursor_iterStart (& cs );
14931528 if (strIsStartWith (cs .token1 .pyload , delimiter )) {
14941529 /* found delimiter */
1495- if (!strEqu (delimiter , "[" ) && cs .branket_deepth > 0 ) {
1496- /* ignore */
1530+
1531+ if (bSkipBracket && cs .bracket_deepth > 0 ) {
1532+ /* skip bracket */
14971533 Cursor_iterEnd (& cs );
14981534 continue ;
14991535 }
15001536
15011537 /* for "[" */
1502- if (cs .branket_deepth > 1 ) {
1538+ if (cs .bracket_deepth > 1 ) {
15031539 /* ignore */
15041540 Cursor_iterEnd (& cs );
15051541 continue ;
@@ -1531,6 +1567,10 @@ char* Parser_popLastSubStmt(Args* outbuffs, char** stmt_p, char* delimiter) {
15311567 return strsCacheArg (outbuffs , lastStmt );
15321568}
15331569
1570+ char * Parser_popLastSubStmt (Args * outbuffs , char * * stmt_p , char * delimiter ) {
1571+ return _Parser_popLastSubStmt (outbuffs , stmt_p , delimiter , PIKA_TRUE );
1572+ }
1573+
15341574static void _AST_parse_list (AST * ast , Args * buffs , char * stmt ) {
15351575#if !PIKA_BUILTIN_STRUCT_ENABLE
15361576 return ;
@@ -1573,7 +1613,7 @@ static void _AST_parse_slice(AST* ast, Args* buffs, char* stmt) {
15731613#endif
15741614 AST_setNodeAttr (ast , (char * )"slice" , "slice" );
15751615 stmt = strsCopy (buffs , stmt );
1576- char * laststmt = Parser_popLastSubStmt (buffs , & stmt , "[" );
1616+ char * laststmt = _Parser_popLastSubStmt (buffs , & stmt , "[" , PIKA_FALSE );
15771617 AST_parseSubStmt (ast , stmt );
15781618 char * slice_list = strsCut (buffs , laststmt , '[' , ']' );
15791619 pika_assert (slice_list != NULL );
@@ -1775,8 +1815,16 @@ AST* AST_parseStmt(AST* ast, char* stmt) {
17751815 /* solve method stmt */
17761816 if (STMT_method == stmtType ) {
17771817 char * sRealType = "method" ;
1778- sMethod = strsGetFirstToken (& buffs , right , '(' );
1779- char * sSubStmts = strsCut (& buffs , right , '(' , ')' );
1818+ char * methodstmt = strsCopy (& buffs , right );
1819+ char * laststmt = methodstmt ;
1820+ /* for method()() */
1821+ if (_Cursor_count (methodstmt , TOKEN_devider , "(" , PIKA_TRUE ) > 1 ) {
1822+ laststmt =
1823+ _Parser_popLastSubStmt (& buffs , & methodstmt , "(" , PIKA_FALSE );
1824+ AST_parseSubStmt (ast , methodstmt );
1825+ }
1826+ sMethod = strsGetFirstToken (& buffs , laststmt , '(' );
1827+ char * sSubStmts = strsCut (& buffs , laststmt , '(' , ')' );
17801828 if (NULL == sSubStmts ) {
17811829 result = PIKA_RES_ERR_SYNTAX_ERROR ;
17821830 goto __exit ;
@@ -1975,7 +2023,7 @@ static char* Suger_multiReturn(Args* out_buffs, char* line) {
19752023#endif
19762024 Cursor_forEach (cs , line ) {
19772025 Cursor_iterStart (& cs );
1978- if (cs .branket_deepth == 0 && strEqu (cs .token1 .pyload , "," )) {
2026+ if (cs .bracket_deepth == 0 && strEqu (cs .token1 .pyload , "," )) {
19792027 line = strsFormat (out_buffs , strGetSize (line ) + 3 , "(%s)" , line );
19802028 Cursor_iterEnd (& cs );
19812029 break ;
@@ -2307,7 +2355,7 @@ static PIKA_BOOL _check_is_multi_assign(char* arg_list) {
23072355 PIKA_BOOL res = PIKA_FALSE ;
23082356 Cursor_forEach (cs , arg_list ) {
23092357 Cursor_iterStart (& cs );
2310- if ((cs .branket_deepth == 0 && strEqu (cs .token1 .pyload , "," ))) {
2358+ if ((cs .bracket_deepth == 0 && strEqu (cs .token1 .pyload , "," ))) {
23112359 res = PIKA_TRUE ;
23122360 }
23132361 Cursor_iterEnd (& cs );
@@ -2333,7 +2381,7 @@ static char* Suger_multiAssign(Args* out_buffs, char* line) {
23332381 int out_num = 0 ;
23342382 Cursor_forEach (cs , line ) {
23352383 Cursor_iterStart (& cs );
2336- if (cs .branket_deepth == 0 && strEqu (cs .token1 .pyload , "=" )) {
2384+ if (cs .bracket_deepth == 0 && strEqu (cs .token1 .pyload , "=" )) {
23372385 is_assign = PIKA_TRUE ;
23382386 Cursor_iterEnd (& cs );
23392387 continue ;
@@ -2732,15 +2780,15 @@ char* parser_lines2BackendCode(Parser* self, char* sPyLines) {
27322780 Cursor_deinit (& c );
27332781 /* auto connection */
27342782 if (uLinesIndex < uLinesNum ) {
2735- if (c .branket_deepth > 0 ) {
2783+ if (c .bracket_deepth > 0 ) {
27362784 aLineConnection = arg_strAppend (aLineConnection , sLine );
27372785 bIsLineConnection = 1 ;
27382786 goto next_line ;
27392787 }
27402788 }
27412789
2742- /* branket match failed */
2743- if (c .branket_deepth != 0 ) {
2790+ /* bracket match failed */
2791+ if (c .bracket_deepth != 0 ) {
27442792 sBackendCode = NULL ;
27452793 goto parse_after ;
27462794 }
0 commit comments