gawk-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gawk-diffs] [SCM] gawk branch, feature/regex-type, updated. gawk-4.1.0-


From: Arnold Robbins
Subject: [gawk-diffs] [SCM] gawk branch, feature/regex-type, updated. gawk-4.1.0-1256-g448c454
Date: Fri, 03 Apr 2015 06:16:07 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gawk".

The branch, feature/regex-type has been updated
       via  448c45412600cd9844caf2336f5bf6c459145d08 (commit)
       via  8d0b9648204d05537828e70ee1816834dc3b1d34 (commit)
       via  a899726e00426379e74b13732b2b6bf094f47cd9 (commit)
       via  ddc290584b39bab2c1edcec935a31ea12d343246 (commit)
      from  bbeeb351c73fb1ee4ff20c3774e0477e9e8a7513 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=448c45412600cd9844caf2336f5bf6c459145d08

commit 448c45412600cd9844caf2336f5bf6c459145d08
Author: Arnold D. Robbins <address@hidden>
Date:   Fri Apr 3 09:15:47 2015 +0300

    Add some test file for use during development.

diff --git a/a.awk b/a.awk
new file mode 100644
index 0000000..daed9d9
--- /dev/null
+++ b/a.awk
@@ -0,0 +1,7 @@
+BEGIN {
+       f = "foo"
+       p = "o+"
+       fun = "match"
+       @fun(f, p)
+       print RSTART, RLENGTH
+}
diff --git a/hardregex-semantics.awk b/hardregex-semantics.awk
new file mode 100644
index 0000000..84fcef9
--- /dev/null
+++ b/hardregex-semantics.awk
@@ -0,0 +1,95 @@
+# This file describes the semantics for hard regex constants
+# As much as possible it's executable code so that it can be used
+# (or split into) test cases for development and regression testing.
+
+function simple_tests( fbre, numresult, strresult)
+{
+       # usable as case value
+       switch ("foobaaar") {
+       case @/fo+ba+r/:
+               print "switch-case: ok"
+               break
+       default:
+               print "switch-case: fail"
+               break
+       }
+
+       # usable with ~ and !~
+       if ("foobaaar" ~ @/fo+ba+r/)
+               print "match ~: ok"
+       else
+               print "match ~: fail"
+
+       if ("quasimoto" !~ @/fo+ba+r/)
+               print "match !~: ok"
+       else
+               print "match !~: fail"
+
+       # assign to variable, use in match
+       fbre = @/fo+ba+r/
+       if ("foobaaar" ~ fbre)
+               print "variable match ~: ok"
+       else
+               print "variable match ~: fail"
+
+       if ("quasimoto" !~ fbre)
+               print "variable match !~: ok"
+       else
+               print "variable match !~: fail"
+
+       # Use as numeric value, should be zero
+       numresult = fbre + 42
+       if (numresult == 42)
+               print "variable as numeric value: ok"
+       else
+               print "variable as numeric value: fail"
+
+       # Use as string value, should be string value of text
+       strresult = "<" fbre ">"
+       if (strresult == "<fo+ba+r>")
+               print "variable as string value: ok"
+       else
+               print "variable as string value: fail", strresult
+
+       # typeof should work
+       if (typeof(@/fo+ba+r/) == "regexp")
+               print "typeof constant: ok"
+       else
+               print "typeof constant: fail"
+
+       if (typeof(fbre) == "regexp")
+               print "typeof variable: ok"
+       else
+               print "typeof variable: fail"
+
+       # conversion to number, works. should it be fatal?
+       fbre++
+       if (fbre == 1)
+               print "conversion to number: ok"
+       else
+               print "conversion to number: fail"
+
+       if (typeof(fbre) == "scalar_n")
+               print "typeof variable after conversion: ok"
+       else
+               print "typeof variable after conversion: fail"
+}
+
+BEGIN {
+       simple_tests()
+
+       # use with match, constant
+       # use with match, variable
+       # use with sub, constant
+       # use with sub, variable
+       # use with gsub, constant
+       # use with gsub, variable
+       # use with gensub, constant
+       # use with gensub, variable
+       # use with split, constant
+       # use with split, variable
+       # use with patsplit, constant
+       # use with patsplit, variable
+
+       # indirect call tests...
+}
diff --git a/y.awk b/y.awk
new file mode 100644
index 0000000..820e321
--- /dev/null
+++ b/y.awk
@@ -0,0 +1 @@
+BEGIN { f = "foo" ; sub(@/f/, "q", f); print f }
diff --git a/z.awk b/z.awk
new file mode 100644
index 0000000..5df943c
--- /dev/null
+++ b/z.awk
@@ -0,0 +1 @@
+BEGIN { f = "foo" ; p = @/o/ ; gsub(p, "q", f); print f }
diff --git a/z2.awk b/z2.awk
new file mode 100644
index 0000000..0a597b2
--- /dev/null
+++ b/z2.awk
@@ -0,0 +1,8 @@
+BEGIN {
+       f = "foo"
+       p = @/o/
+//     gsub(p, "q", f)
+       fun = "gsub"
+       @fun(p, "q", f)
+       print f
+}
diff --git a/z3.awk b/z3.awk
new file mode 100644
index 0000000..408f525
--- /dev/null
+++ b/z3.awk
@@ -0,0 +1,19 @@
+function testit(count, re, repl,       fun, bi, n1, n2)
+{
+       $0 = "foo"
+       n1 = gsub(re, repl)
+       bi = $0
+
+       $0 = "foo"
+       fun = "gsub"
+       n2 = @fun(re, repl)
+       printf("%d: n1 = %d, bi -> %s, n2 = %d, indirect -> %s\n",
+               count, n1, bi, n2, $0)
+}
+
+BEGIN {
+       testit(1, @/o/, "q")
+       p = @/o/
+stopme()
+       testit(2, p, "q")
+}

http://git.sv.gnu.org/cgit/gawk.git/commit/?id=8d0b9648204d05537828e70ee1816834dc3b1d34

commit 8d0b9648204d05537828e70ee1816834dc3b1d34
Author: Arnold D. Robbins <address@hidden>
Date:   Fri Apr 3 09:15:05 2015 +0300

    Further progress on making hard regexes work.

diff --git a/ChangeLog b/ChangeLog
index 164cbb6..d599b18 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2015-04-03         Arnold D. Robbins     <address@hidden>
+
+       * awk.h (force_string): If hard_regex, return string text of the regex.
+       (force_string, force_number): If hard_regex, return Nnull_string.
+       * awkgram.y: Fix ~ and !~ with @/.../.
+       * eval.c (setup_frame): Handle a hard regex.
+       * re.c (avoid_dfa): Ditto.
+
 2015-04-02         Arnold D. Robbins     <address@hidden>
 
        Rename div() to intdiv().
diff --git a/awk.h b/awk.h
index 5cc0b14..1aa31b8 100644
--- a/awk.h
+++ b/awk.h
@@ -1764,6 +1764,9 @@ dupnode(NODE *n)
 static inline NODE *
 force_string(NODE *s)
 {
+       if (s->type == Node_hardregex)
+               return s->re_exp;
+
        if ((s->flags & STRCUR) != 0
                    && (s->stfmt == -1 || s->stfmt == CONVFMTidx)
        )
@@ -1786,6 +1789,9 @@ unref(NODE *r)
 static inline NODE *
 force_number(NODE *n)
 {
+       if (n->type == Node_hardregex)
+               return Nnull_string;
+
        return (n->flags & NUMCUR) ? n : str2number(n);
 }
 
diff --git a/awkgram.c b/awkgram.c
index 2fcdb15..337e179 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -672,15 +672,15 @@ static const yytype_uint16 yyrline[] =
     1280,  1283,  1285,  1290,  1291,  1300,  1301,  1306,  1311,  1317,
     1319,  1321,  1328,  1329,  1335,  1336,  1341,  1343,  1348,  1350,
     1358,  1363,  1372,  1373,  1378,  1380,  1385,  1387,  1395,  1400,
-    1408,  1409,  1414,  1421,  1425,  1427,  1429,  1444,  1461,  1471,
-    1478,  1480,  1485,  1487,  1489,  1497,  1499,  1504,  1506,  1511,
-    1513,  1515,  1565,  1567,  1569,  1571,  1573,  1575,  1577,  1579,
-    1593,  1598,  1603,  1628,  1634,  1636,  1638,  1640,  1642,  1644,
-    1649,  1653,  1685,  1687,  1693,  1699,  1712,  1713,  1714,  1719,
-    1724,  1728,  1732,  1747,  1760,  1765,  1802,  1831,  1832,  1838,
-    1839,  1844,  1846,  1853,  1870,  1887,  1889,  1896,  1901,  1909,
-    1919,  1931,  1940,  1944,  1948,  1952,  1956,  1960,  1963,  1965,
-    1969,  1973,  1977
+    1408,  1409,  1414,  1421,  1425,  1427,  1429,  1442,  1459,  1469,
+    1476,  1478,  1483,  1485,  1487,  1495,  1497,  1502,  1504,  1509,
+    1511,  1513,  1563,  1565,  1567,  1569,  1571,  1573,  1575,  1577,
+    1591,  1596,  1601,  1626,  1632,  1634,  1636,  1638,  1640,  1642,
+    1647,  1651,  1683,  1685,  1691,  1697,  1710,  1711,  1712,  1717,
+    1722,  1726,  1730,  1745,  1758,  1763,  1800,  1829,  1830,  1836,
+    1837,  1842,  1844,  1851,  1868,  1885,  1887,  1894,  1899,  1907,
+    1917,  1929,  1938,  1942,  1946,  1950,  1954,  1958,  1961,  1963,
+    1967,  1971,  1975
 };
 #endif
 
