Module Name:    src
Committed By:   snj
Date:           Mon Apr 13 20:59:20 UTC 2009

Modified Files:
        src/dist/nvi/common [netbsd-5]: multibyte.h
        src/dist/nvi/regex [netbsd-5]: engine.c

Log Message:
Pull up following revision(s) (requested by tnozaki in ticket #698):
        dist/nvi/common/multibyte.h: revision 1.3
        dist/nvi/regex/engine.c: revision 1.6
fix PR/41136: \<word search doesn't work in vi
don't reuse RCHAR_T(=wchar_t)'s bits, CSI wchar_t is opaque object.


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.2.6.1 -r1.1.1.2.6.2 src/dist/nvi/common/multibyte.h
cvs rdiff -u -r1.1.1.2.6.2 -r1.1.1.2.6.3 src/dist/nvi/regex/engine.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/dist/nvi/common/multibyte.h
diff -u src/dist/nvi/common/multibyte.h:1.1.1.2.6.1 src/dist/nvi/common/multibyte.h:1.1.1.2.6.2
--- src/dist/nvi/common/multibyte.h:1.1.1.2.6.1	Tue Jan 20 03:14:17 2009
+++ src/dist/nvi/common/multibyte.h	Mon Apr 13 20:59:20 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: multibyte.h,v 1.1.1.2.6.1 2009/01/20 03:14:17 snj Exp $ */
+/*	$NetBSD: multibyte.h,v 1.1.1.2.6.2 2009/04/13 20:59:20 snj Exp $ */
 
 #ifndef MULTIBYTE_H
 #define MULTIBYTE_H
@@ -10,10 +10,8 @@
 typedef wchar_t		RCHAR_T;
 typedef wchar_t		CHAR_T;
 #if defined(__NetBSD__)
-#define RCHAR_T_MAX	0xffffffff
 #define MAX_CHAR_T	0xffffffff
 #else
-#define RCHAR_T_MAX	WCHAR_MAX
 #define MAX_CHAR_T	WCHAR_MAX
 #endif
 typedef u_int		UCHAR_T;
@@ -31,7 +29,6 @@
 
 #else
 typedef	char		RCHAR_T;
-#define RCHAR_T_MAX	CHAR_MAX
 typedef	u_char		CHAR_T;
 #define	MAX_CHAR_T	0xff
 typedef	u_char		UCHAR_T;

Index: src/dist/nvi/regex/engine.c
diff -u src/dist/nvi/regex/engine.c:1.1.1.2.6.2 src/dist/nvi/regex/engine.c:1.1.1.2.6.3
--- src/dist/nvi/regex/engine.c:1.1.1.2.6.2	Tue Jan 20 03:14:17 2009
+++ src/dist/nvi/regex/engine.c	Mon Apr 13 20:59:20 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: engine.c,v 1.1.1.2.6.2 2009/01/20 03:14:17 snj Exp $ */
+/*	$NetBSD: engine.c,v 1.1.1.2.6.3 2009/04/13 20:59:20 snj Exp $ */
 
 /*-
  * Copyright (c) 1992, 1993, 1994 Henry Spencer.
@@ -97,16 +97,13 @@
 static RCHAR_T *backref __P((struct match *m, RCHAR_T *start, RCHAR_T *stop, sopno startst, sopno stopst, sopno lev));
 static RCHAR_T *fast __P((struct match *m, RCHAR_T *start, RCHAR_T *stop, sopno startst, sopno stopst));
 static RCHAR_T *slow __P((struct match *m, RCHAR_T *start, RCHAR_T *stop, sopno startst, sopno stopst));
-static states step __P((struct re_guts *g, sopno start, sopno stop, states bef, int ch, states aft));
-#define	BOL	(OUT+1)
+static states step __P((struct re_guts *g, sopno start, sopno stop, states bef, int flag, RCHAR_T ch, states aft));
+#define	BOL	(1)
 #define	EOL	(BOL+1)
 #define	BOLEOL	(BOL+2)
 #define	NOTHING	(BOL+3)
 #define	BOW	(BOL+4)
 #define	EOW	(BOL+5)
-#define	CODEMAX	(BOL+5)		/* highest code used */
-#define	NONCHAR(c)	((c) > RCHAR_T_MAX)
-#define	NNONCHAR	(CODEMAX-CHAR_MAX)
 #ifdef REDEBUG
 static void print __P((struct match *m, char *caption, states st, int ch, FILE *d));
 #endif
@@ -716,15 +713,15 @@
 	register states fresh = m->fresh;
 	register states tmp = m->tmp;
 	register RCHAR_T *p = start;
-	register int c = (start == m->beginp) ? OUT : *(start-1);
-	register int lastc;	/* previous c */
-	register int flagch;
+	register RCHAR_T c = (start == m->beginp) ? OUT : *(start-1);
+	register RCHAR_T lastc;	/* previous c */
+	register int flag;
 	register int i;
 	register RCHAR_T *coldp;	/* last p after which no match was underway */
 
 	CLEAR(st);
 	SET1(st, startst);
-	st = step(m->g, startst, stopst, st, NOTHING, st);
+	st = step(m->g, startst, stopst, st, NOTHING, OUT, st);
 	ASSIGN(fresh, st);
 	SP("start", st, *p);
 	coldp = NULL;
@@ -736,35 +733,35 @@
 			coldp = p;
 
 		/* is there an EOL and/or BOL between lastc and c? */
-		flagch = '\0';
+		flag = 0;
 		i = 0;
 		if ( (lastc == '\n' && m->g->cflags&REG_NEWLINE) ||
 				(lastc == OUT && !(m->eflags&REG_NOTBOL)) ) {
-			flagch = BOL;
+			flag = BOL;
 			i = m->g->nbol;
 		}
 		if ( (c == '\n' && m->g->cflags&REG_NEWLINE) ||
 				(c == OUT && !(m->eflags&REG_NOTEOL)) ) {
-			flagch = (flagch == BOL) ? BOLEOL : EOL;
+			flag = (flag == BOL) ? BOLEOL : EOL;
 			i += m->g->neol;
 		}
 		if (i != 0) {
 			for (; i > 0; i--)
-				st = step(m->g, startst, stopst, st, flagch, st);
+				st = step(m->g, startst, stopst, st, flag, OUT, st);
 			SP("boleol", st, c);
 		}
 
 		/* how about a word boundary? */
-		if ( (flagch == BOL || (lastc != OUT && !ISWORD(lastc))) &&
+		if ( (flag == BOL || (lastc != OUT && !ISWORD(lastc))) &&
 					(c != OUT && ISWORD(c)) ) {
-			flagch = BOW;
+			flag = BOW;
 		}
 		if ( (lastc != OUT && ISWORD(lastc)) &&
-				(flagch == EOL || (c != OUT && !ISWORD(c))) ) {
-			flagch = EOW;
+				(flag == EOL || (c != OUT && !ISWORD(c))) ) {
+			flag = EOW;
 		}
-		if (flagch == BOW || flagch == EOW) {
-			st = step(m->g, startst, stopst, st, flagch, st);
+		if (flag == BOW || flag == EOW) {
+			st = step(m->g, startst, stopst, st, flag, OUT, st);
 			SP("boweow", st, c);
 		}
 
@@ -776,9 +773,9 @@
 		ASSIGN(tmp, st);
 		ASSIGN(st, fresh);
 		assert(c != OUT);
-		st = step(m->g, startst, stopst, tmp, c, st);
+		st = step(m->g, startst, stopst, tmp, 0, c, st);
 		SP("aft", st, c);
-		assert(EQ(step(m->g, startst, stopst, st, NOTHING, st), st));
+		assert(EQ(step(m->g, startst, stopst, st, NOTHING, OUT, st), st));
 		p++;
 	}
 
@@ -807,9 +804,9 @@
 	register states empty = m->empty;
 	register states tmp = m->tmp;
 	register RCHAR_T *p = start;
-	register int c = (start == m->beginp) ? OUT : *(start-1);
-	register int lastc;	/* previous c */
-	register int flagch;
+	register RCHAR_T c = (start == m->beginp) ? OUT : *(start-1);
+	register RCHAR_T lastc;	/* previous c */
+	register int flag;
 	register int i;
 	register RCHAR_T *matchp;	/* last p at which a match ended */
 
@@ -817,7 +814,7 @@
 	CLEAR(st);
 	SET1(st, startst);
 	SP("sstart", st, *p);
-	st = step(m->g, startst, stopst, st, NOTHING, st);
+	st = step(m->g, startst, stopst, st, NOTHING, OUT, st);
 	matchp = NULL;
 	for (;;) {
 		/* next character */
@@ -825,35 +822,35 @@
 		c = (p == m->endp) ? OUT : *p;
 
 		/* is there an EOL and/or BOL between lastc and c? */
-		flagch = '\0';
+		flag = 0;
 		i = 0;
 		if ( (lastc == '\n' && m->g->cflags&REG_NEWLINE) ||
 				(lastc == OUT && !(m->eflags&REG_NOTBOL)) ) {
-			flagch = BOL;
+			flag = BOL;
 			i = m->g->nbol;
 		}
 		if ( (c == '\n' && m->g->cflags&REG_NEWLINE) ||
 				(c == OUT && !(m->eflags&REG_NOTEOL)) ) {
-			flagch = (flagch == BOL) ? BOLEOL : EOL;
+			flag = (flag == BOL) ? BOLEOL : EOL;
 			i += m->g->neol;
 		}
 		if (i != 0) {
 			for (; i > 0; i--)
-				st = step(m->g, startst, stopst, st, flagch, st);
+				st = step(m->g, startst, stopst, st, flag, OUT, st);
 			SP("sboleol", st, c);
 		}
 
 		/* how about a word boundary? */
-		if ( (flagch == BOL || (lastc != OUT && !ISWORD(lastc))) &&
+		if ( (flag == BOL || (lastc != OUT && !ISWORD(lastc))) &&
 					(c != OUT && ISWORD(c)) ) {
-			flagch = BOW;
+			flag = BOW;
 		}
 		if ( (lastc != OUT && ISWORD(lastc)) &&
-				(flagch == EOL || (c != OUT && !ISWORD(c))) ) {
-			flagch = EOW;
+				(flag == EOL || (c != OUT && !ISWORD(c))) ) {
+			flag = EOW;
 		}
-		if (flagch == BOW || flagch == EOW) {
-			st = step(m->g, startst, stopst, st, flagch, st);
+		if (flag == BOW || flag == EOW) {
+			st = step(m->g, startst, stopst, st, flag, OUT, st);
 			SP("sboweow", st, c);
 		}
 
@@ -867,9 +864,9 @@
 		ASSIGN(tmp, st);
 		ASSIGN(st, empty);
 		assert(c != OUT);
-		st = step(m->g, startst, stopst, tmp, c, st);
+		st = step(m->g, startst, stopst, tmp, 0, c, st);
 		SP("saft", st, c);
-		assert(EQ(step(m->g, startst, stopst, st, NOTHING, st), st));
+		assert(EQ(step(m->g, startst, stopst, st, NOTHING, OUT, st), st));
 		p++;
 	}
 
@@ -880,24 +877,22 @@
 /*
  - step - map set of states reachable before char to set reachable after
  == static states step(register struct re_guts *g, sopno start, sopno stop, \
- ==	register states bef, int ch, register states aft);
- == #define	BOL	(OUT+1)
+ ==	register states bef, int flag, RCHAR_T ch, register states aft);
+ == #define	BOL	(1)
  == #define	EOL	(BOL+1)
  == #define	BOLEOL	(BOL+2)
  == #define	NOTHING	(BOL+3)
  == #define	BOW	(BOL+4)
  == #define	EOW	(BOL+5)
- == #define	CODEMAX	(BOL+5)		// highest code used
- == #define	NONCHAR(c)	((c) > CHAR_MAX)
- == #define	NNONCHAR	(CODEMAX-CHAR_MAX)
  */
 static states
-step(g, start, stop, bef, ch, aft)
+step(g, start, stop, bef, flag, ch, aft)
 register struct re_guts *g;
 sopno start;			/* start state within strip */
 sopno stop;			/* state after stop state within strip */
 register states bef;		/* states reachable before */
-int ch;				/* character or NONCHAR code */
+int flag;			/* NONCHAR flag */
+RCHAR_T ch;			/* character code */
 register states aft;		/* states already known reachable after */
 {
 	register cset *cs;
@@ -917,33 +912,33 @@
 			break;
 		case OCHAR:
 			/* only characters can match */
-			assert(!NONCHAR(ch) || ch != d);
+			assert(!flag || ch != d);
 			if (ch == d)
 				FWD(aft, bef, 1);
 			break;
 		case OBOL:
-			if (ch == BOL || ch == BOLEOL)
+			if (flag == BOL || flag == BOLEOL)
 				FWD(aft, bef, 1);
 			break;
 		case OEOL:
-			if (ch == EOL || ch == BOLEOL)
+			if (flag == EOL || flag == BOLEOL)
 				FWD(aft, bef, 1);
 			break;
 		case OBOW:
-			if (ch == BOW)
+			if (flag == BOW)
 				FWD(aft, bef, 1);
 			break;
 		case OEOW:
-			if (ch == EOW)
+			if (flag == EOW)
 				FWD(aft, bef, 1);
 			break;
 		case OANY:
-			if (!NONCHAR(ch))
+			if (!flag)
 				FWD(aft, bef, 1);
 			break;
 		case OANYOF:
 			cs = &g->sets[d];
-			if (!NONCHAR(ch) && CHIN(cs, ch))
+			if (!flag && CHIN(cs, ch))
 				FWD(aft, bef, 1);
 			break;
 		case OBACK_:		/* ignored here */

Reply via email to