[master] cdbcb2e Unify symbol lookup diagnostics

Poul-Henning Kamp phk at FreeBSD.org
Wed Jan 24 13:20:10 UTC 2018


commit cdbcb2ee03394afae106a03e312b76e71f00cad6
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Wed Jan 24 13:19:34 2018 +0000

    Unify symbol lookup diagnostics

diff --git a/bin/varnishtest/tests/r01837.vtc b/bin/varnishtest/tests/r01837.vtc
index 4dc3d68..fbfd797 100644
--- a/bin/varnishtest/tests/r01837.vtc
+++ b/bin/varnishtest/tests/r01837.vtc
@@ -1,6 +1,6 @@
 varnishtest "Test VCC errors out if probe is used before it is defined"
 
-varnish v1 -errvcl "Probe p not found" {
+varnish v1 -errvcl "Probe not found: 'p'" {
 	backend b {
 		.host = "127.0.0.1";
 		.probe = p;
diff --git a/bin/varnishtest/tests/v00021.vtc b/bin/varnishtest/tests/v00021.vtc
index 8dd69ad..dcf25d1 100644
--- a/bin/varnishtest/tests/v00021.vtc
+++ b/bin/varnishtest/tests/v00021.vtc
@@ -91,7 +91,7 @@ varnish v1 -vcl {
 	}
 }
 
-varnish v1 -errvcl {Unknown variable 'req.foobar'} {
+varnish v1 -errvcl {Unknown variable: 'req.foobar'} {
 	backend foo { .host = "127.0.0.1"; }
 	sub vcl_recv { set req.foobar = 3; }
 }
diff --git a/lib/libvcc/vcc_action.c b/lib/libvcc/vcc_action.c
index 3126ef1..e37cff5 100644
--- a/lib/libvcc/vcc_action.c
+++ b/lib/libvcc/vcc_action.c
@@ -93,15 +93,9 @@ parse_set(struct vcc *tl)
 
 	vcc_NextToken(tl);
 	ExpectErr(tl, ID);
-	sym = VCC_SymbolTok(tl, SYM_VAR, 0);
+	sym = VCC_SymbolGet(tl, SYM_VAR, "Unknown variable");
 	ERRCHK(tl);
-	if (sym == NULL) {
-		VSB_printf(tl->sb, "Unknown variable ");
-		vcc_ErrToken(tl, tl->t);
-		VSB_cat(tl->sb, "\nAt: ");
-		vcc_ErrWhere(tl, tl->t);
-		return;
-	}
+	AN(sym);
 	if (sym->w_methods == 0) {
 		VSB_printf(tl->sb, "Variable ");
 		vcc_ErrToken(tl, tl->t);
@@ -154,15 +148,9 @@ parse_unset(struct vcc *tl)
 	/* XXX: Wrong, should use VCC_Expr(HEADER) */
 	vcc_NextToken(tl);
 	ExpectErr(tl, ID);
-	sym = VCC_SymbolTok(tl, SYM_VAR, 0);
+	sym = VCC_SymbolGet(tl, SYM_VAR, "Unknown variable");
 	ERRCHK(tl);
-	if (sym == NULL) {
-		VSB_printf(tl->sb, "Unknown variable ");
-		vcc_ErrToken(tl, tl->t);
-		VSB_cat(tl->sb, "\nAt: ");
-		vcc_ErrWhere(tl, tl->t);
-		return;
-	}
+	AN(sym);
 	if (sym->u_methods == 0) {
 		VSB_printf(tl->sb, "Variable ");
 		vcc_ErrToken(tl, tl->t);
diff --git a/lib/libvcc/vcc_backend.c b/lib/libvcc/vcc_backend.c
index 8a6b8fd..55e8ba9 100644
--- a/lib/libvcc/vcc_backend.c
+++ b/lib/libvcc/vcc_backend.c
@@ -389,13 +389,9 @@ vcc_ParseHostDef(struct vcc *tl, const struct token *t_be, const char *vgcname)
 			Fb(tl, 0, "\t.probe = %s,\n", p);
 			ERRCHK(tl);
 		} else if (vcc_IdIs(t_field, "probe") && tl->t->tok == ID) {
-			pb = VCC_SymbolTok(tl, SYM_PROBE, 0);
-			if (pb == NULL) {
-				VSB_printf(tl->sb, "Probe %.*s not found\n",
-				    PF(tl->t));
-				vcc_ErrWhere(tl, tl->t);
-				return;
-			}
+			pb = VCC_SymbolGet(tl, SYM_PROBE, "Probe not found");
+			ERRCHK(tl);
+			AN(pb);
 			Fb(tl, 0, "\t.probe = %s,\n", pb->rname);
 			(void)vcc_AddRef(tl, SYM_PROBE);
 			vcc_NextToken(tl);
diff --git a/lib/libvcc/vcc_compile.h b/lib/libvcc/vcc_compile.h
index 1ff5d1a..c5a496e 100644
--- a/lib/libvcc/vcc_compile.h
+++ b/lib/libvcc/vcc_compile.h
@@ -310,6 +310,7 @@ void vcc_stevedore(struct vcc *vcc, const char *stv_name);
 void VCC_PrintCName(struct vsb *vsb, const char *b, const char *e);
 struct symbol *VCC_Symbol(struct vcc *, struct symbol *,
     const char *, const char *, enum symkind, int);
+struct symbol *VCC_SymbolGet(struct vcc *, enum symkind, const char *);
 struct symbol *VCC_SymbolTok(struct vcc *, enum symkind, int);
 const char * VCC_SymKind(struct vcc *tl, const struct symbol *s);
 typedef void symwalk_f(struct vcc *tl, const struct symbol *s);
diff --git a/lib/libvcc/vcc_symb.c b/lib/libvcc/vcc_symb.c
index ffb66fc..17ac8c2 100644
--- a/lib/libvcc/vcc_symb.c
+++ b/lib/libvcc/vcc_symb.c
@@ -105,6 +105,21 @@ vcc_new_symbol(struct vcc *tl, const char *b, const char *e)
 }
 
 struct symbol *
+VCC_SymbolGet(struct vcc *tl, enum symkind kind, const char *err)
+{
+	struct symbol *sym;
+
+	sym = VCC_Symbol(tl, NULL, tl->t->b, tl->t->e, kind, 0);
+	if (sym != NULL && sym->kind == kind)
+		return (sym);
+	VSB_printf(tl->sb, "%s: ", err);
+	vcc_ErrToken(tl, tl->t);
+	VSB_cat(tl->sb, "\nAt: ");
+	vcc_ErrWhere(tl, tl->t);
+	return (NULL);
+}
+
+struct symbol *
 VCC_SymbolTok(struct vcc *tl, enum symkind kind, int create)
 {
 
diff --git a/lib/libvcc/vcc_vmod.c b/lib/libvcc/vcc_vmod.c
index 96abdda..b4d307d 100644
--- a/lib/libvcc/vcc_vmod.c
+++ b/lib/libvcc/vcc_vmod.c
@@ -288,13 +288,11 @@ vcc_ParseNew(struct vcc *tl)
 	vcc_NextToken(tl);
 
 	ExpectErr(tl, ID);
-	sy2 = VCC_SymbolTok(tl, SYM_OBJECT, 0);
-	if (sy2 == NULL || sy2->extra == NULL) {
-		if (sy2 == NULL)
-			p = "Symbol";
-		else
-			p = "Constructor";
-		VSB_printf(tl->sb, "%s not found: ", p);
+	sy2 = VCC_SymbolGet(tl, SYM_OBJECT, "Symbol not found");
+	ERRCHK(tl);
+	AN(sy2);
+	if (sy2->extra == NULL) {
+		VSB_printf(tl->sb, "Constructor not found: ");
 		vcc_ErrToken(tl, tl->t);
 		VSB_printf(tl->sb, " at ");
 		vcc_ErrWhere(tl, tl->t);


More information about the varnish-commit mailing list