From 0d573784b71842cf02c7731b12e9afcba4c14926 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Tue, 21 Sep 2021 10:24:48 -0700
Subject: [PATCH 1/3] Shrink out unused rules

* zishrink.awk (process_input_line, output_saved_lines):
Omit rules defined but never used.
---
 zishrink.awk | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/zishrink.awk b/zishrink.awk
index 1947c7c..baf85cd 100644
--- a/zishrink.awk
+++ b/zishrink.awk
@@ -224,8 +224,16 @@ function process_input_line(line, \
     if (!rule[field[i]])
       rule[field[i]] = gen_rule_name(field[i])
     field[i] = rule[field[i]]
+
+    # Record each rule name that was used.
+    if (!ruleline)
+      rule_used[field[i]] = 1
   }
 
+  # Record each line of a rule definition.
+  if (ruleline)
+    line_rule[nout] = field[2]
+
   # If this zone supersedes an earlier one, delete the earlier one
   # from the saved output lines.
   startdef = ""
@@ -256,7 +264,7 @@ function output_saved_lines( \
 			    i)
 {
   for (i = 0; i < nout; i++)
-    if (output_line[i])
+    if (output_line[i] && (!line_rule[i] || rule_used[line_rule[i]]))
       print output_line[i]
 }
 
-- 
2.30.2

