@@ -5765,41 +5765,20 @@ quantify_property_node(Node **np, ScanEnv* env, const char* propname, char repet
57655765 return quantify_node (np , lower , upper );
57665766}
57675767
5768- /* IMPORTANT: Make sure node_array ends with NULL_NODE */
5769- static int
5770- create_sequence_node (Node * * np , Node * * node_array )
5771- {
5772- Node * tmp = NULL_NODE ;
5773- int i = 0 ;
5774-
5775- while (node_array [i ] != NULL_NODE ) i ++ ;
5776- while (-- i >= 0 ) {
5777- * np = node_new_list (node_array [i ], tmp );
5778- if (IS_NULL (* np )) {
5779- while (i >= 0 ) {
5780- onig_node_free (node_array [i ]);
5781- node_array [i -- ] = NULL_NODE ;
5782- }
5783- onig_node_free (tmp );
5784- return ONIGERR_MEMORY ;
5785- }
5786- else
5787- node_array [i ] = NULL_NODE ;
5788- tmp = * np ;
5789- }
5790- return 0 ;
5791- }
5768+ #define LIST 0
5769+ #define ALT 1
57925770
57935771/* IMPORTANT: Make sure node_array ends with NULL_NODE */
57945772static int
5795- create_alternate_node ( Node * * np , Node * * node_array )
5773+ create_node_from_array ( int kind , Node * * np , Node * * node_array )
57965774{
57975775 Node * tmp = NULL_NODE ;
57985776 int i = 0 ;
57995777
58005778 while (node_array [i ] != NULL_NODE ) i ++ ;
58015779 while (-- i >= 0 ) {
5802- * np = onig_node_new_alt (node_array [i ], tmp );
5780+ * np = kind == LIST ? node_new_list (node_array [i ], tmp )
5781+ : onig_node_new_alt (node_array [i ], tmp );
58035782 if (IS_NULL (* np )) {
58045783 while (i >= 0 ) {
58055784 onig_node_free (node_array [i ]);
@@ -5869,10 +5848,10 @@ node_extended_grapheme_cluster(Node** np, ScanEnv* env)
58695848
58705849 /* precore* core postcore* */
58715850 {
5872- Node * seq [4 ];
5851+ Node * list [4 ];
58735852
58745853 /* precore*; precore := Prepend */
5875- R_ERR (quantify_property_node (seq + 0 , env , "Grapheme_Cluster_Break=Prepend" , '*' ));
5854+ R_ERR (quantify_property_node (list + 0 , env , "Grapheme_Cluster_Break=Prepend" , '*' ));
58765855
58775856 /* core := hangul-syllable
58785857 * | ri-sequence
@@ -5890,9 +5869,9 @@ node_extended_grapheme_cluster(Node** np, ScanEnv* env)
58905869
58915870 /* L* (V+ | LV V* | LVT) T* */
58925871 {
5893- Node * H_seq [4 ];
5872+ Node * H_list [4 ];
58945873
5895- R_ERR (quantify_property_node (H_seq + 0 , env , "Grapheme_Cluster_Break=L" , '*' ));
5874+ R_ERR (quantify_property_node (H_list + 0 , env , "Grapheme_Cluster_Break=L" , '*' ));
58965875
58975876 /* V+ | LV V* | LVT */
58985877 {
@@ -5902,25 +5881,25 @@ node_extended_grapheme_cluster(Node** np, ScanEnv* env)
59025881
59035882 /* LV V* */
59045883 {
5905- Node * H_seq2 [3 ];
5884+ Node * H_list2 [3 ];
59065885
5907- R_ERR (create_property_node (H_seq2 + 0 , env , "Grapheme_Cluster_Break=LV" ));
5908- R_ERR (quantify_property_node (H_seq2 + 1 , env , "Grapheme_Cluster_Break=V" , '*' ));
5886+ R_ERR (create_property_node (H_list2 + 0 , env , "Grapheme_Cluster_Break=LV" ));
5887+ R_ERR (quantify_property_node (H_list2 + 1 , env , "Grapheme_Cluster_Break=V" , '*' ));
59095888
5910- H_seq2 [2 ] = NULL_NODE ;
5911- R_ERR (create_sequence_node ( H_alt2 + 1 , H_seq2 ));
5889+ H_list2 [2 ] = NULL_NODE ;
5890+ R_ERR (create_node_from_array ( LIST , H_alt2 + 1 , H_list2 ));
59125891 }
59135892
59145893 R_ERR (create_property_node (H_alt2 + 2 , env , "Grapheme_Cluster_Break=LVT" ));
59155894
59165895 H_alt2 [3 ] = NULL_NODE ;
5917- R_ERR (create_alternate_node ( H_seq + 1 , H_alt2 ));
5896+ R_ERR (create_node_from_array ( ALT , H_list + 1 , H_alt2 ));
59185897 }
59195898
5920- R_ERR (quantify_property_node (H_seq + 2 , env , "Grapheme_Cluster_Break=T" , '*' ));
5899+ R_ERR (quantify_property_node (H_list + 2 , env , "Grapheme_Cluster_Break=T" , '*' ));
59215900
5922- H_seq [3 ] = NULL_NODE ;
5923- R_ERR (create_sequence_node ( core_alts + 0 , H_seq ));
5901+ H_list [3 ] = NULL_NODE ;
5902+ R_ERR (create_node_from_array ( LIST , core_alts + 0 , H_list ));
59245903 }
59255904
59265905 /* L+ */
@@ -5935,31 +5914,31 @@ node_extended_grapheme_cluster(Node** np, ScanEnv* env)
59355914
59365915 /* xpicto-sequence := \p{Extended_Pictographic} (Extend* ZWJ \p{Extended_Pictographic})* */
59375916 {
5938- Node * XP_seq [3 ];
5917+ Node * XP_list [3 ];
59395918
5940- R_ERR (create_property_node (XP_seq + 0 , env , "Extended_Pictographic" ));
5919+ R_ERR (create_property_node (XP_list + 0 , env , "Extended_Pictographic" ));
59415920
59425921 /* (Extend* ZWJ \p{Extended_Pictographic})* */
59435922 {
5944- Node * Ex_seq [4 ];
5923+ Node * Ex_list [4 ];
59455924
5946- R_ERR (quantify_property_node (Ex_seq + 0 , env , "Grapheme_Cluster_Break=Extend" , '*' ));
5925+ R_ERR (quantify_property_node (Ex_list + 0 , env , "Grapheme_Cluster_Break=Extend" , '*' ));
59475926
59485927 /* ZWJ (ZERO WIDTH JOINER) */
59495928 r = ONIGENC_CODE_TO_MBC (env -> enc , 0x200D , buf );
59505929 if (r < 0 ) goto err ;
5951- Ex_seq [1 ] = node_new_str_raw (buf , buf + r );
5952- if (IS_NULL (Ex_seq [1 ])) goto err ;
5930+ Ex_list [1 ] = node_new_str_raw (buf , buf + r );
5931+ if (IS_NULL (Ex_list [1 ])) goto err ;
59535932
5954- R_ERR (create_property_node (Ex_seq + 2 , env , "Extended_Pictographic" ));
5933+ R_ERR (create_property_node (Ex_list + 2 , env , "Extended_Pictographic" ));
59555934
5956- Ex_seq [3 ] = NULL_NODE ;
5957- R_ERR (create_sequence_node ( XP_seq + 1 , Ex_seq ));
5935+ Ex_list [3 ] = NULL_NODE ;
5936+ R_ERR (create_node_from_array ( LIST , XP_list + 1 , Ex_list ));
59585937 }
5959- R_ERR (quantify_node (XP_seq + 1 , 0 , REPEAT_INFINITE )); /* TODO: Check about node freeing */
5938+ R_ERR (quantify_node (XP_list + 1 , 0 , REPEAT_INFINITE )); /* TODO: Check about node freeing */
59605939
5961- XP_seq [2 ] = NULL_NODE ;
5962- R_ERR (create_sequence_node ( core_alts + 4 , XP_seq ));
5940+ XP_list [2 ] = NULL_NODE ;
5941+ R_ERR (create_node_from_array ( LIST , core_alts + 4 , XP_list ));
59635942 }
59645943
59655944 /* [^Control CR LF] */
@@ -5984,18 +5963,18 @@ node_extended_grapheme_cluster(Node** np, ScanEnv* env)
59845963 }
59855964
59865965 core_alts [6 ] = NULL_NODE ;
5987- R_ERR (create_alternate_node ( seq + 1 , core_alts ));
5966+ R_ERR (create_node_from_array ( ALT , list + 1 , core_alts ));
59885967 }
59895968
59905969 /* postcore*; postcore = [Extend ZWJ SpacingMark] */
5991- R_ERR (create_property_node (seq + 2 , env , "Grapheme_Cluster_Break=Extend" ));
5992- cc = NCCLASS (seq [2 ]);
5970+ R_ERR (create_property_node (list + 2 , env , "Grapheme_Cluster_Break=Extend" ));
5971+ cc = NCCLASS (list [2 ]);
59935972 R_ERR (add_property_to_cc (cc , "Grapheme_Cluster_Break=SpacingMark" , 0 , env ));
59945973 R_ERR (add_code_range (& (cc -> mbuf ), env , 0x200D , 0x200D ));
5995- R_ERR (quantify_node (seq + 2 , 0 , REPEAT_INFINITE ));
5974+ R_ERR (quantify_node (list + 2 , 0 , REPEAT_INFINITE ));
59965975
5997- seq [3 ] = NULL_NODE ;
5998- R_ERR (create_sequence_node ( alts + 1 , seq ));
5976+ list [3 ] = NULL_NODE ;
5977+ R_ERR (create_node_from_array ( LIST , alts + 1 , list ));
59995978 }
60005979
60015980 /* PerlSyntax: (?s:.), RubySyntax: (?m:.) */
@@ -6012,7 +5991,7 @@ node_extended_grapheme_cluster(Node** np, ScanEnv* env)
60125991 alts [2 ] = tmp ;
60135992
60145993 alts [3 ] = NULL_NODE ;
6015- R_ERR (create_alternate_node ( & top_alt , alts ));
5994+ R_ERR (create_node_from_array ( ALT , & top_alt , alts ));
60165995 }
60175996 }
60185997 else
0 commit comments