aboutsummaryrefslogtreecommitdiff
path: root/patches/0020-m4-Use-hand-written-lexer-to-avoid-cycle-in-bootstra.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/0020-m4-Use-hand-written-lexer-to-avoid-cycle-in-bootstra.patch')
-rw-r--r--patches/0020-m4-Use-hand-written-lexer-to-avoid-cycle-in-bootstra.patch327
1 files changed, 0 insertions, 327 deletions
diff --git a/patches/0020-m4-Use-hand-written-lexer-to-avoid-cycle-in-bootstra.patch b/patches/0020-m4-Use-hand-written-lexer-to-avoid-cycle-in-bootstra.patch
deleted file mode 100644
index f58f366..0000000
--- a/patches/0020-m4-Use-hand-written-lexer-to-avoid-cycle-in-bootstra.patch
+++ /dev/null
@@ -1,327 +0,0 @@
-From edf250c633bef40e7e37dafc9fc393dd2ad9074f Mon Sep 17 00:00:00 2001
-From: Michael Forney <mforney@mforney.org>
-Date: Tue, 10 Apr 2018 13:37:14 -0700
-Subject: [PATCH] m4: Use hand-written lexer to avoid cycle in bootstrap
-
----
- usr.bin/m4/tokenizer.c | 191 +++++++++++++++++++++++++++++++++++++++++
- usr.bin/m4/tokenizer.l | 109 -----------------------
- 2 files changed, 191 insertions(+), 109 deletions(-)
- create mode 100644 usr.bin/m4/tokenizer.c
- delete mode 100644 usr.bin/m4/tokenizer.l
-
-diff --git a/usr.bin/m4/tokenizer.c b/usr.bin/m4/tokenizer.c
-new file mode 100644
-index 00000000000..fa19fc65035
---- /dev/null
-+++ b/usr.bin/m4/tokenizer.c
-@@ -0,0 +1,191 @@
-+/* $OpenBSD: tokenizer.l,v 1.10 2017/06/17 01:55:16 bcallah Exp $ */
-+/*
-+ * Copyright (c) 2004 Marc Espie <espie@cvs.openbsd.org>
-+ *
-+ * Permission to use, copy, modify, and distribute this software for any
-+ * purpose with or without fee is hereby granted, provided that the above
-+ * copyright notice and this permission notice appear in all copies.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-+ */
-+#include "parser.tab.h"
-+#include <assert.h>
-+#include <ctype.h>
-+#include <errno.h>
-+#include <limits.h>
-+#include <stdbool.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <stdint.h>
-+
-+extern void m4_warnx(const char *, ...);
-+extern int mimic_gnu;
-+extern int32_t yylval;
-+static const char *yypos;
-+
-+void
-+yy_scan_string(const char *s)
-+{
-+ yypos = s;
-+}
-+
-+static int32_t
-+number(const char *yytext, size_t yylen)
-+{
-+ long l;
-+
-+ errno = 0;
-+ l = strtol(yytext, NULL, 0);
-+ if (((l == LONG_MAX || l == LONG_MIN) && errno == ERANGE) ||
-+ l > INT32_MAX || l < INT32_MIN)
-+ m4_warnx("numeric overflow in expr: %.*s", (int)yylen, yytext);
-+ return l;
-+}
-+
-+static int32_t
-+parse_radix(const char *yytext, size_t yylen)
-+{
-+ long base;
-+ char *next;
-+ long l;
-+ int d;
-+
-+ l = 0;
-+ base = strtol(yytext+2, &next, 0);
-+ if (base > 36 || next == NULL) {
-+ m4_warnx("error in number %.*s", (int)yylen, yytext);
-+ } else {
-+ next++;
-+ while (*next != 0) {
-+ if (*next >= '0' && *next <= '9')
-+ d = *next - '0';
-+ else if (*next >= 'a' && *next <= 'z')
-+ d = *next - 'a' + 10;
-+ else {
-+ assert(*next >= 'A' && *next <= 'Z');
-+ d = *next - 'A' + 10;
-+ }
-+ if (d >= base) {
-+ m4_warnx("error in number %.*s", (int)yylen, yytext);
-+ return 0;
-+ }
-+ l = base * l + d;
-+ next++;
-+ }
-+ }
-+ return l;
-+}
-+
-+static int
-+isodigit(int c)
-+{
-+ return c >= '0' && c <= '7';
-+}
-+
-+int yylex(void)
-+{
-+ const char *start;
-+
-+next:
-+ start = yypos;
-+ switch (*yypos) {
-+ case ' ':
-+ case '\t':
-+ case '\n':
-+ ++yypos;
-+ goto next;
-+ case '<':
-+ switch (yypos[1]) {
-+ case '=':
-+ yypos += 2;
-+ return LE;
-+ case '<':
-+ yypos += 2;
-+ return LSHIFT;
-+ }
-+ break;
-+ case '>':
-+ switch (yypos[1]) {
-+ case '=':
-+ yypos += 2;
-+ return GE;
-+ case '>':
-+ yypos += 2;
-+ return RSHIFT;
-+ }
-+ break;
-+ case '=':
-+ if (yypos[1] != '=')
-+ break;
-+ yypos += 2;
-+ return EQ;
-+ case '!':
-+ if (yypos[1] != '=')
-+ break;
-+ yypos += 2;
-+ return NE;
-+ case '&':
-+ if (yypos[1] != '&')
-+ break;
-+ yypos += 2;
-+ return LAND;
-+ case '|':
-+ if (yypos[1] != '|')
-+ break;
-+ yypos += 2;
-+ return LOR;
-+ case '*':
-+ if (!mimic_gnu || yypos[1] != '*')
-+ break;
-+ yypos += 2;
-+ return EXPONENT;
-+ case '0':
-+ switch (*++yypos) {
-+ case 'x':
-+ case 'X':
-+ if (!isxdigit(*++yypos))
-+ return ERROR;
-+ do ++yypos;
-+ while (isxdigit(*yypos));
-+ break;
-+ case 'r':
-+ case 'R':
-+ if (!mimic_gnu)
-+ break;
-+ if (!isdigit(*++yypos))
-+ return ERROR;
-+ do ++yypos;
-+ while (isdigit(*yypos));
-+ if (*yypos != ':')
-+ return ERROR;
-+ if (!isalnum(*++yypos))
-+ return ERROR;
-+ do ++yypos;
-+ while (isalnum(*yypos));
-+ yylval = parse_radix(start, yypos - start);
-+ return NUMBER;
-+ default:
-+ do ++yypos;
-+ while (isodigit(*yypos));
-+ break;
-+ }
-+ yylval = number(start, yypos - start);
-+ return NUMBER;
-+ case '\0':
-+ return '\0';
-+ }
-+ if (isdigit(*yypos)) {
-+ do ++yypos;
-+ while (isdigit(*yypos));
-+ yylval = number(start, yypos - start);
-+ return NUMBER;
-+ }
-+
-+ return *yypos++;
-+}
-diff --git a/usr.bin/m4/tokenizer.l b/usr.bin/m4/tokenizer.l
-deleted file mode 100644
-index 94f02fb6085..00000000000
---- a/usr.bin/m4/tokenizer.l
-+++ /dev/null
-@@ -1,109 +0,0 @@
--%{
--/* $OpenBSD: tokenizer.l,v 1.10 2017/06/17 01:55:16 bcallah Exp $ */
--/*
-- * Copyright (c) 2004 Marc Espie <espie@cvs.openbsd.org>
-- *
-- * Permission to use, copy, modify, and distribute this software for any
-- * purpose with or without fee is hereby granted, provided that the above
-- * copyright notice and this permission notice appear in all copies.
-- *
-- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-- */
--#include "parser.h"
--#include <assert.h>
--#include <stdlib.h>
--#include <errno.h>
--#include <stdint.h>
--#include <limits.h>
--
--extern void m4_warnx(const char *, ...);
--extern int mimic_gnu;
--extern int32_t yylval;
--
--int32_t number(void);
--int32_t parse_radix(void);
--%}
--
--delim [ \t\n]
--ws {delim}+
--hex 0[xX][0-9a-fA-F]+
--oct 0[0-7]*
--dec [1-9][0-9]*
--radix 0[rR][0-9]+:[0-9a-zA-Z]+
--
--%option noyywrap
--
--%%
--{ws} {/* just skip it */}
--{hex}|{oct}|{dec} { yylval = number(); return(NUMBER); }
--{radix} { if (mimic_gnu) {
-- yylval = parse_radix(); return(NUMBER);
-- } else {
-- return(ERROR);
-- }
-- }
--"<=" { return(LE); }
--">=" { return(GE); }
--"<<" { return(LSHIFT); }
--">>" { return(RSHIFT); }
--"==" { return(EQ); }
--"!=" { return(NE); }
--"&&" { return(LAND); }
--"||" { return(LOR); }
--"**" { if (mimic_gnu) { return (EXPONENT); } }
--. { return yytext[0]; }
--%%
--
--int32_t
--number()
--{
-- long l;
--
-- errno = 0;
-- l = strtol(yytext, NULL, 0);
-- if (((l == LONG_MAX || l == LONG_MIN) && errno == ERANGE) ||
-- l > INT32_MAX || l < INT32_MIN)
-- m4_warnx("numeric overflow in expr: %s", yytext);
-- return l;
--}
--
--int32_t
--parse_radix()
--{
-- long base;
-- char *next;
-- long l;
-- int d;
--
-- l = 0;
-- base = strtol(yytext+2, &next, 0);
-- if (base > 36 || next == NULL) {
-- m4_warnx("error in number %s", yytext);
-- } else {
-- next++;
-- while (*next != 0) {
-- if (*next >= '0' && *next <= '9')
-- d = *next - '0';
-- else if (*next >= 'a' && *next <= 'z')
-- d = *next - 'a' + 10;
-- else {
-- assert(*next >= 'A' && *next <= 'Z');
-- d = *next - 'A' + 10;
-- }
-- if (d >= base) {
-- m4_warnx("error in number %s", yytext);
-- return 0;
-- }
-- l = base * l + d;
-- next++;
-- }
-- }
-- return l;
--}
--
---
-2.17.0
-