[master] 9e88eb0 Collaps a bunch of equivalent "Eval" functions.

Poul-Henning Kamp phk at FreeBSD.org
Wed May 18 23:47:06 CEST 2016


commit 9e88eb006a6883bf8070d9b53d0e47153636392d
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Wed May 18 21:45:54 2016 +0000

    Collaps a bunch of equivalent "Eval" functions.

diff --git a/lib/libvcc/vcc_acl.c b/lib/libvcc/vcc_acl.c
index 97728a9..f3e3488 100644
--- a/lib/libvcc/vcc_acl.c
+++ b/lib/libvcc/vcc_acl.c
@@ -475,7 +475,7 @@ vcc_ParseAcl(struct vcc *tl)
 {
 	struct token *an;
 	struct symbol *sym;
-	char acln[1024];
+	char *acln;
 
 	vcc_NextToken(tl);
 	VTAILQ_INIT(&tl->acl);
@@ -490,7 +490,7 @@ vcc_ParseAcl(struct vcc *tl)
 	an = tl->t;
 	vcc_NextToken(tl);
 
-	bprintf(acln, "%.*s", PF(an));
+	acln = TlDupTok(tl, an);
 
 	sym = VCC_GetSymbolTok(tl, an, SYM_ACL);
 	AN(sym);
@@ -499,9 +499,7 @@ vcc_ParseAcl(struct vcc *tl)
 		vcc_ErrWhere(tl, an);
 		return;
 	}
-	sym->fmt = ACL;
-	sym->eval = vcc_Eval_Acl;
-	sym->eval_priv = TlDup(tl, acln);
+	VCC_GenericSymbol(tl, sym, ACL, "&vrt_acl_named_%s", acln);
 	sym->ndef++;
 	ERRCHK(tl);
 
diff --git a/lib/libvcc/vcc_backend.c b/lib/libvcc/vcc_backend.c
index a76e95a..c860dc2 100644
--- a/lib/libvcc/vcc_backend.c
+++ b/lib/libvcc/vcc_backend.c
@@ -266,8 +266,7 @@ vcc_ParseProbe(struct vcc *tl)
 		vcc_ErrWhere(tl, t_probe);
 		return;
 	}
-	sym->fmt = PROBE;
-	sym->eval = vcc_Eval_Probe;
+	VCC_GenericSymbol(tl, sym, PROBE, "%s", sym->name);
 	sym->ndef++;
 	ERRCHK(tl);
 
@@ -497,9 +496,7 @@ vcc_ParseBackend(struct vcc *tl)
 		vcc_ErrWhere(tl, t_be);
 		return;
 	}
-	sym->fmt = BACKEND;
-	sym->eval = vcc_Eval_Backend;
-	sym->eval_priv = TlDup(tl, vgcname);
+	VCC_GenericSymbol(tl, sym, BACKEND, "%s", vgcname);
 	sym->ndef++;
 	ERRCHK(tl);
 
diff --git a/lib/libvcc/vcc_compile.h b/lib/libvcc/vcc_compile.h
index 31f87e1..bfb661a 100644
--- a/lib/libvcc/vcc_compile.h
+++ b/lib/libvcc/vcc_compile.h
@@ -283,12 +283,10 @@ void vcc_Expr(struct vcc *tl, enum var_type typ);
 void vcc_Expr_Call(struct vcc *tl, const struct symbol *sym);
 void vcc_Expr_Init(struct vcc *tl);
 sym_expr_t vcc_Eval_Var;
+sym_expr_t vcc_Eval_Generic;
 sym_expr_t vcc_Eval_SymFunc;
 void vcc_Eval_Func(struct vcc *tl, const char *cfunc, const char *extra,
     const char *name, const char *args);
-sym_expr_t vcc_Eval_Acl;
-sym_expr_t vcc_Eval_Backend;
-sym_expr_t vcc_Eval_Probe;
 enum var_type VCC_arg_type(const char **p);
 
 /* vcc_obj.c */
