[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