From a4a313fb5b371a532372c59cef7b0124b8f82375 Mon Sep 17 00:00:00 2001 From: "jordan@hack_attack" Date: Sat, 1 Oct 2016 17:43:59 -0700 Subject: [PATCH] added ir_quit --- src/apc/ir.c | 9 ++++++--- src/apc/irmem.c | 32 ++++++++++++++++++++++++++++++-- src/apc/parser.y | 11 ++++++----- 3 files changed, 42 insertions(+), 10 deletions(-) diff --git a/src/apc/ir.c b/src/apc/ir.c index bf62227..d31bc1a 100644 --- a/src/apc/ir.c +++ b/src/apc/ir.c @@ -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; diff --git a/src/apc/irmem.c b/src/apc/irmem.c index 28234d8..dc5cede 100644 --- a/src/apc/irmem.c +++ b/src/apc/irmem.c @@ -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() diff --git a/src/apc/parser.y b/src/apc/parser.y index 12e8874..9a15851 100644 --- a/src/apc/parser.y +++ b/src/apc/parser.y @@ -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: -- 2.18.0