@@ -318,6 +316,8 @@ struct symbol *VCC_FindSymbol(struct vcc *tl,
 const char * VCC_SymKind(struct vcc *tl, const struct symbol *s);
 typedef void symwalk_f(struct vcc *tl, const struct symbol *s);
 void VCC_WalkSymbols(struct vcc *tl, symwalk_f *func, enum symkind kind);
+void VCC_GenericSymbol(struct vcc *, struct symbol *,
+    enum var_type, const char *str, ...);
 
 /* vcc_token.c */
 void vcc_Coord(const struct vcc *tl, struct vsb *vsb,
diff --git a/lib/libvcc/vcc_expr.c b/lib/libvcc/vcc_expr.c
index e371fb9..6b74f8e 100644
--- a/lib/libvcc/vcc_expr.c
+++ b/lib/libvcc/vcc_expr.c
@@ -494,16 +494,15 @@ vcc_Eval_BoolConst(struct vcc *tl, struct expr **e, const struct symbol *sym)
  */
 
 void
-vcc_Eval_Acl(struct vcc *tl, struct expr **e, const struct symbol *sym)
+vcc_Eval_Generic(struct vcc *tl, struct expr **e, const struct symbol *sym)
 {
 
-	assert(sym->kind == SYM_ACL);
+	assert(sym->kind == sym->kind);
 	AN(sym->eval_priv);
 
 	vcc_ExpectCid(tl);
-	vcc_AddRef(tl, tl->t, SYM_ACL);
-	*e = vcc_mk_expr(ACL, "&vrt_acl_named_%s",
-	    (const char *)sym->eval_priv);
+	vcc_AddRef(tl, tl->t, sym->kind);
+	*e = vcc_mk_expr(sym->fmt, "%s", (const char *)sym->eval_priv);
 	(*e)->constant = EXPR_VAR;	/* XXX ? */
 	vcc_NextToken(tl);
 }
@@ -512,39 +511,6 @@ vcc_Eval_Acl(struct vcc *tl, struct expr **e, const struct symbol *sym)
  */
 
 void
-vcc_Eval_Backend(struct vcc *tl, struct expr **e, const struct symbol *sym)
-{
-
-	assert(sym->kind == SYM_BACKEND);
-	AN(sym->eval_priv);
-
-	vcc_ExpectCid(tl);
-	vcc_AddRef(tl, tl->t, SYM_BACKEND);
-	*e = vcc_mk_expr(BACKEND, "%s", (const char *)sym->eval_priv);
-	(*e)->constant = EXPR_VAR;	/* XXX ? */
-	vcc_NextToken(tl);
-}
-
-/*--------------------------------------------------------------------
- */
-
-void
-vcc_Eval_Probe(struct vcc *tl, struct expr **e, const struct symbol *sym)
-{
-
-	assert(sym->kind == SYM_PROBE);
-
-	vcc_ExpectCid(tl);
-	vcc_AddRef(tl, tl->t, SYM_PROBE);
-	*e = vcc_mk_expr(PROBE, "&vgc_probe_%.*s", PF(tl->t));
-	(*e)->constant = EXPR_VAR;      /* XXX ? */
-	vcc_NextToken(tl);
-}
-
-/*--------------------------------------------------------------------
- */
-
-void
 vcc_Eval_Var(struct vcc *tl, struct expr **e, const struct symbol *sym)
 {
 	const struct var *vp;
diff --git a/lib/libvcc/vcc_symb.c b/lib/libvcc/vcc_symb.c
index e9d39f0..22b6db9 100644
--- a/lib/libvcc/vcc_symb.c
+++ b/lib/libvcc/vcc_symb.c
@@ -28,6 +28,7 @@
 
 #include "config.h"
 
+#include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -139,3 +140,22 @@ VCC_WalkSymbols(struct vcc *tl, symwalk_f *func, enum symkind kind)
 		ERRCHK(tl);
 	}
 }
+
+void
+VCC_GenericSymbol(struct vcc *tl, struct symbol *sym,
+    enum var_type fmt, const char *str, ...)
+{
+	struct vsb *vsb;
+	va_list ap;
+
+	vsb = VSB_new_auto();
+	AN(vsb);
+	va_start(ap, str);
+	VSB_vprintf(vsb, str, ap);
+	va_end(ap);
+	AZ(VSB_finish(vsb));
+	sym->eval_priv = TlDup(tl, VSB_data(vsb));
+	sym->eval = vcc_Eval_Generic;
+	sym->fmt = fmt;
+	VSB_destroy(&vsb);
+}



More information about the varnish-commit mailing list