ruby-changes:53834
From: duerst <ko1@a...>
Date: Wed, 28 Nov 2018 09:28:56 +0900 (JST)
Subject: [ruby-changes:53834] duerst:r66052 (trunk): reduce number of arguments on quantify_property_node()
duerst 2018-11-28 09:28:52 +0900 (Wed, 28 Nov 2018) New Revision: 66052 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=66052 Log: reduce number of arguments on quantify_property_node() There are only four patterns of the last two arguments to quantify_property_node(). By replacing the lower/upper arguments with a single char, we get more expressive calls, the last argument directly corresponding to the quantifier that we want to use (except for '2', which means exactly two). Modified files: trunk/regparse.c Index: regparse.c =================================================================== --- regparse.c (revision 66051) +++ regparse.c (revision 66052) @@ -5751,11 +5751,29 @@ quantify_node(Node **np, int lower, int https://github.com/ruby/ruby/blob/trunk/regparse.c#L5751 } static int -quantify_property_node(Node **np, ScanEnv* env, const char* propname, int lower, int upper) +quantify_property_node(Node **np, ScanEnv* env, const char* propname, char repetitions) { int r; + int lower = 0; + int upper = REPEAT_INFINITE; + r = create_property_node(np, env, propname); if (r != 0) return r; + switch (repetitions) { + case '?': + upper = 1; + break; + case '+': + lower = 1; + break; + case '*': + break; + case '2': + lower = upper = 2; + break; + default: + return ONIGERR_PARSER_BUG; + } return quantify_node(np, lower, upper); } @@ -5883,7 +5901,7 @@ node_extended_grapheme_cluster(Node** np https://github.com/ruby/ruby/blob/trunk/regparse.c#L5901 /* these are equivalent, so we leave things as is for the moment */ /* T+ */ - r = quantify_property_node(&np1, env, "Grapheme_Cluster_Break=T", 1, REPEAT_INFINITE); + r = quantify_property_node(&np1, env, "Grapheme_Cluster_Break=T", '+'); if (r != 0) goto err; tmp = onig_node_new_alt(np1, alt); @@ -5892,7 +5910,7 @@ node_extended_grapheme_cluster(Node** np https://github.com/ruby/ruby/blob/trunk/regparse.c#L5910 np1 = NULL; /* L+ */ - r = quantify_property_node(&np1, env, "Grapheme_Cluster_Break=L", 1, REPEAT_INFINITE); + r = quantify_property_node(&np1, env, "Grapheme_Cluster_Break=L", '+'); if (r != 0) goto err; tmp = onig_node_new_alt(np1, alt); @@ -5904,11 +5922,11 @@ node_extended_grapheme_cluster(Node** np https://github.com/ruby/ruby/blob/trunk/regparse.c#L5922 { Node* seq[4]; - r = quantify_property_node(seq+0, env, "Grapheme_Cluster_Break=L", 0, REPEAT_INFINITE); + r = quantify_property_node(seq+0, env, "Grapheme_Cluster_Break=L", '*'); if (r != 0) goto err; r = create_property_node(seq+1, env, "Grapheme_Cluster_Break=LVT"); if (r != 0) goto err; - r = quantify_property_node(seq+2, env, "Grapheme_Cluster_Break=T", 0, REPEAT_INFINITE); + r = quantify_property_node(seq+2, env, "Grapheme_Cluster_Break=T", '*'); if (r != 0) goto err; seq[3] = NULL_NODE; @@ -5925,13 +5943,13 @@ node_extended_grapheme_cluster(Node** np https://github.com/ruby/ruby/blob/trunk/regparse.c#L5943 { Node* seq[5]; - r = quantify_property_node(seq+0, env, "Grapheme_Cluster_Break=L", 0, REPEAT_INFINITE); + r = quantify_property_node(seq+0, env, "Grapheme_Cluster_Break=L", '*'); if (r != 0) goto err; r = create_property_node(seq+1, env, "Grapheme_Cluster_Break=LV"); if (r != 0) goto err; - r = quantify_property_node(seq+2, env, "Grapheme_Cluster_Break=V", 0, REPEAT_INFINITE); + r = quantify_property_node(seq+2, env, "Grapheme_Cluster_Break=V", '*'); if (r != 0) goto err; - r = quantify_property_node(seq+3, env, "Grapheme_Cluster_Break=T", 0, REPEAT_INFINITE); + r = quantify_property_node(seq+3, env, "Grapheme_Cluster_Break=T", '*'); if (r != 0) goto err; seq[4] = NULL_NODE; @@ -5948,11 +5966,11 @@ node_extended_grapheme_cluster(Node** np https://github.com/ruby/ruby/blob/trunk/regparse.c#L5966 { Node* seq[4]; - r = quantify_property_node(seq+0, env, "Grapheme_Cluster_Break=L", 0, REPEAT_INFINITE); + r = quantify_property_node(seq+0, env, "Grapheme_Cluster_Break=L", '*'); if (r != 0) goto err; - r = quantify_property_node(seq+1, env, "Grapheme_Cluster_Break=V", 1, REPEAT_INFINITE); + r = quantify_property_node(seq+1, env, "Grapheme_Cluster_Break=V", '+'); if (r != 0) goto err; - r = quantify_property_node(seq+2, env, "Grapheme_Cluster_Break=T", 0, REPEAT_INFINITE); + r = quantify_property_node(seq+2, env, "Grapheme_Cluster_Break=T", '*'); if (r != 0) goto err; seq[3] = NULL_NODE; @@ -5971,7 +5989,7 @@ node_extended_grapheme_cluster(Node** np https://github.com/ruby/ruby/blob/trunk/regparse.c#L5989 * (ZWJ (Glue_After_Zwj | EBG Extend* E_Modifier?) )* */ /* ZWJ (Glue_After_Zwj | E_Base_GAZ Extend* E_Modifier?) */ - r = quantify_property_node(&np1, env, "Grapheme_Cluster_Break=E_Modifier", 0, 1); + r = quantify_property_node(&np1, env, "Grapheme_Cluster_Break=E_Modifier", '?'); if (r != 0) goto err; tmp = node_new_list(np1, NULL_NODE); @@ -5979,7 +5997,7 @@ node_extended_grapheme_cluster(Node** np https://github.com/ruby/ruby/blob/trunk/regparse.c#L5997 list2 = tmp; np1 = NULL; - r = quantify_property_node(&np1, env, "Grapheme_Cluster_Break=Extend", 0, REPEAT_INFINITE); + r = quantify_property_node(&np1, env, "Grapheme_Cluster_Break=Extend", '*'); if (r != 0) goto err; tmp = node_new_list(np1, list2); @@ -6002,7 +6020,7 @@ node_extended_grapheme_cluster(Node** np https://github.com/ruby/ruby/blob/trunk/regparse.c#L6020 /* Unicode 10.0.0 */ /* Glue_After_Zwj */ - r = quantify_property_node(&np1, env, "Grapheme_Cluster_Break=Extend", 0, REPEAT_INFINITE); + r = quantify_property_node(&np1, env, "Grapheme_Cluster_Break=Extend", '*'); if (r != 0) goto err; tmp = node_new_list(np1, NULL_NODE); @@ -6094,7 +6112,7 @@ node_extended_grapheme_cluster(Node** np https://github.com/ruby/ruby/blob/trunk/regparse.c#L6112 np1 = NULL; /* E_Modifier? */ - r = quantify_property_node(&np1, env, "Grapheme_Cluster_Break=E_Modifier", 0, 1); + r = quantify_property_node(&np1, env, "Grapheme_Cluster_Break=E_Modifier", '?'); if (r != 0) goto err; tmp = node_new_list(np1, list2); @@ -6103,7 +6121,7 @@ node_extended_grapheme_cluster(Node** np https://github.com/ruby/ruby/blob/trunk/regparse.c#L6121 np1 = NULL; /* Extend* */ - r = quantify_property_node(&np1, env, "Grapheme_Cluster_Break=Extend", 0, REPEAT_INFINITE); + r = quantify_property_node(&np1, env, "Grapheme_Cluster_Break=Extend", '*'); if (r != 0) goto err; tmp = node_new_list(np1, list2); @@ -6141,7 +6159,7 @@ node_extended_grapheme_cluster(Node** np https://github.com/ruby/ruby/blob/trunk/regparse.c#L6159 * has such examples. * http://www.unicode.org/Public/9.0.0/ucd/auxiliary/GraphemeBreakTest.html */ - r = quantify_property_node(&np1, env, "Grapheme_Cluster_Break=E_Modifier", 0, 1); + r = quantify_property_node(&np1, env, "Grapheme_Cluster_Break=E_Modifier", '?'); if (r != 0) goto err; tmp = node_new_list(np1, NULL_NODE); @@ -6181,7 +6199,7 @@ node_extended_grapheme_cluster(Node** np https://github.com/ruby/ruby/blob/trunk/regparse.c#L6199 /* this is actually Regional_Indicator+ in Unicode 10.0.0, * but it is Regional_Indicator{2} in Unicode 11.0.0, so no need to fix */ /* RI-Sequence := Regional_Indicator{2} */ - r = quantify_property_node(&np1, env, "Regional_Indicator", 2, 2); + r = quantify_property_node(&np1, env, "Regional_Indicator", '2'); if (r != 0) goto err; tmp = node_new_list(np1, list2); @@ -6200,7 +6218,7 @@ node_extended_grapheme_cluster(Node** np https://github.com/ruby/ruby/blob/trunk/regparse.c#L6218 alt = NULL; /* Prepend* */ - r = quantify_property_node(&np1, env, "Grapheme_Cluster_Break=Prepend", 0, REPEAT_INFINITE); + r = quantify_property_node(&np1, env, "Grapheme_Cluster_Break=Prepend", '*'); if (r != 0) goto err; tmp = node_new_list(np1, list); @@ -6238,7 +6256,7 @@ node_extended_grapheme_cluster(Node** np https://github.com/ruby/ruby/blob/trunk/regparse.c#L6256 list2 = tmp; np1 = NULL; - r = quantify_property_node(&np1, env, "Grapheme_Cluster_Break=Prepend", 1, REPEAT_INFINITE); + r = quantify_property_node(&np1, env, "Grapheme_Cluster_Break=Prepend", '+'); if (r != 0) goto err; tmp = node_new_list(np1, list2); -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/