[master] 192bfb64d Get rid of a single use, special case, symbol table lookup function.

Poul-Henning Kamp phk at FreeBSD.org
Thu May 30 14:53:10 UTC 2019


commit 192bfb64dbd6a7399c4dce7c40aac42cf43e490d
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Thu May 30 14:46:39 2019 +0000

    Get rid of a single use, special case, symbol table lookup function.

diff --git a/bin/varnishtest/tests/m00008.vtc b/bin/varnishtest/tests/m00008.vtc
index 7b5647487..77b327370 100644
--- a/bin/varnishtest/tests/m00008.vtc
+++ b/bin/varnishtest/tests/m00008.vtc
@@ -2,7 +2,7 @@ varnishtest "VCL compiler vmod coverage / vmod loading"
 
 feature topbuild
 
-varnish v1 -errvcl {Module debug conflicts with other symbol.} {
+varnish v1 -errvcl {Symbol 'debug' has wrong type (sub):} {
 	backend b { .host = "127.0.0.1"; }
 	sub debug {}
 	import debug;
diff --git a/lib/libvcc/vcc_compile.h b/lib/libvcc/vcc_compile.h
index c9ea92d5d..3a2116a9f 100644
--- a/lib/libvcc/vcc_compile.h
+++ b/lib/libvcc/vcc_compile.h
@@ -357,8 +357,6 @@ extern const char SYMTAB_NOERR[];
 extern const char SYMTAB_CREATE[];
 struct symbol *VCC_SymbolGet(struct vcc *, vcc_kind_t, const char *,
     const char *);
-struct symbol *VCC_SymbolGetTok(struct vcc *, vcc_kind_t, const char *,
-    const char *, const struct token *);
 
 typedef void symwalk_f(struct vcc *tl, const struct symbol *s);
 void VCC_WalkSymbols(struct vcc *tl, symwalk_f *func, vcc_kind_t);
diff --git a/lib/libvcc/vcc_symb.c b/lib/libvcc/vcc_symb.c
index e409f3920..e142a2b4d 100644
--- a/lib/libvcc/vcc_symb.c
+++ b/lib/libvcc/vcc_symb.c
@@ -278,68 +278,6 @@ vcc_symxref(struct symbol *sym, const char *x, const struct token *t)
 	}
 }
 
