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;
}
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
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;
#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];
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;
}
+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()
;
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);};
set_svlink:
REF
+
;
set_vlink:
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);};
;
;
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: