diff --git a/Makefile.am b/Makefile.am index 904d84e..045a459 100644 --- a/Makefile.am +++ b/Makefile.am @@ -19,6 +19,7 @@ distclean-local: clean-local: rm -rf $(builddir)/go.mod $(builddir)/go.sum + go clean -C $(srcdir) -x -modfile $(abs_builddir)/go.mod -cache if ENABLE_HAKGO diff --git a/Makefile.in b/Makefile.in index faac7a2..00cb469 100644 --- a/Makefile.in +++ b/Makefile.in @@ -937,6 +937,7 @@ distclean-local: clean-local: rm -rf $(builddir)/go.mod $(builddir)/go.sum + go clean -C $(srcdir) -x -modfile $(abs_builddir)/go.mod -cache @ENABLE_HAKGO_TRUE@hakgo.bin: lib/libhak.la $(hakgo_OBJECTS) @ENABLE_HAKGO_TRUE@ cp -pf $(srcdir)/go.mod $(builddir)/go.mod >/dev/null 2>&1 || true diff --git a/lib/comp.c b/lib/comp.c index fe22593..9444827 100644 --- a/lib/comp.c +++ b/lib/comp.c @@ -69,6 +69,9 @@ enum #define TV_BUFFER_ALIGN 256 #define BLK_INFO_BUFFER_ALIGN 128 + +static hak_ooch_t _empty_str_[1] = { '\0' }; + /* -------------------------------------------- fun plus(x y) { @@ -220,13 +223,13 @@ static int add_temporary_variable (hak_t* hak, const hak_cnode_t* var, hak_oow_t { if (tgt) { - hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAMEDUP, HAK_CNODE_GET_LOC(var), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAMEDUP, HAK_CNODE_GET_LOC(var), "duplicate %hs name '%.*js' for '%.*js'", desc, name->len, name->ptr, tgt->len, tgt->ptr); } else { - hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAMEDUP, HAK_CNODE_GET_LOC(var), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAMEDUP, HAK_CNODE_GET_LOC(var), "duplicate %hs name '%.*js'", desc, name->len, name->ptr); } @@ -302,7 +305,7 @@ static int add_class_level_variable (hak_t* hak, hak_oocsc_t* dst, hak_oocsc_t* if (__find_word_in_string((hak_oocs_t*)dst, name, 0, HAK_NULL) >= 0 || (__find_word_in_string((hak_oocs_t*)altdst, name, 0, HAK_NULL) >= 0)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAMEDUP, HAK_CNODE_GET_LOC(var), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAMEDUP, HAK_CNODE_GET_LOC(var), "duplicate %hs variable name '%.*js'", desc, name->len, name->ptr); return -1; } @@ -403,7 +406,7 @@ static int find_variable_backward_with_word (hak_t* hak, const hak_oocs_t* name, { /* instance variables are accessible only in an instance method defintion scope. * it is in class initialization scope */ - hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, loc, HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, loc, "prohibited access to instance variable around '%.*js'", name->len, name->ptr); return -1; } @@ -414,7 +417,7 @@ static int find_variable_backward_with_word (hak_t* hak, const hak_oocs_t* name, if ((hak->c->funblk.info[--fi].fun_type & 0xFF) == FUN_CM) { /* the function where this variable is defined is a class method or an plain function block within a class method*/ - hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, loc, HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, loc, "prohibited access to instance variable in class method context around '%.*js'", name->len, name->ptr); return -1; @@ -547,7 +550,7 @@ static int check_block_expression_as_body (hak_t* hak, hak_cnode_t* c, const hak { no_block: hak_setsynerrbfmt(hak, HAK_SYNERR_BLOCK, - (car? HAK_CNODE_GET_LOC(car): c? HAK_CNODE_GET_LOC(c): HAK_CNODE_GET_LOC(ctx)), HAK_NULL, + (car? HAK_CNODE_GET_LOC(car): c? HAK_CNODE_GET_LOC(c): HAK_CNODE_GET_LOC(ctx)), "block expression expected as '%.*js' body", HAK_CNODE_GET_TOKLEN(ctx), HAK_CNODE_GET_TOKPTR(ctx) ); return -1; @@ -590,7 +593,7 @@ static int check_block_expression_as_body (hak_t* hak, hak_cnode_t* c, const hak } hak_setsynerrbfmt( - hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(cdr), HAK_NULL, + hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(cdr), "redundant expression prohibited after '%.*js' body", HAK_CNODE_GET_TOKLEN(ctx), HAK_CNODE_GET_TOKPTR(ctx) ); @@ -1106,7 +1109,7 @@ static int push_ctlblk (hak_t* hak, const hak_loc_t* errloc, hak_ctlblk_type_t t if (hak->c->ctlblk.depth == HAK_TYPE_MAX(hak_ooi_t)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_BLKDEPTH, errloc, HAK_NULL, "control block depth too deep"); + hak_setsynerrbfmt(hak, HAK_SYNERR_BLKDEPTH, errloc, "control block depth too deep"); return -1; } @@ -1158,7 +1161,7 @@ static int push_clsblk ( if (hak->c->clsblk.depth == HAK_TYPE_MAX(hak_ooi_t)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_BLKDEPTH, errloc, HAK_NULL, "class block depth too deep"); + hak_setsynerrbfmt(hak, HAK_SYNERR_BLKDEPTH, errloc, "class block depth too deep"); return -1; } @@ -1242,7 +1245,7 @@ static int push_funblk (hak_t* hak, const hak_loc_t* errloc, HAK_ASSERT(hak, hak->c->funblk.depth >= -1); if (hak->c->funblk.depth == HAK_TYPE_MAX(hak_ooi_t)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_BLKDEPTH, errloc, HAK_NULL, "function block depth too deep"); + hak_setsynerrbfmt(hak, HAK_SYNERR_BLKDEPTH, errloc, "function block depth too deep"); return -1; } @@ -1528,7 +1531,7 @@ static int collect_vardcl_for_class (hak_t* hak, hak_cnode_t* obj, hak_cnode_t** { synerr_varname: hak_setsynerrbfmt( - hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(var), HAK_NULL, + hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(var), "not variable name '%.*js'", HAK_CNODE_GET_TOKLEN(var), HAK_CNODE_GET_TOKPTR(var)); return -1; } @@ -1556,7 +1559,7 @@ static int collect_vardcl_for_class (hak_t* hak, hak_cnode_t* obj, hak_cnode_t** if (vardcl->nivars >= MAX_NCVARS) { hak_setsynerrbfmt( - hak, HAK_SYNERR_VARFLOOD, HAK_CNODE_GET_LOC(var), HAK_NULL, + hak, HAK_SYNERR_VARFLOOD, HAK_CNODE_GET_LOC(var), "too many(%zu) class variables before '%.*js'", vardcl->nivars, HAK_CNODE_GET_TOKLEN(var), HAK_CNODE_GET_TOKPTR(var)); return -1; @@ -1573,7 +1576,7 @@ static int collect_vardcl_for_class (hak_t* hak, hak_cnode_t* obj, hak_cnode_t** if (vardcl->nivars >= MAX_NIVARS) { hak_setsynerrbfmt( - hak, HAK_SYNERR_VARFLOOD, HAK_CNODE_GET_LOC(var), HAK_NULL, + hak, HAK_SYNERR_VARFLOOD, HAK_CNODE_GET_LOC(var), "too many(%zu) instance variables before '%.*js'", vardcl->nivars, HAK_CNODE_GET_TOKLEN(var), HAK_CNODE_GET_TOKPTR(var)); return -1; @@ -1607,7 +1610,7 @@ static int collect_vardcl_for_class (hak_t* hak, hak_cnode_t* obj, hak_cnode_t** if (!HAK_CNODE_IS_CONS(dcl)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(dcl), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(dcl), "redundant cdr in %hs declaration around '%.*js'", desc[enclosed], HAK_CNODE_GET_TOKLEN(dcl), HAK_CNODE_GET_TOKPTR(dcl)); return -1; @@ -1653,7 +1656,7 @@ static int collect_vardcl (hak_t* hak, hak_cnode_t* obj, hak_cnode_t** nextobj, if (!HAK_CNODE_IS_SYMBOL(var)) { hak_setsynerrbfmt( - hak, HAK_SYNERR_ARGNAME, HAK_CNODE_GET_LOC(var), HAK_NULL, + hak, HAK_SYNERR_ARGNAME, HAK_CNODE_GET_LOC(var), "invalid local variable name '%.*js'", HAK_CNODE_GET_TOKLEN(var), HAK_CNODE_GET_TOKPTR(var)); return -1; @@ -1671,7 +1674,7 @@ static int collect_vardcl (hak_t* hak, hak_cnode_t* obj, hak_cnode_t** nextobj, if (!HAK_CNODE_IS_CONS(dcl)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(dcl), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(dcl), "redundant cdr in %hs variable list around '%.*js'", desc, HAK_CNODE_GET_TOKLEN(dcl), HAK_CNODE_GET_TOKPTR(dcl)); return -1; @@ -1725,13 +1728,13 @@ static int check_if_plain_cnode (hak_t* hak, hak_cnode_t* obj, hak_cnode_t* prev { if (!obj) { - hak_setsynerrbfmt(hak, errnum, HAK_CNODE_GET_LOC(prev), HAK_NULL, + hak_setsynerrbfmt(hak, errnum, HAK_CNODE_GET_LOC(prev), "no %hs in %.*js", bname, HAK_CNODE_GET_TOKLEN(container), HAK_CNODE_GET_TOKPTR(container)); return -1; } else if (!HAK_CNODE_IS_CONS(obj)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(prev), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(prev), "redundant cdr where %.*js is expected in %.*js around '%.*js'", bname, HAK_CNODE_GET_TOKLEN(container), HAK_CNODE_GET_TOKPTR(container), HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); @@ -1835,12 +1838,12 @@ static int compile_and (hak_t* hak, hak_cnode_t* src) if (!obj) { /* no value */ - hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(src), HAK_NULL, "no expression specified in and"); + hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(src), "no expression specified in 'and'"); return -1; } else if (!HAK_CNODE_IS_CONS(obj)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), "redundant cdr in 'and' around '%.*js'", HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); return -1; } @@ -1870,7 +1873,7 @@ static HAK_INLINE int compile_and_p1 (hak_t* hak) obj = cf->operand; if (!HAK_CNODE_IS_CONS(obj)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), "redundant cdr in 'and' around '%.*js'", HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); return -1; } @@ -1931,12 +1934,12 @@ static int compile_or (hak_t* hak, hak_cnode_t* src) if (!obj) { /* no value */ - hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(src), HAK_NULL, "no expression specified in 'or'"); + hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(src), "no expression specified in 'or'"); return -1; } else if (!HAK_CNODE_IS_CONS(obj)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), "redundant cdr in 'or' around '%.*js'", HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); return -1; } @@ -1967,7 +1970,7 @@ static HAK_INLINE int compile_or_p1 (hak_t* hak) obj = cf->operand; if (!HAK_CNODE_IS_CONS(obj)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), "redundant cdr in 'or' around '%.*js'", HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); return -1; } @@ -2029,12 +2032,12 @@ static int compile_plus (hak_t* hak, hak_cnode_t* src) if (!obj) { /* no value */ - hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(src), HAK_NULL, "no expression specified in plus"); + hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(src), "no expression specified in 'plus'"); return -1; } else if (!HAK_CNODE_IS_CONS(obj)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), "redundant cdr in plus around '%.*js'", HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); return -1; } @@ -2046,13 +2049,13 @@ static int compile_plus (hak_t* hak, hak_cnode_t* src) if (!obj) { - hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(src), HAK_NULL, "no second expression specified in plus"); + hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(src), "no second expression specified in 'plus'"); return -1; } else if (!HAK_CNODE_IS_CONS(obj)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, - "redundant cdr in plus around '%.*js", HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), + "redundant cdr in 'plus' around '%.*js", HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); return -1; } @@ -2061,8 +2064,8 @@ static int compile_plus (hak_t* hak, hak_cnode_t* src) if (obj) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, - "redundant cdr in plus around '%.*js", HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), + "redundant cdr in 'plus' around '%.*js", HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); return -1; } @@ -2103,13 +2106,17 @@ static int compile_break (hak_t* hak, hak_cnode_t* src) { if (HAK_CNODE_IS_CONS(obj)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(obj), HAK_NULL, - "redundant argument in %.*js", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); + hak_cnode_t* tmp; + tmp = HAK_CNODE_CONS_CAR(obj); + hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(obj), + "excessive argument to '%.*js' around '%.*js'", + HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd), + HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp)); } else { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, - "redundant cdr in %.*js around '%.*js'", + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), + "redundant cdr in '%.*js' around '%.*js'", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd), HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); } @@ -2135,7 +2142,7 @@ static int compile_break (hak_t* hak, hak_cnode_t* src) } } - hak_setsynerrbfmt(hak, HAK_SYNERR_BREAK, HAK_CNODE_GET_LOC(src), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_BREAK, HAK_CNODE_GET_LOC(src), "%.*js outside loop", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); return -1; @@ -2174,7 +2181,7 @@ inside_loop: /* this part must no be reached. if a loop control block is found, * there must exist a COP_POST_UNTIL_BODY or COP_POST_WHILE_BODY frame */ - hak_setsynerrbfmt(hak, HAK_SYNERR_INTERN, HAK_CNODE_GET_LOC(src), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_INTERN, HAK_CNODE_GET_LOC(src), "internal error in compiling %.*js", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); return -1; } @@ -2220,12 +2227,16 @@ static int compile_continue (hak_t* hak, hak_cnode_t* src) { if (HAK_CNODE_IS_CONS(obj)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(obj), HAK_NULL, - "redundant argument in %.*js", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); + hak_cnode_t* tmp; + tmp = HAK_CNODE_CONS_CAR(obj); + hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(obj), + "excessive argument to '%.*js' around '%.*js'", + HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd), + HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp)); } else { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), "redundant cdr in %.*js around %.*js", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd), HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); @@ -2251,7 +2262,8 @@ static int compile_continue (hak_t* hak, hak_cnode_t* src) } } - hak_setsynerrbfmt(hak, HAK_SYNERR_BREAK, HAK_CNODE_GET_LOC(src), HAK_NULL, "%.*js outside loop", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); + hak_setsynerrbfmt(hak, HAK_SYNERR_BREAK, HAK_CNODE_GET_LOC(src), + "%.*js outside loop", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); return -1; inside_loop: @@ -2278,7 +2290,8 @@ inside_loop: /* this part must no be reached. if a loop control block is found, * there must exist a COP_POST_UNTIL_BODY or COP_POST_WHILE_BODY frame */ - hak_setsynerrbfmt(hak, HAK_SYNERR_INTERN, HAK_CNODE_GET_LOC(src), HAK_NULL, "internal error in compiling %.*js", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); + hak_setsynerrbfmt(hak, HAK_SYNERR_INTERN, HAK_CNODE_GET_LOC(src), + "internal error in compiling %.*js", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); return -1; } @@ -2312,7 +2325,7 @@ static int compile_expression_block (hak_t* hak, hak_cnode_t* src, const hak_bch obj = HAK_CNODE_CONS_CDR(src); /* expression list after it */ if (obj && !HAK_CNODE_IS_CONS(obj)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), "redundant cdr in %.*js around %.*js", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd), HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); @@ -2324,7 +2337,7 @@ static int compile_expression_block (hak_t* hak, hak_cnode_t* src, const hak_bch { if (is_in_class_init_scope(hak)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_VARDCLBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VARDCLBANNED, HAK_CNODE_GET_LOC(obj), "variable declaration disallowed in class init scope"); return -1; } @@ -2342,7 +2355,7 @@ static int compile_expression_block (hak_t* hak, hak_cnode_t* src, const hak_bch * not allowed either */ hak_setsynerrbfmt( - hak, HAK_SYNERR_VARDCLBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak, HAK_SYNERR_VARDCLBANNED, HAK_CNODE_GET_LOC(obj), "variable declaration disallowed in '%hs' context", ctxname); return -1; } @@ -2358,7 +2371,7 @@ static int compile_expression_block (hak_t* hak, hak_cnode_t* src, const hak_bch if (nlvars > MAX_CODE_NBLKLVARS) { hak_setsynerrbfmt( - hak, HAK_SYNERR_VARFLOOD, HAK_CNODE_GET_LOC(tmp), HAK_NULL, + hak, HAK_SYNERR_VARFLOOD, HAK_CNODE_GET_LOC(tmp), "too many(%zu) variables in %.*js", nlvars, HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); return -1; } @@ -2472,13 +2485,13 @@ static int compile_if (hak_t* hak, hak_cnode_t* src) if (!obj) { /* no value */ - hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(src), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(src), "no conditional expression after '%.*js'", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); return -1; } else if (!HAK_CNODE_IS_CONS(obj)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), "redundant cdr in %.*js around %.*js", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd), HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); @@ -2537,7 +2550,9 @@ static HAK_INLINE int patch_nearest_post_if_body (hak_t* hak, hak_cnode_t* cmd) if (jump_offset > MAX_CODE_JUMP * 2) { - hak_setsynerrbfmt(hak, HAK_SYNERR_IFFLOOD, HAK_CNODE_GET_LOC(cmd), HAK_NULL, "code in %.*js too big - size %zu", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd), jump_offset); + hak_setsynerrbfmt(hak, HAK_SYNERR_IFFLOOD, HAK_CNODE_GET_LOC(cmd), + "code in %.*js too big - size %zu", + HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd), jump_offset); return -1; } patch_long_jump(hak, jip, jump_offset); @@ -2577,13 +2592,13 @@ static HAK_INLINE int compile_elif (hak_t* hak) if (!obj) { /* no value */ - hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(src), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(src), "no conditional expression after '%.*js'", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); return -1; } else if (!HAK_CNODE_IS_CONS(obj)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), "redundant cdr in %.*js around %.*js", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd), HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); @@ -2621,7 +2636,7 @@ static HAK_INLINE int compile_else (hak_t* hak) if (obj && !HAK_CNODE_IS_CONS(obj)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), "redundant cdr in %.*js around %.*js", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd), HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); @@ -2695,7 +2710,7 @@ static int check_class_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned i if (class_name) { hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), HAK_NULL, + hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), "empty attribute list on '%.*js' for '%.*js'", HAK_CNODE_GET_TOKLEN(class_name), HAK_CNODE_GET_TOKPTR(class_name), HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); @@ -2703,7 +2718,7 @@ static int check_class_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned i else { hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), HAK_NULL, + hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), "empty attribute list on unnamed class for '%.*js'", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); } @@ -2731,7 +2746,7 @@ static int check_class_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned i if (!HAK_CNODE_IS_TYPED(attr, HAK_CNODE_SYMLIT)) { hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr), HAK_NULL, + hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr), "invalid class attribute name '%.*js'", toklen, tokptr); return -1; } @@ -2762,7 +2777,7 @@ static int check_class_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned i if (!!((ct >> attr_tab[i].shifts) & (attr_tab[i].mask | attr_tab[i].value))) { hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr), HAK_NULL, + hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr), "conflicting or duplicate class attribute name '#%.*js'", toklen, tokptr); return -1; } @@ -2778,7 +2793,7 @@ static int check_class_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned i if (lim <= 0) { hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr), HAK_NULL, + hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr), "unrecognized class attribute name '#%.*js'", toklen, tokptr); return -1; } @@ -2856,7 +2871,7 @@ static int compile_class (hak_t* hak, hak_cnode_t* src) if (!HAK_CNODE_IS_SYMBOL(tmp)) { hak_setsynerrbfmt( - hak, HAK_SYNERR_CLASS, HAK_CNODE_GET_LOC(tmp), HAK_NULL, + hak, HAK_SYNERR_CLASS, HAK_CNODE_GET_LOC(tmp), "invalid class name '%.*js' for '%.*js'", HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp), HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); @@ -2873,7 +2888,7 @@ static int compile_class (hak_t* hak, hak_cnode_t* src) if (class_name) { hak_setsynerrbfmt( - hak, HAK_SYNERR_CLASS, HAK_CNODE_GET_LOC(src), HAK_NULL, + hak, HAK_SYNERR_CLASS, HAK_CNODE_GET_LOC(src), "incomplete definition of '%.*js' for '%.*js'", HAK_CNODE_GET_TOKLEN(class_name), HAK_CNODE_GET_TOKPTR(class_name), HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); @@ -2881,7 +2896,7 @@ static int compile_class (hak_t* hak, hak_cnode_t* src) else { hak_setsynerrbfmt( - hak, HAK_SYNERR_CLASS, HAK_CNODE_GET_LOC(src), HAK_NULL, + hak, HAK_SYNERR_CLASS, HAK_CNODE_GET_LOC(src), "incomplete defintion of unnamed class for '%.*js'", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); } @@ -2900,7 +2915,7 @@ static int compile_class (hak_t* hak, hak_cnode_t* src) if (!obj || !HAK_CNODE_IS_CONS(obj)) { hak_setsynerrbfmt( - hak, HAK_SYNERR_CLASS, HAK_CNODE_GET_LOC(marker), HAK_NULL, + hak, HAK_SYNERR_CLASS, HAK_CNODE_GET_LOC(marker), "no expression or declaration after %.*js", HAK_CNODE_GET_TOKLEN(marker), HAK_CNODE_GET_TOKPTR(marker)); return -1; @@ -2913,7 +2928,7 @@ static int compile_class (hak_t* hak, hak_cnode_t* src) if (HAK_CNODE_IS_FOR_DATA_SIMPLE(superclass) || HAK_CNODE_IS_FOR_LANG(superclass)) { hak_setsynerrbfmt( - hak, HAK_SYNERR_CLASS, HAK_CNODE_GET_LOC(marker), HAK_NULL, + hak, HAK_SYNERR_CLASS, HAK_CNODE_GET_LOC(marker), "invalid superclass name '%.*js' after '%.*js' for '%.*js'", HAK_CNODE_GET_TOKLEN(superclass), HAK_CNODE_GET_TOKPTR(superclass), HAK_CNODE_GET_TOKLEN(marker), HAK_CNODE_GET_TOKPTR(marker), @@ -2922,7 +2937,7 @@ static int compile_class (hak_t* hak, hak_cnode_t* src) else { hak_setsynerrbfmt( - hak, HAK_SYNERR_CLASS, HAK_CNODE_GET_LOC(marker), HAK_NULL, + hak, HAK_SYNERR_CLASS, HAK_CNODE_GET_LOC(marker), "no valid superclass name after '%.*js' for '%.*js'", HAK_CNODE_GET_TOKLEN(marker), HAK_CNODE_GET_TOKPTR(marker), HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); @@ -3186,8 +3201,7 @@ static int check_fun_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned int /* don't allow empty attribute list */ if (class_name && fun_name) { - hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), "empty attribute list on '%.*js:%.*js' for '%.*js'", HAK_CNODE_GET_TOKLEN(class_name), HAK_CNODE_GET_TOKPTR(class_name), HAK_CNODE_GET_TOKLEN(fun_name), HAK_CNODE_GET_TOKPTR(fun_name), @@ -3195,16 +3209,14 @@ static int check_fun_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned int } else if (fun_name) { - hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), "empty attribute list on '%.*js' for '%.*js'", HAK_CNODE_GET_TOKLEN(fun_name), HAK_CNODE_GET_TOKPTR(fun_name), HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); } else { - hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), "empty attribute list on unnamed function for '%.*js'", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); } @@ -3227,8 +3239,7 @@ static int check_fun_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned int if (!HAK_CNODE_IS_TYPED(a, HAK_CNODE_SYMLIT)) { - hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(a), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(a), "invalid function attribute name '%.*js'", toklen, tokptr); return -1; } @@ -3239,8 +3250,7 @@ static int check_fun_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned int if (ft != FUN_IM) { conflicting: - hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(a), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(a), "conflicting function attribute name '#%.*js'", toklen, tokptr); return -1; } @@ -3254,8 +3264,7 @@ static int check_fun_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned int } else { - hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(a), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(a), "unrecognized function attribute name '#%.*js'", toklen, tokptr); return -1; } @@ -3330,8 +3339,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src) next = HAK_CNODE_CONS_CDR(next); if (!next) { - hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(fun_name), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(fun_name), "no function name or arguments after attribute list for '%.*js'", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); return -1; @@ -3349,8 +3357,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src) next = HAK_CNODE_CONS_CDR(next); if (!next) { - hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(fun_name), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(fun_name), "function name '%.*js' not followed by ( or : for '%.*js'", HAK_CNODE_GET_TOKLEN(fun_name), HAK_CNODE_GET_TOKPTR(fun_name), HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); @@ -3367,8 +3374,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src) next = HAK_CNODE_CONS_CDR(next); if (!next) { - hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(class_name), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(class_name), "no function name after class name '%.*js:' for '%.*js'", HAK_CNODE_GET_TOKLEN(class_name), HAK_CNODE_GET_TOKPTR(class_name), HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); @@ -3378,8 +3384,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src) tmp = HAK_CNODE_CONS_CAR(next); if (!is_cnode_eligible_for_fun_name_after_colon(tmp)) { - hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(tmp), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(tmp), "invalid function name '%.*js' after '%.*js:' for '%.*js'", HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp), HAK_CNODE_GET_TOKLEN(class_name), HAK_CNODE_GET_TOKPTR(class_name), @@ -3391,8 +3396,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src) next = HAK_CNODE_CONS_CDR(next); if (!next) { - hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(fun_name), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(fun_name), "function name '%.*js:%.*js' not followed by ( for '%.*js'", HAK_CNODE_GET_TOKLEN(class_name), HAK_CNODE_GET_TOKPTR(class_name), HAK_CNODE_GET_TOKLEN(fun_name), HAK_CNODE_GET_TOKPTR(fun_name), @@ -3404,8 +3408,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src) if (is_in_class_init_scope(hak)) { - hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(fun_name), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(fun_name), "class name '%.*js' before :'%.*js' prohibited in class initialization context", HAK_CNODE_GET_TOKLEN(class_name), HAK_CNODE_GET_TOKPTR(class_name), HAK_CNODE_GET_TOKLEN(fun_name), HAK_CNODE_GET_TOKPTR(fun_name)); @@ -3429,16 +3432,14 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src) { if (fun_name) { - hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(cmd), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(cmd), "no function body after argument list of function '%.*js' for '%.*js'", HAK_CNODE_GET_TOKLEN(fun_name), HAK_CNODE_GET_TOKPTR(fun_name), HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); } else { - hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(cmd), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(cmd), "unnamed function not followed by function body for '%.*js'", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); } @@ -3450,16 +3451,14 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src) { if (fun_name) { - hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(cmd), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(cmd), "function '%.*js' defined with '%.*js' prohibited in class initialziation context", HAK_CNODE_GET_TOKLEN(fun_name), HAK_CNODE_GET_TOKPTR(fun_name), HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); } else { - hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(cmd), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(cmd), "unnamed function defined with '%.*js' prohibited in class initialziation context", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); } @@ -3475,8 +3474,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src) * fun() {} ## this is prohibited in this if check * } */ - hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(cmd), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(cmd), "unnamed function defined with '%.*js' prohibited in class initialziation context", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); return -1; @@ -3492,16 +3490,14 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src) */ if (fun_name) { - hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(tmp), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(tmp), "'%.*js' not followed by ( but followed by '%.*js'", HAK_CNODE_GET_TOKLEN(fun_name), HAK_CNODE_GET_TOKPTR(fun_name), HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp)); } else { - hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(tmp), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(tmp), "invalid function name '%.*js' for '%.*js'", HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp), HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); @@ -3512,8 +3508,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src) else /* !next */ { /* nothing after 'fun' (e.g. fun ) */ - hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(cmd), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(cmd), "'%.*js' not followed by name or (", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); return -1; @@ -3538,15 +3533,13 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src) { if (fun_name) { - hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), "attribute list prohibited on plain function '%.*js'", HAK_CNODE_GET_TOKLEN(fun_name), HAK_CNODE_GET_TOKPTR(fun_name)); } else { - hak_setsynerrbfmt( - hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), "attribute list prohibited on unnamed function for '%.*js'", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); } @@ -3591,8 +3584,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src) { /* in 'fun x (x :: 20) { }', '20' is not a valid return variable name. * in 'fun x (x :: if) { }', 'if' is not a valid return variable name. */ - hak_setsynerrbfmt( - hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(arg), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(arg), "invalid return variable '%.*js' for '%.*js'", HAK_CNODE_GET_TOKLEN(arg), HAK_CNODE_GET_TOKPTR(arg), HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); @@ -3612,8 +3604,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src) { /* in 'fun x (... a) {}', 'a' is an unexpected token. * only ')' or '::' can follow ... */ - hak_setsynerrbfmt( - hak, HAK_SYNERR_CNODE, HAK_CNODE_GET_LOC(arg), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_CNODE, HAK_CNODE_GET_LOC(arg), "unexpected token '%.*js' after '...' for '%.*js'", HAK_CNODE_GET_TOKLEN(arg), HAK_CNODE_GET_TOKPTR(arg), HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); @@ -3632,8 +3623,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src) } else if (!HAK_CNODE_IS_SYMBOL(arg)) { - hak_setsynerrbfmt( - hak, HAK_SYNERR_ARGNAME, HAK_CNODE_GET_LOC(arg), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ARGNAME, HAK_CNODE_GET_LOC(arg), "invalid argument name '%.*js' for '%.*js'", HAK_CNODE_GET_TOKLEN(arg), HAK_CNODE_GET_TOKPTR(arg), HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); @@ -3651,7 +3641,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src) if (!HAK_CNODE_IS_CONS(dcl)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(dcl), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(dcl), "redundant cdr in argument list in %.*js around %.*js", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd), HAK_CNODE_GET_TOKLEN(dcl), HAK_CNODE_GET_TOKPTR(dcl)); @@ -3663,11 +3653,10 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src) if ((fun_type & 0xFF) == FUN_IM && fun_name && HAK_CNODE_IS_BINOP(fun_name) && (is_in_class_init_scope(hak) || class_name) && nargs != 1) { - hak_setsynerrbfmt( - hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(arg_list), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(arg_list), "only one argument expected for '%.*js%hs%.*js'", (class_name? HAK_CNODE_GET_TOKLEN(class_name): 0), - (class_name? HAK_CNODE_GET_TOKPTR(class_name): HAK_NULL), + (class_name? HAK_CNODE_GET_TOKPTR(class_name): _empty_str_), (class_name? ":": ""), HAK_CNODE_GET_TOKLEN(fun_name), HAK_CNODE_GET_TOKPTR(fun_name)); return -1; @@ -3679,8 +3668,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src) * block arguments, evaluation which is done by message passing * limits the number of arguments that can be passed. so the * check is implemented */ - hak_setsynerrbfmt( - hak, HAK_SYNERR_ARGFLOOD, HAK_CNODE_GET_LOC(arg_list), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ARGFLOOD, HAK_CNODE_GET_LOC(arg_list), "too many(%zu) arguments in %.*js", nargs, HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); return -1; @@ -3688,8 +3676,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src) if (nrvars > MAX_CODE_NBLKLVARS) { - hak_setsynerrbfmt( - hak, HAK_SYNERR_VARFLOOD, HAK_CNODE_GET_LOC(arg_list), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VARFLOOD, HAK_CNODE_GET_LOC(arg_list), "too many(%zu) return variables in %.*js", nrvars, HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); return -1; @@ -3789,7 +3776,7 @@ static int check_var_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned int if (class_name) { hak_setsynerrbfmt( - hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(attr_list), HAK_NULL, + hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(attr_list), "empty attribute list on '%.*js' in '%.*js' for '%.*js'", HAK_CNODE_GET_TOKLEN(var_name), HAK_CNODE_GET_TOKPTR(var_name), HAK_CNODE_GET_TOKLEN(class_name), HAK_CNODE_GET_TOKPTR(class_name), @@ -3798,7 +3785,7 @@ static int check_var_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned int else { hak_setsynerrbfmt( - hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(attr_list), HAK_NULL, + hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(attr_list), "empty attribute list on '%.*js' in unnamed class for '%.*js'", HAK_CNODE_GET_TOKLEN(var_name), HAK_CNODE_GET_TOKPTR(var_name), HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); @@ -3822,8 +3809,7 @@ static int check_var_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned int if (!HAK_CNODE_IS_TYPED(a, HAK_CNODE_SYMLIT)) { - hak_setsynerrbfmt( - hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(a), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(a), "invalid variable attribute name '%.*js'", toklen, tokptr); return -1; } @@ -3834,8 +3820,7 @@ static int check_var_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned int if (ft != VAR_INST) { conflicting: - hak_setsynerrbfmt( - hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(a), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(a), "conflicting variable attribute name '#%.*js'", toklen, tokptr); return -1; } @@ -3843,8 +3828,7 @@ static int check_var_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned int } else { - hak_setsynerrbfmt( - hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(a), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(a), "unrecognized variable attribute name '#%.*js'", toklen, tokptr); return -1; } @@ -3877,8 +3861,7 @@ static int compile_var (hak_t* hak, hak_cnode_t* src) if (!next) { - hak_setsynerrbfmt( - hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(cmd), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(cmd), "'%.*js' not followed by name or (", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); goto oops; @@ -3890,8 +3873,7 @@ static int compile_var (hak_t* hak, hak_cnode_t* src) if (!is_in_class_init_scope(hak)) { - hak_setsynerrbfmt( - hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(cmd), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(cmd), "'%.*js' prohibited in this context", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); goto oops; @@ -3907,8 +3889,7 @@ static int compile_var (hak_t* hak, hak_cnode_t* src) next = HAK_CNODE_CONS_CDR(next); if (!next) { - hak_setsynerrbfmt( - hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(attr_list), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(attr_list), "no name after attribute list for '%.*js'", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); goto oops; @@ -3930,8 +3911,7 @@ static int compile_var (hak_t* hak, hak_cnode_t* src) { if (cbi->nivars >= MAX_NIVARS) { - hak_setsynerrbfmt( - hak, HAK_SYNERR_VARFLOOD, HAK_CNODE_GET_LOC(tmp), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VARFLOOD, HAK_CNODE_GET_LOC(tmp), "too many(%zu) instance variables before '%.*js'", cbi->nivars, HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp)); goto oops; @@ -3944,8 +3924,7 @@ static int compile_var (hak_t* hak, hak_cnode_t* src) { if (cbi->ncvars >= MAX_NCVARS) { - hak_setsynerrbfmt( - hak, HAK_SYNERR_VARFLOOD, HAK_CNODE_GET_LOC(tmp), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VARFLOOD, HAK_CNODE_GET_LOC(tmp), "too many(%zu) class variables before '%.*js'", cbi->ncvars, HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp)); goto oops; @@ -3964,8 +3943,7 @@ static int compile_var (hak_t* hak, hak_cnode_t* src) else { not_ident: - hak_setsynerrbfmt( - hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(tmp), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(tmp), "invalid variable name '%.*js' for '%.*js'", HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp), HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); @@ -4023,8 +4001,7 @@ static int compile_return (hak_t* hak, hak_cnode_t* src, int ret_from_home) if (ret_from_home) { - hak_setsynerrbfmt( - hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(src), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(src), "'%.*js' not compatible with return variables", HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp)); return -1; @@ -4033,7 +4010,7 @@ static int compile_return (hak_t* hak, hak_cnode_t* src, int ret_from_home) /* if a return variable are specified in the current function block, the return statement must not be followed by a return value */ if (obj) { - hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(src), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(src), "use of return value in '%.*js' not compatible with return variables", HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp)); return -1; @@ -4050,14 +4027,14 @@ static int compile_return (hak_t* hak, hak_cnode_t* src, int ret_from_home) /* TODO: should i allow (return)? does it return the last value on the stack? */ /* no value */ hak_cnode_t* tmp = HAK_CNODE_CONS_CAR(src); - hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(src), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(src), "no value specified for '%.*js'", HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp)); return -1; } else if (!HAK_CNODE_IS_CONS(obj)) { hak_cnode_t* tmp = HAK_CNODE_CONS_CAR(src); - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), "redundant cdr in '%.*js' around '%.*js'", HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp), HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); @@ -4071,7 +4048,7 @@ static int compile_return (hak_t* hak, hak_cnode_t* src, int ret_from_home) { hak_cnode_t* tmp = HAK_CNODE_CONS_CAR(src); hak_cnode_t* next = HAK_CNODE_CONS_CAR(obj); - hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(obj), "excessive argument to '%.*js' around '%.*js'", HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp), HAK_CNODE_GET_TOKLEN(next), HAK_CNODE_GET_TOKPTR(next)); @@ -4103,13 +4080,13 @@ static int compile_set (hak_t* hak, hak_cnode_t* src) if (!obj) { - hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(src), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(src), "no variable name in %.*js", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); return -1; } else if (!HAK_CNODE_IS_CONS(obj)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), "redundant cdr in %.*js around %.*js", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd), HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); @@ -4119,7 +4096,7 @@ static int compile_set (hak_t* hak, hak_cnode_t* src) var = HAK_CNODE_CONS_CAR(obj); if (!HAK_CNODE_IS_SYMBOL(var) && !HAK_CNODE_IS_DSYMBOL_CLA(var)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(var), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(var), "variable name not symbol in %.*js around %.*js", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd), HAK_CNODE_GET_TOKLEN(var), HAK_CNODE_GET_TOKPTR(var)); @@ -4130,7 +4107,7 @@ static int compile_set (hak_t* hak, hak_cnode_t* src) if (!obj) { hak_setsynerrbfmt( - hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(var), HAK_NULL, + hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(var), "no value after '%.*js' for '%.*js'", HAK_CNODE_GET_TOKLEN(var), HAK_CNODE_GET_TOKPTR(var), HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); @@ -4138,8 +4115,8 @@ static int compile_set (hak_t* hak, hak_cnode_t* src) } else if (!HAK_CNODE_IS_CONS(obj)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, - "redundant cdr in %.*js around %.*js", + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), + "redundant cdr in '%.*js' around '%.*js'", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd), HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); return -1; @@ -4151,7 +4128,7 @@ static int compile_set (hak_t* hak, hak_cnode_t* src) if (obj) { hak_cnode_t* next = HAK_CNODE_CONS_CAR(obj); - hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(obj), "too many arguments to '%.*js' around '%.*js'", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd), HAK_CNODE_GET_TOKLEN(next), HAK_CNODE_GET_TOKPTR(next)); @@ -4167,7 +4144,7 @@ static int compile_set (hak_t* hak, hak_cnode_t* src) { if (HAK_CNODE_IS_DSYMBOL_CLA(var)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAMEUNKNOWN, HAK_CNODE_GET_LOC(var), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAMEUNKNOWN, HAK_CNODE_GET_LOC(var), "unknown class-level variable name '%.*js'", HAK_CNODE_GET_TOKLEN(var), HAK_CNODE_GET_TOKPTR(var)); return -1; @@ -4205,13 +4182,14 @@ static int compile_set_r (hak_t* hak, hak_cnode_t* src) if (!obj) { - hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(src), HAK_NULL, - "no variable name in '%.*js'", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); + hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(src), + "no variable name in '%.*js'", + HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); return -1; } else if (!HAK_CNODE_IS_CONS(obj)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), "redundant cdr in '%.*js' around '%.*js'", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd), HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); @@ -4226,7 +4204,7 @@ static int compile_set_r (hak_t* hak, hak_cnode_t* src) if (!HAK_CNODE_IS_SYMBOL(var)) { if (nvars > 0) break; - hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(var), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(var), "variable name not symbol in '%.*js' around '%.*js'", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd), HAK_CNODE_GET_TOKLEN(var), HAK_CNODE_GET_TOKPTR(var)); @@ -4242,7 +4220,7 @@ static int compile_set_r (hak_t* hak, hak_cnode_t* src) if (!obj) { hak_setsynerrbfmt( - hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(var), HAK_NULL, + hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(var), "no value after '%.*js' for '%.*js'", HAK_CNODE_GET_TOKLEN(var), HAK_CNODE_GET_TOKPTR(var), HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); @@ -4250,7 +4228,7 @@ static int compile_set_r (hak_t* hak, hak_cnode_t* src) } else if (!HAK_CNODE_IS_CONS(obj)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), "redundant cdr in '%.*js' around '%.*js'", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd), HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); @@ -4262,7 +4240,7 @@ static int compile_set_r (hak_t* hak, hak_cnode_t* src) obj = HAK_CNODE_CONS_CDR(obj); if (obj) { - hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(obj), "too many arguments to '%.*js' around '%.*js'", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd), HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); @@ -4286,7 +4264,7 @@ static int compile_set_r (hak_t* hak, hak_cnode_t* src) { if (HAK_CNODE_IS_DSYMBOL_CLA(var)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAMEUNKNOWN, HAK_CNODE_GET_LOC(var), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAMEUNKNOWN, HAK_CNODE_GET_LOC(var), "unknown class-level variable name '%.*js'", HAK_CNODE_GET_TOKLEN(var), HAK_CNODE_GET_TOKPTR(var)); return -1; } @@ -4353,13 +4331,13 @@ static int compile_try (hak_t* hak, hak_cnode_t* src) if (!obj) { /* no value */ - hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(src), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(src), "no expression specified in '%.*js'", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); return -1; } else if (!HAK_CNODE_IS_CONS(obj)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), "redundant cdr in '%.*js' around '%.*js'", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd), HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); @@ -4415,7 +4393,7 @@ static HAK_INLINE int patch_nearest_post_try (hak_t* hak, hak_ooi_t* catch_skip_ if (block_code_size > MAX_CODE_JUMP * 2) { - hak_setsynerrbfmt(hak, HAK_SYNERR_BLKFLOOD, HAK_CNODE_GET_LOC(cf->operand), HAK_NULL, "code too big - size %zu", block_code_size); + hak_setsynerrbfmt(hak, HAK_SYNERR_BLKFLOOD, HAK_CNODE_GET_LOC(cf->operand), "code too big - size %zu", block_code_size); return -1; } patch_long_jump(hak, jip, block_code_size); /* patch TRY_ENTER */ @@ -4446,13 +4424,13 @@ static HAK_INLINE int compile_catch (hak_t* hak) if (!obj) { /* TODO: change error code */ - hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(src), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(src), "no exception variable for '%.*js'", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); return -1; } else if (!HAK_CNODE_IS_CONS(obj)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), "redundant cdr in '%.*js' around '%.*js'", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd), HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); @@ -4463,7 +4441,7 @@ static HAK_INLINE int compile_catch (hak_t* hak) if (!HAK_CNODE_IS_CONS_CONCODED(exarg, HAK_CONCODE_XLIST) || hak_countcnodecons(hak, exarg) != 1) { hak_setsynerrbfmt( - hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(exarg), HAK_NULL, + hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(exarg), "improper exception variable for '%.*js'", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); return -1; @@ -4473,7 +4451,7 @@ static HAK_INLINE int compile_catch (hak_t* hak) if (!HAK_CNODE_IS_SYMBOL(exarg)) { hak_setsynerrbfmt( - hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(exarg), HAK_NULL, + hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(exarg), "invalid exception variable name '%.*js' for '%.*js'", HAK_CNODE_GET_TOKLEN(exarg), HAK_CNODE_GET_TOKPTR(exarg), HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); @@ -4567,7 +4545,7 @@ static HAK_INLINE int post_catch (hak_t* hak) if (block_code_size > MAX_CODE_JUMP * 2) { - hak_setsynerrbfmt(hak, HAK_SYNERR_BLKFLOOD, HAK_CNODE_GET_LOC(cf->operand), HAK_NULL, "code too big - size %zu", block_code_size); + hak_setsynerrbfmt(hak, HAK_SYNERR_BLKFLOOD, HAK_CNODE_GET_LOC(cf->operand), "code too big - size %zu", block_code_size); return -1; } @@ -4597,7 +4575,7 @@ static int compile_throw (hak_t* hak, hak_cnode_t* src) /* no value */ hak_cnode_t* tmp = HAK_CNODE_CONS_CAR(src); hak_setsynerrbfmt( - hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(src), HAK_NULL, + hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(src), "no value or expression after '%.*js'", HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp)); return -1; @@ -4605,7 +4583,7 @@ static int compile_throw (hak_t* hak, hak_cnode_t* src) else if (!HAK_CNODE_IS_CONS(obj)) { hak_cnode_t* tmp = HAK_CNODE_CONS_CAR(src); - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), "redundant cdr in '%.*js' around '%.*js'", HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp), HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); @@ -4618,7 +4596,7 @@ static int compile_throw (hak_t* hak, hak_cnode_t* src) if (obj) { hak_cnode_t* tmp = HAK_CNODE_CONS_CAR(src); - hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(obj), "excessive argument in '%.*js' around '%.*js'", HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp), HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); @@ -4655,13 +4633,13 @@ static int compile_while (hak_t* hak, hak_cnode_t* src, int next_cop) if (!obj) { /* no value */ - hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(src), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(src), "no loop condition specified in %.*js", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); return -1; } else if (!HAK_CNODE_IS_CONS(obj)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), "redundant cdr around '%.*js' in '%.%js'", HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj), HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); @@ -4702,7 +4680,7 @@ static int compile_cons_array_expression (hak_t* hak, hak_cnode_t* obj) nargs = hak_countcnodecons(hak, obj); if (nargs > MAX_CODE_PARAM) { - hak_setsynerrbfmt(hak, HAK_SYNERR_ARGFLOOD, HAK_CNODE_GET_LOC(obj), HAK_NULL, "too many(%zd) elements in array", nargs); + hak_setsynerrbfmt(hak, HAK_SYNERR_ARGFLOOD, HAK_CNODE_GET_LOC(obj), "too many(%zd) elements in array", nargs); return -1; } @@ -4728,7 +4706,7 @@ static int compile_cons_bytearray_expression (hak_t* hak, hak_cnode_t* obj, int nargs = hak_countcnodecons(hak, obj); if (nargs > MAX_CODE_PARAM) { - hak_setsynerrbfmt(hak, HAK_SYNERR_ARGFLOOD, HAK_CNODE_GET_LOC(obj), HAK_NULL, "too many(%zd) elements in byte-array", nargs); + hak_setsynerrbfmt(hak, HAK_SYNERR_ARGFLOOD, HAK_CNODE_GET_LOC(obj), "too many(%zd) elements in byte-array", nargs); return -1; } @@ -4755,7 +4733,7 @@ static int compile_cons_dic_expression (hak_t* hak, hak_cnode_t* obj) nargs = hak_countcnodecons(hak, obj); if (nargs > MAX_CODE_PARAM) { - hak_setsynerrbfmt(hak, HAK_SYNERR_ARGFLOOD, HAK_CNODE_GET_LOC(obj), HAK_NULL, "too many(%zd) elements in dictionary", nargs); + hak_setsynerrbfmt(hak, HAK_SYNERR_ARGFLOOD, HAK_CNODE_GET_LOC(obj), "too many(%zd) elements in dictionary", nargs); return -1; } @@ -4830,7 +4808,7 @@ static int compile_cons_alist_expression (hak_t* hak, hak_cnode_t* cmd) { if (HAK_CNODE_IS_DSYMBOL_CLA(var)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAMEUNKNOWN, HAK_CNODE_GET_LOC(var), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAMEUNKNOWN, HAK_CNODE_GET_LOC(var), "unknown class-level variable name '%.*js'", HAK_CNODE_GET_TOKLEN(var), HAK_CNODE_GET_TOKPTR(var)); return -1; } @@ -4882,7 +4860,7 @@ static int compile_cons_alist_expression (hak_t* hak, hak_cnode_t* cmd) /* not found */ if (HAK_CNODE_IS_DSYMBOL_CLA(var)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAMEUNKNOWN, HAK_CNODE_GET_LOC(var), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAMEUNKNOWN, HAK_CNODE_GET_LOC(var), "unknown class-level variable name '%.*js'", HAK_CNODE_GET_TOKLEN(var), HAK_CNODE_GET_TOKPTR(var)); return -1; } @@ -4942,12 +4920,12 @@ static int compile_cons_xlist_expression (hak_t* hak, hak_cnode_t* obj, int nret goto done; case HAK_CNODE_ELIF: /* elif without if */ - hak_setsynerrbfmt(hak, HAK_SYNERR_ELIF, HAK_CNODE_GET_LOC(car), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ELIF, HAK_CNODE_GET_LOC(car), "%.*js without if", HAK_CNODE_GET_TOKLEN(car), HAK_CNODE_GET_TOKPTR(car)); return -1; case HAK_CNODE_ELSE: /* else without if */ - hak_setsynerrbfmt(hak, HAK_SYNERR_ELSE, HAK_CNODE_GET_LOC(car), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ELSE, HAK_CNODE_GET_LOC(car), "%.*js without if", HAK_CNODE_GET_TOKLEN(car), HAK_CNODE_GET_TOKPTR(car)); return -1; @@ -4960,7 +4938,7 @@ static int compile_cons_xlist_expression (hak_t* hak, hak_cnode_t* obj, int nret goto done; case HAK_CNODE_CATCH: /* catch without try */ - hak_setsynerrbfmt(hak, HAK_SYNERR_CATCH, HAK_CNODE_GET_LOC(car), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_CATCH, HAK_CNODE_GET_LOC(car), "%.*js without try", HAK_CNODE_GET_TOKLEN(car), HAK_CNODE_GET_TOKPTR(car)); return -1; @@ -5054,15 +5032,16 @@ static int compile_cons_xlist_expression (hak_t* hak, hak_cnode_t* obj, int nret if (!HAK_CNODE_IS_CONS(cdr)) { /* (funname . 10) */ - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(cdr), HAK_NULL, - "redundant cdr in function call around '%.*js'", HAK_CNODE_GET_TOKLEN(cdr), HAK_CNODE_GET_TOKPTR(cdr)); + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(cdr), + "redundant cdr in function call around '%.*js'", + HAK_CNODE_GET_TOKLEN(cdr), HAK_CNODE_GET_TOKPTR(cdr)); return -1; } nargs = hak_countcnodecons(hak, cdr); if (nargs > MAX_CODE_PARAM) { - hak_setsynerrbfmt(hak, HAK_SYNERR_ARGFLOOD, HAK_CNODE_GET_LOC(cdr), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ARGFLOOD, HAK_CNODE_GET_LOC(cdr), "too many(%zd) parameters in function call", nargs); return -1; } @@ -5083,7 +5062,7 @@ static int compile_cons_xlist_expression (hak_t* hak, hak_cnode_t* obj, int nret { if (nargs < sdv->slot[1] || nargs > sdv->slot[2]) { - hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(car), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(car), "parameters count(%zd) mismatch in function call - %.*js - expecting %zu-%zu parameters", nargs, HAK_CNODE_GET_TOKLEN(car), HAK_CNODE_GET_TOKPTR(car), sdv->slot[1], sdv->slot[2]); return -1; @@ -5108,7 +5087,7 @@ static int compile_cons_xlist_expression (hak_t* hak, hak_cnode_t* obj, int nret } else { - hak_setsynerrbfmt(hak, HAK_SYNERR_CALLABLE, HAK_CNODE_GET_LOC(car), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_CALLABLE, HAK_CNODE_GET_LOC(car), "invalid callable '%.*js' in function call", HAK_CNODE_GET_TOKLEN(car), HAK_CNODE_GET_TOKPTR(car)); return -1; @@ -5150,14 +5129,14 @@ static int compile_cons_mlist_expression (hak_t* hak, hak_cnode_t* obj, hak_ooi_ if (!cdr) { /* thie part may never be reached as the reader ensures this doesn't happen */ - hak_setsynerrbfmt(hak, HAK_SYNERR_CALLABLE, HAK_CNODE_GET_LOC(car), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_CALLABLE, HAK_CNODE_GET_LOC(car), "missing message for '%.*js'", HAK_CNODE_GET_TOKLEN(car), HAK_CNODE_GET_TOKPTR(car)); return -1; } if (!HAK_CNODE_IS_CONS(cdr)) { /* ( . 10) */ - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(cdr), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(cdr), "redundant cdr in message send around '%.*js'", HAK_CNODE_GET_TOKLEN(cdr), HAK_CNODE_GET_TOKPTR(cdr)); return -1; } @@ -5187,7 +5166,7 @@ static int compile_cons_mlist_expression (hak_t* hak, hak_cnode_t* obj, hak_ooi_ } else { - hak_setsynerrbfmt(hak, HAK_SYNERR_MESSAGE, HAK_CNODE_GET_LOC(car), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_MESSAGE, HAK_CNODE_GET_LOC(car), "invalid message '%.*js'", HAK_CNODE_GET_TOKLEN(car), HAK_CNODE_GET_TOKPTR(car)); return -1; } @@ -5203,7 +5182,7 @@ static int compile_cons_mlist_expression (hak_t* hak, hak_cnode_t* obj, hak_ooi_ if (!HAK_CNODE_IS_CONS(cdr)) { /* (funname . 10) */ - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(cdr), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(cdr), "redundant cdr in function call around '%.*js'", HAK_CNODE_GET_TOKLEN(cdr), HAK_CNODE_GET_TOKPTR(cdr)); return -1; @@ -5212,7 +5191,8 @@ static int compile_cons_mlist_expression (hak_t* hak, hak_cnode_t* obj, hak_ooi_ nargs = hak_countcnodecons(hak, cdr); if (nargs > MAX_CODE_PARAM) { - hak_setsynerrbfmt(hak, HAK_SYNERR_ARGFLOOD, HAK_CNODE_GET_LOC(cdr), HAK_NULL, "too many(%zd) parameters in function call", nargs); + hak_setsynerrbfmt(hak, HAK_SYNERR_ARGFLOOD, HAK_CNODE_GET_LOC(cdr), + "too many(%zd) parameters in function call", nargs); return -1; } } @@ -5318,7 +5298,7 @@ static HAK_INLINE int compile_dsymbol (hak_t* hak, hak_cnode_t* obj) * } * } */ - hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(obj), "not allowed to prefix with self in out-of-class method context around '%.*js'", HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); return -1; @@ -5331,7 +5311,7 @@ static HAK_INLINE int compile_dsymbol (hak_t* hak, hak_cnode_t* obj) { if (fbi->fun_type >> 8) /* if defined using A:xxx syntax */ { - hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(obj), "not allowed to prefix with super in out-of-class method context around '%.*js'", HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); return -1; @@ -5368,7 +5348,7 @@ static HAK_INLINE int compile_dsymbol (hak_t* hak, hak_cnode_t* obj) pfbase = hak_querymod(hak, HAK_CNODE_GET_TOKPTR(obj), HAK_CNODE_GET_TOKLEN(obj), &mod); if (!pfbase) { - hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(obj), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(obj), "unknown dotted symbol '%.*js'", HAK_CNODE_GET_TOKLEN(obj), HAK_CNODE_GET_TOKPTR(obj)); return -1; } @@ -5577,7 +5557,7 @@ static hak_oop_t string_to_num (hak_t* hak, hak_oocs_t* str, const hak_loc_t* lo /* if (base < 2 || base > 36) { - hak_setsynerrbfmt(hak, HAK_SYNERR_RADIX, loc, HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_RADIX, loc, "unsupported radix '%d' in radixed number '%.*js'", base, str->len, str->ptr); return HAK_NULL; }*/ @@ -5603,7 +5583,7 @@ static hak_oop_t string_to_fpdec (hak_t* hak, hak_oocs_t* str, const hak_loc_t* scale = str->len - pos - 1; if (scale > HAK_SMOOI_MAX) { - hak_setsynerrbfmt(hak, HAK_SYNERR_NUMRANGE, loc, HAK_NULL, "too many digits after decimal point around '%.*js'", str->len, str->ptr); + hak_setsynerrbfmt(hak, HAK_SYNERR_NUMRANGE, loc, "too many digits after decimal point around '%.*js'", str->len, str->ptr); return HAK_NULL; } @@ -5772,16 +5752,16 @@ redo: break; case HAK_CONCODE_VLIST: - hak_setsynerrbfmt(hak, HAK_SYNERR_VARDCLBANNED, HAK_CNODE_GET_LOC(oprnd), HAK_NULL, "variable declaration disallowed"); + hak_setsynerrbfmt(hak, HAK_SYNERR_VARDCLBANNED, HAK_CNODE_GET_LOC(oprnd), "variable declaration disallowed"); return -1; case HAK_CONCODE_TUPLE: /* [a, b] is only allowed as a lvalue or in class member varialble declaration for now */ - hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(oprnd), HAK_NULL, "tuple disallowed"); + hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(oprnd), "tuple disallowed"); return -1; default: - hak_setsynerrbfmt(hak, HAK_SYNERR_INTERN, HAK_CNODE_GET_LOC(oprnd), HAK_NULL, "internal error - unknown cons type %d", HAK_CNODE_CONS_CONCODE(oprnd)); + hak_setsynerrbfmt(hak, HAK_SYNERR_INTERN, HAK_CNODE_GET_LOC(oprnd), "internal error - unknown cons type %d", HAK_CNODE_CONS_CONCODE(oprnd)); return -1; } @@ -5794,20 +5774,20 @@ redo: switch (HAK_CNODE_ELIST_CONCODE(oprnd)) { case HAK_CONCODE_ALIST: - hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(oprnd), HAK_NULL, "empty assignment list"); + hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(oprnd), "empty assignment list"); return -1; case HAK_CONCODE_XLIST: - hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(oprnd), HAK_NULL, "empty executable list"); + hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(oprnd), "empty executable list"); return -1; case HAK_CONCODE_BLIST: /* this must not happend as the reader prevents it */ - hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(oprnd), HAK_NULL, "empty binop list"); + hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(oprnd), "empty binop list"); return -1; case HAK_CONCODE_MLIST: - hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(oprnd), HAK_NULL, "empty message send list"); + hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(oprnd), "empty message send list"); return -1; case HAK_CONCODE_BLOCK: @@ -5835,15 +5815,15 @@ redo: goto done; case HAK_CONCODE_VLIST: - hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(oprnd), HAK_NULL, "empty variable declaration"); + hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(oprnd), "empty variable declaration"); return -1; case HAK_CONCODE_TUPLE: - hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(oprnd), HAK_NULL, "empty tuple"); + hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(oprnd), "empty tuple"); return -1; default: - hak_setsynerrbfmt(hak, HAK_SYNERR_INTERN, HAK_CNODE_GET_LOC(oprnd), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_INTERN, HAK_CNODE_GET_LOC(oprnd), "internal error - unknown list type %d", HAK_CNODE_CONS_CONCODE(oprnd)); return -1; } @@ -5861,7 +5841,7 @@ redo: case HAK_CNODE_DBLCOLONS: case HAK_CNODE_COLON: default: - hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(oprnd), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(oprnd), "'%.*js' prohibited in this context", HAK_CNODE_GET_TOKLEN(oprnd), HAK_CNODE_GET_TOKPTR(oprnd)); return -1; @@ -5915,7 +5895,7 @@ static int compile_object_r (hak_t* hak) } } - hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(oprnd), HAK_NULL, "non-function call/non-message send disallowed"); + hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(oprnd), "non-function call/non-message send disallowed"); return -1; } @@ -5973,7 +5953,7 @@ static int compile_object_list (hak_t* hak) #endif if (!HAK_CNODE_IS_CONS(oprnd)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(oprnd), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(oprnd), "redundant cdr in the object list around '%.*js'", HAK_CNODE_GET_TOKLEN(oprnd), HAK_CNODE_GET_TOKPTR(oprnd)); return -1; @@ -6064,7 +6044,7 @@ static int compile_array_list (hak_t* hak) if (!HAK_CNODE_IS_CONS(oprnd)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(oprnd), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(oprnd), "redundant cdr in the array list around '%.*js'", HAK_CNODE_GET_TOKLEN(oprnd), HAK_CNODE_GET_TOKPTR(oprnd)); return -1; @@ -6113,7 +6093,7 @@ static int compile_pure_array_list (hak_t* hak) if (!HAK_CNODE_IS_CONS(oprnd)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(oprnd), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(oprnd), "redundant cdr in the byte-array list around '%.*js'", HAK_CNODE_GET_TOKLEN(oprnd), HAK_CNODE_GET_TOKPTR(oprnd)); return -1; @@ -6167,7 +6147,7 @@ static int compile_dic_list (hak_t* hak) if (!HAK_CNODE_IS_CONS(oprnd)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(oprnd), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(oprnd), "redundant cdr in the dictionary list around '%.*js'", HAK_CNODE_GET_TOKLEN(oprnd), HAK_CNODE_GET_TOKPTR(oprnd)); return -1; } @@ -6178,7 +6158,7 @@ static int compile_dic_list (hak_t* hak) SWITCH_TOP_CFRAME(hak, COP_COMPILE_OBJECT, car); if (!cdr) { - hak_setsynerrbfmt(hak, HAK_SYNERR_UNBALKV, HAK_CNODE_GET_LOC(car), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_UNBALKV, HAK_CNODE_GET_LOC(car), "no value for key %.*js", HAK_CNODE_GET_TOKLEN(car), HAK_CNODE_GET_TOKPTR(car)); return -1; } @@ -6313,7 +6293,7 @@ static HAK_INLINE int post_if_body (hak_t* hak) if (jump_offset > MAX_CODE_JUMP * 2) { - hak_setsynerrbfmt(hak, HAK_SYNERR_IFFLOOD, &cf->u.post_if.start_loc, HAK_NULL, "code too big - size %zu", jump_offset); + hak_setsynerrbfmt(hak, HAK_SYNERR_IFFLOOD, &cf->u.post_if.start_loc, "code too big - size %zu", jump_offset); return -1; } patch_long_jump(hak, jip, jump_offset); @@ -6419,7 +6399,7 @@ static HAK_INLINE int post_while_body (hak_t* hak) jump_offset = hak->code.bc.len - jip - (HAK_CODE_LONG_PARAM_SIZE + 1); if (jump_offset > MAX_CODE_JUMP * 2) { - hak_setsynerrbfmt(hak, HAK_SYNERR_BLKFLOOD, &cf->u.post_while.start_loc, HAK_NULL, "code too big - size %zu", jump_offset); + hak_setsynerrbfmt(hak, HAK_SYNERR_BLKFLOOD, &cf->u.post_while.start_loc, "code too big - size %zu", jump_offset); return -1; } patch_long_jump(hak, jip, jump_offset); @@ -6719,7 +6699,7 @@ static HAK_INLINE int emit_fun (hak_t* hak) if (block_code_size > MAX_CODE_JUMP * 2) { - hak_setsynerrbfmt(hak, HAK_SYNERR_BLKFLOOD, oploc, HAK_NULL, "code too big - size %zu", block_code_size); + hak_setsynerrbfmt(hak, HAK_SYNERR_BLKFLOOD, oploc, "code too big - size %zu", block_code_size); return -1; } patch_long_jump(hak, jip, block_code_size); @@ -6767,7 +6747,7 @@ static HAK_INLINE int post_fun (hak_t* hak) { /* something wrong - this must not happen because the reader must prevent this * but if it happens, it is a syntax error */ - hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(class_name), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(class_name), "class name '%.*js' prohibited class initialization context", HAK_CNODE_GET_TOKLEN(class_name), HAK_CNODE_GET_TOKPTR(class_name)); return -1; @@ -6802,7 +6782,7 @@ static HAK_INLINE int post_fun (hak_t* hak) } else { - hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAMEDUP, HAK_CNODE_GET_LOC(fun_name), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAMEDUP, HAK_CNODE_GET_LOC(fun_name), "duplicate method name '%.*js'", HAK_CNODE_GET_TOKLEN(fun_name), HAK_CNODE_GET_TOKPTR(fun_name)); return -1; } diff --git a/lib/err.c b/lib/err.c index 5bd9ddd..52d4ab9 100644 --- a/lib/err.c +++ b/lib/err.c @@ -218,7 +218,7 @@ const hak_uch_t* hak_errnum_to_errucstr (hak_errnum_t errnum, hak_uch_t* buf, ha return buf; } -static const hak_bch_t* synerr_to_errstr (hak_synerrnum_t errnum) +const hak_bch_t* hak_synerr_to_errbcstr (hak_synerrnum_t errnum) { return (errnum >= 0 && errnum < HAK_COUNTOF(synerrstr))? synerrstr[errnum]: e_unknown_b; } @@ -712,30 +712,23 @@ hak_synerrnum_t hak_getsynerrnum (hak_t* hak) return hak->c->synerr.num; } -void hak_setsynerrbfmt (hak_t* hak, hak_synerrnum_t num, const hak_loc_t* loc, const hak_oocs_t* tgt, const hak_bch_t* msgfmt, ...) +void hak_setsynerrbfmt (hak_t* hak, hak_synerrnum_t num, const hak_loc_t* loc, const hak_bch_t* msgfmt, ...) { static hak_bch_t syntax_error[] = "syntax error - "; + va_list ap; + int i, selen; if (hak->shuterr) return; - if (msgfmt) - { - va_list ap; - int i, selen; + va_start(ap, msgfmt); + hak_seterrbfmtv(hak, HAK_ESYNERR, msgfmt, ap); + va_end(ap); - va_start(ap, msgfmt); - hak_seterrbfmtv(hak, HAK_ESYNERR, msgfmt, ap); - va_end(ap); + selen = HAK_COUNTOF(syntax_error) - 1; + HAK_MEMMOVE(&hak->errmsg.buf[selen], &hak->errmsg.buf[0], HAK_SIZEOF(hak->errmsg.buf[0]) * (HAK_COUNTOF(hak->errmsg.buf) - selen)); + for (i = 0; i < selen; i++) hak->errmsg.buf[i] = syntax_error[i]; + hak->errmsg.buf[HAK_COUNTOF(hak->errmsg.buf) - 1] = '\0'; - selen = HAK_COUNTOF(syntax_error) - 1; - HAK_MEMMOVE(&hak->errmsg.buf[selen], &hak->errmsg.buf[0], HAK_SIZEOF(hak->errmsg.buf[0]) * (HAK_COUNTOF(hak->errmsg.buf) - selen)); - for (i = 0; i < selen; i++) hak->errmsg.buf[i] = syntax_error[i]; - hak->errmsg.buf[HAK_COUNTOF(hak->errmsg.buf) - 1] = '\0'; - } - else - { - hak_seterrbfmt(hak, HAK_ESYNERR, "%hs%hs", syntax_error, synerr_to_errstr(num)); - } hak->c->synerr.num = num; /* The SCO compiler complains of this ternary operation saying: @@ -753,30 +746,23 @@ void hak_setsynerrbfmt (hak_t* hak, hak_synerrnum_t num, const hak_loc_t* loc, c } } -void hak_setsynerrufmt (hak_t* hak, hak_synerrnum_t num, const hak_loc_t* loc, const hak_oocs_t* tgt, const hak_uch_t* msgfmt, ...) +void hak_setsynerrufmt (hak_t* hak, hak_synerrnum_t num, const hak_loc_t* loc, const hak_uch_t* msgfmt, ...) { static hak_bch_t syntax_error[] = "syntax error - "; + va_list ap; + int i, selen; if (hak->shuterr) return; - if (msgfmt) - { - va_list ap; - int i, selen; + va_start(ap, msgfmt); + hak_seterrufmtv(hak, HAK_ESYNERR, msgfmt, ap); + va_end(ap); - va_start(ap, msgfmt); - hak_seterrufmtv(hak, HAK_ESYNERR, msgfmt, ap); - va_end(ap); + selen = HAK_COUNTOF(syntax_error) - 1; + HAK_MEMMOVE(&hak->errmsg.buf[selen], &hak->errmsg.buf[0], HAK_SIZEOF(hak->errmsg.buf[0]) * (HAK_COUNTOF(hak->errmsg.buf) - selen)); + for (i = 0; i < selen; i++) hak->errmsg.buf[i] = syntax_error[i]; + hak->errmsg.buf[HAK_COUNTOF(hak->errmsg.buf) - 1] = '\0'; - selen = HAK_COUNTOF(syntax_error) - 1; - HAK_MEMMOVE(&hak->errmsg.buf[selen], &hak->errmsg.buf[0], HAK_SIZEOF(hak->errmsg.buf[0]) * (HAK_COUNTOF(hak->errmsg.buf) - selen)); - for (i = 0; i < selen; i++) hak->errmsg.buf[i] = syntax_error[i]; - hak->errmsg.buf[HAK_COUNTOF(hak->errmsg.buf) - 1] = '\0'; - } - else - { - hak_seterrbfmt(hak, HAK_ESYNERR, "%hs%hs", syntax_error, synerr_to_errstr(num)); - } hak->c->synerr.num = num; /* The SCO compiler complains of this ternary operation saying: diff --git a/lib/exec.c b/lib/exec.c index d2e94ae..38eed57 100644 --- a/lib/exec.c +++ b/lib/exec.c @@ -4312,7 +4312,7 @@ hak_logbfmt(hak, HAK_LOG_STDERR, ">>>%O c->sc=%O sc=%O b2=%d b3=%d nivars=%d ncv /* put the code at method dictionary pass 1 for class method, 2 for instance method, 3 for class instantiation method */ if (!hak_putatdic_method(hak, (hak_oop_dic_t)mdic, name, blk, &mtype)) goto oops_with_errmsg_supplement; - if (mtype && HAK_LOG_ENABLED(hak, HAK_LOG_IC | HAK_LOG_WARN)) + if (mtype && HAK_LOG_ENABLED(hak, HAK_LOG_IC | HAK_LOG_WARN)) { hak_oop_t class_name; hak_dbgi_t dbgi; diff --git a/lib/hak-cmn.h b/lib/hak-cmn.h index efe5997..c64e0be 100644 --- a/lib/hak-cmn.h +++ b/lib/hak-cmn.h @@ -959,6 +959,22 @@ typedef struct hak_t hak_t; # define HAK_SENTINEL(v) #endif +#if __has_attribute(nonnull) +# define HAK_NONNULL() __attribute__((nonnull)) +# define HAK_NONNULL_1(x1) __attribute__((nonnull(x1))) +# define HAK_NONNULL_2(x1,x2) __attribute__((nonnull(x1,x2))) +# define HAK_NONNULL_3(x1,x2,x3) __attribute__((nonnull(x1,x2,x3))) +# define HAK_NONNULL_4(x1,x2,x3,x4) __attribute__((nonnull(x1,x2,x3,x4))) +# define HAK_NONNULL_5(x1,x2,x3,x4,x5) __attribute__((nonnull(x1,x2,x3,x4,x5))) +#else +# define HAK_NONNULL() +# define HAK_NONNULL_1(x1) +# define HAK_NONNULL_2(x1,x2) +# define HAK_NONNULL_3(x1,x2,x3) +# define HAK_NONNULL_4(x1,x2,x3,x4) +# define HAK_NONNULL_5(x1,x2,x3,x4,x5) +#endif + #if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)) # define HAK_UNUSED __attribute__((__unused__)) #else diff --git a/lib/hak.h b/lib/hak.h index 75d7758..263844c 100644 --- a/lib/hak.h +++ b/lib/hak.h @@ -1626,13 +1626,6 @@ struct hak_synerrb_t { hak_synerrnum_t num; hak_bloc_t loc; -/* - struct - { - hak_bch_t val[256]; - hak_oow_t len; - } tgt; -*/ }; typedef struct hak_synerru_t hak_synerru_t; @@ -1640,13 +1633,6 @@ struct hak_synerru_t { hak_synerrnum_t num; hak_uloc_t loc; -/* - struct - { - hak_uch_t val[256]; - hak_oow_t len; - } tgt; -*/ }; #if defined(HAK_OOCH_IS_UCH) @@ -2000,7 +1986,7 @@ struct hak_t do { \ if (HAK_UNLIKELY((hak)->sp >= HAK_OOP_TO_SMOOI((hak)->processor->active->st))) \ { \ - hak_seterrbfmt (hak, HAK_EOOMEM, "process stack overflow"); \ + hak_seterrbfmt(hak, HAK_EOOMEM, "process stack overflow"); \ (hak)->abort_req = -1; \ } \ (hak)->sp = (hak)->sp + 1; \ @@ -2253,65 +2239,65 @@ HAK_EXPORT void hak_setcmgr ( HAK_EXPORT hak_errnum_t hak_geterrnum ( hak_t* hak -); +) HAK_NONNULL_1(1); HAK_EXPORT void hak_seterrnum ( hak_t* hak, hak_errnum_t errnum -); +) HAK_NONNULL_1(1); HAK_EXPORT void hak_geterrloc ( hak_t* hak, hak_loc_t* loc -); +) HAK_NONNULL_1(1); HAK_EXPORT void hak_seterrbmsg ( hak_t* hak, hak_errnum_t errnum, const hak_bch_t* errmsg -); +) HAK_NONNULL_1(1); HAK_EXPORT void hak_seterrumsg ( hak_t* hak, hak_errnum_t errnum, const hak_uch_t* errmsg -); +) HAK_NONNULL_1(1); HAK_EXPORT void hak_seterrwithsyserr ( hak_t* hak, int syserr_type, int syserr_code -); +) HAK_NONNULL_1(1); HAK_EXPORT void hak_seterrbfmtwithsyserr ( hak_t* hak, int syserr_type, int syserr_code, const hak_bch_t* fmt, - ... -); + ... +) HAK_NONNULL_2(1,4); HAK_EXPORT void hak_seterrufmtwithsyserr ( hak_t* hak, int syserr_type, int syserr_code, const hak_uch_t* fmt, - ... -); + ... +) HAK_NONNULL_2(1,4); HAK_EXPORT void hak_seterrbfmt ( hak_t* hak, hak_errnum_t errnum, const hak_bch_t* fmt, ... -); +) HAK_NONNULL_2(1,3); HAK_EXPORT void hak_seterrufmt ( hak_t* hak, hak_errnum_t errnum, const hak_uch_t* fmt, ... -); +) HAK_NONNULL_2(1,3); HAK_EXPORT void hak_seterrbfmtloc ( hak_t* hak, @@ -2319,7 +2305,7 @@ HAK_EXPORT void hak_seterrbfmtloc ( const hak_loc_t* loc, const hak_bch_t* fmt, ... -); +) HAK_NONNULL_3(1,3,4); HAK_EXPORT void hak_seterrufmtloc ( hak_t* hak, @@ -2327,44 +2313,43 @@ HAK_EXPORT void hak_seterrufmtloc ( const hak_loc_t* loc, const hak_uch_t* fmt, ... -); +) HAK_NONNULL_3(1,3,4); HAK_EXPORT void hak_seterrbfmtv ( hak_t* hak, hak_errnum_t errnum, const hak_bch_t* fmt, va_list ap -); +) HAK_NONNULL_2(1,3); HAK_EXPORT void hak_seterrufmtv ( hak_t* hak, hak_errnum_t errnum, const hak_uch_t* fmt, va_list ap -); - +) HAK_NONNULL_2(1,3); HAK_EXPORT const hak_ooch_t* hak_geterrstr ( hak_t* hak -); +) HAK_NONNULL_1(1); HAK_EXPORT const hak_uch_t* hak_geterrumsg ( hak_t* hak -); +) HAK_NONNULL_1(1); HAK_EXPORT const hak_bch_t* hak_geterrbmsg ( hak_t* hak -); +) HAK_NONNULL_1(1); HAK_EXPORT void hak_geterrbinf ( hak_t* hak, hak_errbinf_t* errinf -); +) HAK_NONNULL_2(1,2); HAK_EXPORT void hak_geterruinf ( hak_t* hak, hak_erruinf_t* errinf -); +) HAK_NONNULL_2(1,2); #if defined(HAK_OOCH_IS_UCH) # define hak_geterrinf hak_geterruinf #else @@ -2375,13 +2360,13 @@ HAK_EXPORT hak_oow_t hak_copyerrbmsg ( hak_t* hak, hak_bch_t* buf, hak_oow_t len -); +) HAK_NONNULL_2(1,2); HAK_EXPORT hak_oow_t hak_copyerrumsg ( hak_t* hak, hak_uch_t* buf, hak_oow_t len -); +) HAK_NONNULL_2(1,2); #if defined(HAK_OOCH_IS_UCH) # define hak_geterrmsg hak_geterrumsg @@ -2395,7 +2380,7 @@ HAK_EXPORT hak_oow_t hak_copyerrumsg ( HAK_EXPORT const hak_ooch_t* hak_backuperrmsg ( hak_t* hak -); +) HAK_NONNULL_1(1); HAK_EXPORT int hak_errnum_is_synerr ( hak_errnum_t errnum @@ -2409,12 +2394,16 @@ HAK_EXPORT const hak_bch_t* hak_errnum_to_errbcstr ( hak_errnum_t errnum, hak_bch_t* buf, hak_oow_t len -); +) HAK_NONNULL_1(2); HAK_EXPORT const hak_uch_t* hak_errnum_to_errucstr ( hak_errnum_t errnum, hak_uch_t* buf, hak_oow_t len +) HAK_NONNULL_1(2); + +HAK_EXPORT const hak_bch_t* hak_synerr_to_errbcstr ( + hak_synerrnum_t errnum ); /** @@ -2752,28 +2741,17 @@ HAK_EXPORT void hak_setsynerrbfmt ( hak_t* hak, hak_synerrnum_t num, const hak_loc_t* loc, - const hak_oocs_t* tgt, const hak_bch_t* msgfmt, ... -); +) HAK_NONNULL_2(1,4); HAK_EXPORT void hak_setsynerrufmt ( hak_t* hak, hak_synerrnum_t num, const hak_loc_t* loc, - const hak_oocs_t* tgt, const hak_uch_t* msgfmt, ... -); - -#if defined(HAK_HAVE_INLINE) -static HAK_INLINE void hak_setsynerr (hak_t* hak, hak_synerrnum_t num, const hak_loc_t* loc, const hak_oocs_t* tgt) -{ - hak_setsynerrbfmt (hak, num, loc, tgt, HAK_NULL); -} -#else -# define hak_setsynerr(hak,num,loc,tgt) hak_setsynerrbfmt(hak,num,loc,tgt,HAK_NULL) -#endif +) HAK_NONNULL_2(1,4); /* ========================================================================= * TEMPORARY OOP MANAGEMENT FUNCTIONS diff --git a/lib/read.c b/lib/read.c index 528cd7b..394e120 100644 --- a/lib/read.c +++ b/lib/read.c @@ -594,7 +594,7 @@ static int classify_ident_token (hak_t* hak, const hak_oocs_t* v, const hak_loc_ if (binop_char_count > 0 && !(hak->option.trait & HAK_TRAIT_LANG_LIBERAL)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, errloc, HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, errloc, "illegal identifier '%.*js'", v->len, v->ptr); return -1; } @@ -719,29 +719,29 @@ static HAK_INLINE hak_cnode_t* leave_list (hak_t* hak, hak_loc_t* list_loc, int* { hak_cnode_t* tmp; tmp = HAK_CNODE_CONS_CAR(tail); - hak_setsynerrbfmt(hak, HAK_SYNERR_CALLABLE, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_CALLABLE, TOKEN_LOC(hak), "missing message for '%.*js'", HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp)); } else if (concode == HAK_CONCODE_ALIST) { hak_cnode_t* tmp; tmp = HAK_CNODE_CONS_CAR(tail); - hak_setsynerrbfmt(hak, HAK_SYNERR_RVALUE, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_RVALUE, TOKEN_LOC(hak), "missing rvalue for '%.*js'", HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp)); } else if (concode == HAK_CONCODE_BLIST) { hak_cnode_t* tmp; tmp = HAK_CNODE_CONS_CAR(tail); - hak_setsynerrbfmt(hak, HAK_SYNERR_NOVALUE, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_NOVALUE, TOKEN_LOC(hak), "missing expression after binary selector '%.*js'", HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp)); } else { if (fv & COMMAED) - hak_setsynerrbfmt(hak, HAK_SYNERR_COMMANOVALUE, TOKEN_LOC(hak), HAK_NULL, "no valid token after comma"); + hak_setsynerrbfmt(hak, HAK_SYNERR_COMMANOVALUE, TOKEN_LOC(hak), "no valid token after comma"); else - hak_setsynerrbfmt(hak, HAK_SYNERR_COMMANOVALUE, TOKEN_LOC(hak), HAK_NULL, "no valid token after colon"); + hak_setsynerrbfmt(hak, HAK_SYNERR_COMMANOVALUE, TOKEN_LOC(hak), "no valid token after colon"); } goto oops; } @@ -779,7 +779,7 @@ static HAK_INLINE hak_cnode_t* leave_list (hak_t* hak, hak_loc_t* list_loc, int* if (lval && HAK_CNODE_IS_ELIST(lval)) { /* invalid lvalue - for example, () := 20 */ - hak_setsynerrbfmt(hak, HAK_SYNERR_LVALUE, HAK_CNODE_GET_LOC(lval), HAK_NULL, "bad lvalue - blank expression"); + hak_setsynerrbfmt(hak, HAK_SYNERR_LVALUE, HAK_CNODE_GET_LOC(lval), "bad lvalue - blank expression"); goto oops; } else if (lval && HAK_CNODE_IS_CONS_CONCODED(lval, HAK_CONCODE_TUPLE)) @@ -806,7 +806,7 @@ static HAK_INLINE hak_cnode_t* leave_list (hak_t* hak, hak_loc_t* list_loc, int* lcar = HAK_CNODE_CONS_CAR(tmp); if (!HAK_CNODE_IS_SYMBOL(lcar) && !HAK_CNODE_IS_DSYMBOL_CLA(lcar)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_LVALUE, HAK_CNODE_GET_LOC(lcar), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_LVALUE, HAK_CNODE_GET_LOC(lcar), "bad lvalue - invalid token%hs%.*js in tuple", (HAK_CNODE_GET_TOKLEN(lcar) > 0? " ": ""), HAK_CNODE_GET_TOKLEN(lcar), HAK_CNODE_GET_TOKPTR(lcar)); @@ -836,7 +836,7 @@ static HAK_INLINE hak_cnode_t* leave_list (hak_t* hak, hak_loc_t* list_loc, int* if (!HAK_CNODE_IS_SYMBOL(lval) && !HAK_CNODE_IS_DSYMBOL_CLA(lval)) { /* for example, 1 := 20 */ - hak_setsynerrbfmt(hak, HAK_SYNERR_LVALUE, HAK_CNODE_GET_LOC(lval), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_LVALUE, HAK_CNODE_GET_LOC(lval), "bad lvalue - invalid identifier '%.*js'", HAK_CNODE_GET_TOKLEN(lval), HAK_CNODE_GET_TOKPTR(lval)); goto oops; @@ -856,7 +856,7 @@ static HAK_INLINE hak_cnode_t* leave_list (hak_t* hak, hak_loc_t* list_loc, int* rval = HAK_CNODE_CONS_CDR(rval); rval = HAK_CNODE_CONS_CAR(rval); - hak_setsynerrbfmt(hak, HAK_SYNERR_RVALUE, HAK_CNODE_GET_LOC(rval), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_RVALUE, HAK_CNODE_GET_LOC(rval), "too many rvalues after := around '%.*js'", HAK_CNODE_GET_TOKLEN(rval), HAK_CNODE_GET_TOKPTR(rval)); goto oops; @@ -901,7 +901,7 @@ static HAK_INLINE hak_cnode_t* leave_list (hak_t* hak, hak_loc_t* list_loc, int* /* for example, 1 + */ x = HAK_CNODE_CONS_CAR(binop); /* with the transformation, the implementation supports two operands and a single binop in an expression. */ - hak_setsynerrbfmt(hak, HAK_SYNERR_NOVALUE, HAK_CNODE_GET_LOC(x), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_NOVALUE, HAK_CNODE_GET_LOC(x), "no operand after binary selector '%.*js'", HAK_CNODE_GET_TOKLEN(x), HAK_CNODE_GET_TOKPTR(x)); goto oops; } @@ -910,7 +910,7 @@ static HAK_INLINE hak_cnode_t* leave_list (hak_t* hak, hak_loc_t* list_loc, int* /* for example, 1 + 1 1 */ x = HAK_CNODE_CONS_CAR(tail); /* with the transformation, the implementation supports two operands and a single binop in an expression. */ - hak_setsynerrbfmt(hak, HAK_SYNERR_NOVALUE, HAK_CNODE_GET_LOC(x), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_NOVALUE, HAK_CNODE_GET_LOC(x), "redundant operand '%.*js'", HAK_CNODE_GET_TOKLEN(x), HAK_CNODE_GET_TOKPTR(x)); goto oops; } @@ -1245,7 +1245,7 @@ static int chain_to_list (hak_t* hak, hak_cnode_t* obj, hak_loc_t* loc) * can only be triggered by a wrong qlist where a period is * allowed. so i can safely hard-code the error code to * HAK_SYNERR_RPAREN */ - hak_setsynerrbfmt(hak, HAK_SYNERR_RPAREN, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_RPAREN, TOKEN_LOC(hak), ") expected around '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); return -1; } @@ -1296,7 +1296,7 @@ static int chain_to_list (hak_t* hak, hak_cnode_t* obj, hak_loc_t* loc) { /* there is no separator between array/dictionary elements * for instance, #{10:20, 30:40 40:50} */ - hak_setsynerrbfmt(hak, HAK_SYNERR_NOSEP, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_NOSEP, TOKEN_LOC(hak), "no separator between array/dictionary elements around '%.*js", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); return -1; @@ -1408,7 +1408,7 @@ static int feed_begin_include (hak_t* hak) if (hak->c->cci_rdr(hak, HAK_IO_OPEN, arg) <= -1) { const hak_ooch_t* orgmsg = hak_backuperrmsg(hak); - hak_setsynerrbfmt(hak, HAK_SYNERR_INCLUDE, TOKEN_LOC(hak), HAK_NULL, "unable to include %js - %js", io_name, orgmsg); + hak_setsynerrbfmt(hak, HAK_SYNERR_INCLUDE, TOKEN_LOC(hak), "unable to include %js - %js", io_name, orgmsg); goto oops; } @@ -1535,7 +1535,7 @@ static int auto_forge_xlist_if_at_block_beginning (hak_t* hak, hak_frd_t* frd) /* this portion is similar to the code below the start_list label */ if (frd->level >= HAK_TYPE_MAX(int)) /* the nesting level too deep */ { - hak_setsynerrbfmt(hak, HAK_SYNERR_NESTING, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_NESTING, TOKEN_LOC(hak), "nesting level too deep around '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); return -1; } @@ -1611,7 +1611,7 @@ static int feed_process_token (hak_t* hak) { if (TOKEN_TYPE(hak) != HAK_TOK_EOL && TOKEN_TYPE(hak) != HAK_TOK_SEMICOLON) { - hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, TOKEN_LOC(hak), "redundant token '%.*js' for '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak), vocas[VOCA_PRAGMA].len, vocas[VOCA_PRAGMA].str); @@ -1623,7 +1623,7 @@ static int feed_process_token (hak_t* hak) { if (TOKEN_TYPE(hak) == HAK_TOK_EOL || TOKEN_TYPE(hak) == HAK_TOK_SEMICOLON) { - hak_setsynerrbfmt(hak, HAK_SYNERR_IDENT, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_IDENT, TOKEN_LOC(hak), "'%.*js' %hs not specified", vocas[VOCA_PRAGMA].len, vocas[VOCA_PRAGMA].str, (frd->expect_pragma_item == 1? "name": "value")); @@ -1631,7 +1631,7 @@ static int feed_process_token (hak_t* hak) } else if (TOKEN_TYPE(hak) != HAK_TOK_IDENT) { - hak_setsynerrbfmt(hak, HAK_SYNERR_IDENT, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_IDENT, TOKEN_LOC(hak), "'%.*js' %hs expected in place of '%.*js'", vocas[VOCA_INCLUDE].len, vocas[VOCA_INCLUDE].str, (frd->expect_pragma_item == 1? "name": "value"), @@ -1648,7 +1648,7 @@ static int feed_process_token (hak_t* hak) /* TODO: more pragmas */ else { - hak_setsynerrbfmt(hak, HAK_SYNERR_IDENT, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_IDENT, TOKEN_LOC(hak), "invalid pragma name '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); goto oops; @@ -1666,7 +1666,7 @@ static int feed_process_token (hak_t* hak) } else { - hak_setsynerrbfmt(hak, HAK_SYNERR_IDENT, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_IDENT, TOKEN_LOC(hak), "invalid pragma value '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); goto oops; @@ -1684,14 +1684,14 @@ static int feed_process_token (hak_t* hak) * use this exceptional code block to divert the major token processing */ if (TOKEN_TYPE(hak) == HAK_TOK_EOL || TOKEN_TYPE(hak) == HAK_TOK_SEMICOLON) { - hak_setsynerrbfmt(hak, HAK_SYNERR_STRING, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_STRING, TOKEN_LOC(hak), "'%.*js' target not specified", vocas[VOCA_INCLUDE].len, vocas[VOCA_INCLUDE].str); goto oops; } else if (TOKEN_TYPE(hak) != HAK_TOK_STRLIT) { - hak_setsynerrbfmt(hak, HAK_SYNERR_STRING, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_STRING, TOKEN_LOC(hak), "'%.*js' target expected in place of '%.*js'", vocas[VOCA_INCLUDE].len, vocas[VOCA_INCLUDE].str, TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); @@ -1713,7 +1713,7 @@ static int feed_process_token (hak_t* hak) if (TOKEN_TYPE(hak) == HAK_TOK_EOL) goto ok; /* ignore EOL inside vlist */ /* vlist also has special requirement that it can only contain variable names. */ - hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAME, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VARNAME, TOKEN_LOC(hak), "invalid variable name '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); goto oops; } @@ -1721,14 +1721,14 @@ static int feed_process_token (hak_t* hak) switch (TOKEN_TYPE(hak)) { default: - hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, TOKEN_LOC(hak), "illegal token '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); goto oops; case HAK_TOK_EOF: if (hak_feedpending(hak)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_EOF, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_EOF, TOKEN_LOC(hak), "premature end of input '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); } else @@ -1745,8 +1745,6 @@ static int feed_process_token (hak_t* hak) goto ok; case HAK_TOK_PRAGMA: - /*hak_setsynerr(hak, HAK_SYNERR_ILTOK, TOKEN_LOC(hak), TOKEN_NAME(hak)); - goto oops;*/ /* TODO: check if pragma is the first word in the line */ frd->expect_pragma_item = 1; goto ok; @@ -1775,7 +1773,7 @@ static int feed_process_token (hak_t* hak) if (hak->c->r.st && (hak->c->r.st->flagv & DATA_LIST)) { /* if the outer list is a data list e.g. ${ | a | } */ - hak_setsynerrbfmt(hak, HAK_SYNERR_VBARBANNED, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_VBARBANNED, TOKEN_LOC(hak), "prohibited vertical bar around '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); goto oops; } @@ -1865,7 +1863,7 @@ static int feed_process_token (hak_t* hak) if (frd->level >= HAK_TYPE_MAX(int)) { /* the nesting level has become too deep */ - hak_setsynerrbfmt(hak, HAK_SYNERR_NESTING, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_NESTING, TOKEN_LOC(hak), "nesting level too deep around '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); goto oops; } @@ -1886,7 +1884,7 @@ static int feed_process_token (hak_t* hak) * 1. at the top frd->level - not inside () * 2. at the beginning of a list * 3. inside an array, byte-array, dictionary, xlist */ - hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_DOTBANNED, TOKEN_LOC(hak), "prohibited dot around '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); goto oops; } @@ -1897,7 +1895,7 @@ static int feed_process_token (hak_t* hak) int n; if (frd->level <= 0 || !(n = can_colon_list(hak))) { - hak_setsynerrbfmt(hak, HAK_SYNERR_COLONBANNED, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_COLONBANNED, TOKEN_LOC(hak), "prohibited colon around '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); goto oops; } @@ -1915,7 +1913,7 @@ static int feed_process_token (hak_t* hak) case HAK_TOK_COLONEQ: if (frd->level <= 0 || !can_coloneq_list(hak)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_COLONEQBANNED, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_COLONEQBANNED, TOKEN_LOC(hak), "prohibited assignment around '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); goto oops; } @@ -1934,7 +1932,7 @@ static int feed_process_token (hak_t* hak) else if (!(can = can_binop_list(hak))) { /*banned_binop:*/ - hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_BANNED, TOKEN_LOC(hak), "prohibited binary selector '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); goto oops; } @@ -1948,7 +1946,7 @@ static int feed_process_token (hak_t* hak) case HAK_TOK_COMMA: if (frd->level <= 0 || !can_comma_list(hak)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_COMMABANNED, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_COMMABANNED, TOKEN_LOC(hak), "prohibited comma around '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); goto oops; } @@ -1973,22 +1971,13 @@ static int feed_process_token (hak_t* hak) if (TOKEN_TYPE(hak) == HAK_TOK_EOL) goto ok; if (concode == HAK_CONCODE_BLOCK) goto ok; - hak_setsynerrbfmt(hak, HAK_SYNERR_SEMICOLON, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_SEMICOLON, TOKEN_LOC(hak), "unexpected semicolon '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); goto oops; } /* if auto-forged */ -#if 0 -/* TODO: remove this part if the assertion is confirmed true in the #else part... */ - if (concode != HAK_CONCODE_XLIST && concode != HAK_CONCODE_MLIST && concode != HAK_CONCODE_ALIST && concode != HAK_CONCODE_BLIST) - { - hak_setsynerr(hak, HAK_SYNERR_UNBALPBB, TOKEN_LOC(hak), HAK_NULL); - goto oops; - } -#else HAK_ASSERT(hak, concode == HAK_CONCODE_XLIST || concode == HAK_CONCODE_MLIST || concode == HAK_CONCODE_ALIST || concode == HAK_CONCODE_BLIST); -#endif frd->obj = leave_list(hak, &frd->list_loc, &frd->flagv, &oldflagv); frd->level--; @@ -2007,7 +1996,7 @@ static int feed_process_token (hak_t* hak) if (frd->level <= 0) { - hak_setsynerrbfmt(hak, HAK_SYNERR_UNBALPBB, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_UNBALPBB, TOKEN_LOC(hak), "unbalanced closer token '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); goto oops; } @@ -2019,7 +2008,7 @@ static int feed_process_token (hak_t* hak) { #if 0 /* the auto-forged list has not been terminated. it must be terminated closed first */ - hak_setsynerrbfmt(hak, HAK_SYNERR_SEMICOLON, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_SEMICOLON, TOKEN_LOC(hak), "semicolon expected around %.*js", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); goto oops; #else @@ -2037,14 +2026,14 @@ static int feed_process_token (hak_t* hak) { /* the auto-created xlist can't be terminated with the regular closing symbol * it must end with the semicolon */ - hak_setsynerrbfmt(hak, HAK_SYNERR_UNBALPBB, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_UNBALPBB, TOKEN_LOC(hak), "unbalanced parenthesis/brace/bracket around '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); goto oops; } if (cons_info[concode].closer != TOKEN_TYPE(hak)) { - hak_setsynerrbfmt(hak, cons_info[concode].synerr, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, cons_info[concode].synerr, TOKEN_LOC(hak), "invalid closer token around '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); goto oops; } @@ -2068,7 +2057,8 @@ static int feed_process_token (hak_t* hak) * with no opening(left) parenthesis, which is * indicated by frd->level<=0. */ - hak_setsynerrbfmt(hak, HAK_SYNERR_LPAREN, TOKEN_LOC(hak), HAK_NULL, "( expected around '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); + hak_setsynerrbfmt(hak, HAK_SYNERR_LPAREN, TOKEN_LOC(hak), + "( expected around '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); goto oops; } #endif @@ -2147,7 +2137,7 @@ static int feed_process_token (hak_t* hak) if (!HAK_IN_SMPTR_RANGE(v)) { illegal_smptr_literal: - hak_setsynerrbfmt(hak, HAK_SYNERR_SMPTRLIT, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_SMPTRLIT, TOKEN_LOC(hak), "illegal smptr literal '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); goto oops; } @@ -2176,7 +2166,7 @@ static int feed_process_token (hak_t* hak) if (v > HAK_ERROR_MAX) { illegal_error_literal: - hak_setsynerrbfmt(hak, HAK_SYNERR_ERRLIT, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ERRLIT, TOKEN_LOC(hak), "illegal erorr literal '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); goto oops; } @@ -2637,7 +2627,7 @@ static int flx_start (hak_t* hak, hak_ooci_t c) } else { - hak_setsynerrbfmt(hak, HAK_SYNERR_BACKSLASH, TOKEN_LOC(hak), HAK_NULL, "invalid token character - %c", c); + hak_setsynerrbfmt(hak, HAK_SYNERR_BACKSLASH, TOKEN_LOC(hak), "invalid token character - %c", c); return -1; } goto not_consumed; @@ -2658,7 +2648,7 @@ static int flx_backslashed (hak_t* hak, hak_ooci_t c) return 1; /* consumed */ } - hak_setsynerrbfmt(hak, HAK_SYNERR_BACKSLASH, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_BACKSLASH, TOKEN_LOC(hak), "stray backslash around %.*js", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); return -1; } @@ -2768,14 +2758,14 @@ static int flx_dollared_ident (hak_t* hak, hak_ooci_t c) if (di->char_count == 0) { - hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, FLX_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, FLX_LOC(hak), "no valid character after dollar sign"); return -1; } if (get_directive_token_type(hak, &tok_type) <= -1) { - hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, TOKEN_LOC(hak), "invalid dollar-prefixed identifier '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); return -1; } @@ -2792,7 +2782,7 @@ static int flx_dollared_ident (hak_t* hak, hak_ooci_t c) if (!is_lead_ident_char(c)) { /* some character can't placed immediately after '$'. e.g '?' */ - hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, TOKEN_LOC(hak), "'%c' prohibited as first character after '%.*js'", c, TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); return -1; @@ -2805,7 +2795,7 @@ static int flx_dollared_ident (hak_t* hak, hak_ooci_t c) } else { - hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, TOKEN_LOC(hak), "invalid dollar-prefixed identifier character '%jc' after '%.*js'", c, TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); return -1; @@ -2928,8 +2918,9 @@ static int flx_hmarked_char (hak_t* hak, hak_ooci_t c) { if (hc->char_count == 0) { - hak_setsynerrbfmt(hak, HAK_SYNERR_CHARLIT, TOKEN_LOC(hak), HAK_NULL, - "no valid character in character literal %.*js", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); + hak_setsynerrbfmt(hak, HAK_SYNERR_CHARLIT, TOKEN_LOC(hak), + "no valid character in character literal %.*js", + TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); return -1; } @@ -2945,8 +2936,9 @@ static int flx_hmarked_char (hak_t* hak, hak_ooci_t c) hexcharlit: if (TOKEN_NAME_LEN(hak) - 3 > max_digit_count) { - hak_setsynerrbfmt(hak, HAK_SYNERR_CHARLIT, TOKEN_LOC(hak), HAK_NULL, - "invalid hexadecimal character character literal %.*js", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); + hak_setsynerrbfmt(hak, HAK_SYNERR_CHARLIT, TOKEN_LOC(hak), + "invalid hexadecimal character character literal %.*js", + TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); return -1; } c = 0; @@ -2954,8 +2946,9 @@ static int flx_hmarked_char (hak_t* hak, hak_ooci_t c) { if (!is_xdigit_char(TOKEN_NAME_CHAR(hak, i))) { - hak_setsynerrbfmt(hak, HAK_SYNERR_CHARLIT, TOKEN_LOC(hak), HAK_NULL, - "invalid hexadecimal character character literal %.*js", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); + hak_setsynerrbfmt(hak, HAK_SYNERR_CHARLIT, TOKEN_LOC(hak), + "invalid hexadecimal character character literal %.*js", + TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); return -1; } c = c * 16 + HAK_CHAR_TO_NUM(TOKEN_NAME_CHAR(hak, i), 16); /* don't care if it is for 'p' */ @@ -2987,7 +2980,7 @@ static int flx_hmarked_char (hak_t* hak, hak_ooci_t c) else if (does_token_name_match(hak, VOCA_CHAR_VTAB)) c = '\v'; else { - hak_setsynerrbfmt(hak, HAK_SYNERR_CHARLIT, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_CHARLIT, TOKEN_LOC(hak), "invalid character literal %.*js", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); return -1; } @@ -3061,7 +3054,7 @@ static int flx_hmarked_binop (hak_t* hak, hak_ooci_t c) } else { - hak_setsynerrbfmt(hak, HAK_SYNERR_SYMLIT, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_SYMLIT, TOKEN_LOC(hak), "invalid binary selector character '%jc' after #%.*js", c, TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); return -1; @@ -3084,7 +3077,7 @@ static int flx_hmarked_ident (hak_t* hak, hak_ooci_t c) { if (hi->char_count == 0) { - hak_setsynerrbfmt(hak, HAK_SYNERR_SYMLIT, FLX_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_SYMLIT, FLX_LOC(hak), "no valid character after hash sign"); return -1; } @@ -3098,7 +3091,7 @@ static int flx_hmarked_ident (hak_t* hak, hak_ooci_t c) { if (!is_lead_ident_char(c)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, TOKEN_LOC(hak), "'%c' prohibited as first character of symbol", c); return -1; } @@ -3110,7 +3103,7 @@ static int flx_hmarked_ident (hak_t* hak, hak_ooci_t c) } else { - hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, TOKEN_LOC(hak), "invalid symbol character '%jc' after '%.*js'", c, TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); return -1; @@ -3135,7 +3128,7 @@ static int flx_plain_ident (hak_t* hak, hak_ooci_t c) /* identifier */ if (pi->seg_len == 0) { - hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, TOKEN_LOC(hak), "blank segment after '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); return -1; } @@ -3187,7 +3180,7 @@ static int flx_plain_ident (hak_t* hak, hak_ooci_t c) /* identifier */ } else { - hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, TOKEN_LOC(hak), "wrong multi-segment identifier '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); return -1; } @@ -3212,7 +3205,7 @@ static int flx_plain_ident (hak_t* hak, hak_ooci_t c) /* identifier */ { if (!is_lead_ident_char(c)) { - hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, TOKEN_LOC(hak), "'%c' prohibited as first character of identifier or identifier segment after '%.*js'", c, TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); return -1; @@ -3226,7 +3219,7 @@ static int flx_plain_ident (hak_t* hak, hak_ooci_t c) /* identifier */ } else { - hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_ILTOK, TOKEN_LOC(hak), "invalid identifier character '%jc' after '%.*js'", c, TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); return -1; @@ -3261,7 +3254,7 @@ static int flx_plain_number (hak_t* hak, hak_ooci_t c) /* number */ { if (pn->radix != 10) { - hak_setsynerrbfmt(hak, HAK_SYNERR_NUMLIT, FLX_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_NUMLIT, FLX_LOC(hak), "invalid use of decimal point after radixed number '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); return -1; @@ -3274,14 +3267,14 @@ static int flx_plain_number (hak_t* hak, hak_ooci_t c) /* number */ if (pn->digit_count[0] == 0) { - hak_setsynerrbfmt(hak, HAK_SYNERR_NUMLIT, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_NUMLIT, TOKEN_LOC(hak), "invalid numeric literal with no digit after '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); return -1; } else if (pn->fpdec && pn->digit_count[1] == 0) { - hak_setsynerrbfmt(hak, HAK_SYNERR_NUMLIT, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_NUMLIT, TOKEN_LOC(hak), "invalid numeric literal with no digit after decimal point '%.*js'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); return -1; @@ -3337,7 +3330,7 @@ static int flx_plain_number (hak_t* hak, hak_ooci_t c) /* number */ /* 16rABCD */ if (pn->radix_cand_overflown || pn->radix_cand < 2 || pn->radix_cand > 36) { - hak_setsynerrbfmt(hak, HAK_SYNERR_NUMLIT, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_NUMLIT, TOKEN_LOC(hak), "unsupported radix '%.*js' before '%jc'", TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak), c); return -1; @@ -3350,7 +3343,7 @@ static int flx_plain_number (hak_t* hak, hak_ooci_t c) /* number */ goto consumed; } - hak_setsynerrbfmt(hak, HAK_SYNERR_NUMLIT, TOKEN_LOC(hak), HAK_NULL, + hak_setsynerrbfmt(hak, HAK_SYNERR_NUMLIT, TOKEN_LOC(hak), "invalid numeric literal character '%jc' after '%.*js'", c, TOKEN_NAME_LEN(hak), TOKEN_NAME_PTR(hak)); return -1; @@ -3543,7 +3536,7 @@ consumed: return 1; invalid_token: - hak_setsynerr(hak, qt->synerr_code, &synerr_loc, HAK_NULL); + hak_setsynerrbfmt(hak, qt->synerr_code, &synerr_loc, "%hs", hak_synerr_to_errbcstr(qt->synerr_code)); return -1; } diff --git a/lib/xma.c b/lib/xma.c index 16286b2..e763f8d 100644 --- a/lib/xma.c +++ b/lib/xma.c @@ -837,8 +837,8 @@ void hak_xma_free (hak_xma_t* xma, void* b) mblk_size(x) += MBLKHDRSIZE + org_blk_size; - assert(y == next_mblk(x)); - if ((hak_uint8_t*)y < xma->end) mblk_prev_size(y) = mblk_size(x); + assert(y == (hak_uint8_t*)next_mblk(x)); + if (y < xma->end) mblk_prev_size(y) = mblk_size(x); attach_to_freelist(xma, (hak_xma_fblk_t*)x); diff --git a/t/call-5001.err b/t/call-5001.err index 3bd86a4..07f8237 100644 --- a/t/call-5001.err +++ b/t/call-5001.err @@ -1,3 +1,12 @@ + +continue 99 ##ERROR: syntax error - excessive argument to 'continue' around '99' + +--- + +break "hello" 20 ##ERROR: syntax error - excessive argument to 'break' around 'hello' + +--- + return ##ERROR: syntax error - no value specified for 'return' ---