From: jordan@hack_attack Date: Thu, 22 Sep 2016 19:29:40 +0000 (-0700) Subject: fixed compiling errors for ir and parser X-Git-Url: https://www.kengrimes.com/gitweb/?p=henge%2Fwebcc.git;a=commitdiff_plain;h=f0fe047bf6596784aae8c56310f9dec35a09dbec fixed compiling errors for ir and parser --- diff --git a/src/apc/ir.c b/src/apc/ir-mem.c similarity index 89% rename from src/apc/ir.c rename to src/apc/ir-mem.c index 4a8486f..8b64101 100644 --- a/src/apc/ir.c +++ b/src/apc/ir-mem.c @@ -3,7 +3,7 @@ #include //uint64_t #include //memmove #include //malloc -#include "ir.h" +#include #define CURR_CDAT (*cdat_stackp) #define CURR_SET set_list[CURR_CDAT->num_sets] @@ -16,7 +16,27 @@ #define PREV_VDAT (vdat_buf[num_vdats-1]) #define CURR_MODEL model_list[CURR_VDAT->num_models] #define CURR_LINK (link_buf[num_links]) +#define CURR_POST (post_buf[num_posts]) +int num_cdats = 0; +int curr_max_cdats = PTRS_IN_PAGE; + +int num_odats = 0; +int curr_max_odats = PTRS_IN_PAGE; + + +int num_vdats = 0; +int curr_max_vdats = PTRS_IN_PAGE; + +int num_refs = 0; +int curr_max_refs = PTRS_IN_PAGE; +uint64_t ss_ref_id = 0x00FFFFFF; /* system space for ref_ids */ + +int num_links = 0; +int curr_max_links = PTRS_IN_PAGE; + +int num_posts = 0; +int curr_max_posts = PTRS_IN_PAGE; void ir_init() @@ -46,6 +66,10 @@ ir_init() /* Init first link */ if( (CURR_LINK = (struct link*) malloc(sizeof(struct link))) == NULL) perror("malloc first link failed"); + + /* Init first post */ + if( (CURR_POST = (struct ref*) malloc(sizeof(struct ref))) == NULL) + perror("malloc first post failed"); } //TODO: FREE MEMORY! @@ -99,6 +123,22 @@ pop_cdat() cdat_stackp--; } +void +inc_posts() +{ + num_posts++; + if(num_posts >= curr_max_posts) + { + if( (realloc((void*) post_buf, PTRS_IN_PAGE * 4)) == NULL) + perror("realloc post_buf failed"); + curr_max_posts += PTRS_IN_PAGE; + } + if( (CURR_POST = (struct ref*) malloc(sizeof (struct ref))) == NULL) + { + perror("malloc post failed"); + } + +} void inc_odat() { @@ -155,7 +195,8 @@ inc_ref() if(num_refs % 16 == 0) { - posts[num_posts++] = *CURR_REF; + CURR_POST = CURR_REF; + inc_posts(); } num_refs++; @@ -344,7 +385,7 @@ insert_ele() } void -insert_framesheets(char direction, char* name, uint64_t ref_id, int height , int width, int num_frames) +insert_framesheet(char direction, char* name, uint64_t ref_id, int height , int width, int num_frames) { CURR_VDAT->CURR_MODEL.spritesheet[(int)direction].height = height; CURR_VDAT->CURR_MODEL.spritesheet[(int)direction].width = width; diff --git a/src/apc/ir.h b/src/apc/ir.h index d8a7ec3..25e5788 100644 --- a/src/apc/ir.h +++ b/src/apc/ir.h @@ -104,8 +104,6 @@ struct cdat { /* There are an unknown amount of cdats at compile time, so we maintain */ /* a cdat_buf of cdat pointers that can be expanded as needed. */ struct cdat* cdat_buf[PTRS_IN_PAGE]; -int num_cdats = 0; -int curr_max_cdats = PTRS_IN_PAGE; /* The cdat_stack is a stack pointers to cdat pointers, the top of which is the cdat that is currently being parsed. Whenever a new cdat is recognized @@ -138,14 +136,9 @@ struct ref { /* Like the cdat_buf, ref_buf stores pointers to refs and can increase in size */ struct ref* ref_buf[PTRS_IN_PAGE]; -int num_refs = 0; -int curr_max_refs = PTRS_IN_PAGE; -uint64_t ss_ref_id = 0x00FFFFFF; /* system space for ref_ids */ - /* posts for ref_buf */ -struct ref posts[MAX_POSTS]; -int num_posts; +struct ref* post_buf[PTRS_IN_PAGE]; /* Links: At parse time, a set/ele can include a link in their grammar representation instead of the actual data and this signifies @@ -197,8 +190,6 @@ struct link { This does not include quad refs, because those are already known to need to be resolved */ struct link* link_buf[PTRS_IN_PAGE]; -int num_links = 0; -int curr_max_links = PTRS_IN_PAGE; /* Odats: Odats consist of the object data necessary for @@ -232,8 +223,6 @@ struct odat { /* Populated and allocated same way as other bufs */ struct odat* odat_buf[PTRS_IN_PAGE]; -int curr_max_odats = PTRS_IN_PAGE; -int num_odats = 0; /* A framesheet is a grouping of animation frames in a single direction (N,W,S,E) */ @@ -265,8 +254,6 @@ struct vdat { struct vdat* vdat_buf[PTRS_IN_PAGE]; -int curr_max_vdats = PTRS_IN_PAGE; -int num_vdats = 0; /* The initalization function of the IR. Mallocs the first c/v/odat and the first links and refs and diff --git a/src/apc/parser.y b/src/apc/parser.y index e4b1bb5..07bc28b 100644 --- a/src/apc/parser.y +++ b/src/apc/parser.y @@ -18,8 +18,16 @@ %} %define parse.error verbose %define lr.type ielr -%define api.value.type union -//operators + +%union { + uint64_t ref; + int NUM; + char *str; + void *voidp; + +} + + //operators %token CLOPEN // / %token CLCLOSE // \ %token SOPEN @@ -38,20 +46,20 @@ %token FS %token ELE //nonterminal types -%type olink -%type ele_svlink -%type set_svlink +%type olink +%type ele_svlink +%type set_svlink //terminals -%token NUM -%token STR -%token SS -%token NAME -%token REF -%token SSD -%token FPTR -%token WIDTH -%token HEIGHT -%token NUM_PTRS +%token NUM +%token STR +%token SS +%token NAME +%token REF +%token SSD +%token FPTR +%token WIDTH +%token HEIGHT +%token NUM_PTRS //precedence %precedence LP %precedence MP