@@ -3414,20 +3414,18 @@ regular_print:
                        warning_ln((yyvsp[-1])->source_line,
                                _("regular expression on left of `~' or `!~' 
operator"));
 
-               assert((yyvsp[0])->lasti == (yyvsp[0])->nexti
-                  && (yyvsp[0])->nexti->opcode == Op_push_re
-                  && (yyvsp[0])->nexti->memory->type == Node_hardregex);
+               assert((yyvsp[0])->opcode == Op_push_re
+                       && (yyvsp[0])->memory->type == Node_hardregex);
                /* RHS is @/.../ */
-               (yyvsp[-1])->memory = (yyvsp[0])->nexti->memory;
-               bcfree((yyvsp[0])->nexti);      /* Op_push_re */
-               bcfree((yyvsp[0]));                     /* Op_list */
+               (yyvsp[-1])->memory = (yyvsp[0])->memory;
+               bcfree((yyvsp[0]));
                (yyval) = list_append((yyvsp[-2]), (yyvsp[-1]));
          }
-#line 3427 "awkgram.c" /* yacc.c:1646  */
+#line 3425 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 127:
-#line 1445 "awkgram.y" /* yacc.c:1646  */
+#line 1443 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[-2])->lasti->opcode == Op_match_rec)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3444,11 +3442,11 @@ regular_print:
                        (yyval) = list_append(list_merge((yyvsp[-2]), 
(yyvsp[0])), (yyvsp[-1]));
                }
          }
-#line 3448 "awkgram.c" /* yacc.c:1646  */
+#line 3446 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 128:
-#line 1462 "awkgram.y" /* yacc.c:1646  */
+#line 1460 "awkgram.y" /* yacc.c:1646  */
     {
                if (do_lint_old)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3458,91 +3456,91 @@ regular_print:
                (yyvsp[-1])->expr_count = 1;
                (yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), 
(yyvsp[-1]));
          }
-#line 3462 "awkgram.c" /* yacc.c:1646  */
+#line 3460 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 129:
-#line 1472 "awkgram.y" /* yacc.c:1646  */
+#line 1470 "awkgram.y" /* yacc.c:1646  */
     {
                if (do_lint && (yyvsp[0])->lasti->opcode == Op_match_rec)
                        lintwarn_ln((yyvsp[-1])->source_line,
                                _("regular expression on right of comparison"));
                (yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), 
(yyvsp[-1]));
          }
-#line 3473 "awkgram.c" /* yacc.c:1646  */
+#line 3471 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 130:
-#line 1479 "awkgram.y" /* yacc.c:1646  */
+#line 1477 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_condition((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]), 
(yyvsp[-1]), (yyvsp[0])); }
-#line 3479 "awkgram.c" /* yacc.c:1646  */
+#line 3477 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 131:
-#line 1481 "awkgram.y" /* yacc.c:1646  */
+#line 1479 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3485 "awkgram.c" /* yacc.c:1646  */
+#line 3483 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 132:
-#line 1486 "awkgram.y" /* yacc.c:1646  */
+#line 1484 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3491 "awkgram.c" /* yacc.c:1646  */
+#line 3489 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 133:
-#line 1488 "awkgram.y" /* yacc.c:1646  */
+#line 1486 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3497 "awkgram.c" /* yacc.c:1646  */
+#line 3495 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 134:
-#line 1490 "awkgram.y" /* yacc.c:1646  */
+#line 1488 "awkgram.y" /* yacc.c:1646  */
     {  
                (yyvsp[0])->opcode = Op_assign_quotient;
                (yyval) = (yyvsp[0]);
          }
