[master] bda99dc Don't assume symbols are a single token (4/near the end now)

Poul-Henning Kamp phk at FreeBSD.org
Wed Jan 31 10:50:11 UTC 2018


commit bda99dceb8aa866b8a5bc1798d72f07e1013df97
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Wed Jan 31 10:49:18 2018 +0000

    Don't assume symbols are a single token (4/near the end now)

diff --git a/lib/libvcc/vcc_action.c b/lib/libvcc/vcc_action.c
index e248fff..1a4d755 100644
--- a/lib/libvcc/vcc_action.c
+++ b/lib/libvcc/vcc_action.c
@@ -50,7 +50,6 @@ vcc_act_call(struct vcc *tl, struct token *t, struct symbol *sym)
 	vcc_AddCall(tl, sym);
 	VCC_GlobalSymbol(sym, SUB, "VGC_function");
 	Fb(tl, 1, "%s(ctx);\n", sym->rname);
-	vcc_NextToken(tl);
 	SkipToken(tl, ';');
 }
 
@@ -96,7 +95,6 @@ vcc_act_set(struct vcc *tl, struct token *t, struct symbol *sym)
 	t = tl->t;
 	sym = VCC_SymbolGet(tl, SYM_VAR, "Unknown variable", XREF_NONE);
 	ERRCHK(tl);
-	vcc_NextToken(tl);
 	AN(sym);
 	if (sym->w_methods == 0) {
 		vcc_ErrWhere2(tl, t, tl->t);
@@ -149,7 +147,6 @@ vcc_act_unset(struct vcc *tl, struct token *t, struct symbol *sym)
 	t = tl->t;
 	sym = VCC_SymbolGet(tl, SYM_VAR, "Unknown variable", XREF_NONE);
 	ERRCHK(tl);
-	vcc_NextToken(tl);
 	AN(sym);
 	if (sym->u_methods == 0) {
 		vcc_ErrWhere2(tl, t, tl->t);
@@ -278,7 +275,6 @@ vcc_act_return_vcl(struct vcc *tl)
 	}
 	Fb(tl, 1, "VRT_vcl_select(ctx, %s);\t/* %s */\n",
 	    (const char*)sym->eval_priv, sym->name);
-	vcc_NextToken(tl);
 	SkipToken(tl, ')');
 }
 
