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