[master] 9713099 Simplify VCL global symbols registration
Dridi Boukelmoune
dridi.boukelmoune at gmail.com
Mon Aug 14 11:02:06 CEST 2017
commit 971309930ad4fdb5820b87dfe9956bc86bc04d2f
Author: Dridi Boukelmoune <dridi.boukelmoune at gmail.com>
Date: Thu Jun 22 17:37:35 2017 +0200
Simplify VCL global symbols registration
Instead of a printf format, a mandatory prefix is expected.
Refs #2325
diff --git a/lib/libvcc/vcc_acl.c b/lib/libvcc/vcc_acl.c
index c98dfea..08fc9d8 100644
--- a/lib/libvcc/vcc_acl.c
+++ b/lib/libvcc/vcc_acl.c
@@ -485,7 +485,7 @@ vcc_ParseAcl(struct vcc *tl)
acln = TlDupTok(tl, an);
- (void)VCC_HandleSymbol(tl, an, ACL, "&vrt_acl_named_%s", acln);
+ (void)VCC_HandleSymbol(tl, an, ACL, "&vrt_acl_named");
ERRCHK(tl);
SkipToken(tl, '{');
diff --git a/lib/libvcc/vcc_backend.c b/lib/libvcc/vcc_backend.c
index 7909044..7377af6 100644
--- a/lib/libvcc/vcc_backend.c
+++ b/lib/libvcc/vcc_backend.c
@@ -258,8 +258,7 @@ vcc_ParseProbe(struct vcc *tl)
t_probe = tl->t;
vcc_NextToken(tl);
- (void)VCC_HandleSymbol(tl, t_probe, PROBE, "&vgc_probe_%.*s",
- PF(t_probe));
+ (void)VCC_HandleSymbol(tl, t_probe, PROBE, "&vgc_probe");
ERRCHK(tl);
vcc_ParseProbeSpec(tl, t_probe, &p);
@@ -481,7 +480,7 @@ vcc_ParseBackend(struct vcc *tl)
bprintf(vgcname, "vgc_backend_%.*s", PF(t_be));
Fh(tl, 0, "\nstatic struct director *%s;\n", vgcname);
- sym = VCC_HandleSymbol(tl, t_be, BACKEND, "%s", vgcname);
+ sym = VCC_HandleSymbol(tl, t_be, BACKEND, "vgc_backend");
ERRCHK(tl);
vcc_ParseHostDef(tl, t_be, vgcname);
diff --git a/lib/libvcc/vcc_compile.h b/lib/libvcc/vcc_compile.h
index 2ab1a66..1768bdd 100644
--- a/lib/libvcc/vcc_compile.h
+++ b/lib/libvcc/vcc_compile.h
@@ -280,7 +280,7 @@ void vcc_Eval_Func(struct vcc *tl, const char *spec,
const char *extra, const struct symbol *sym);
enum symkind VCC_HandleKind(vcc_type_t fmt);
struct symbol *VCC_HandleSymbol(struct vcc *, const struct token *,
- vcc_type_t fmt, const char *str, ...);
+ vcc_type_t fmt, const char *pfx);
/* vcc_obj.c */
extern const struct var vcc_vars[];
diff --git a/lib/libvcc/vcc_symb.c b/lib/libvcc/vcc_symb.c
index 0d68e48..1d33597 100644
--- a/lib/libvcc/vcc_symb.c
+++ b/lib/libvcc/vcc_symb.c
@@ -179,14 +179,16 @@ VCC_WalkSymbols(struct vcc *tl, symwalk_f *func, enum symkind kind)
}
static void
-vcc_global(struct vcc *tl, struct symbol *sym,
- vcc_type_t fmt, const char *str, va_list ap)
+vcc_global(struct vcc *tl, struct symbol *sym, vcc_type_t fmt, const char *pfx)
{
struct vsb *vsb;
+ CHECK_OBJ_NOTNULL(sym, SYMBOL_MAGIC);
+ AN(pfx);
+
vsb = VSB_new_auto();
AN(vsb);
- VSB_vprintf(vsb, str, ap);
+ VSB_printf(vsb, "%s_%s", pfx, sym->name);
AZ(VSB_finish(vsb));
if (tl != NULL)
sym->rname = TlDup(tl, VSB_data(vsb));
@@ -194,6 +196,7 @@ vcc_global(struct vcc *tl, struct symbol *sym,
sym->rname = strdup(VSB_data(vsb));
AN(sym->rname);
VSB_destroy(&vsb);
+
sym->fmt = fmt;
sym->kind = VCC_HandleKind(sym->fmt);
if (sym->kind != SYM_NONE)
@@ -207,12 +210,11 @@ vcc_global(struct vcc *tl, struct symbol *sym,
struct symbol *
VCC_HandleSymbol(struct vcc *tl, const struct token *tk, vcc_type_t fmt,
- const char *str, ...)
+ const char *pfx)
{
struct symbol *sym;
enum symkind kind;
const char *p;
- va_list ap;
kind = VCC_HandleKind(fmt);
assert(kind != SYM_NONE);
@@ -245,9 +247,7 @@ VCC_HandleSymbol(struct vcc *tl, const struct token *tk, vcc_type_t fmt,
sym = VCC_SymbolTok(tl, NULL, tk, kind, 1);
AN(sym);
AZ(sym->ndef);
- va_start(ap, str);
- vcc_global(tl, sym, fmt, str, ap);
- va_end(ap);
+ vcc_global(tl, sym, fmt, pfx);
sym->ndef = 1;
if (sym->def_b == NULL)
sym->def_b = tk;
diff --git a/lib/libvcc/vcc_vmod.c b/lib/libvcc/vcc_vmod.c
index b378ccf..e3449ea 100644
--- a/lib/libvcc/vcc_vmod.c
+++ b/lib/libvcc/vcc_vmod.c
@@ -282,7 +282,7 @@ vcc_ParseNew(struct vcc *tl)
ExpectErr(tl, ID);
vcc_ExpectCid(tl, "VCL object");
ERRCHK(tl);
- sy1 = VCC_HandleSymbol(tl, tl->t, INSTANCE, "XXX");
+ sy1 = VCC_HandleSymbol(tl, tl->t, INSTANCE, "vo");
ERRCHK(tl);
/* We allow implicit use of VMOD objects: Pretend it's ref'ed */
@@ -309,10 +309,10 @@ vcc_ParseNew(struct vcc *tl)
s_obj = p;
p += strlen(p) + 1;
- Fh(tl, 0, "static %s *vo_%s;\n\n", p, sy1->name);
+ Fh(tl, 0, "static %s *%s;\n\n", p, sy1->rname);
p += strlen(p) + 1;
- bprintf(buf1, ", &vo_%s, \"%s\"", sy1->name, sy1->name);
+ bprintf(buf1, ", &%s, \"%s\"", sy1->rname, sy1->name);
vcc_Eval_Func(tl, p, buf1, sy2);
ExpectErr(tl, ';');
@@ -322,14 +322,14 @@ vcc_ParseNew(struct vcc *tl)
ifp = New_IniFin(tl);
p += strlen(p) + 1;
- VSB_printf(ifp->fin, "\t\t%s(&vo_%s);", p, sy1->name);
+ VSB_printf(ifp->fin, "\t\t%s(&%s);", p, sy1->rname);
while (p[0] != '\0' || p[1] != '\0' || p[2] != '\0')
p++;
p += 3;
/* Instantiate symbols for the methods */
- bprintf(buf1, ", vo_%s", sy1->name);
+ bprintf(buf1, ", %s", sy1->rname);
while (*p != '\0') {
p += strlen(s_obj);
bprintf(buf2, "%s%s", sy1->name, p);
More information about the varnish-commit
mailing list