diff --git a/lib/comp.c b/lib/comp.c index 57570ab..bb5b3b7 100644 --- a/lib/comp.c +++ b/lib/comp.c @@ -109,7 +109,12 @@ static int copy_string_to (hcl_t* hcl, const hcl_oocs_t* src, hcl_oocs_t* dst, h capa = HCL_ALIGN(len + 1, TV_BUFFER_ALIGN); tmp = (hcl_ooch_t*)hcl_reallocmem(hcl, dst->ptr, HCL_SIZEOF(*tmp) * capa); - if (HCL_UNLIKELY(!tmp)) return -1; + if (HCL_UNLIKELY(!tmp)) + { + const hcl_ooch_t* orgmsg = hcl_backuperrmsg(hcl); + hcl_seterrbfmt (hcl, hcl_geterrnum(hcl), "failed to grow string buffer - %js", orgmsg); + return -1; + } dst->ptr = tmp; *dstcapa = capa - 1; @@ -526,11 +531,18 @@ static int emit_byte_instruction (hcl_t* hcl, hcl_oob_t bc, const hcl_loc_t* src newcapa = HCL_ALIGN(hcl->code.bc.capa + 1, HCL_BC_BUFFER_ALIGN); tmp = (hcl_oob_t*)hcl_reallocmem(hcl, hcl->code.bc.ptr, HCL_SIZEOF(*tmp) * newcapa); - if (HCL_UNLIKELY(!tmp)) return -1; + if (HCL_UNLIKELY(!tmp)) + { + const hcl_ooch_t* orgmsg = hcl_backuperrmsg(hcl); + hcl_seterrbfmt (hcl, hcl_geterrnum(hcl), "failed to grow byte code buffer - %js", orgmsg); + return -1; + } tmp2 = (hcl_dbgi_t*)hcl_reallocmem(hcl, hcl->code.dbgi, HCL_SIZEOF(*tmp2) * newcapa); if (HCL_UNLIKELY(!tmp2)) { + const hcl_ooch_t* orgmsg = hcl_backuperrmsg(hcl); + hcl_seterrbfmt (hcl, hcl_geterrnum(hcl), "failed to grow debug info buffer - %js", orgmsg); hcl_freemem (hcl, tmp); return -1; } @@ -953,7 +965,12 @@ static int push_cblk (hcl_t* hcl, const hcl_loc_t* errloc, hcl_cblk_type_t type) newcapa = HCL_ALIGN(new_depth + 1, BLK_INFO_BUFFER_ALIGN); tmp = (hcl_cblk_info_t*)hcl_reallocmem(hcl, hcl->c->cblk.info, newcapa * HCL_SIZEOF(*tmp)); - if (HCL_UNLIKELY(!tmp)) return -1; + if (HCL_UNLIKELY(!tmp)) + { + const hcl_ooch_t* orgmsg = hcl_backuperrmsg(hcl); + hcl_seterrbfmt (hcl, hcl_geterrnum(hcl), "failed to resize control block info buffer - %js", orgmsg); + return -1; + } hcl->c->cblk.info_capa = newcapa; hcl->c->cblk.info = tmp; @@ -998,7 +1015,12 @@ static int push_clsblk (hcl_t* hcl, const hcl_loc_t* errloc, hcl_oow_t nivars, h newcapa = HCL_ALIGN(new_depth + 1, BLK_INFO_BUFFER_ALIGN); tmp = (hcl_clsblk_info_t*)hcl_reallocmem(hcl, hcl->c->clsblk.info, newcapa * HCL_SIZEOF(*tmp)); - if (HCL_UNLIKELY(!tmp)) return -1; + if (HCL_UNLIKELY(!tmp)) + { + const hcl_ooch_t* orgmsg = hcl_backuperrmsg(hcl); + hcl_seterrbfmt (hcl, hcl_geterrnum(hcl), "failed to resize class block info buffer - %js", orgmsg); + return -1; + } hcl->c->clsblk.info_capa = newcapa; hcl->c->clsblk.info = tmp; @@ -1097,7 +1119,12 @@ static int push_fnblk (hcl_t* hcl, const hcl_loc_t* errloc, newcapa = HCL_ALIGN(new_depth + 1, BLK_INFO_BUFFER_ALIGN); tmp = (hcl_fnblk_info_t*)hcl_reallocmem(hcl, hcl->c->fnblk.info, newcapa * HCL_SIZEOF(*tmp)); - if (HCL_UNLIKELY(!tmp)) return -1; + if (HCL_UNLIKELY(!tmp)) + { + const hcl_ooch_t* orgmsg = hcl_backuperrmsg(hcl); + hcl_seterrbfmt (hcl, hcl_geterrnum(hcl), "failed to resize function block info buffer - %js", orgmsg); + return -1; + } hcl->c->fnblk.info_capa = newcapa; hcl->c->fnblk.info = tmp; @@ -1207,9 +1234,11 @@ static HCL_INLINE int _insert_cframe (hcl_t* hcl, hcl_ooi_t index, int opcode, h hcl_oow_t newcapa; newcapa = HCL_ALIGN (hcl->c->cfs.top + 256, 256); /* TODO: adjust this capacity */ - tmp = (hcl_cframe_t*)hcl_reallocmem (hcl, hcl->c->cfs.ptr, newcapa * HCL_SIZEOF(*tmp)); + tmp = (hcl_cframe_t*)hcl_reallocmem(hcl, hcl->c->cfs.ptr, newcapa * HCL_SIZEOF(*tmp)); if (HCL_UNLIKELY(!tmp)) { + const hcl_ooch_t* orgmsg = hcl_backuperrmsg(hcl); + hcl_seterrbfmt (hcl, hcl_geterrnum(hcl), "failed to grow compiler frame stack- %js", orgmsg); hcl->c->cfs.top--; return -1; } diff --git a/lib/hcl.c b/lib/hcl.c index e4a2388..0bed1b3 100644 --- a/lib/hcl.c +++ b/lib/hcl.c @@ -766,7 +766,7 @@ hcl_mod_data_t* hcl_openmod (hcl_t* hcl, const hcl_ooch_t* name, hcl_oow_t namel if (load) { - /* found the module in the staic module table */ + /* found the module in the static module table */ HCL_MEMSET (&md, 0, HCL_SIZEOF(md)); md.mod.inctx = hcl->option.mod_inctx; @@ -776,9 +776,9 @@ hcl_mod_data_t* hcl_openmod (hcl_t* hcl, const hcl_ooch_t* name, hcl_oow_t namel /* i copy-insert 'md' into the table before calling 'load'. * to pass the same address to load(), query(), etc */ pair = hcl_rbt_insert(&hcl->modtab, (hcl_ooch_t*)name, namelen, &md, HCL_SIZEOF(md)); - if (pair == HCL_NULL) + if (HCL_UNLIKELY(!pair)) { - hcl_seterrnum (hcl, HCL_ESYSMEM); + hcl_seterrbfmt (hcl, HCL_ESYSMEM, "insufficient system memory in storing static module handle"); return HCL_NULL; } diff --git a/lib/read.c b/lib/read.c index 05ded1a..ad917a3 100644 --- a/lib/read.c +++ b/lib/read.c @@ -55,10 +55,11 @@ static struct voca_t { 4, { 's','e','l','f' } }, { 5, { 's','u','p','e','r' } }, - { 3, { '(',' ',')' } }, - { 4, { '(',':',' ',')' } }, - { 3, { '{',' ','}' } }, - { 3, { '[',' ',']' } }, + { 3, { '(',' ',')' /* XLIST */ } }, + { 4, { '(',':',' ',')' /* MLIST */ } }, + { 3, { '(',':','=',')' } }, + { 3, { '{',' ','}' /* BLOCK */ } }, + { 3, { '[',' ',']' /* ARRAY */ } }, { 4, { '#','[',' ',']' } }, { 4, { '#','{',' ','}' } }, { 4, { '#','(',' ',')' } }, @@ -203,6 +204,7 @@ static HCL_INLINE int is_delimchar (hcl_ooci_t c) c == '#' || c == '\"' || c == '\'' || is_spacechar(c) || c == HCL_UCI_EOF; } +/* TODO: remove this use the one in comp.c */ static int copy_string_to (hcl_t* hcl, const hcl_oocs_t* src, hcl_oocs_t* dst, hcl_oow_t* dst_capa, int append, hcl_ooch_t add_delim) { hcl_oow_t len, pos; @@ -227,7 +229,12 @@ static int copy_string_to (hcl_t* hcl, const hcl_oocs_t* src, hcl_oocs_t* dst, h capa = HCL_ALIGN(len, BUFFER_ALIGN); tmp = (hcl_ooch_t*)hcl_reallocmem(hcl, dst->ptr, HCL_SIZEOF(*tmp) * capa); - if (HCL_UNLIKELY(!tmp)) return -1; + if (HCL_UNLIKELY(!tmp)) + { + const hcl_ooch_t* orgmsg = hcl_backuperrmsg(hcl); + hcl_seterrbfmt (hcl, hcl_geterrnum(hcl), "failed to grow token buffer - %js", orgmsg); + return -1; + } dst->ptr = tmp; *dst_capa = capa; @@ -459,8 +466,13 @@ static const hcl_ooch_t* add_sr_name (hcl_t* hcl, const hcl_oocs_t* name) link = link->link; } - link = (hcl_link_t*)hcl_callocmem (hcl, HCL_SIZEOF(*link) + HCL_SIZEOF(hcl_ooch_t) * (name->len + 1)); - if (HCL_UNLIKELY(!link)) return HCL_NULL; + link = (hcl_link_t*)hcl_callocmem(hcl, HCL_SIZEOF(*link) + HCL_SIZEOF(hcl_ooch_t) * (name->len + 1)); + if (HCL_UNLIKELY(!link)) + { + const hcl_ooch_t* orgmsg = hcl_backuperrmsg(hcl); + hcl_seterrbfmt (hcl, hcl_geterrnum(hcl), "failed to source name [%.*js] - %js", name->len, name->ptr, orgmsg); + return HCL_NULL; + } nptr = (hcl_ooch_t*)(link + 1); @@ -479,7 +491,12 @@ static HCL_INLINE int enter_list (hcl_t* hcl, const hcl_loc_t* loc, int flagv) { hcl_rstl_t* rstl; rstl = (hcl_rstl_t*)hcl_callocmem(hcl, HCL_SIZEOF(*rstl)); - if (HCL_UNLIKELY(!rstl)) return -1; + if (HCL_UNLIKELY(!rstl)) + { + const hcl_ooch_t* orgmsg = hcl_backuperrmsg(hcl); + hcl_seterrbfmt (hcl, hcl_geterrnum(hcl), "failed to allocate reader stack node - %js", orgmsg); + return -1; + } rstl->loc = *loc; rstl->flagv = flagv; rstl->prev = hcl->c->r.st; /* push */ @@ -826,7 +843,12 @@ static int feed_begin_include (hcl_t* hcl) if (HCL_UNLIKELY(!io_name)) return -1; arg = (hcl_io_cciarg_t*)hcl_callocmem(hcl, HCL_SIZEOF(*arg)); - if (HCL_UNLIKELY(!arg)) goto oops; + if (HCL_UNLIKELY(!arg)) + { + const hcl_ooch_t* orgmsg = hcl_backuperrmsg(hcl); + hcl_seterrbfmt (hcl, hcl_geterrnum(hcl), "failed to allocate source input structure - %js", orgmsg); + goto oops; + } arg->name = io_name; arg->line = 1; @@ -2848,6 +2870,8 @@ static int init_compiler (hcl_t* hcl) hcl->c = (hcl_compiler_t*)hcl_callocmem(hcl, HCL_SIZEOF(*hcl->c)); if (HCL_UNLIKELY(!hcl->c)) { + const hcl_ooch_t* orgmsg = hcl_backuperrmsg(hcl); + hcl_seterrbfmt (hcl, hcl_geterrnum(hcl), "failed to allocate compiler - %js", orgmsg); hcl_deregcb (hcl, cbp); return -1; }