[master] bda99dc Don't assume symbols are a single token (4/near the end now)
Poul-Henning Kamp
phk at FreeBSD.org
Wed Jan 31 10:50:11 UTC 2018
commit bda99dceb8aa866b8a5bc1798d72f07e1013df97
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Wed Jan 31 10:49:18 2018 +0000
Don't assume symbols are a single token (4/near the end now)
diff --git a/lib/libvcc/vcc_action.c b/lib/libvcc/vcc_action.c
index e248fff..1a4d755 100644
--- a/lib/libvcc/vcc_action.c
+++ b/lib/libvcc/vcc_action.c
@@ -50,7 +50,6 @@ vcc_act_call(struct vcc *tl, struct token *t, struct symbol *sym)
vcc_AddCall(tl, sym);
VCC_GlobalSymbol(sym, SUB, "VGC_function");
Fb(tl, 1, "%s(ctx);\n", sym->rname);
- vcc_NextToken(tl);
SkipToken(tl, ';');
}
@@ -96,7 +95,6 @@ vcc_act_set(struct vcc *tl, struct token *t, struct symbol *sym)
t = tl->t;
sym = VCC_SymbolGet(tl, SYM_VAR, "Unknown variable", XREF_NONE);
ERRCHK(tl);
- vcc_NextToken(tl);
AN(sym);
if (sym->w_methods == 0) {
vcc_ErrWhere2(tl, t, tl->t);
@@ -149,7 +147,6 @@ vcc_act_unset(struct vcc *tl, struct token *t, struct symbol *sym)
t = tl->t;
sym = VCC_SymbolGet(tl, SYM_VAR, "Unknown variable", XREF_NONE);
ERRCHK(tl);
- vcc_NextToken(tl);
AN(sym);
if (sym->u_methods == 0) {
vcc_ErrWhere2(tl, t, tl->t);
@@ -278,7 +275,6 @@ vcc_act_return_vcl(struct vcc *tl)
}
Fb(tl, 1, "VRT_vcl_select(ctx, %s);\t/* %s */\n",
(const char*)sym->eval_priv, sym->name);
- vcc_NextToken(tl);
SkipToken(tl, ')');
}
diff --git a/lib/libvcc/vcc_backend.c b/lib/libvcc/vcc_backend.c
index 28d05c9..db5ce71 100644
--- a/lib/libvcc/vcc_backend.c
+++ b/lib/libvcc/vcc_backend.c
@@ -403,6 +403,7 @@ vcc_ParseHostDef(struct vcc *tl, const struct token *t_be, const char *vgcname)
ERRCHK(tl);
} else if (vcc_IdIs(t_field, "probe") && tl->t->tok == ID) {
if (vcc_IdIs(tl->t, "default")) {
+ vcc_NextToken(tl);
(void)vcc_default_probe(tl);
} else {
pb = VCC_SymbolGet(tl, SYM_PROBE,
@@ -411,7 +412,6 @@ vcc_ParseHostDef(struct vcc *tl, const struct token *t_be, const char *vgcname)
AN(pb);
Fb(tl, 0, "\t.probe = %s,\n", pb->rname);
}
- vcc_NextToken(tl);
SkipToken(tl, ';');
} else if (vcc_IdIs(t_field, "probe")) {
VSB_printf(tl->sb,
@@ -478,7 +478,7 @@ vcc_ParseBackend(struct vcc *tl)
tl->ndirector++;
t_first = tl->t;
- vcc_NextToken(tl); /* ID: backend */
+ SkipToken(tl, ID); /* ID: backend */
vcc_ExpectVid(tl, "backend"); /* ID: name */
ERRCHK(tl);
diff --git a/lib/libvcc/vcc_expr.c b/lib/libvcc/vcc_expr.c
index cdbfa61..81f4135 100644
--- a/lib/libvcc/vcc_expr.c
+++ b/lib/libvcc/vcc_expr.c
@@ -659,6 +659,7 @@ vcc_expr4(struct vcc *tl, struct expr **e, vcc_type_t fmt)
"*(VCL_conf.default_director)");
return;
}
+ t = tl->t;
sym = VCC_SymbolGet(tl, SYM_NONE, "Symbol not found",
XREF_REF);
ERRCHK(tl);
@@ -677,8 +678,6 @@ vcc_expr4(struct vcc *tl, struct expr **e, vcc_type_t fmt)
case SYM_PROBE:
AN(sym->eval);
AZ(*e);
- t = tl->t;
- vcc_NextToken(tl);
sym->eval(tl, e, t, sym, fmt);
ERRCHK(tl);
/* Unless asked for a HEADER, fold to string here */
@@ -969,7 +968,6 @@ cmp_acl(struct vcc *tl, struct expr **e, const struct cmps *cp)
vcc_ExpectVid(tl, "ACL");
sym = VCC_SymbolGet(tl, SYM_ACL, SYMTAB_CREATE, XREF_REF);
AN(sym);
- vcc_NextToken(tl);
VCC_GlobalSymbol(sym, ACL, ACL_SYMBOL_PREFIX);
bprintf(buf, "%sVRT_acl_match(ctx, %s, \v1)", cp->emit, sym->rname);
*e = vcc_expr_edit(tl, BOOL, buf, *e, NULL);
diff --git a/lib/libvcc/vcc_parse.c b/lib/libvcc/vcc_parse.c
index b94e0a0..7bcd732 100644
--- a/lib/libvcc/vcc_parse.c
+++ b/lib/libvcc/vcc_parse.c
@@ -186,7 +186,6 @@ vcc_Compound(struct vcc *tl)
vcc_AddUses(tl, t, NULL,
sym->action_mask,
"Not a valid action");
- vcc_NextToken(tl);
sym->action(tl, t, sym);
break;
}
@@ -224,12 +223,12 @@ vcc_ParseFunction(struct vcc *tl)
AN(sym);
p = sym->proc;
if (p == NULL) {
- if ((tl->t->b[0] == 'v'|| tl->t->b[0] == 'V') &&
- (tl->t->b[1] == 'c'|| tl->t->b[1] == 'C') &&
- (tl->t->b[2] == 'l'|| tl->t->b[2] == 'L')) {
+ if ((t->b[0] == 'v'|| t->b[0] == 'V') &&
+ (t->b[1] == 'c'|| t->b[1] == 'C') &&
+ (t->b[2] == 'l'|| t->b[2] == 'L')) {
VSB_printf(tl->sb,
"VCL sub's named 'vcl*' are reserved names.\n");
- vcc_ErrWhere(tl, tl->t);
+ vcc_ErrWhere(tl, t);
VSB_printf(tl->sb, "Valid vcl_* methods are:\n");
VTAILQ_FOREACH(p, &tl->procs, list) {
if (p->method != NULL)
@@ -240,11 +239,11 @@ vcc_ParseFunction(struct vcc *tl)
}
VCC_GlobalSymbol(sym, SUB, "VGC_function");
p = vcc_NewProc(tl, sym);
- p->name = tl->t;
+ p->name = t;
VSB_printf(p->cname, "%s", sym->rname);
} else if (p->method == NULL) {
VSB_printf(tl->sb, "Function '%s' redefined\n", sym->name);
- vcc_ErrWhere(tl, tl->t);
+ vcc_ErrWhere(tl, t);
VSB_printf(tl->sb, "Previously defined here:\n");
vcc_ErrWhere(tl, p->name);
return;
@@ -260,7 +259,6 @@ vcc_ParseFunction(struct vcc *tl)
vcc_Coord(tl, p->body, NULL);
Fb(tl, 0, " */\n");
tl->curproc = p;
- vcc_NextToken(tl);
tl->indent += INDENT;
Fb(tl, 1, "{\n");
L(tl, vcc_Compound(tl));
diff --git a/lib/libvcc/vcc_symb.c b/lib/libvcc/vcc_symb.c
index 51354eb..3ba2b8c 100644
--- a/lib/libvcc/vcc_symb.c
+++ b/lib/libvcc/vcc_symb.c
@@ -221,6 +221,7 @@ VCC_SymbolGet(struct vcc *tl, enum symkind kind, const char *e, const char *x)
} else {
assert (x == XREF_NONE);
}
+ vcc_NextToken(tl);
return (sym);
}
@@ -291,24 +292,26 @@ VCC_HandleSymbol(struct vcc *tl, vcc_type_t fmt, const char *pfx)
{
struct symbol *sym;
enum symkind kind;
+ struct token *t;
const char *p;
kind = VCC_HandleKind(fmt);
assert(kind != SYM_NONE);
+ t = tl->t;
sym = VCC_SymbolGet(tl, SYM_NONE, SYMTAB_NOERR, XREF_NONE);
if (sym != NULL && sym->def_b != NULL && kind == sym->kind) {
p = VCC_SymKind(tl, sym);
VSB_printf(tl->sb, "%c%s '%.*s' redefined.\n",
- toupper(*p), p + 1, PF(tl->t));
- vcc_ErrWhere(tl, tl->t);
+ toupper(*p), p + 1, PF(t));
+ vcc_ErrWhere(tl, t);
VSB_printf(tl->sb, "First definition:\n");
AN(sym->def_b);
vcc_ErrWhere(tl, sym->def_b);
return (sym);
} else if (sym != NULL && sym->def_b != NULL) {
- VSB_printf(tl->sb, "Name '%.*s' already defined.\n", PF(tl->t));
- vcc_ErrWhere(tl, tl->t);
+ VSB_printf(tl->sb, "Name '%.*s' already defined.\n", PF(t));
+ vcc_ErrWhere(tl, t);
VSB_printf(tl->sb, "First definition:\n");
AN(sym->def_b);
vcc_ErrWhere(tl, sym->def_b);
@@ -316,8 +319,8 @@ VCC_HandleSymbol(struct vcc *tl, vcc_type_t fmt, const char *pfx)
} else if (sym != NULL && sym->kind != kind) {
VSB_printf(tl->sb,
"Name %.*s must have type '%s'.\n",
- PF(tl->t), VCC_SymKind(tl, sym));
- vcc_ErrWhere(tl, tl->t);
+ PF(t), VCC_SymKind(tl, sym));
+ vcc_ErrWhere(tl, t);
return (sym);
}
if (sym == NULL)
@@ -327,7 +330,6 @@ VCC_HandleSymbol(struct vcc *tl, vcc_type_t fmt, const char *pfx)
VCC_GlobalSymbol(sym, fmt, pfx);
sym->ndef = 1;
if (sym->def_b == NULL)
- sym->def_b = tl->t;
- vcc_NextToken(tl);
+ sym->def_b = t;
return (sym);
}
diff --git a/lib/libvcc/vcc_vmod.c b/lib/libvcc/vcc_vmod.c
index 168ca04..32cd611 100644
--- a/lib/libvcc/vcc_vmod.c
+++ b/lib/libvcc/vcc_vmod.c
@@ -290,7 +290,6 @@ vcc_Act_New(struct vcc *tl, struct token *t, struct symbol *sym)
t = tl->t;
sy2 = VCC_SymbolGet(tl, SYM_OBJECT, "Symbol not found", XREF_NONE);
ERRCHK(tl);
- vcc_NextToken(tl);
AN(sy2);
if (sy2->extra == NULL) {
VSB_printf(tl->sb, "Constructor not found: ");
More information about the varnish-commit
mailing list