shithub: mc

Download patch

ref: fc00f618566dc04bf1b06ec64953ca5e770638f5
parent: 21735ecc21f9086c786978dbcd9189bd7fbdba3b
author: Ori Bernstein <[email protected]>
date: Fri Aug 3 14:20:22 EDT 2012

Fixes to the binary search in chartype.myr

    Along with a temporarily simplified test.

--- a/chartype.myr
+++ b/chartype.myr
@@ -1,4 +1,5 @@
 use "die.use"
+use "sys.use"
 
 /* 
    Tables adapted from plan 9's runetype.c,
@@ -1040,19 +1041,24 @@
 	var l
 	var m
 
-	l = t
-	while l.len > nelt
-		m = l.len/2
-		l = t[m+nelt, t.len]
-		if c >= l[0]
-			t = l[m, l.len]
-		else
-			t = l[0,m]
+	/* we're processing in chunks of size 
+	   nelt, so 1 chunk is of length 'nelt' */
+	while t.len > nelt
+		sz /= 2
+		m = sz*nelt
+		l = t[m, t.len]
+		if c == l[0]
+			t = l[0, nelt]
+		elif c > l[0]
+			t = l[1,t.len]
+		elif c < l[0]
+			t = t[0,m]
 		;;
 	;;
 
-	if l.len != 0 && c >= t[0]
-		*ret = l
+	write(1, "found")
+	if t.len != 0 && c >= t[0]
+		*ret = t
 		-> true
 	else
 		-> false
@@ -1095,10 +1101,10 @@
 
 const isspace = {c
 	var l
-	var c
 	var sl
 	var len
 
+	l = tabspace2[0,tabspace2.len]
 	sl = tabspace2[0,tabspace2.len]
 	len = tabspace2.len/2
 	if findc(c, sl, len, 2, &l)
--- a/test.myr
+++ b/test.myr
@@ -33,14 +33,16 @@
 	var s
 	var c
 
-	s = "世界 123\n"
+	s = "  \n"
 	for (c, s) = std.striter(s); s.len != 0; (c, s) = std.striter(s)
 		if std.isspace(c)
 			std.write(1, "Space\n")
+		/*
 		elif std.isalpha(c)
 			std.write(1, "Alpha\n")
 		elif std.isnum(c)
 			std.write(1, "Num\n")
+		*/
 		;;
 	;;
 }