Generalize dump_dim().
authorBen Pfaff <blp@cs.stanford.edu>
Fri, 7 Nov 2014 03:32:10 +0000 (19:32 -0800)
committerBen Pfaff <blp@cs.stanford.edu>
Fri, 7 Nov 2014 03:32:10 +0000 (19:32 -0800)
dump.c

diff --git a/dump.c b/dump.c
index ff5dcfd4e2c040d2a4e4ad3ff1f8d18b9b30d44f..c89fe1f493795a7c53000641464adc90ccac6856 100644 (file)
--- a/dump.c
+++ b/dump.c
@@ -383,7 +383,8 @@ dump_dim_value(int level)
       match_byte_assert (0x58);
       printf ("variable \"%s\"", get_string());
       get_string();
-      match_byte_assert (2);
+      if (!match_byte (2))
+        match_byte_assert(3);
     }
   else if (match_byte (2))
     {
@@ -422,12 +423,16 @@ dump_dim_value(int level)
       int subn;
 
       match_byte (0);
-      match_byte_assert (0x31);
-      match_u32_assert (0);
-      match_u32_assert (0);
-      subn = get_u32 ();
-      printf ("nested %d bytes", subn);
-      pos += subn;
+      if (match_byte (0x31))
+        {
+          match_u32_assert (0);
+          match_u32_assert (0);
+          subn = get_u32 ();
+          printf ("nested %d bytes", subn);
+          pos += subn;
+        }
+      else
+        match_byte_assert(0x58);
       printf ("; \"%s\", substitutions:", get_string());
       int total_subs = get_u32();
       int x = get_u32();
@@ -500,61 +505,8 @@ dump_dim(void)
       printf("string \"%s\": ", get_string());
       match_byte(1) || match_byte(0);
     }
-  else if (match_byte(5)) 
-    {
-      match_byte_assert(0x58);
-      printf("variable \"%s\": ", get_string());
-      get_string();
-      if (!match_byte(2))
-        match_byte_assert(3);
-    }
-  else if (match_byte(0x31))
-    {
-      int subn;
-      int total_subs = 1;
-
-      match_u32_assert (0);
-      match_u32_assert (0);
-      subn = get_u32 ();
-      printf ("nested %d bytes", subn);
-      pos += subn;
-      printf ("; \"%s\", substitutions:", get_string());
-      for (;;)
-        {
-          int n_subst = get_u32();
-          if (!n_subst)
-            break;
-          printf (" %d", n_subst);
-          total_subs *= n_subst;
-        }
-
-      for (int i = 0; i < total_subs; i++)
-        {
-          putc ('\n', stdout);
-          dump_dim_value (0);
-        }
-    }
   else
-    {
-      int total_subs = 1;
-
-      match_byte_assert (0x58);
-      printf ("\"%s\" with substitutions:", get_string());
-      for (;;)
-        {
-          int n_subst = get_u32();
-          if (!n_subst)
-            break;
-          printf (" %d", n_subst);
-          total_subs *= n_subst;
-        }
-
-      for (int i = 0; i < total_subs; i++)
-        {
-          putc ('\n', stdout);
-          dump_dim_value (0);
-        }
-    }
+    dump_dim_value(0);
 
   /* This byte is usually 0x02 but 0x00 and 0x75 (!) have also been spotted. */
   pos++;