-struct symbol *
-VCC_SymbolGetTok(struct vcc *tl, vcc_kind_t kind, const char *e, const char *x,
-    const struct token *t)
-{
-	struct symbol *sym;
-
-	AN(e);
-	if (tl->syntax >= VCL_41 && e == SYMTAB_CREATE && kind != SYM_SUB &&
-	    (t->b[0] == 'v'|| t->b[0] == 'V') &&
-	    (t->b[1] == 'c'|| t->b[1] == 'C') &&
-	    (t->b[2] == 'l'|| t->b[2] == 'L') &&
-	    (t->b[3] == '_')) {
-		VSB_printf(tl->sb,
-		    "Symbols named 'vcl_*' are reserved.\nAt:");
-		vcc_ErrWhere(tl, t);
-		return (NULL);
-	}
-
-	sym = VCC_Symbol(tl, t->b, t->e, kind,
-	    e == SYMTAB_CREATE ? 1 : 0, tl->syntax, tl->syntax);
-	if (sym == NULL && e == SYMTAB_NOERR)
-		return (sym);
-	if (sym == NULL) {
-		VSB_printf(tl->sb, "%s: ", e);
-		vcc_ErrToken(tl, t);
-		sym = VCC_Symbol(tl, t->b, t->e, kind, 0,
-			VCL_LOW, VCL_HIGH);
-		if (sym != NULL) {
-			VSB_printf(tl->sb, " (Only available when");
-			if (sym->lorev >= VCL_LOW)
-				VSB_printf(tl->sb, " %.1f <=", .1 * sym->lorev);
-			VSB_printf(tl->sb, " VCL syntax");
-			if (sym->hirev <= VCL_HIGH)
-				VSB_printf(tl->sb, " <= %.1f", .1 * sym->hirev);
-			VSB_printf(tl->sb, ")");
-		}
-		VSB_cat(tl->sb, "\nAt: ");
-		vcc_ErrWhere(tl, t);
-		return (NULL);
-	}
-	assert (sym->lorev <= tl->syntax && sym->hirev >= tl->syntax);
-	if (kind != SYM_NONE && kind != sym->kind) {
-		VSB_printf(tl->sb, "Symbol ");
-		vcc_ErrToken(tl, t);
-		VSB_printf(tl->sb, " has wrong type (%s): ", sym->kind->name);
-		VSB_cat(tl->sb, "\nAt: ");
-		vcc_ErrWhere(tl, t);
-		if (sym->def_b != NULL) {
-			VSB_printf(tl->sb, "Symbol was defined here: ");
-			vcc_ErrWhere(tl, sym->def_b);
-		} else if (sym->ref_b != NULL) {
-			VSB_printf(tl->sb, "Symbol was declared here: ");
-			vcc_ErrWhere(tl, sym->ref_b);
-		} else {
-			VSB_printf(tl->sb, "Symbol was builtin\n");
-		}
-		return (NULL);
-	}
-	vcc_symxref(sym, x, t);
-	return (sym);
-}
-
 struct symbol *
 VCC_SymbolGet(struct vcc *tl, vcc_kind_t kind, const char *e, const char *x)
 {
diff --git a/lib/libvcc/vcc_vmod.c b/lib/libvcc/vcc_vmod.c
index fad1006a1..c98e261f0 100644
--- a/lib/libvcc/vcc_vmod.c
+++ b/lib/libvcc/vcc_vmod.c
@@ -232,16 +232,17 @@ vcc_ParseImport(struct vcc *tl)
 
 	ExpectErr(tl, ID);		/* "vmod_name" */
 	mod = tl->t;
-	vcc_NextToken(tl);
-
-	if (tl->t->tok == ID && vcc_IdIs(tl->t, "as")) {
-		SkipToken(tl, ID);		/* "as" */
+	tmod = VTAILQ_NEXT(mod, list);
+	if (tmod->tok == ID && vcc_IdIs(tmod, "as")) {
+		vcc_NextToken(tl);		/* "vmod_name" */
+		vcc_NextToken(tl);		/* "as" */
 		ExpectErr(tl, ID);		/* "vcl_name" */
-		tmod = tl->t;
-		vcc_NextToken(tl);
-	} else {
-		tmod = mod;
 	}
+	tmod = tl->t;
+
+	msym = VCC_SymbolGet(tl, SYM_VMOD, SYMTAB_CREATE, XREF_NONE);
+	ERRCHK(tl);
+	AN(msym);
 
 	if (tl->t->tok == ID) {
 		if (!vcc_IdIs(tl->t, "from")) {
@@ -293,33 +294,19 @@ vcc_ParseImport(struct vcc *tl)
 		return;
 	}
 
-	msym = VCC_SymbolGetTok(tl, SYM_NONE, SYMTAB_NOERR, XREF_NONE, tmod);
-
-	if (msym != NULL && msym->kind == SYM_VMOD &&
-	    !strcmp(msym->extra, vmd->file_id)) {
-		/* Identical import is OK */
-		AZ(dlclose(vop->hdl));
-		free(fnpx);
-		return;
-	} else if (msym != NULL && msym->kind == SYM_VMOD) {
-		VSB_printf(tl->sb,
-		    "Another module already imported as %.*s.\n", PF(tmod));
-		vcc_ErrWhere2(tl, t1, tl->t);
-		AZ(dlclose(vop->hdl));
-		free(fnpx);
-		return;
-	} else if (msym != NULL) {
-		VSB_printf(tl->sb,
-		    "Module %.*s conflicts with other symbol.\n", PF(tmod));
-		vcc_ErrWhere2(tl, t1, tl->t);
+	if (msym->extra != NULL) {
+		if (!strcmp(msym->extra, vmd->file_id)) {
+			/* Identical import is OK */
+		} else {
+			VSB_printf(tl->sb,
+			    "Another module already imported as %.*s.\n",
+			    PF(tmod));
+			vcc_ErrWhere2(tl, t1, tl->t);
+		}
 		AZ(dlclose(vop->hdl));
 		free(fnpx);
 		return;
 	}
-
-	msym = VCC_SymbolGetTok(tl, SYM_VMOD, SYMTAB_CREATE, XREF_NONE, tmod);
-	ERRCHK(tl);
-	AN(msym);
 	msym->def_b = t1;
 	msym->def_e = tl->t;
 


More information about the varnish-commit mailing list