r1294 - trunk/varnish-cache/lib/libvcl
phk at projects.linpro.no
phk at projects.linpro.no
Sat Mar 31 20:21:14 CEST 2007
Author: phk
Date: 2007-03-31 20:21:14 +0200 (Sat, 31 Mar 2007)
New Revision: 1294
Modified:
trunk/varnish-cache/lib/libvcl/vcc_parse.c
Log:
Better syntax checking of "set" statements.
Remove inapplicable comment.
Modified: trunk/varnish-cache/lib/libvcl/vcc_parse.c
===================================================================
--- trunk/varnish-cache/lib/libvcl/vcc_parse.c 2007-03-31 18:20:33 UTC (rev 1293)
+++ trunk/varnish-cache/lib/libvcl/vcc_parse.c 2007-03-31 18:21:14 UTC (rev 1294)
@@ -29,37 +29,6 @@
* $Id$
*/
-/*
- * XXX:
- * generate interface structure
- *
- * XXX:
- * Better error messages, throughout.
- * >It also accured to me that we could link the errors to the error
- * >documentation.
- * >
- * >Unreferenced function 'request_policy', first mention is
- * > Line 8 Pos 4
- * > sub request_policy {
- * > ----##############--
- * >Read more about this type of error:
- * >http://varnish/doc/error.html#Unreferenced%20function
- * >
- * >
- * > Unknown variable 'obj.bandwidth'
- * > At: Line 88 Pos 12
- * > if (obj.bandwidth < 1 kb/h) {
- * > ------------#############------------
- * >Read more about this type of error:
- * >http://varnish/doc/error.html#Unknown%20variable
- *
- * XXX:
- * Create proper tmp filenames for .h, .c and .o
- *
- * XXX:
- * and all the rest...
- */
-
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/stat.h>
@@ -514,7 +483,7 @@
{
unsigned a;
struct var *vp;
- struct token *at;
+ struct token *at, *vt;
at = tl->t;
vcc_NextToken(tl);
@@ -569,6 +538,7 @@
return;
case T_SET:
ExpectErr(tl, VAR);
+ vt = tl->t;
vp = FindVar(tl, tl->t, vcc_vars);
ERRCHK(tl);
assert(vp != NULL);
@@ -582,18 +552,35 @@
case FLOAT:
if (tl->t->tok != '=')
Fb(tl, 0, "%s %c ", vp->rname, *tl->t->b);
- a = tl->t->tok;
+ at = tl->t;
vcc_NextToken(tl);
- if (a == T_MUL || a == T_DIV)
+ switch (at->tok) {
+ case T_MUL:
+ case T_DIV:
Fb(tl, 0, "%g", DoubleVal(tl));
- else if (vp->fmt == TIME)
- TimeVal(tl);
- else if (vp->fmt == SIZE)
- SizeVal(tl);
- else if (vp->fmt == RATE)
- RateVal(tl);
- else
- Fb(tl, 0, "%g", DoubleVal(tl));
+ break;
+ case T_INCR:
+ case T_DECR:
+ case '=':
+ if (vp->fmt == TIME)
+ TimeVal(tl);
+ else if (vp->fmt == SIZE)
+ SizeVal(tl);
+ else if (vp->fmt == RATE)
+ RateVal(tl);
+ else if (vp->fmt == FLOAT)
+ Fb(tl, 0, "%g", DoubleVal(tl));
+ else {
+ vsb_printf(tl->sb, "Cannot assign this variable type.\n");
+ vcc_ErrWhere(tl, vt);
+ return;
+ }
+ break;
+ default:
+ vsb_printf(tl->sb, "Illegal assignment operator.\n");
+ vcc_ErrWhere(tl, at);
+ return;
+ }
Fb(tl, 0, ");\n");
break;
#if 0 /* XXX: enable if we find a legit use */
More information about the varnish-commit
mailing list