diff --git a/lib/libvcc/vcc_backend.c b/lib/libvcc/vcc_backend.c
index 28d05c9..db5ce71 100644
--- a/lib/libvcc/vcc_backend.c
+++ b/lib/libvcc/vcc_backend.c
@@ -403,6 +403,7 @@ vcc_ParseHostDef(struct vcc *tl, const struct token *t_be, const char *vgcname)
 			ERRCHK(tl);
 		} else if (vcc_IdIs(t_field, "probe") && tl->t->tok == ID) {
 			if (vcc_IdIs(tl->t, "default")) {
+				vcc_NextToken(tl);
 				(void)vcc_default_probe(tl);
 			} else {
 				pb = VCC_SymbolGet(tl, SYM_PROBE,
@@ -411,7 +412,6 @@ vcc_ParseHostDef(struct vcc *tl, const struct token *t_be, const char *vgcname)
 				AN(pb);
 				Fb(tl, 0, "\t.probe = %s,\n", pb->rname);
 			}
-			vcc_NextToken(tl);
 			SkipToken(tl, ';');
 		} else if (vcc_IdIs(t_field, "probe")) {
 			VSB_printf(tl->sb,
@@ -478,7 +478,7 @@ vcc_ParseBackend(struct vcc *tl)
 
 	tl->ndirector++;
 	t_first = tl->t;
-	vcc_NextToken(tl);		/* ID: backend */
+	SkipToken(tl, ID);		/* ID: backend */
 
 	vcc_ExpectVid(tl, "backend");	/* ID: name */
 	ERRCHK(tl);
diff --git a/lib/libvcc/vcc_expr.c b/lib/libvcc/vcc_expr.c
index cdbfa61..81f4135 100644
--- a/lib/libvcc/vcc_expr.c
+++ b/lib/libvcc/vcc_expr.c
@@ -659,6 +659,7 @@ vcc_expr4(struct vcc *tl, struct expr **e, vcc_type_t fmt)
 			    "*(VCL_conf.default_director)");
 			return;
 		}
+		t = tl->t;
 		sym = VCC_SymbolGet(tl, SYM_NONE, "Symbol not found",
 		    XREF_REF);
 		ERRCHK(tl);
@@ -677,8 +678,6 @@ vcc_expr4(struct vcc *tl, struct expr **e, vcc_type_t fmt)
 		case SYM_PROBE:
 			AN(sym->eval);
 			AZ(*e);
-			t = tl->t;
-			vcc_NextToken(tl);
 			sym->eval(tl, e, t, sym, fmt);
 			ERRCHK(tl);
 			/* Unless asked for a HEADER, fold to string here */
@@ -969,7 +968,6 @@ cmp_acl(struct vcc *tl, struct expr **e, const struct cmps *cp)
 	vcc_ExpectVid(tl, "ACL");
 	sym = VCC_SymbolGet(tl, SYM_ACL, SYMTAB_CREATE, XREF_REF);
 	AN(sym);
-	vcc_NextToken(tl);
 	VCC_GlobalSymbol(sym, ACL, ACL_SYMBOL_PREFIX);
 	bprintf(buf, "%sVRT_acl_match(ctx, %s, \v1)", cp->emit, sym->rname);
 	*e = vcc_expr_edit(tl, BOOL, buf, *e, NULL);
diff --git a/lib/libvcc/vcc_parse.c b/lib/libvcc/vcc_parse.c
index b94e0a0..7bcd732 100644
--- a/lib/libvcc/vcc_parse.c
+++ b/lib/libvcc/vcc_parse.c
@@ -186,7 +186,6 @@ vcc_Compound(struct vcc *tl)
 					vcc_AddUses(tl, t, NULL,
 					    sym->action_mask,
 					    "Not a valid action");
-				vcc_NextToken(tl);
 				sym->action(tl, t, sym);
 				break;
 			}
