aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2017-10-21 21:06:03 +0300
committerArnold D. Robbins <arnold@skeeve.com>2017-10-21 21:06:03 +0300
commitd0f55780cc2e6078c2c28db5f1b5731a4cb580bc (patch)
tree42ea4d91cb97a3ce88722f21d2c3ace4890bc73a
parent1af6b1b8112f7a67c8a5080d610eee19d14fed7d (diff)
parent372e3bef424ad2cec3de5fbc4da30ddf88c9533e (diff)
downloadegawk-d0f55780cc2e6078c2c28db5f1b5731a4cb580bc.tar.gz
egawk-d0f55780cc2e6078c2c28db5f1b5731a4cb580bc.tar.bz2
egawk-d0f55780cc2e6078c2c28db5f1b5731a4cb580bc.zip
Merge branch 'master' into feature/fix-comments
-rw-r--r--ChangeLog14
-rw-r--r--README_d/ChangeLog4
-rw-r--r--README_d/README.os265
-rw-r--r--awkgram.c243
-rw-r--r--awkgram.y3
-rw-r--r--io.c6
-rw-r--r--nonposix.h16
-rw-r--r--pc/ChangeLog11
-rw-r--r--pc/Makefile3
-rw-r--r--pc/gawkmisc.pc46
10 files changed, 274 insertions, 137 deletions
diff --git a/ChangeLog b/ChangeLog
index cef324d4..c8d4b61b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2017-10-21 Arnold D. Robbins <arnold@skeeve.com>
+
+ * awkgram.y: For string concatenation, don't fold constants
+ if one or the other is translatable. Thanks to Harald van Dijk
+ <harald@gigawatt.nl> for the report.
+
+2017-10-21 KO Myung-Hun <komh78@gmail.com>
+
+ * nonposix.h [__KLIBC__]: Include dlfcn.h, declare os2_dlsym, and
+ redirect dlsym to os2_dlsym. Declare os2_fixdllname. Declare
+ os2_dlopen and redirect dlopen to os2_dlopen.
+ * io.h (find_source) [__EMX__]: Truncate extension file basename
+ to 8 characters.
+
2017-10-19 Arnold D. Robbins <arnold@skeeve.com>
* 4.2.0: Release tar ball made.
diff --git a/README_d/ChangeLog b/README_d/ChangeLog
index 369b1360..2b88d423 100644
--- a/README_d/ChangeLog
+++ b/README_d/ChangeLog
@@ -1,3 +1,7 @@
+2017-10-21 Arnold D. Robbins <arnold@skeeve.com>
+
+ * README.os2: Updated with email from Andreas.
+
2017-10-19 Arnold D. Robbins <arnold@skeeve.com>
* 4.2.0: Release tar ball made.
diff --git a/README_d/README.os2 b/README_d/README.os2
index 7171daf4..c12f82db 100644
--- a/README_d/README.os2
+++ b/README_d/README.os2
@@ -1,22 +1,57 @@
-Date: Mon, 16 Aug 2010 08:19:37 +0200
-From: Andreas =?iso-8859-1?Q?B=FCning?= <andreas.buening@nexgo.de>
-To: Aharon Robbins <arnold@skeeve.com>
-Subject: Re: how alive is OS/2?
+From andreas.buening@nexgo.de Thu Oct 19 15:34:16 2017
+Date: Thu, 19 Oct 2017 23:34:09 +0200 (CEST)
+From: =?UTF-8?Q?Andreas_B=C3=BCning?= <andreas.buening@nexgo.de>
+To: arnold@skeeve.com
+Message-ID: <1433289104.12656.1508448849820@mail.vodafone.de>
+Subject: Re: gawk for OS/2 - any updates?
-Hello!
+Hello Arnold,
-Aharon Robbins schrieb:
+I'd like to inform you about the current state of compiling gawk on
+OS/2:
-> Is OS/2 still viable? Or can I look to start removing support for it
-> also?
+1. Compilation
-I apologize for the late response. Yes, OS/2 is still "alive" in some sense.
-At least, licenses are still sold but under the name "eComStation" (eCS)
-instead of OS/2. The (only) distributor is a small company "Serenity Systems",
-see www.ecomstation.com for details.
+Running ./configure does work but
-So I would be pleased if you don't remove the code during the next years. :-)
+- I tried only running with --disable-nls, so with NLS I didn't test.
+- Depending on the gcc version you use you may get linker errors. In
+ that case add 'CFLAGS=-O2 -g -fgnu89-inline' to the configure options
+ (-O2 -g already is the default).
-Thanks.
-Andreas
+2. Tests
+
+It is possible to run the built-in checks but many test results depend
+on the shell being used. I recommend to use 'make -i check' to run
+the tests because some failures might cause a immediate termination
+of the make run.
+
+- If your shell uses \r\n linebreaks (in that case all tests fail)
+ then you have to run 'make -i check CMP=diff' to ignore the linebreak
+ differences at the test result comparison.
+- Depending on the shell some tests might just hang forever. Press
+ Ctrl+C and/or Ctrl+Break until the tests continue.
+- OS/2 can only load DLLs with filenames up to 8+3 bytes but gawk
+ creates three internal DLLs with longer names (e.g. filefuncs.dll,
+ revoutput.dll, revtwoway.dll). Thus, all tests trying to load
+ filefuncs.dll or the other two DLLs will fail. This is not a bug
+ of gawk. If you change e.g. the '@load filefuncs' directive to
+ '@load filefunc' in the according *.awk file then the tests will
+ succeed.
+- The number of failling tests is currently around 50, less if your
+ shell uses \r\n linebreaks, more otherwise.
+
+Best wishes,
+
+Andreas Buening
+======================================================
+
+Sat Oct 21 21:01:49 IDT 2017
+============================
+
+Fixes for loading extension libraries have since been included
+in the git repo and will be part of 4.2.1.
+
+Arnold Robbins
+arnold@skeeve.com
diff --git a/awkgram.c b/awkgram.c
index 8728a703..e3eca143 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -684,13 +684,13 @@ static const yytype_uint16 yyrline[] =
1416, 1418, 1426, 1431, 1440, 1441, 1446, 1448, 1453, 1455,
1463, 1468, 1476, 1477, 1482, 1489, 1493, 1495, 1497, 1510,
1527, 1537, 1544, 1546, 1551, 1553, 1555, 1563, 1565, 1570,
- 1572, 1577, 1579, 1581, 1637, 1639, 1641, 1643, 1645, 1647,
- 1649, 1651, 1665, 1670, 1675, 1700, 1706, 1708, 1710, 1712,
- 1714, 1716, 1721, 1725, 1757, 1764, 1770, 1776, 1789, 1790,
- 1791, 1796, 1801, 1805, 1809, 1824, 1845, 1850, 1887, 1916,
- 1917, 1923, 1924, 1929, 1931, 1938, 1955, 1972, 1974, 1981,
- 1986, 1994, 2004, 2016, 2025, 2029, 2033, 2037, 2041, 2045,
- 2048, 2050, 2054, 2058, 2062
+ 1572, 1577, 1579, 1581, 1638, 1640, 1642, 1644, 1646, 1648,
+ 1650, 1652, 1666, 1671, 1676, 1701, 1707, 1709, 1711, 1713,
+ 1715, 1717, 1722, 1726, 1758, 1765, 1771, 1777, 1790, 1791,
+ 1792, 1797, 1802, 1806, 1810, 1825, 1846, 1851, 1888, 1917,
+ 1918, 1924, 1925, 1930, 1932, 1939, 1956, 1973, 1975, 1982,
+ 1987, 1995, 2005, 2017, 2026, 2030, 2034, 2038, 2042, 2046,
+ 2049, 2051, 2055, 2059, 2063
};
#endif
@@ -3652,7 +3652,8 @@ regular_print:
// 1.5 "" # can't fold this if program mucks with CONVFMT.
// See test #12 in test/posix.awk.
- if ((n1->flags & (NUMBER|NUMINT)) != 0 || (n2->flags & (NUMBER|NUMINT)) != 0)
+ // Also can't fold if one or the other is translatable.
+ if ((n1->flags & (NUMBER|NUMINT|INTLSTR)) != 0 || (n2->flags & (NUMBER|NUMINT|INTLSTR)) != 0)
goto plain_concat;
n1 = force_string(n1);
@@ -3677,47 +3678,47 @@ regular_print:
max_args = count;
}
}
-#line 3681 "awkgram.c" /* yacc.c:1646 */
+#line 3682 "awkgram.c" /* yacc.c:1646 */
break;
case 145:
-#line 1640 "awkgram.y" /* yacc.c:1646 */
+#line 1641 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3687 "awkgram.c" /* yacc.c:1646 */
+#line 3688 "awkgram.c" /* yacc.c:1646 */
break;
case 146:
-#line 1642 "awkgram.y" /* yacc.c:1646 */
+#line 1643 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3693 "awkgram.c" /* yacc.c:1646 */
+#line 3694 "awkgram.c" /* yacc.c:1646 */
break;
case 147:
-#line 1644 "awkgram.y" /* yacc.c:1646 */
+#line 1645 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3699 "awkgram.c" /* yacc.c:1646 */
+#line 3700 "awkgram.c" /* yacc.c:1646 */
break;
case 148:
-#line 1646 "awkgram.y" /* yacc.c:1646 */
+#line 1647 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3705 "awkgram.c" /* yacc.c:1646 */
+#line 3706 "awkgram.c" /* yacc.c:1646 */
break;
case 149:
-#line 1648 "awkgram.y" /* yacc.c:1646 */
+#line 1649 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3711 "awkgram.c" /* yacc.c:1646 */
+#line 3712 "awkgram.c" /* yacc.c:1646 */
break;
case 150:
-#line 1650 "awkgram.y" /* yacc.c:1646 */
+#line 1651 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3717 "awkgram.c" /* yacc.c:1646 */
+#line 3718 "awkgram.c" /* yacc.c:1646 */
break;
case 151:
-#line 1652 "awkgram.y" /* yacc.c:1646 */
+#line 1653 "awkgram.y" /* yacc.c:1646 */
{
/*
* In BEGINFILE/ENDFILE, allow `getline [var] < file'
@@ -3731,29 +3732,29 @@ regular_print:
_("non-redirected `getline' undefined inside END action"));
(yyval) = mk_getline((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]), redirect_input);
}
-#line 3735 "awkgram.c" /* yacc.c:1646 */
+#line 3736 "awkgram.c" /* yacc.c:1646 */
break;
case 152:
-#line 1666 "awkgram.y" /* yacc.c:1646 */
+#line 1667 "awkgram.y" /* yacc.c:1646 */
{
(yyvsp[0])->opcode = Op_postincrement;
(yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
}
-#line 3744 "awkgram.c" /* yacc.c:1646 */
+#line 3745 "awkgram.c" /* yacc.c:1646 */
break;
case 153:
-#line 1671 "awkgram.y" /* yacc.c:1646 */
+#line 1672 "awkgram.y" /* yacc.c:1646 */
{
(yyvsp[0])->opcode = Op_postdecrement;
(yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
}
-#line 3753 "awkgram.c" /* yacc.c:1646 */
+#line 3754 "awkgram.c" /* yacc.c:1646 */
break;
case 154:
-#line 1676 "awkgram.y" /* yacc.c:1646 */
+#line 1677 "awkgram.y" /* yacc.c:1646 */
{
if (do_lint_old) {
warning_ln((yyvsp[-1])->source_line,
@@ -3773,64 +3774,64 @@ regular_print:
(yyval) = list_append(list_merge(t, (yyvsp[0])), (yyvsp[-1]));
}
}
-#line 3777 "awkgram.c" /* yacc.c:1646 */
+#line 3778 "awkgram.c" /* yacc.c:1646 */
break;
case 155:
-#line 1701 "awkgram.y" /* yacc.c:1646 */
+#line 1702 "awkgram.y" /* yacc.c:1646 */
{
(yyval) = mk_getline((yyvsp[-1]), (yyvsp[0]), (yyvsp[-3]), (yyvsp[-2])->redir_type);
bcfree((yyvsp[-2]));
}
-#line 3786 "awkgram.c" /* yacc.c:1646 */
+#line 3787 "awkgram.c" /* yacc.c:1646 */
break;
case 156:
-#line 1707 "awkgram.y" /* yacc.c:1646 */
+#line 1708 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3792 "awkgram.c" /* yacc.c:1646 */
+#line 3793 "awkgram.c" /* yacc.c:1646 */
break;
case 157:
-#line 1709 "awkgram.y" /* yacc.c:1646 */
+#line 1710 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3798 "awkgram.c" /* yacc.c:1646 */
+#line 3799 "awkgram.c" /* yacc.c:1646 */
break;
case 158:
-#line 1711 "awkgram.y" /* yacc.c:1646 */
+#line 1712 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3804 "awkgram.c" /* yacc.c:1646 */
+#line 3805 "awkgram.c" /* yacc.c:1646 */
break;
case 159:
-#line 1713 "awkgram.y" /* yacc.c:1646 */
+#line 1714 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3810 "awkgram.c" /* yacc.c:1646 */
+#line 3811 "awkgram.c" /* yacc.c:1646 */
break;
case 160:
-#line 1715 "awkgram.y" /* yacc.c:1646 */
+#line 1716 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3816 "awkgram.c" /* yacc.c:1646 */
+#line 3817 "awkgram.c" /* yacc.c:1646 */
break;
case 161:
-#line 1717 "awkgram.y" /* yacc.c:1646 */
+#line 1718 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3822 "awkgram.c" /* yacc.c:1646 */
+#line 3823 "awkgram.c" /* yacc.c:1646 */
break;
case 162:
-#line 1722 "awkgram.y" /* yacc.c:1646 */
+#line 1723 "awkgram.y" /* yacc.c:1646 */
{
(yyval) = list_create((yyvsp[0]));
}
-#line 3830 "awkgram.c" /* yacc.c:1646 */
+#line 3831 "awkgram.c" /* yacc.c:1646 */
break;
case 163:
-#line 1726 "awkgram.y" /* yacc.c:1646 */
+#line 1727 "awkgram.y" /* yacc.c:1646 */
{
if ((yyvsp[0])->opcode == Op_match_rec) {
(yyvsp[0])->opcode = Op_nomatch;
@@ -3862,42 +3863,42 @@ regular_print:
}
}
}
-#line 3866 "awkgram.c" /* yacc.c:1646 */
+#line 3867 "awkgram.c" /* yacc.c:1646 */
break;
case 164:
-#line 1758 "awkgram.y" /* yacc.c:1646 */
+#line 1759 "awkgram.y" /* yacc.c:1646 */
{
if (do_pretty_print)
(yyval) = list_append((yyvsp[-1]), bcalloc(Op_parens, 1, sourceline));
else
(yyval) = (yyvsp[-1]);
}
-#line 3877 "awkgram.c" /* yacc.c:1646 */
+#line 3878 "awkgram.c" /* yacc.c:1646 */
break;
case 165:
-#line 1765 "awkgram.y" /* yacc.c:1646 */
+#line 1766 "awkgram.y" /* yacc.c:1646 */
{
(yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
if ((yyval) == NULL)
YYABORT;
}
-#line 3887 "awkgram.c" /* yacc.c:1646 */
+#line 3888 "awkgram.c" /* yacc.c:1646 */
break;
case 166:
-#line 1771 "awkgram.y" /* yacc.c:1646 */
+#line 1772 "awkgram.y" /* yacc.c:1646 */
{
(yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
if ((yyval) == NULL)
YYABORT;
}
-#line 3897 "awkgram.c" /* yacc.c:1646 */
+#line 3898 "awkgram.c" /* yacc.c:1646 */
break;
case 167:
-#line 1777 "awkgram.y" /* yacc.c:1646 */
+#line 1778 "awkgram.y" /* yacc.c:1646 */
{
static bool warned = false;
@@ -3910,45 +3911,45 @@ regular_print:
if ((yyval) == NULL)
YYABORT;
}
-#line 3914 "awkgram.c" /* yacc.c:1646 */
+#line 3915 "awkgram.c" /* yacc.c:1646 */
break;
case 170:
-#line 1792 "awkgram.y" /* yacc.c:1646 */
+#line 1793 "awkgram.y" /* yacc.c:1646 */
{
(yyvsp[-1])->opcode = Op_preincrement;
(yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
}
-#line 3923 "awkgram.c" /* yacc.c:1646 */
+#line 3924 "awkgram.c" /* yacc.c:1646 */
break;
case 171:
-#line 1797 "awkgram.y" /* yacc.c:1646 */
+#line 1798 "awkgram.y" /* yacc.c:1646 */
{
(yyvsp[-1])->opcode = Op_predecrement;
(yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
}
-#line 3932 "awkgram.c" /* yacc.c:1646 */
+#line 3933 "awkgram.c" /* yacc.c:1646 */
break;
case 172:
-#line 1802 "awkgram.y" /* yacc.c:1646 */
+#line 1803 "awkgram.y" /* yacc.c:1646 */
{
(yyval) = list_create((yyvsp[0]));
}
-#line 3940 "awkgram.c" /* yacc.c:1646 */
+#line 3941 "awkgram.c" /* yacc.c:1646 */
break;
case 173:
-#line 1806 "awkgram.y" /* yacc.c:1646 */
+#line 1807 "awkgram.y" /* yacc.c:1646 */
{
(yyval) = list_create((yyvsp[0]));
}
-#line 3948 "awkgram.c" /* yacc.c:1646 */
+#line 3949 "awkgram.c" /* yacc.c:1646 */
break;
case 174:
-#line 1810 "awkgram.y" /* yacc.c:1646 */
+#line 1811 "awkgram.y" /* yacc.c:1646 */
{
if ((yyvsp[0])->lasti->opcode == Op_push_i
&& ((yyvsp[0])->lasti->memory->flags & STRING) == 0
@@ -3963,11 +3964,11 @@ regular_print:
(yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
}
}
-#line 3967 "awkgram.c" /* yacc.c:1646 */
+#line 3968 "awkgram.c" /* yacc.c:1646 */
break;
case 175:
-#line 1825 "awkgram.y" /* yacc.c:1646 */
+#line 1826 "awkgram.y" /* yacc.c:1646 */
{
if ((yyvsp[0])->lasti->opcode == Op_push_i
&& ((yyvsp[0])->lasti->memory->flags & STRING) == 0
@@ -3985,20 +3986,20 @@ regular_print:
(yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
}
}
-#line 3989 "awkgram.c" /* yacc.c:1646 */
+#line 3990 "awkgram.c" /* yacc.c:1646 */
break;
case 176:
-#line 1846 "awkgram.y" /* yacc.c:1646 */
+#line 1847 "awkgram.y" /* yacc.c:1646 */
{
func_use((yyvsp[0])->lasti->func_name, FUNC_USE);
(yyval) = (yyvsp[0]);
}
-#line 3998 "awkgram.c" /* yacc.c:1646 */
+#line 3999 "awkgram.c" /* yacc.c:1646 */
break;
case 177:
-#line 1851 "awkgram.y" /* yacc.c:1646 */
+#line 1852 "awkgram.y" /* yacc.c:1646 */
{
/* indirect function call */
INSTRUCTION *f, *t;
@@ -4032,11 +4033,11 @@ regular_print:
(yyval) = list_prepend((yyvsp[0]), t);
at_seen = false;
}
-#line 4036 "awkgram.c" /* yacc.c:1646 */
+#line 4037 "awkgram.c" /* yacc.c:1646 */
break;
case 178:
-#line 1888 "awkgram.y" /* yacc.c:1646 */
+#line 1889 "awkgram.y" /* yacc.c:1646 */
{
NODE *n;
@@ -4061,49 +4062,49 @@ regular_print:
(yyval) = list_append(t, (yyvsp[-3]));
}
}
-#line 4065 "awkgram.c" /* yacc.c:1646 */
+#line 4066 "awkgram.c" /* yacc.c:1646 */
break;
case 179:
-#line 1916 "awkgram.y" /* yacc.c:1646 */
+#line 1917 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = NULL; }
-#line 4071 "awkgram.c" /* yacc.c:1646 */
+#line 4072 "awkgram.c" /* yacc.c:1646 */
break;
case 180:
-#line 1918 "awkgram.y" /* yacc.c:1646 */
+#line 1919 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 4077 "awkgram.c" /* yacc.c:1646 */
+#line 4078 "awkgram.c" /* yacc.c:1646 */
break;
case 181:
-#line 1923 "awkgram.y" /* yacc.c:1646 */
+#line 1924 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = NULL; }
-#line 4083 "awkgram.c" /* yacc.c:1646 */
+#line 4084 "awkgram.c" /* yacc.c:1646 */
break;
case 182:
-#line 1925 "awkgram.y" /* yacc.c:1646 */
+#line 1926 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[-1]); }
-#line 4089 "awkgram.c" /* yacc.c:1646 */
+#line 4090 "awkgram.c" /* yacc.c:1646 */
break;
case 183:
-#line 1930 "awkgram.y" /* yacc.c:1646 */
+#line 1931 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 4095 "awkgram.c" /* yacc.c:1646 */
+#line 4096 "awkgram.c" /* yacc.c:1646 */
break;
case 184:
-#line 1932 "awkgram.y" /* yacc.c:1646 */
+#line 1933 "awkgram.y" /* yacc.c:1646 */
{
(yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
}
-#line 4103 "awkgram.c" /* yacc.c:1646 */
+#line 4104 "awkgram.c" /* yacc.c:1646 */
break;
case 185:
-#line 1939 "awkgram.y" /* yacc.c:1646 */
+#line 1940 "awkgram.y" /* yacc.c:1646 */
{
INSTRUCTION *ip = (yyvsp[0])->lasti;
int count = ip->sub_count; /* # of SUBSEP-seperated expressions */
@@ -4117,11 +4118,11 @@ regular_print:
sub_counter++; /* count # of dimensions */
(yyval) = (yyvsp[0]);
}
-#line 4121 "awkgram.c" /* yacc.c:1646 */
+#line 4122 "awkgram.c" /* yacc.c:1646 */
break;
case 186:
-#line 1956 "awkgram.y" /* yacc.c:1646 */
+#line 1957 "awkgram.y" /* yacc.c:1646 */
{
INSTRUCTION *t = (yyvsp[-1]);
if ((yyvsp[-1]) == NULL) {
@@ -4135,31 +4136,31 @@ regular_print:
(yyvsp[0])->sub_count = count_expressions(&t, false);
(yyval) = list_append(t, (yyvsp[0]));
}
-#line 4139 "awkgram.c" /* yacc.c:1646 */
+#line 4140 "awkgram.c" /* yacc.c:1646 */
break;
case 187:
-#line 1973 "awkgram.y" /* yacc.c:1646 */
+#line 1974 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 4145 "awkgram.c" /* yacc.c:1646 */
+#line 4146 "awkgram.c" /* yacc.c:1646 */
break;
case 188:
-#line 1975 "awkgram.y" /* yacc.c:1646 */
+#line 1976 "awkgram.y" /* yacc.c:1646 */
{
(yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
}
-#line 4153 "awkgram.c" /* yacc.c:1646 */
+#line 4154 "awkgram.c" /* yacc.c:1646 */
break;
case 189:
-#line 1982 "awkgram.y" /* yacc.c:1646 */
+#line 1983 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[-1]); }
-#line 4159 "awkgram.c" /* yacc.c:1646 */
+#line 4160 "awkgram.c" /* yacc.c:1646 */
break;
case 190:
-#line 1987 "awkgram.y" /* yacc.c:1646 */
+#line 1988 "awkgram.y" /* yacc.c:1646 */
{
char *var_name = (yyvsp[0])->lextok;
@@ -4167,22 +4168,22 @@ regular_print:
(yyvsp[0])->memory = variable((yyvsp[0])->source_line, var_name, Node_var_new);
(yyval) = list_create((yyvsp[0]));
}
-#line 4171 "awkgram.c" /* yacc.c:1646 */
+#line 4172 "awkgram.c" /* yacc.c:1646 */
break;
case 191:
-#line 1995 "awkgram.y" /* yacc.c:1646 */
+#line 1996 "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 4182 "awkgram.c" /* yacc.c:1646 */
+#line 4183 "awkgram.c" /* yacc.c:1646 */
break;
case 192:
-#line 2005 "awkgram.y" /* yacc.c:1646 */
+#line 2006 "awkgram.y" /* yacc.c:1646 */
{
INSTRUCTION *ip = (yyvsp[0])->nexti;
if (ip->opcode == Op_push
@@ -4194,73 +4195,73 @@ regular_print:
} else
(yyval) = (yyvsp[0]);
}
-#line 4198 "awkgram.c" /* yacc.c:1646 */
+#line 4199 "awkgram.c" /* yacc.c:1646 */
break;
case 193:
-#line 2017 "awkgram.y" /* yacc.c:1646 */
+#line 2018 "awkgram.y" /* yacc.c:1646 */
{
(yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
if ((yyvsp[0]) != NULL)
mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
}
-#line 4208 "awkgram.c" /* yacc.c:1646 */
+#line 4209 "awkgram.c" /* yacc.c:1646 */
break;
case 194:
-#line 2026 "awkgram.y" /* yacc.c:1646 */
+#line 2027 "awkgram.y" /* yacc.c:1646 */
{
(yyvsp[0])->opcode = Op_postincrement;
}
-#line 4216 "awkgram.c" /* yacc.c:1646 */
+#line 4217 "awkgram.c" /* yacc.c:1646 */
break;
case 195:
-#line 2030 "awkgram.y" /* yacc.c:1646 */
+#line 2031 "awkgram.y" /* yacc.c:1646 */
{
(yyvsp[0])->opcode = Op_postdecrement;
}
-#line 4224 "awkgram.c" /* yacc.c:1646 */
+#line 4225 "awkgram.c" /* yacc.c:1646 */
break;
case 196:
-#line 2033 "awkgram.y" /* yacc.c:1646 */
+#line 2034 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = NULL; }
-#line 4230 "awkgram.c" /* yacc.c:1646 */
+#line 4231 "awkgram.c" /* yacc.c:1646 */
break;
case 198:
-#line 2041 "awkgram.y" /* yacc.c:1646 */
+#line 2042 "awkgram.y" /* yacc.c:1646 */
{ yyerrok; }
-#line 4236 "awkgram.c" /* yacc.c:1646 */
+#line 4237 "awkgram.c" /* yacc.c:1646 */
break;
case 199:
-#line 2045 "awkgram.y" /* yacc.c:1646 */
+#line 2046 "awkgram.y" /* yacc.c:1646 */
{ yyerrok; }
-#line 4242 "awkgram.c" /* yacc.c:1646 */
+#line 4243 "awkgram.c" /* yacc.c:1646 */
break;
case 202:
-#line 2054 "awkgram.y" /* yacc.c:1646 */
+#line 2055 "awkgram.y" /* yacc.c:1646 */
{ yyerrok; }
-#line 4248 "awkgram.c" /* yacc.c:1646 */
+#line 4249 "awkgram.c" /* yacc.c:1646 */
break;
case 203:
-#line 2058 "awkgram.y" /* yacc.c:1646 */
+#line 2059 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); yyerrok; }
-#line 4254 "awkgram.c" /* yacc.c:1646 */
+#line 4255 "awkgram.c" /* yacc.c:1646 */
break;
case 204:
-#line 2062 "awkgram.y" /* yacc.c:1646 */
+#line 2063 "awkgram.y" /* yacc.c:1646 */
{ yyerrok; }
-#line 4260 "awkgram.c" /* yacc.c:1646 */
+#line 4261 "awkgram.c" /* yacc.c:1646 */
break;
-#line 4264 "awkgram.c" /* yacc.c:1646 */
+#line 4265 "awkgram.c" /* yacc.c:1646 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@@ -4488,7 +4489,7 @@ yyreturn:
#endif
return yyresult;
}
-#line 2064 "awkgram.y" /* yacc.c:1906 */
+#line 2065 "awkgram.y" /* yacc.c:1906 */
struct token {
diff --git a/awkgram.y b/awkgram.y
index ece0d2bb..7a1ffcad 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -1606,7 +1606,8 @@ common_exp
// 1.5 "" # can't fold this if program mucks with CONVFMT.
// See test #12 in test/posix.awk.
- if ((n1->flags & (NUMBER|NUMINT)) != 0 || (n2->flags & (NUMBER|NUMINT)) != 0)
+ // Also can't fold if one or the other is translatable.
+ if ((n1->flags & (NUMBER|NUMINT|INTLSTR)) != 0 || (n2->flags & (NUMBER|NUMINT|INTLSTR)) != 0)
goto plain_concat;
n1 = force_string(n1);
diff --git a/io.c b/io.c
index 378b1156..7314d8e8 100644
--- a/io.c
+++ b/io.c
@@ -2913,6 +2913,12 @@ find_source(const char *src, struct stat *stb, int *errcode, int is_extlib)
*errcode = 0;
if (src == NULL || *src == '\0')
return NULL;
+#ifdef __EMX__
+ char os2_src[strlen(src) + 1];
+
+ if (is_extlib)
+ src = os2_fixdllname(os2_src, src, sizeof(os2_src));
+#endif /* __EMX__ */
path = do_find_source(src, stb, errcode, pi);
if (path == NULL && is_extlib) {
diff --git a/nonposix.h b/nonposix.h
index b4f52246..19336ee7 100644
--- a/nonposix.h
+++ b/nonposix.h
@@ -75,3 +75,19 @@ int getppid(void);
wint_t btowc (int c);
wint_t putwc (wchar_t wc, FILE *stream);
#endif
+
+#ifdef __EMX__
+
+char *os2_fixdllname(char *dst, const char *src, size_t n);
+
+#ifdef __KLIBC__
+#include <dlfcn.h>
+
+#define dlopen(f, m) os2_dlopen(f, m)
+void *os2_dlopen(const char *file, int mode);
+
+#define dlsym(h, n) os2_dlsym(h, n)
+void *os2_dlsym(void *handle, const char *name);
+#endif /* __KLIBC__ */
+
+#endif /* __EMX__ */
diff --git a/pc/ChangeLog b/pc/ChangeLog
index c965fa89..800e6790 100644
--- a/pc/ChangeLog
+++ b/pc/ChangeLog
@@ -1,3 +1,14 @@
+2017-10-21 KO Myung-Hun <komh78@gmail.com>
+
+ * gawkmisc.pc (os2_dlsym, os2_fixdllname, os2_dlopen) [__KLIBC__]:
+ New functions.
+
+2017-10-21 Eli Zaretskii <eliz@gnu.org>
+
+ * Makefile (install1): Create include/ at desctination, and copy
+ there gawkapi.h. Also copy *.png image files to share/info, as
+ those are required for the Info readers.
+
2017-10-19 Arnold D. Robbins <arnold@skeeve.com>
* 4.2.0: Release tar ball made.
diff --git a/pc/Makefile b/pc/Makefile
index f45782d0..be5e052e 100644
--- a/pc/Makefile
+++ b/pc/Makefile
@@ -294,15 +294,18 @@ install1:
cat pc/awklib/igawk >> igawk.cmd
cat pc/awklib/igawk.bat > igawk.bat
-mkdir "$(prefix)"
+ -mkdir "$(prefix)/include"
-mkdir "$(prefix)/bin"
-mkdir "$(prefix)/share"
-mkdir "$(prefix)/share/man"
-mkdir "$(pkgdatadir)" "$(prefix)/share/man/man1" "$(prefix)/share/info"
cp *awk.exe igawk.bat igawk.cmd pc/awklib/igawk $(prefix)/bin
cp gawk.exe $(prefix)/bin/awk.exe
+ cp gawkapi.h $(prefix)/include
cp awklib/eg/lib/* pc/awklib/igawk.awk $(pkgdatadir)
cp doc/*.1 $(prefix)/share/man/man1
cp doc/*.info $(prefix)/share/info
+ cp doc/*.png $(prefix)/share/info
# install2 is equivalent to install1, but doesn't require cp, sed, etc.
install2:
diff --git a/pc/gawkmisc.pc b/pc/gawkmisc.pc
index 41ffd5ec..1d845cc8 100644
--- a/pc/gawkmisc.pc
+++ b/pc/gawkmisc.pc
@@ -548,6 +548,52 @@ _os2_unixroot_path(const char *path)
return (result) ? (const char*) result : path;
}
+
+/* limit a length of DLL name up to 8 characters. If dst is not enough for
+ a fixed dll name, it is truncated. */
+char *os2_fixdllname(char *dst, const char *src, size_t n)
+{
+ char drive[_MAX_DRIVE];
+ char dir[_MAX_DIR];
+ char name[_MAX_FNAME];
+ char ext[_MAX_EXT];
+ char dll_file[_MAX_PATH];
+
+ _splitpath(src, drive, dir, name, ext);
+ if (strlen(name) > 8)
+ name[8] = '\0';
+ _makepath(dll_file, drive, dir, name, ext);
+
+ strncpy(dst, dll_file, n);
+ dst[n - 1] = '\0';
+
+ return dst;
+}
+
+#ifdef __KLIBC__
+
+/* replacement of dlopen(). This limits a length of a base name up to 8
+ characters. */
+void *os2_dlopen(const char *file, int mode)
+{
+ char dll_file[strlen(file) + 1];
+
+ return (dlopen)(os2_fixdllname(dll_file, file, sizeof(dll_file)), mode);
+}
+
+/* replacement of dlsym(). This prepends '_' to name. */
+void *os2_dlsym(void *handle, const char *name)
+{
+ char sym[strlen(name) + 1 + 1]; /* 1 for '_', 1 for NUL */
+
+ sym[0] = '_';
+ strcpy(sym + 1, name);
+
+ return (dlsym)(handle, sym);
+}
+
+#endif /* __KLIBC__ */
+
#endif /* __EMX__ */
#ifdef __MINGW32__