From: jordan@hack_attack Date: Tue, 30 Aug 2016 18:49:20 +0000 (-0700) Subject: pushing to debug make X-Git-Url: https://www.kengrimes.com/gitweb/?p=henge%2Fwebcc.git;a=commitdiff_plain;h=a00b12aee56b4e8f633a291d8ead2d3e169166ca pushing to debug make --- diff --git a/src/apc/ir.c b/src/apc/ir.c index 10aede8..ffc1020 100644 --- a/src/apc/ir.c +++ b/src/apc/ir.c @@ -1,28 +1,22 @@ #include -#include +#include -#define CURR_OBI (OB[obi]) -#define CURR_VBI (VB[vbi]) -#define CURR_CBI (CB[cbi]) -#define IS_SUBCLASS() (CB[cbi].num_subclasses) +//#define CURR_ODAT (OB[obi]) +//#define CURR_VDAT (VB[vbi]) +//#define CURR_CDAT (CB[cbi]) //TODO: label and vdat_id void insert_set() { - if(IS_SUBCLASS()) //if set is set of subclass - OB[obi].class_id = CB[cbi].subclass_list[subclass_index].label; //TODO: specify subclass other than label? - else - OB[obi].class_id = CB[cbi].label; - - CB[cbi].set_list[set_index].odat_id = obi; - CB[cbi].set_list[set_index].parent_id = OB[obi].class_id; + cdat_buf[cbi].set_list[set_index].odat_id = obi; + cdat_buf[cbi].set_list[set_index].parent_id =//from lexer //TODO: add ele_stack is created in element_list - //TODO: add odat + //TODO: add set to odat_buf } -#define CURR_QUAD (OB[obi].ref_list[ref_index]) +#define CURR_QUAD (odat_buf[obi].ref_list[ref_index]) void insert_ref(int x, int y, int z, int ref) { @@ -33,28 +27,29 @@ insert_ref(int x, int y, int z, int ref) } -//Insert element into OB and CB +//Insert element into odat_buf and cdat_buf void insert_ele(char* label, int vdat_id) { - OB[obi].label = label; - OB[obi].vdat_id = vdat_id; + odat_buf[obi].label = label; + odat_buf[obi].vdat_id = vdat_id; //TODO: check set_obi to see if set_map_data exists - OB[obi].num_ref = OB[set_obi].num_ref; - OB[obi].ref_list = OB[set_obi].ref_list; - OB[obi].class_id = cbi; + //comes from e + odat_buf[obi].num_ref = odat_buf[set_obi].num_ref; + odat_buf[obi].ref_list = odat_buf[set_obi].ref_list; + odat_buf[obi].class_id = cbi; if(IS_SUBCLASS()) { - CB[cbi].subclass_list[subclass_index].set_list[set_index].ele_list[ele_index].odat_id = obi; - CB[cbi].subclass_list[subclass_index].set_list[set_index].ele_list[ele_index].parent_id = CB[cbi].subclass_list[subclass_index].set_index; + cdat_buf[cbi].subclass_list[subclass_index].set_list[set_index].ele_list[ele_index].odat_id = obi; + cdat_buf[cbi].subclass_list[subclass_index].set_list[set_index].ele_list[ele_index].parent_id = cdat_buf[cbi].subclass_list[subclass_index].set_index; } else { - CB[cbi].set_list[set_index].ele_list[ele_index].odat_id = obi; - CB[cbi].set_list[set_index].ele_list[ele_index].parent_id = CB[cbi].set_index; + cdat_buf[cbi].set_list[set_index].ele_list[ele_index].odat_id = obi; + cdat_buf[cbi].set_list[set_index].ele_list[ele_index].parent_id = cdat_buf[cbi].set_index; } obi++; @@ -65,8 +60,8 @@ insert_ele(char* label, int vdat_id) int insert_fdat(char* label, char direction, int fd) { - VB[vbi].model_list[VB[vbi].len].label = label; - VB[vbi].model_list[VB[vbi].len].fdat_id[(int)direction] = fd; + vdat_buf[vbi].model_list[vdat_buf[vbi].len].label = label; + vdat_buf[vbi].model_list[vdat_buf[vbi].len].fdat_id[(int)direction] = fd; } void @@ -93,7 +88,7 @@ condense() /* fwrite vdat */ for(v = 0; v <= vbi; v++) { - num_models = VB[v].num_models; //data duplication for caching + num_models = vdat_buf[v].num_models; //data duplication for caching for(m = 0; m <= num_models; m++) { @@ -107,4 +102,47 @@ condense() } +void +inc_cbi() +{ + cbi++; +} + +void +set_class_label(char* label) +{ + cdat_buf[cbi].label = $1; +} + +void +inc_subclass_idx() +{ + cdat_buf[cbi].subclass_index++; +} + +void +inc_set_index() +{ + odat_buf[cbi].set_index++; +} + +void +inc_ref() +{ + odat_buf[obi].ref_index++; + odat_buf[obi].num_ref++; +} + +//TODO: This needs to be changed to account for +// when the set is of a subclass. +void +inc_ele() +{ + cdat_buf[cbi].set_stack[stack_index].num_ele++; +} +void +inc_models() +{ + vdat_buf[vbi].num_models++; +} diff --git a/src/apc/ir.h b/src/apc/ir.h index d4ab90b..9b8f4ab 100644 --- a/src/apc/ir.h +++ b/src/apc/ir.h @@ -1,48 +1,29 @@ /* Structures allocated for and updated during parse time that are the IR before writing to the output file */ -#define BUFF_SIZE 256 +#define BUF_SIZE 256 #define MAX_SUBCLASSES 16 #define MAX_SETS 256 #define MAX_ELES 256 #define MAX_REFS 256 #define MAX_MODELS 256 -//These IR buffers will be condensed into their respective output files. -//parse_init() all to zero. -struct cdat CB[BUFF_SIZE]; -struct vdat VB[BUFF_SIZE]; -struct odat OB[BUFF_SIZE]; //indexes for buffers int cbi = 0; int vbi = 0; int obi = 0; -struct cdat { - char label[32]; - int num_subclasses; - int num_sets; - int subclass_index; - int set_index; - struct cdat subclass_list[MAX_SUBCLASSES]; - struct set set_list[MAX_SETS]; -}; - -//Element or a set -struct odat { - char label[32]; - int vdat_id; - int class_id; - int num_ref; - int ref_index; - struct ref ref_list[MAX_REFS]; -}; - struct ref { int x, y, z, objref; }; +struct ele { + int odat_id; + int parent_id;//offset into class set_stack +}; + +//TODO: Add jump table struct set { int odat_id; int parent_id;//offset into CB @@ -51,9 +32,12 @@ struct set { struct ele ele_list[MAX_ELES]; }; -struct ele { - int odat_id; - int parent_id;//offset into class set_stack + +//8 ids for each direction +//fdat_id ordered by alphabetical direction +struct model { + char label[32]; + int fdat_id[8]; }; //TODO: Do vdats need labels? @@ -61,12 +45,43 @@ struct vdat { int num_models; int msi; //model_stack_index struct model model_list[MAX_MODELS]; -}; +} vdat_buf[BUF_SIZE]; -//8 ids for each direction -//fdat_id ordered by alphabetical direction -struct model { +struct cdat { char label[32]; - int fdat_id[8]; -}; + int num_subclasses; + int num_sets; + int subclass_index; + int set_index; + struct cdat* subclass_list[MAX_SUBCLASSES]; + struct set set_list[MAX_SETS]; +} cdat_buf[BUF_SIZE]; + +//Element or a set +struct odat { + char label[32]; + int vdat_id; + int class_id; + int num_ref; + int ref_index; + struct ref ref_list[MAX_REFS]; +} odat_buf[BUF_SIZE]; + + +void +inc_cbi(void); + +void +set_class_label(char*); + +void +inc_subclass_index(void); + +void +inc_subclass_index(void); + +void +inc_ref(void); +void +inc_models(void); diff --git a/src/apc/parser.y b/src/apc/parser.y index c16dc18..f42ea7b 100644 --- a/src/apc/parser.y +++ b/src/apc/parser.y @@ -3,8 +3,6 @@ #include #include #include - #include "sprite.h" - #include "symbol.h" #include #include "ir.h" @@ -26,20 +24,26 @@ %token RLE //# %token RT //* %token HB +%token MOD //nonterminal types %type element %type vdat %type elem_label +%type label + //terminals %token NUM %token fd %token STR %token VAR %token SS +%token FNAME //precedence -%right LOW HIGH +%precedence LOW +%precedence MED +%precedence HIGH -/* Syntax Directed Translation Scheme of the APC grammar */ + /* Syntax Directed Translation Scheme of the APC grammar */ /* Rules */ @@ -49,16 +53,12 @@ class_list {condense();} //Seperate file? ; class_list: -class_list class {cbi++;}; +class_list class {inc_cbi()}; | class ; -class_label: -STR -; - class: -class_label CLOPEN class_closure CLCLOSE {CB[cbi].label = $1;}; +label CLOPEN class_closure CLCLOSE {set_class_label($1);}; ; class_closure: @@ -68,24 +68,24 @@ subclass_list ; subclass_list: -subclass_list class {CB[cbi].subclass_index++;}; +subclass_list class {inc_subclass_idx();}; | class ; set_list: -set_list set {CB[cbi].set_index++;}; +set_list set {inc_set_index();}; | set ; //set needs a label, vdat_id. set: -set_map_data element_list {insert_set();}; -| element_list +set_map_data element_list HIGH {insert_set();}; +| element_list LOW ; -//TODO: Figure out what to do with hitbox and root. +//TODO: Figure out what to do with hitbox and root. set_map_data: ref_list {}; | ref_list hitbox @@ -100,7 +100,7 @@ RLS quads RLE ; quads: -quads quad {OB[obi].ref_index++;OB[obi].num_ref++;}; +quads quad {inc_ref();}; | quad ; @@ -118,12 +118,12 @@ RT NUM NUM NUM //parent_id is the set_index of the subclass_index. element_list: -element_list element {CB[cbi].set_stack[stack_index].num_ele++;}; -| element +element_list element HIGH {inc_ele();}; +| element LOW ; element: -set_label elem_label vdat {insert_ele($2,$3); vbi++;}; +set_label elem_label vdat LOW {insert_ele($2,$3); }; ; set_label: @@ -135,12 +135,13 @@ elem_label: ; vdat: -vdat model {VB[vbi].num_models++;}; +vdat model {inc_models();}; | model + ; model: -model fdat +MOD model fdat | fdat ; @@ -149,16 +150,10 @@ label SS FNAME {insert_fdat($1, $2, $3);}; ; label: -STR +STR REF +| REF ; -ref: -NUM -; - -FNAME: -STR -; %% int