r1344 - in branches/1.0: . lib/libvcl

des at projects.linpro.no des at projects.linpro.no
Thu Apr 19 16:51:08 CEST 2007


Author: des
Date: 2007-04-19 16:51:08 +0200 (Thu, 19 Apr 2007)
New Revision: 1344

Modified:
   branches/1.0/
   branches/1.0/lib/libvcl/vcc_fixed_token.c
   branches/1.0/lib/libvcl/vcc_gen_fixed_token.tcl
   branches/1.0/lib/libvcl/vcc_parse.c
   branches/1.0/lib/libvcl/vcc_token.c
   branches/1.0/lib/libvcl/vcc_token_defs.h
   branches/1.0/lib/libvcl/vcc_xref.c
Log:
 r37077 at cat (orig r1301):  phk | 2007-04-01 17:33:56 +0200
 Remove unused METHOD token.
 
 Improve error handling for unterminated /* ... */ comments.
 
 Add undocumented and unsupported facility for inline C source code
 in VCL programs.  The syntax is "C{ getpid(); }C" and you are on
 your own if you use this.
 
 



Property changes on: branches/1.0
___________________________________________________________________
Name: svk:merge
   - d4fa192b-c00b-0410-8231-f00ffab90ce4:/trunk/varnish-cache:1300
   + d4fa192b-c00b-0410-8231-f00ffab90ce4:/trunk/varnish-cache:1301

Modified: branches/1.0/lib/libvcl/vcc_fixed_token.c
===================================================================
--- branches/1.0/lib/libvcl/vcc_fixed_token.c	2007-04-19 14:51:07 UTC (rev 1343)
+++ branches/1.0/lib/libvcl/vcc_fixed_token.c	2007-04-19 14:51:08 UTC (rev 1344)
@@ -268,10 +268,10 @@
 	vcl_tnames['~'] = "'~'";
 	vcl_tnames[';'] = "';'";
 	vcl_tnames[CNUM] = "CNUM";
+	vcl_tnames[CSRC] = "CSRC";
 	vcl_tnames[CSTR] = "CSTR";
 	vcl_tnames[EOI] = "EOI";
 	vcl_tnames[ID] = "ID";
-	vcl_tnames[METHOD] = "METHOD";
 	vcl_tnames[T_ACL] = "acl";
 	vcl_tnames[T_BACKEND] = "backend";
 	vcl_tnames[T_CAND] = "&&";

Modified: branches/1.0/lib/libvcl/vcc_gen_fixed_token.tcl
===================================================================
--- branches/1.0/lib/libvcl/vcc_gen_fixed_token.tcl	2007-04-19 14:51:07 UTC (rev 1343)
+++ branches/1.0/lib/libvcl/vcc_gen_fixed_token.tcl	2007-04-19 14:51:08 UTC (rev 1344)
@@ -97,7 +97,7 @@
 
 # Other token identifiers
 #
-set extras {ID VAR CNUM CSTR EOI METHOD}
+set extras {ID VAR CNUM CSTR EOI CSRC}
 
 #----------------------------------------------------------------------
 # Boilerplate warning for all generated files.

Modified: branches/1.0/lib/libvcl/vcc_parse.c
===================================================================
--- branches/1.0/lib/libvcl/vcc_parse.c	2007-04-19 14:51:07 UTC (rev 1343)
+++ branches/1.0/lib/libvcl/vcc_parse.c	2007-04-19 14:51:08 UTC (rev 1344)
@@ -487,6 +487,12 @@
 			tl->indent -= INDENT;
 			Fb(tl, 1, "}\n");
 			return;
+		case CSRC:
+			Fb(tl, 1, "%.*s\n",
+			    tl->t->e - (tl->t->b + 2),
+			    tl->t->b + 1);
+			vcc_NextToken(tl);
+			break;
 		case EOI:
 			vsb_printf(tl->sb,
 			    "End of input while in compound statement\n");

Modified: branches/1.0/lib/libvcl/vcc_token.c
===================================================================
--- branches/1.0/lib/libvcl/vcc_token.c	2007-04-19 14:51:07 UTC (rev 1343)
+++ branches/1.0/lib/libvcl/vcc_token.c	2007-04-19 14:51:08 UTC (rev 1344)
@@ -49,6 +49,8 @@
 
 	if (t->tok == EOI)
 		vsb_printf(tl->sb, "end of input");
+	else if (t->tok == CSRC)
+		vsb_printf(tl->sb, "C{ ... }C");
 	else
 		vsb_printf(tl->sb, "'%.*s'", PF(t));
 }
@@ -71,8 +73,6 @@
 
 	lin = 1;
 	pos = 0;
-	if (t->tok == METHOD)
-		return;
 	sp = t->src;
 	f = sp->name;
 	b = sp->b;
@@ -315,14 +315,18 @@
 
 		/* Skip C-style comments */
 		if (*p == '/' && p[1] == '*') {
-			p += 2;
-			for (p += 2; p < sp->e; p++) {
-				if (*p == '*' && p[1] == '/') {
-					p += 2;
+			for (q += 2; q < sp->e; q++) {
+				if (*q == '*' && q[1] == '/') {
+					p = q + 2;
 					break;
 				}
 			}
-			continue;
+			if (q < sp->e)
+				continue;
+			vcc_AddToken(tl, EOI, p, p + 2);
+			vsb_printf(tl->sb, "Unterminated /* ... */ comment, starting at\n");
+			vcc_ErrWhere(tl, tl->t);
+			return;
 		}
 
 		/* Skip C++-style comments */
@@ -332,6 +336,25 @@
 			continue;
 		}
 
+		/* Recognize inline C-code */
+		if (*p == 'C' && p[1] == '{') {
+			for (q = p + 2; q < sp->e; q++) {
+				if (*q == '}' && q[1] == 'C') {
+					vcc_AddToken(tl, CSRC, p, q + 2);
+					p = q + 2;
+					break;
+				}
+			}
+			if (q < sp->e)
+				continue;
+			vcc_AddToken(tl, EOI, p, p + 2);
+			vsb_printf(tl->sb,
+			    "Unterminated inline C source, starting at\n");
+			vcc_ErrWhere(tl, tl->t);
+			return;
+		}
+	
+
 		/* Match for the fixed tokens (see token.tcl) */
 		u = vcl_fixed_token(p, &q);
 		if (u != 0) {

Modified: branches/1.0/lib/libvcl/vcc_token_defs.h
===================================================================
--- branches/1.0/lib/libvcl/vcc_token_defs.h	2007-04-19 14:51:07 UTC (rev 1343)
+++ branches/1.0/lib/libvcl/vcc_token_defs.h	2007-04-19 14:51:08 UTC (rev 1344)
@@ -34,4 +34,4 @@
 #define CNUM 152
 #define CSTR 153
 #define EOI 154
-#define METHOD 155
+#define CSRC 155

Modified: branches/1.0/lib/libvcl/vcc_xref.c
===================================================================
--- branches/1.0/lib/libvcl/vcc_xref.c	2007-04-19 14:51:07 UTC (rev 1343)
+++ branches/1.0/lib/libvcl/vcc_xref.c	2007-04-19 14:51:08 UTC (rev 1344)
@@ -149,11 +149,6 @@
 		nerr++;
 
 		type = vcc_typename(tl, r);
-		if (r->defcnt == 0 && r->name->tok == METHOD) {
-			vsb_printf(tl->sb,
-			    "No definition for method %.*s\n", PF(r->name));
-			continue;
-		}
 
 		if (r->defcnt == 0) {
 			vsb_printf(tl->sb,




More information about the varnish-commit mailing list