[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