-#line 3506 "awkgram.c" /* yacc.c:1646  */
+#line 3504 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 135:
-#line 1498 "awkgram.y" /* yacc.c:1646  */
+#line 1496 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3512 "awkgram.c" /* yacc.c:1646  */
+#line 3510 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 136:
-#line 1500 "awkgram.y" /* yacc.c:1646  */
+#line 1498 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3518 "awkgram.c" /* yacc.c:1646  */
+#line 3516 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 137:
-#line 1505 "awkgram.y" /* yacc.c:1646  */
+#line 1503 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3524 "awkgram.c" /* yacc.c:1646  */
+#line 3522 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 138:
-#line 1507 "awkgram.y" /* yacc.c:1646  */
+#line 1505 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3530 "awkgram.c" /* yacc.c:1646  */
+#line 3528 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 139:
-#line 1512 "awkgram.y" /* yacc.c:1646  */
+#line 1510 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3536 "awkgram.c" /* yacc.c:1646  */
+#line 3534 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 140:
-#line 1514 "awkgram.y" /* yacc.c:1646  */
+#line 1512 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3542 "awkgram.c" /* yacc.c:1646  */
+#line 3540 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 141:
-#line 1516 "awkgram.y" /* yacc.c:1646  */
+#line 1514 "awkgram.y" /* yacc.c:1646  */
     {
                int count = 2;
                bool is_simple_var = false;
@@ -3589,47 +3587,47 @@ regular_print:
                                max_args = count;
                }
          }
