[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