[master] 5574f03 Make VCC report when symbols require a different syntax
Poul-Henning Kamp
phk at FreeBSD.org
Fri Feb 23 21:44:09 UTC 2018
commit 5574f03f47c26c5d020385fda29aa90c66626e02
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Fri Feb 23 21:42:38 2018 +0000
Make VCC report when symbols require a different syntax
diff --git a/bin/varnishtest/tests/v00021.vtc b/bin/varnishtest/tests/v00021.vtc
index 8394ce8..871f873 100644
--- a/bin/varnishtest/tests/v00021.vtc
+++ b/bin/varnishtest/tests/v00021.vtc
@@ -121,3 +121,13 @@ varnish v1 -errvcl {Symbol 'default' is a reserved word.} {
}
}
+varnish v1 -syntax 4.1 -errvcl {(Only available when VCL syntax <= 4.0)} {
+ sub vcl_recv {
+ set req.esi = false;
+ }
+}
+varnish v1 -syntax 4.0 -errvcl {(Only available when 4.1 <= VCL syntax)} {
+ sub vcl_deliver {
+ set resp.do_esi = false;
+ }
+}
diff --git a/lib/libvcc/vcc_symb.c b/lib/libvcc/vcc_symb.c
index 3d66e81..823a53f 100644
--- a/lib/libvcc/vcc_symb.c
+++ b/lib/libvcc/vcc_symb.c
@@ -220,24 +220,22 @@ VCC_SymbolGet(struct vcc *tl, vcc_kind_t kind, const char *e, const char *x)
if (sym == NULL) {
VSB_printf(tl->sb, "%s: ", e);
vcc_ErrToken(tl, tl->t);
+ sym = VCC_Symbol(tl, NULL, tl->t->b, tl->t->e, kind, 0,
+ VCL_LOW, VCL_HIGH);
+ if (sym != NULL) {
+ VSB_printf(tl->sb, " (Only available when");
+ if (sym->lorev >= VCL_LOW)
+ VSB_printf(tl->sb, " %.1f <=", .1 * sym->lorev);
+ VSB_printf(tl->sb, " VCL syntax");
+ if (sym->hirev <= VCL_HIGH)
+ VSB_printf(tl->sb, " <= %.1f", .1 * sym->hirev);
+ VSB_printf(tl->sb, ")");
+ }
VSB_cat(tl->sb, "\nAt: ");
vcc_ErrWhere(tl, tl->t);
return (NULL);
}
- if (sym->lorev > tl->syntax || sym->hirev < tl->syntax) {
- VSB_printf(tl->sb, "Symbol ");
- vcc_ErrToken(tl, tl->t);
- if (sym->lorev > tl->syntax)
- VSB_printf(tl->sb, " needs vcl %.1f or higher.",
- .1 * sym->lorev);
- else
- VSB_printf(tl->sb,
- " is discontinued after vcl %.1f.",
- .1 * sym->hirev);
- VSB_cat(tl->sb, "\nAt: ");
- vcc_ErrWhere(tl, tl->t);
- return(NULL);
- }
+ assert (sym->lorev <= tl->syntax && sym->hirev >= tl->syntax);
if (kind != SYM_NONE && kind != sym->kind) {
VSB_printf(tl->sb, "Symbol ");
vcc_ErrToken(tl, tl->t);
More information about the varnish-commit
mailing list