-#line 3593 "awkgram.c" /* yacc.c:1646  */
+#line 3591 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 143:
-#line 1568 "awkgram.y" /* yacc.c:1646  */
+#line 1566 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3599 "awkgram.c" /* yacc.c:1646  */
+#line 3597 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 144:
-#line 1570 "awkgram.y" /* yacc.c:1646  */
+#line 1568 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3605 "awkgram.c" /* yacc.c:1646  */
+#line 3603 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 145:
-#line 1572 "awkgram.y" /* yacc.c:1646  */
+#line 1570 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3611 "awkgram.c" /* yacc.c:1646  */
+#line 3609 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 146:
-#line 1574 "awkgram.y" /* yacc.c:1646  */
+#line 1572 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3617 "awkgram.c" /* yacc.c:1646  */
+#line 3615 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 147:
-#line 1576 "awkgram.y" /* yacc.c:1646  */
+#line 1574 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3623 "awkgram.c" /* yacc.c:1646  */
+#line 3621 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 148:
-#line 1578 "awkgram.y" /* yacc.c:1646  */
+#line 1576 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3629 "awkgram.c" /* yacc.c:1646  */
+#line 3627 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 149:
-#line 1580 "awkgram.y" /* yacc.c:1646  */
+#line 1578 "awkgram.y" /* yacc.c:1646  */
     {
                /*
                 * In BEGINFILE/ENDFILE, allow `getline [var] < file'
@@ -3643,29 +3641,29 @@ regular_print:
                                _("non-redirected `getline' undefined inside 
END action"));
                (yyval) = mk_getline((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]), 
redirect_input);
          }
-#line 3647 "awkgram.c" /* yacc.c:1646  */
+#line 3645 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 150:
-#line 1594 "awkgram.y" /* yacc.c:1646  */
+#line 1592 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->opcode = Op_postincrement;
                (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 3656 "awkgram.c" /* yacc.c:1646  */
+#line 3654 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 151:
-#line 1599 "awkgram.y" /* yacc.c:1646  */
+#line 1597 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->opcode = Op_postdecrement;
                (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 3665 "awkgram.c" /* yacc.c:1646  */
+#line 3663 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 152:
-#line 1604 "awkgram.y" /* yacc.c:1646  */
+#line 1602 "awkgram.y" /* yacc.c:1646  */
     {
                if (do_lint_old) {
                    warning_ln((yyvsp[-1])->source_line,
@@ -3685,64 +3683,64 @@ regular_print:
                        (yyval) = list_append(list_merge(t, (yyvsp[0])), 
(yyvsp[-1]));
                }
          }
-#line 3689 "awkgram.c" /* yacc.c:1646  */
+#line 3687 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 153:
-#line 1629 "awkgram.y" /* yacc.c:1646  */
+#line 1627 "awkgram.y" /* yacc.c:1646  */
     {
                  (yyval) = mk_getline((yyvsp[-1]), (yyvsp[0]), (yyvsp[-3]), 
(yyvsp[-2])->redir_type);
                  bcfree((yyvsp[-2]));
                }
-#line 3698 "awkgram.c" /* yacc.c:1646  */
+#line 3696 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 154:
-#line 1635 "awkgram.y" /* yacc.c:1646  */
+#line 1633 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3704 "awkgram.c" /* yacc.c:1646  */
+#line 3702 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 155:
-#line 1637 "awkgram.y" /* yacc.c:1646  */
+#line 1635 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3710 "awkgram.c" /* yacc.c:1646  */
+#line 3708 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 156:
-#line 1639 "awkgram.y" /* yacc.c:1646  */
+#line 1637 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3716 "awkgram.c" /* yacc.c:1646  */
+#line 3714 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 157:
-#line 1641 "awkgram.y" /* yacc.c:1646  */
+#line 1639 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3722 "awkgram.c" /* yacc.c:1646  */
+#line 3720 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 158:
-#line 1643 "awkgram.y" /* yacc.c:1646  */
+#line 1641 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3728 "awkgram.c" /* yacc.c:1646  */
+#line 3726 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 159:
-#line 1645 "awkgram.y" /* yacc.c:1646  */
+#line 1643 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3734 "awkgram.c" /* yacc.c:1646  */
+#line 3732 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 160:
-#line 1650 "awkgram.y" /* yacc.c:1646  */
+#line 1648 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3742 "awkgram.c" /* yacc.c:1646  */
+#line 3740 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 161:
-#line 1654 "awkgram.y" /* yacc.c:1646  */
+#line 1652 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[0])->opcode == Op_match_rec) {
                        (yyvsp[0])->opcode = Op_nomatch;
@@ -3774,37 +3772,37 @@ regular_print:
                        }
                }
           }
-#line 3778 "awkgram.c" /* yacc.c:1646  */
+#line 3776 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 162:
-#line 1686 "awkgram.y" /* yacc.c:1646  */
+#line 1684 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[-1]); }
-#line 3784 "awkgram.c" /* yacc.c:1646  */
+#line 3782 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 163:
-#line 1688 "awkgram.y" /* yacc.c:1646  */
+#line 1686 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3794 "awkgram.c" /* yacc.c:1646  */
+#line 3792 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 164:
-#line 1694 "awkgram.y" /* yacc.c:1646  */
+#line 1692 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3804 "awkgram.c" /* yacc.c:1646  */
+#line 3802 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 165:
-#line 1700 "awkgram.y" /* yacc.c:1646  */
+#line 1698 "awkgram.y" /* yacc.c:1646  */
     {
                static bool warned = false;
 
@@ -3817,45 +3815,45 @@ regular_print:
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3821 "awkgram.c" /* yacc.c:1646  */
+#line 3819 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 168:
-#line 1715 "awkgram.y" /* yacc.c:1646  */
+#line 1713 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[-1])->opcode = Op_preincrement;
                (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
-#line 3830 "awkgram.c" /* yacc.c:1646  */
+#line 3828 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 169:
-#line 1720 "awkgram.y" /* yacc.c:1646  */
+#line 1718 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[-1])->opcode = Op_predecrement;
                (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
-#line 3839 "awkgram.c" /* yacc.c:1646  */
+#line 3837 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 170:
-#line 1725 "awkgram.y" /* yacc.c:1646  */
+#line 1723 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3847 "awkgram.c" /* yacc.c:1646  */
+#line 3845 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 171:
-#line 1729 "awkgram.y" /* yacc.c:1646  */
+#line 1727 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3855 "awkgram.c" /* yacc.c:1646  */
+#line 3853 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 172:
-#line 1733 "awkgram.y" /* yacc.c:1646  */
+#line 1731 "awkgram.y" /* yacc.c:1646  */
     {
                if ((yyvsp[0])->lasti->opcode == Op_push_i
                        && ((yyvsp[0])->lasti->memory->flags & (STRCUR|STRING)) 
== 0
@@ -3870,11 +3868,11 @@ regular_print:
                        (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
                }
          }
-#line 3874 "awkgram.c" /* yacc.c:1646  */
+#line 3872 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 173:
-#line 1748 "awkgram.y" /* yacc.c:1646  */
+#line 1746 "awkgram.y" /* yacc.c:1646  */
     {
            /*
             * was: $$ = $2
@@ -3884,20 +3882,20 @@ regular_print:
                (yyvsp[-1])->memory = make_number(0.0);
                (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
          }
-#line 3888 "awkgram.c" /* yacc.c:1646  */
+#line 3886 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 174:
-#line 1761 "awkgram.y" /* yacc.c:1646  */
+#line 1759 "awkgram.y" /* yacc.c:1646  */
     {
                func_use((yyvsp[0])->lasti->func_name, FUNC_USE);
                (yyval) = (yyvsp[0]);
          }
-#line 3897 "awkgram.c" /* yacc.c:1646  */
+#line 3895 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 175:
-#line 1766 "awkgram.y" /* yacc.c:1646  */
+#line 1764 "awkgram.y" /* yacc.c:1646  */
     {
                /* indirect function call */
                INSTRUCTION *f, *t;
@@ -3931,11 +3929,11 @@ regular_print:
                (yyval) = list_prepend((yyvsp[0]), t);
                at_seen = false;
          }
-#line 3935 "awkgram.c" /* yacc.c:1646  */
+#line 3933 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 176:
-#line 1803 "awkgram.y" /* yacc.c:1646  */
+#line 1801 "awkgram.y" /* yacc.c:1646  */
     {
                NODE *n;
 
@@ -3960,49 +3958,49 @@ regular_print:
                        (yyval) = list_append(t, (yyvsp[-3]));
                }
          }
-#line 3964 "awkgram.c" /* yacc.c:1646  */
+#line 3962 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 177:
-#line 1831 "awkgram.y" /* yacc.c:1646  */
+#line 1829 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3970 "awkgram.c" /* yacc.c:1646  */
+#line 3968 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 178:
-#line 1833 "awkgram.y" /* yacc.c:1646  */
+#line 1831 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); }
-#line 3976 "awkgram.c" /* yacc.c:1646  */
+#line 3974 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 179:
-#line 1838 "awkgram.y" /* yacc.c:1646  */
+#line 1836 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 3982 "awkgram.c" /* yacc.c:1646  */
+#line 3980 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 180:
-#line 1840 "awkgram.y" /* yacc.c:1646  */
+#line 1838 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[-1]); }
-#line 3988 "awkgram.c" /* yacc.c:1646  */
+#line 3986 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 181:
-#line 1845 "awkgram.y" /* yacc.c:1646  */
+#line 1843 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = (yyvsp[0]); }
-#line 3994 "awkgram.c" /* yacc.c:1646  */
+#line 3992 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 182:
-#line 1847 "awkgram.y" /* yacc.c:1646  */
+#line 1845 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
-#line 4002 "awkgram.c" /* yacc.c:1646  */
+#line 4000 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 183:
-#line 1854 "awkgram.y" /* yacc.c:1646  */
+#line 1852 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *ip = (yyvsp[0])->lasti; 
                int count = ip->sub_count;      /* # of SUBSEP-seperated 
expressions */
@@ -4016,11 +4014,11 @@ regular_print:
                sub_counter++;  /* count # of dimensions */
                (yyval) = (yyvsp[0]);
          }
-#line 4020 "awkgram.c" /* yacc.c:1646  */
+#line 4018 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 184:
-#line 1871 "awkgram.y" /* yacc.c:1646  */
+#line 1869 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *t = (yyvsp[-1]);
                if ((yyvsp[-1]) == NULL) {
@@ -4034,31 +4032,31 @@ regular_print:
                        (yyvsp[0])->sub_count = count_expressions(&t, false);
                (yyval) = list_append(t, (yyvsp[0]));
          }
-#line 4038 "awkgram.c" /* yacc.c:1646  */
+#line 4036 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 185:
-#line 1888 "awkgram.y" /* yacc.c:1646  */
+#line 1886 "awkgram.y" /* yacc.c:1646  */
     {  (yyval) = (yyvsp[0]); }
-#line 4044 "awkgram.c" /* yacc.c:1646  */
+#line 4042 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 186:
-#line 1890 "awkgram.y" /* yacc.c:1646  */
+#line 1888 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
-#line 4052 "awkgram.c" /* yacc.c:1646  */
+#line 4050 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 187:
-#line 1897 "awkgram.y" /* yacc.c:1646  */
+#line 1895 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[-1]); }
-#line 4058 "awkgram.c" /* yacc.c:1646  */
+#line 4056 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 188:
-#line 1902 "awkgram.y" /* yacc.c:1646  */
+#line 1900 "awkgram.y" /* yacc.c:1646  */
     {
                char *var_name = (yyvsp[0])->lextok;
 
@@ -4066,22 +4064,22 @@ regular_print:
                (yyvsp[0])->memory = variable((yyvsp[0])->source_line, 
var_name, Node_var_new);
                (yyval) = list_create((yyvsp[0]));
          }
-#line 4070 "awkgram.c" /* yacc.c:1646  */
+#line 4068 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 189:
-#line 1910 "awkgram.y" /* yacc.c:1646  */
+#line 1908 "awkgram.y" /* yacc.c:1646  */
     {
                char *arr = (yyvsp[-1])->lextok;
                (yyvsp[-1])->memory = variable((yyvsp[-1])->source_line, arr, 
Node_var_new);
                (yyvsp[-1])->opcode = Op_push_array;
                (yyval) = list_prepend((yyvsp[0]), (yyvsp[-1]));
          }
-#line 4081 "awkgram.c" /* yacc.c:1646  */
+#line 4079 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 190:
-#line 1920 "awkgram.y" /* yacc.c:1646  */
+#line 1918 "awkgram.y" /* yacc.c:1646  */
     {
                INSTRUCTION *ip = (yyvsp[0])->nexti;
                if (ip->opcode == Op_push
@@ -4093,73 +4091,73 @@ regular_print:
                } else
                        (yyval) = (yyvsp[0]);
          }
-#line 4097 "awkgram.c" /* yacc.c:1646  */
+#line 4095 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 191:
-#line 1932 "awkgram.y" /* yacc.c:1646  */
+#line 1930 "awkgram.y" /* yacc.c:1646  */
     {
                (yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
                if ((yyvsp[0]) != NULL)
                        mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 4107 "awkgram.c" /* yacc.c:1646  */
+#line 4105 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 192:
-#line 1941 "awkgram.y" /* yacc.c:1646  */
+#line 1939 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->opcode = Op_postincrement;
          }
-#line 4115 "awkgram.c" /* yacc.c:1646  */
+#line 4113 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 193:
-#line 1945 "awkgram.y" /* yacc.c:1646  */
+#line 1943 "awkgram.y" /* yacc.c:1646  */
     {
                (yyvsp[0])->opcode = Op_postdecrement;
          }
-#line 4123 "awkgram.c" /* yacc.c:1646  */
+#line 4121 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 194:
-#line 1948 "awkgram.y" /* yacc.c:1646  */
+#line 1946 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
-#line 4129 "awkgram.c" /* yacc.c:1646  */
+#line 4127 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 196:
-#line 1956 "awkgram.y" /* yacc.c:1646  */
+#line 1954 "awkgram.y" /* yacc.c:1646  */
     { yyerrok; }
-#line 4135 "awkgram.c" /* yacc.c:1646  */
+#line 4133 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 197:
-#line 1960 "awkgram.y" /* yacc.c:1646  */
+#line 1958 "awkgram.y" /* yacc.c:1646  */
     { yyerrok; }
-#line 4141 "awkgram.c" /* yacc.c:1646  */
+#line 4139 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 200:
-#line 1969 "awkgram.y" /* yacc.c:1646  */
+#line 1967 "awkgram.y" /* yacc.c:1646  */
     { yyerrok; }
-#line 4147 "awkgram.c" /* yacc.c:1646  */
+#line 4145 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 201:
-#line 1973 "awkgram.y" /* yacc.c:1646  */
+#line 1971 "awkgram.y" /* yacc.c:1646  */
     { (yyval) = (yyvsp[0]); yyerrok; }
-#line 4153 "awkgram.c" /* yacc.c:1646  */
+#line 4151 "awkgram.c" /* yacc.c:1646  */
     break;
 
   case 202:
-#line 1977 "awkgram.y" /* yacc.c:1646  */
+#line 1975 "awkgram.y" /* yacc.c:1646  */
     { yyerrok; }
-#line 4159 "awkgram.c" /* yacc.c:1646  */
+#line 4157 "awkgram.c" /* yacc.c:1646  */
     break;
 
 
-#line 4163 "awkgram.c" /* yacc.c:1646  */
+#line 4161 "awkgram.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -4387,7 +4385,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 1979 "awkgram.y" /* yacc.c:1906  */
+#line 1977 "awkgram.y" /* yacc.c:1906  */
 
 
 struct token {
diff --git a/awkgram.y b/awkgram.y
index a47bf07..0714cc1 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -1432,13 +1432,11 @@ exp
                        warning_ln($2->source_line,
                                _("regular expression on left of `~' or `!~' 
operator"));
 
-               assert($3->lasti == $3->nexti
-                  && $3->nexti->opcode == Op_push_re
-                  && $3->nexti->memory->type == Node_hardregex);
+               assert($3->opcode == Op_push_re
+                       && $3->memory->type == Node_hardregex);
                /* RHS is @/.../ */
-               $2->memory = $3->nexti->memory;
-               bcfree($3->nexti);      /* Op_push_re */
-               bcfree($3);                     /* Op_list */
+               $2->memory = $3->memory;
+               bcfree($3);
                $$ = list_append($1, $2);
          }
        | exp MATCHOP exp
diff --git a/eval.c b/eval.c
index 7dd6a12..0a2ba3d 100644
--- a/eval.c
+++ b/eval.c
@@ -1357,6 +1357,11 @@ setup_frame(INSTRUCTION *pc)
                        r->var_value = m;
                        break;
 
+               case Node_hardregex:
+                       r->type = Node_var;
+                       r->var_value = m;
+                       break;
+
                default:
                        cant_happen();
                }
diff --git a/re.c b/re.c
index 77d6f6f..a377fe9 100644
--- a/re.c
+++ b/re.c
@@ -433,6 +433,15 @@ avoid_dfa(NODE *re, char *str, size_t len)
 {
        char *end;
 
+       /*
+        * f = @/.../
+        * if ("foo" ~ f) ...
+        *
+        * This creates a Node_dynregex with NULL re_reg.
+        */
+       if (re->re_reg == NULL)
+               return false;
+
        if (! re->re_reg->has_anchor)
                return false;
 

http://git.sv.gnu.org/cgit/gawk.git/commit/?id=a899726e00426379e74b13732b2b6bf094f47cd9

commit a899726e00426379e74b13732b2b6bf094f47cd9
Merge: bbeeb35 ddc2905
Author: Arnold D. Robbins <address@hidden>
Date:   Fri Apr 3 09:11:31 2015 +0300

    Merge branch 'master' into feature/regex-type

diff --cc awk.h
index 6d87aa2,6f812e7..5cc0b14
--- a/awk.h
+++ b/awk.h
@@@ -1384,8 -1383,7 +1384,8 @@@ extern AWKNUM nondec2awknum(char *str, 
  extern NODE *do_dcgettext(int nargs);
  extern NODE *do_dcngettext(int nargs);
  extern NODE *do_bindtextdomain(int nargs);
- extern NODE *do_div(int nargs);
+ extern NODE *do_intdiv(int nargs);
 +extern NODE *do_typeof(int nargs);
  extern int strncasecmpmbs(const unsigned char *,
                          const unsigned char *, size_t);
  /* eval.c */

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                             |   17 +
 a.awk                                 |    7 +
 awk.h                                 |   10 +-
 awkgram.c                             |  320 ++++++++--------
 awkgram.y                             |   16 +-
 awklib/eg/lib/{div.awk => intdiv.awk} |    7 +-
 awklib/eg/prog/pi.awk                 |    2 +-
 builtin.c                             |   12 +-
 doc/ChangeLog                         |    4 +
 doc/awkcard.in                        |    6 +-
 doc/gawk.1                            |   16 +-
 doc/gawk.info                         |  711 +++++++++++++++++----------------
 doc/gawk.texi                         |   59 ++--
 doc/gawktexi.in                       |   59 ++--
 eval.c                                |    5 +
 hardregex-semantics.awk               |   95 +++++
 mpfr.c                                |   12 +-
 re.c                                  |    9 +
 test/ChangeLog                        |    4 +
 test/id.ok                            |    2 +-
 test/mpfrsqrt.awk                     |    6 +-
 y.awk                                 |    1 +
 z.awk                                 |    1 +
 z2.awk                                |    8 +
 z3.awk                                |   19 +
 25 files changed, 795 insertions(+), 613 deletions(-)
 create mode 100644 a.awk
 rename awklib/eg/lib/{div.awk => intdiv.awk} (67%)
 create mode 100644 hardregex-semantics.awk
 create mode 100644 y.awk
 create mode 100644 z.awk
 create mode 100644 z2.awk
 create mode 100644 z3.awk


hooks/post-receive
-- 
gawk



reply via email to

[Prev in Thread] Current Thread [Next in Thread]