Commit Diff


commit - 13b527d9f7a404e302b54452dd2eb9fc65ed9bab
commit + 072028198fd35dfd25c9920dc6b65202ab5fabc7
blob - 7e544cbf50afb3992f764d956ab4de19a3d67a3c
blob + 7f0792c2d67f76688341bc2d4b073d5d09180b4f
--- gotd/parse.y
+++ gotd/parse.y
@@ -127,10 +127,29 @@ typedef struct {
 
 grammar		:
 		| grammar '\n'
+		| grammar varset '\n'
 		| grammar main '\n'
 		| grammar repository '\n'
 		;
 
+varset		: STRING '=' STRING	{
+			char *s = $1;
+			while (*s++) {
+				if (isspace((unsigned char)*s)) {
+					yyerror("macro name cannot contain "
+					    "whitespace");
+					free($1);
+					free($3);
+					YYERROR;
+				}
+			}
+			if (symset($1, $3, 0) == -1)
+				fatal("cannot store variable");
+			free($1);
+			free($3);
+		}
+		;
+
 timeout		: NUMBER {
 			if ($1 < 0) {
 				yyerror("invalid timeout: %lld", $1);