removed set parent, crawl_set relies on internal rewind stack
authorken <ken@mihrtec.com>
Fri, 20 Jan 2017 17:17:32 +0000 (09:17 -0800)
committerken <ken@mihrtec.com>
Fri, 20 Jan 2017 17:17:32 +0000 (09:17 -0800)
src/ir.c

index ab97305..341028e 100644 (file)
--- a/src/ir.c
+++ b/src/ir.c
@@ -101,7 +101,7 @@ struct ir_class_t
   uint8_t*           name;\r
 };\r
 struct ir_set_t\r
   uint8_t*           name;\r
 };\r
 struct ir_set_t\r
-{ struct ir_set_t*      nextchild, * nextsib, * p;\r
+{ struct ir_set_t*      nextchild, * nextsib;\r
   uint32_t              ref;\r
   uint8_t*              name;\r
   struct ir_framebox_t* frameboxes;\r
   uint32_t              ref;\r
   uint8_t*              name;\r
   struct ir_framebox_t* frameboxes;\r
@@ -696,21 +696,19 @@ void crawl_set
 ( struct ir_set_t* set,\r
   int depth\r
 )\r
 ( struct ir_set_t* set,\r
   int depth\r
 )\r
-{ struct ir_set_t* iter, * last;\r
+{ struct ir_set_t* setlist[64], ** slp, * iter;\r
   int i;\r
   pspace(depth * 12);\r
   int i;\r
   pspace(depth * 12);\r
-  last = NULL;\r
   i = depth;\r
   i = depth;\r
+  slp = setlist;\r
   for(iter = set; iter != NULL; iter = iter->nextchild)\r
     { uprintf("[%10U]", iter->name);\r
   for(iter = set; iter != NULL; iter = iter->nextchild)\r
     { uprintf("[%10U]", iter->name);\r
-      if (last != NULL)\r
-       iter->p = last;\r
-      last = iter;\r
+      *slp++ = iter;\r
       i++;\r
     }\r
   --i;\r
   putchar('\n');\r
       i++;\r
     }\r
   --i;\r
   putchar('\n');\r
-  for(iter = last; iter != NULL; iter = iter->p, --i)\r
+  for(iter = *--slp; slp >= setlist; iter = *--slp, --i)\r
     if (iter->nextsib != NULL)\r
       crawl_set(iter->nextsib,i);\r
 }\r
     if (iter->nextsib != NULL)\r
       crawl_set(iter->nextsib,i);\r
 }\r