@@ -224,12 +223,12 @@ vcc_ParseFunction(struct vcc *tl)
 	AN(sym);
 	p = sym->proc;
 	if (p == NULL) {
-		if ((tl->t->b[0] == 'v'|| tl->t->b[0] == 'V') &&
-		    (tl->t->b[1] == 'c'|| tl->t->b[1] == 'C') &&
-		    (tl->t->b[2] == 'l'|| tl->t->b[2] == 'L')) {
+		if ((t->b[0] == 'v'|| t->b[0] == 'V') &&
+		    (t->b[1] == 'c'|| t->b[1] == 'C') &&
+		    (t->b[2] == 'l'|| t->b[2] == 'L')) {
 			VSB_printf(tl->sb,
 			    "VCL sub's named 'vcl*' are reserved names.\n");
-			vcc_ErrWhere(tl, tl->t);
+			vcc_ErrWhere(tl, t);
 			VSB_printf(tl->sb, "Valid vcl_* methods are:\n");
 			VTAILQ_FOREACH(p, &tl->procs, list) {
 				if (p->method != NULL)
@@ -240,11 +239,11 @@ vcc_ParseFunction(struct vcc *tl)
 		}
 		VCC_GlobalSymbol(sym, SUB, "VGC_function");
 		p = vcc_NewProc(tl, sym);
-		p->name = tl->t;
+		p->name = t;
 		VSB_printf(p->cname, "%s", sym->rname);
 	} else if (p->method == NULL) {
 		VSB_printf(tl->sb, "Function '%s' redefined\n", sym->name);
-		vcc_ErrWhere(tl, tl->t);
+		vcc_ErrWhere(tl, t);
 		VSB_printf(tl->sb, "Previously defined here:\n");
 		vcc_ErrWhere(tl, p->name);
 		return;
@@ -260,7 +259,6 @@ vcc_ParseFunction(struct vcc *tl)
 	vcc_Coord(tl, p->body, NULL);
 	Fb(tl, 0, " */\n");
 	tl->curproc = p;
-	vcc_NextToken(tl);
 	tl->indent += INDENT;
 	Fb(tl, 1, "{\n");
 	L(tl, vcc_Compound(tl));
diff --git a/lib/libvcc/vcc_symb.c b/lib/libvcc/vcc_symb.c
index 51354eb..3ba2b8c 100644
--- a/lib/libvcc/vcc_symb.c
+++ b/lib/libvcc/vcc_symb.c
@@ -221,6 +221,7 @@ VCC_SymbolGet(struct vcc *tl, enum symkind kind, const char *e, const char *x)
 	} else {
 		assert (x == XREF_NONE);
 	}
+	vcc_NextToken(tl);
 	return (sym);
 }
 
@@ -291,24 +292,26 @@ VCC_HandleSymbol(struct vcc *tl, vcc_type_t fmt, const char *pfx)
 {
 	struct symbol *sym;
 	enum symkind kind;
+	struct token *t;
 	const char *p;
 
 	kind = VCC_HandleKind(fmt);
 	assert(kind != SYM_NONE);
 
+	t = tl->t;
 	sym = VCC_SymbolGet(tl, SYM_NONE, SYMTAB_NOERR, XREF_NONE);
 	if (sym != NULL && sym->def_b != NULL && kind == sym->kind) {
 		p = VCC_SymKind(tl, sym);
 		VSB_printf(tl->sb, "%c%s '%.*s' redefined.\n",
-		    toupper(*p), p + 1, PF(tl->t));
-		vcc_ErrWhere(tl, tl->t);
+		    toupper(*p), p + 1, PF(t));
+		vcc_ErrWhere(tl, t);
 		VSB_printf(tl->sb, "First definition:\n");
 		AN(sym->def_b);
 		vcc_ErrWhere(tl, sym->def_b);
 		return (sym);
 	} else if (sym != NULL && sym->def_b != NULL) {
-		VSB_printf(tl->sb, "Name '%.*s' already defined.\n", PF(tl->t));
-		vcc_ErrWhere(tl, tl->t);
+		VSB_printf(tl->sb, "Name '%.*s' already defined.\n", PF(t));
+		vcc_ErrWhere(tl, t);
 		VSB_printf(tl->sb, "First definition:\n");
 		AN(sym->def_b);
 		vcc_ErrWhere(tl, sym->def_b);
@@ -316,8 +319,8 @@ VCC_HandleSymbol(struct vcc *tl, vcc_type_t fmt, const char *pfx)
 	} else if (sym != NULL && sym->kind != kind) {
 		VSB_printf(tl->sb,
 		    "Name %.*s must have type '%s'.\n",
-		    PF(tl->t), VCC_SymKind(tl, sym));
-		vcc_ErrWhere(tl, tl->t);
+		    PF(t), VCC_SymKind(tl, sym));
+		vcc_ErrWhere(tl, t);
 		return (sym);
 	}
 	if (sym == NULL)
@@ -327,7 +330,6 @@ VCC_HandleSymbol(struct vcc *tl, vcc_type_t fmt, const char *pfx)
 	VCC_GlobalSymbol(sym, fmt, pfx);
 	sym->ndef = 1;
 	if (sym->def_b == NULL)
-		sym->def_b = tl->t;
-	vcc_NextToken(tl);
+		sym->def_b = t;
 	return (sym);
 }
diff --git a/lib/libvcc/vcc_vmod.c b/lib/libvcc/vcc_vmod.c
index 168ca04..32cd611 100644
--- a/lib/libvcc/vcc_vmod.c
+++ b/lib/libvcc/vcc_vmod.c
@@ -290,7 +290,6 @@ vcc_Act_New(struct vcc *tl, struct token *t, struct symbol *sym)
 	t = tl->t;
 	sy2 = VCC_SymbolGet(tl, SYM_OBJECT, "Symbol not found", XREF_NONE);
 	ERRCHK(tl);
-	vcc_NextToken(tl);
 	AN(sy2);
 	if (sy2->extra == NULL) {
 		VSB_printf(tl->sb, "Constructor not found: ");


More information about the varnish-commit mailing list