added ir_quit
authorjordan@hack_attack <jordanlavatai@gmail.com>
Sun, 2 Oct 2016 00:43:59 +0000 (17:43 -0700)
committerjordan@hack_attack <jordanlavatai@gmail.com>
Sun, 2 Oct 2016 00:43:59 +0000 (17:43 -0700)
src/apc/ir.c
src/apc/irmem.c
src/apc/parser.y

index bf62227..d31bc1a 100644 (file)
@@ -197,11 +197,12 @@ insert_set_svlink
   curr_cdatp = curr_cdat();
   curr_linkp = alloc_link();
 
-  /* Insert vlink into link_stack so that it gets processed at
+  /* Insert svlink into link_stack so that it gets processed at
      output time */
   curr_linkp->type = 3;
   curr_linkp->cdat_idx = curr_cdatp->idx;
   curr_linkp->set_idx = curr_cdatp->num_sets;
+  curr_linkp->ele_idx = -1;
   curr_linkp->link_t.svlink.ref_id = ref_id;
 
 }
@@ -280,6 +281,8 @@ insert_ele_label
   curr_elep->ref_id = ref_id;
 }
 
+/* We don't make an odat here, at output time we will resolve
+   the ref_id to the corresponding odat. */
 void
 insert_ele_olink
 ( uint64_t ref_id
@@ -295,8 +298,8 @@ insert_ele_olink
   curr_linkp = alloc_link();
 
   curr_elep->cdat_idx = curr_cdatp->idx;
-  curr_elep->ref_id = ref_id; /* Will be resolved to offset
-                                                   when link is processed */
+  curr_elep->ref_id = ref_id;
+
   curr_linkp->type = 1;
   curr_linkp->link_t.olink.ref_id = ref_id;
   curr_linkp->cdat_idx = curr_cdatp->idx;
index 28234d8..dc5cede 100644 (file)
@@ -51,7 +51,7 @@ inc_posts(void);
 #define CURR_QUAD (CURR_ODAT->quad_list[CURR_ODAT->num_quads])
 
 
-int num_cdats = -1;
+int num_cdats = 0;
 int curr_max_cdats = PTRS_IN_PAGE;
 
 struct cdat* cdat_buf[PTRS_IN_PAGE];
@@ -93,7 +93,7 @@ ir_init()
   char root[4] = "root";
 
   cdat_buf[num_cdats] = (struct cdat*) malloc(sizeof(struct cdat) );
-  cdat_buf[num_cdats]->idx = 0;
+  cdat_buf[num_cdats]->idx = num_cdats;
   memmove(cdat_buf[num_cdats]->name, root, 4);
 
   cdat_stackp = cdat_stack;
@@ -101,6 +101,34 @@ ir_init()
 
 }
 
+void
+ir_quit()
+{
+  int i;
+
+  for(i = 0; i <= num_odats ; i++)
+    {
+      free(odat_buf[i]);
+    }
+  for(i = 0; i <= num_cdats; i++)
+    {
+      free(cdat_buf[i]);
+    }
+  for(i = 0; i <= num_vdats; i++)
+    {
+      free(vdat_buf[i]);
+    }
+  for(i = 0; i <= num_refs; i++)
+    {
+      free(ref_buf[i]);
+    }
+  for(i = 0; i<= num_links; i++)
+    {
+      free(link_buf[i]);
+    }
+
+}
+
 //TODO: FREE MEMORY!
 struct cdat*
 alloc_cdat()
index 12e8874..9a15851 100644 (file)
@@ -118,10 +118,10 @@ quad_list
 ;
 
 set:
-SOPEN set_label set_map_data element_list {alloc_vdat();} vdat SCLOSE                           {insert_set(); insert_set_vdatid();};
+SOPEN set_label set_map_data element_list {alloc_vdat();} vdat SCLOSE          {insert_set(); insert_set_vdatid();};
 | SOPEN set_label set_map_data element_list set_vlink SCLOSE                    {insert_set();};
 | SOPEN set_label set_map_data element_list set_svlink SCLOSE                   {insert_set_svlink($5); insert_set(); };
-| SOPEN set_label element_list {alloc_vdat();} vdat SCLOSE                                      {insert_set(); insert_set_vdatid();};
+| SOPEN set_label element_list {alloc_vdat();} vdat SCLOSE                      {insert_set(); insert_set_vdatid();};
 | SOPEN set_label element_list set_vlink SCLOSE                                 {insert_set(); }
 | SOPEN set_label element_list set_svlink  SCLOSE                               {insert_set_svlink($4); insert_set();};
 | SOPEN olink SCLOSE                                                            {insert_set_olink($2);};
@@ -135,6 +135,7 @@ HP NAME REF                                                  {insert_set_label($
 
 set_svlink:
 REF
+
 ;
 
 set_vlink:
@@ -168,9 +169,9 @@ element:
 EOPEN ele_label hitbox root {alloc_vdat();} vdat ECLOSE                        {insert_ele(); insert_ele_vdatid();};
 | EOPEN ele_label hitbox root ele_vlink ECLOSE                                 {insert_ele(); };
 | EOPEN ele_label hitbox root ele_svlink ECLOSE                                {insert_ele_svlink($5);insert_ele(); };
-| EOPEN ele_label root {alloc_vdat();} vdat ECLOSE                                             {insert_ele(); insert_ele_vdatid();};
+| EOPEN ele_label root {alloc_vdat();} vdat ECLOSE                             {insert_ele(); insert_ele_vdatid();};
 | EOPEN ele_label root ele_vlink ECLOSE                                        {insert_ele(); };
-| EOPEN ele_label root ele_svlink ECLOSE                                       {insert_ele_svlink($4); insert_ele(); };
+| EOPEN ele_label root ele_svlink ECLOSE                                      {insert_ele_svlink($4); insert_ele(); };
 | EOPEN olink ECLOSE                                                           {insert_ele_olink($2);};
 ;
 
@@ -193,7 +194,7 @@ spritesheet HP framesheet
 ;
 
 framesheet:
-SSD NAME REF HEIGHT WIDTH NUM_PTRS frame_pointers LP                         {insert_framesheet($1, $2, $3, $4, $5, $6);};
+SSD NAME REF HEIGHT WIDTH NUM_PTRS frame_pointers LP                     {insert_framesheet($1, $2, $3, $4, $5, $6);};
 ;
 
 frame_pointers: