[master] f52d5a2 Refactor return(bla) code slightly

Poul-Henning Kamp phk at FreeBSD.org
Tue Oct 11 11:14:05 CEST 2016


commit f52d5a2214c91443dbe6a6ad3e087f12a95dc477
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Tue Oct 11 08:31:52 2016 +0000

    Refactor return(bla) code slightly

diff --git a/bin/varnishtest/tests/v00018.vtc b/bin/varnishtest/tests/v00018.vtc
index 7fe29e3..53d96c9 100644
--- a/bin/varnishtest/tests/v00018.vtc
+++ b/bin/varnishtest/tests/v00018.vtc
@@ -103,7 +103,17 @@ varnish v1 -errvcl {Unknown token '<<' when looking for STRING_LIST} {
 	sub vcl_synth { synthetic( << "foo"; }
 }
 
-varnish v1 -errvcl {Syntax has changed, use:} {
+varnish v1 -errvcl {Missing argument.} {
 	backend b { .host = "127.0.0.1"; }
 	sub vcl_recv { return(synth); }
 }
+
+varnish v1 -errvcl {Arguments not allowed.} {
+	backend b { .host = "127.0.0.1"; }
+	sub vcl_recv { return(pipe(XXX); }
+}
+
+varnish v1 -errvcl {Expected return action name.} {
+	backend b { .host = "127.0.0.1"; }
+	sub vcl_recv { return(foobar); }
+}
diff --git a/lib/libvcc/vcc_action.c b/lib/libvcc/vcc_action.c
index 200ba97..ced924c 100644
--- a/lib/libvcc/vcc_action.c
+++ b/lib/libvcc/vcc_action.c
@@ -195,17 +195,6 @@ static void
 parse_return_synth(struct vcc *tl)
 {
 
-	AN(vcc_IdIs(tl->t, "synth"));
-	vcc_NextToken(tl);
-	if (tl->t->tok == ')') {
-		VSB_printf(tl->sb,
-		    "Syntax has changed, use:\n"
-		    "\treturn(synth(999));\n"
-		    "or\n"
-		    "\treturn(synth(999, \"Response text\"));\n");
-		vcc_ErrWhere(tl, tl->t);
-		return;
-	}
 	ExpectErr(tl, '(');
 	vcc_NextToken(tl);
 	Fb(tl, 1, "VRT_synth(ctx,\n");
@@ -224,11 +213,6 @@ parse_return_synth(struct vcc *tl)
 	ExpectErr(tl, ')');
 	vcc_NextToken(tl);
 	Fb(tl, 1, ");\n");
-	Fb(tl, 1, "VRT_handling(ctx, VCL_RET_SYNTH);\n");
-	Fb(tl, 1, "return (1);\n");
-	vcc_ProcAction(tl->curproc, VCL_RET_SYNTH, tl->t);
-	ExpectErr(tl, ')');
-	vcc_NextToken(tl);
 }
 
 /*--------------------------------------------------------------------*/
@@ -240,8 +224,6 @@ parse_return_vcl(struct vcc *tl)
 	struct inifin *p;
 	char buf[1024];
 
-	AN(vcc_IdIs(tl->t, "vcl"));
-	vcc_NextToken(tl);
 	ExpectErr(tl, '(');
 	vcc_NextToken(tl);
 	ExpectErr(tl, ID);
@@ -270,10 +252,6 @@ parse_return_vcl(struct vcc *tl)
 	}
 	Fb(tl, 1, "VRT_vcl_select(ctx, %s);\t/* %.*s */\n",
 	    (const char*)sym->eval_priv, PF(tl->t));
-	Fb(tl, 1, "VRT_handling(ctx, VCL_RET_VCL);\n");
-	Fb(tl, 1, "return (1);\n");
-	vcc_NextToken(tl);
-	ExpectErr(tl, ')');
 	vcc_NextToken(tl);
 	ExpectErr(tl, ')');
 	vcc_NextToken(tl);
@@ -284,39 +262,50 @@ parse_return_vcl(struct vcc *tl)
 static void
 parse_return(struct vcc *tl)
 {
-	int retval = 0;
+	unsigned hand;
+	const char *h;
 
 	vcc_NextToken(tl);
 	ExpectErr(tl, '(');
 	vcc_NextToken(tl);
 	ExpectErr(tl, ID);
 
-	if (vcc_IdIs(tl->t, "synth")) {
-		parse_return_synth(tl);
-		return;
-	}
-	if (vcc_IdIs(tl->t, "vcl")) {
-		parse_return_vcl(tl);
-		return;
-	}
-
-#define VCL_RET_MAC(l, U, B)						\
-	do {								\
-		if (vcc_IdIs(tl->t, #l)) {				\
-			Fb(tl, 1, "VRT_handling(ctx, VCL_RET_" #U ");\n"); \
-			Fb(tl, 1, "return (1);\n");			\
-			vcc_ProcAction(tl->curproc, VCL_RET_##U, tl->t);\
-			retval = 1;					\
-		}							\
-	} while (0);
+	hand = VCL_RET_MAX;
+	h = NULL;
+#define VCL_RET_MAC(l, U, B) 				\
+		if (vcc_IdIs(tl->t, #l)) {		\
+			hand = VCL_RET_ ## U;		\
+			h = #U;				\
+		}
 #include "tbl/vcl_returns.h"
 #undef VCL_RET_MAC
-	if (!retval) {
+	if (h == NULL) {
 		VSB_printf(tl->sb, "Expected return action name.\n");
 		vcc_ErrWhere(tl, tl->t);
 		ERRCHK(tl);
 	}
+	assert(hand < VCL_RET_MAX);
+		
+	vcc_ProcAction(tl->curproc, hand, tl->t);
 	vcc_NextToken(tl);
+	if (tl->t->tok == '(') {
+		if (hand == VCL_RET_SYNTH)
+			parse_return_synth(tl);
+		else if (hand == VCL_RET_VCL)
+			parse_return_vcl(tl);
+		else {
+			VSB_printf(tl->sb, "Arguments not allowed.\n");
+			vcc_ErrWhere(tl, tl->t);
+		}
+	} else {
+		if (hand == VCL_RET_SYNTH || hand == VCL_RET_VCL) {
+			VSB_printf(tl->sb, "Missing argument.\n");
+			vcc_ErrWhere(tl, tl->t);
+		}
+	}
+	ERRCHK(tl);
+	Fb(tl, 1, "VRT_handling(ctx, VCL_RET_%s);\n", h);
+	Fb(tl, 1, "return (1);\n");
 	ExpectErr(tl, ')');
 	vcc_NextToken(tl);
 }



More information about the varnish-commit mailing list