r2951 - trunk/varnish-cache/lib/libvcl

phk at projects.linpro.no phk at projects.linpro.no
Fri Jul 18 23:30:02 CEST 2008


Author: phk
Date: 2008-07-18 23:30:01 +0200 (Fri, 18 Jul 2008)
New Revision: 2951

Modified:
   trunk/varnish-cache/lib/libvcl/vcc_fixed_token.c
   trunk/varnish-cache/lib/libvcl/vcc_gen_fixed_token.tcl
Log:
Polish the tokenizer



Modified: trunk/varnish-cache/lib/libvcl/vcc_fixed_token.c
===================================================================
--- trunk/varnish-cache/lib/libvcl/vcc_fixed_token.c	2008-07-18 07:16:45 UTC (rev 2950)
+++ trunk/varnish-cache/lib/libvcl/vcc_fixed_token.c	2008-07-18 21:30:01 UTC (rev 2951)
@@ -18,205 +18,148 @@
 
 	switch (p[0]) {
 	case '!':
-		if (p[0] == '!' && p[1] == '=') {
+		if (p[1] == '=') {
 			*q = p + 2;
 			return (T_NEQ);
 		}
-		if (p[0] == '!') {
-			*q = p + 1;
-			return ('!');
-		}
-		return (0);
+		*q = p + 1;
+		return (p[0]);
 	case '%':
-		if (p[0] == '%') {
-			*q = p + 1;
-			return ('%');
-		}
-		return (0);
+		*q = p + 1;
+		return (p[0]);
 	case '&':
-		if (p[0] == '&' && p[1] == '&') {
+		if (p[1] == '&') {
 			*q = p + 2;
 			return (T_CAND);
 		}
-		if (p[0] == '&') {
-			*q = p + 1;
-			return ('&');
-		}
-		return (0);
+		*q = p + 1;
+		return (p[0]);
 	case '(':
-		if (p[0] == '(') {
-			*q = p + 1;
-			return ('(');
-		}
-		return (0);
+		*q = p + 1;
+		return (p[0]);
 	case ')':
-		if (p[0] == ')') {
-			*q = p + 1;
-			return (')');
-		}
-		return (0);
+		*q = p + 1;
+		return (p[0]);
 	case '*':
-		if (p[0] == '*' && p[1] == '=') {
+		if (p[1] == '=') {
 			*q = p + 2;
 			return (T_MUL);
 		}
-		if (p[0] == '*') {
-			*q = p + 1;
-			return ('*');
-		}
-		return (0);
+		*q = p + 1;
+		return (p[0]);
 	case '+':
-		if (p[0] == '+' && p[1] == '=') {
+		if (p[1] == '=') {
 			*q = p + 2;
 			return (T_INCR);
 		}
-		if (p[0] == '+' && p[1] == '+') {
+		if (p[1] == '+') {
 			*q = p + 2;
 			return (T_INC);
 		}
-		if (p[0] == '+') {
-			*q = p + 1;
-			return ('+');
-		}
-		return (0);
+		*q = p + 1;
+		return (p[0]);
 	case ',':
-		if (p[0] == ',') {
-			*q = p + 1;
-			return (',');
-		}
-		return (0);
+		*q = p + 1;
+		return (p[0]);
 	case '-':
-		if (p[0] == '-' && p[1] == '=') {
+		if (p[1] == '=') {
 			*q = p + 2;
 			return (T_DECR);
 		}
-		if (p[0] == '-' && p[1] == '-') {
+		if (p[1] == '-') {
 			*q = p + 2;
 			return (T_DEC);
 		}
-		if (p[0] == '-') {
-			*q = p + 1;
-			return ('-');
-		}
-		return (0);
+		*q = p + 1;
+		return (p[0]);
 	case '.':
-		if (p[0] == '.') {
-			*q = p + 1;
-			return ('.');
-		}
-		return (0);
+		*q = p + 1;
+		return (p[0]);
 	case '/':
-		if (p[0] == '/' && p[1] == '=') {
+		if (p[1] == '=') {
 			*q = p + 2;
 			return (T_DIV);
 		}
-		if (p[0] == '/') {
-			*q = p + 1;
-			return ('/');
-		}
-		return (0);
+		*q = p + 1;
+		return (p[0]);
 	case ';':
-		if (p[0] == ';') {
-			*q = p + 1;
-			return (';');
-		}
-		return (0);
+		*q = p + 1;
+		return (p[0]);
 	case '<':
-		if (p[0] == '<' && p[1] == '=') {
+		if (p[1] == '=') {
 			*q = p + 2;
 			return (T_LEQ);
 		}
-		if (p[0] == '<' && p[1] == '<') {
+		if (p[1] == '<') {
 			*q = p + 2;
 			return (T_SHL);
 		}
-		if (p[0] == '<') {
-			*q = p + 1;
-			return ('<');
-		}
-		return (0);
+		*q = p + 1;
+		return (p[0]);
 	case '=':
-		if (p[0] == '=' && p[1] == '=') {
+		if (p[1] == '=') {
 			*q = p + 2;
 			return (T_EQ);
 		}
-		if (p[0] == '=') {
-			*q = p + 1;
-			return ('=');
-		}
-		return (0);
+		*q = p + 1;
+		return (p[0]);
 	case '>':
-		if (p[0] == '>' && p[1] == '>') {
+		if (p[1] == '>') {
 			*q = p + 2;
 			return (T_SHR);
 		}
-		if (p[0] == '>' && p[1] == '=') {
+		if (p[1] == '=') {
 			*q = p + 2;
 			return (T_GEQ);
 		}
-		if (p[0] == '>') {
-			*q = p + 1;
-			return ('>');
-		}
-		return (0);
+		*q = p + 1;
+		return (p[0]);
 	case 'e':
-		if (p[0] == 'e' && p[1] == 'l' && p[2] == 's' && 
+		if (p[1] == 'l' && p[2] == 's' && 
 		    p[3] == 'i' && p[4] == 'f' && !isvar(p[5])) {
 			*q = p + 5;
 			return (T_ELSIF);
 		}
-		if (p[0] == 'e' && p[1] == 'l' && p[2] == 's' && 
+		if (p[1] == 'l' && p[2] == 's' && 
 		    p[3] == 'e' && p[4] == 'i' && p[5] == 'f'
 		     && !isvar(p[6])) {
 			*q = p + 6;
 			return (T_ELSEIF);
 		}
-		if (p[0] == 'e' && p[1] == 'l' && p[2] == 's' && 
+		if (p[1] == 'l' && p[2] == 's' && 
 		    p[3] == 'e' && !isvar(p[4])) {
 			*q = p + 4;
 			return (T_ELSE);
 		}
 		return (0);
 	case 'i':
-		if (p[0] == 'i' && p[1] == 'n' && p[2] == 'c' && 
+		if (p[1] == 'n' && p[2] == 'c' && 
 		    p[3] == 'l' && p[4] == 'u' && p[5] == 'd' && 
 		    p[6] == 'e' && !isvar(p[7])) {
 			*q = p + 7;
 			return (T_INCLUDE);
 		}
-		if (p[0] == 'i' && p[1] == 'f' && !isvar(p[2])) {
+		if (p[1] == 'f' && !isvar(p[2])) {
 			*q = p + 2;
 			return (T_IF);
 		}
 		return (0);
 	case '{':
-		if (p[0] == '{') {
-			*q = p + 1;
-			return ('{');
-		}
-		return (0);
+		*q = p + 1;
+		return (p[0]);
 	case '|':
-		if (p[0] == '|' && p[1] == '|') {
+		if (p[1] == '|') {
 			*q = p + 2;
 			return (T_COR);
 		}
-		if (p[0] == '|') {
-			*q = p + 1;
-			return ('|');
-		}
-		return (0);
+		*q = p + 1;
+		return (p[0]);
 	case '}':
-		if (p[0] == '}') {
-			*q = p + 1;
-			return ('}');
-		}
-		return (0);
+		*q = p + 1;
+		return (p[0]);
 	case '~':
-		if (p[0] == '~') {
-			*q = p + 1;
-			return ('~');
-		}
-		return (0);
+		*q = p + 1;
+		return (p[0]);
 	default:
 		return (0);
 	}

Modified: trunk/varnish-cache/lib/libvcl/vcc_gen_fixed_token.tcl
===================================================================
--- trunk/varnish-cache/lib/libvcl/vcc_gen_fixed_token.tcl	2008-07-18 07:16:45 UTC (rev 2950)
+++ trunk/varnish-cache/lib/libvcl/vcc_gen_fixed_token.tcl	2008-07-18 21:30:01 UTC (rev 2951)
@@ -260,8 +260,6 @@
 }
 set seq [lsort [array names xx]]
 
-set ll 0
-
 puts $fo {
 unsigned
 vcl_fixed_token(const char *p, const char **q)}
@@ -280,19 +278,18 @@
 	# And do then in reverse order to match longest first
 	set l [lsort -index 0 -decreasing $l]
 	scan "$ch" "%c" cx
-	if {$cx != $ll} {
-		if {$ll} {
-			puts $fo "		return (0);"
-		}
-	
-		puts $fo "	case '$ch':"
-		set ll $cx
-	}
+	puts $fo "	case '$ch':"
+	set retval "0"
 	foreach tt $l {
 		set k [lindex $tt 0]
+		if {[string length $k] == 1} {
+			puts $fo "\t\t*q = p + 1;"
+			set retval {p[0]}
+			continue;
+		}
 		puts -nonewline $fo "		if ("
-		for {set i 0} {$i < [string length $k]} {incr i} {
-			if {$i > 0} {
+		for {set i 1} {$i < [string length $k]} {incr i} {
+			if {$i > 1} {
 				puts -nonewline $fo " && "
 				if {![expr $i % 3]} {
 					puts -nonewline $fo "\n\t\t    "
@@ -307,12 +304,13 @@
 			puts -nonewline $fo " && !isvar(p\[$i\])"
 		}
 		puts $fo ") {"
-		puts $fo "			*q = p + [string length $k];"
-		puts $fo "			return ([lindex $tt 1]);"
-		puts $fo "		}"
+		puts $fo "\t\t\t*q = p + [string length $k];"
+		puts $fo "\t\t\treturn ([lindex $tt 1]);"
+		puts $fo "\t\t}"
 	}
+	puts $fo "\t\treturn ($retval);"
 } 
-puts $fo "		return (0);"
+
 puts $fo "	default:"
 puts $fo "		return (0);"
 puts $fo "	}"




More information about the varnish-commit mailing list