removed the tgt argument values to syntax error formatting function

This commit is contained in:
2025-10-19 12:24:15 +09:00
parent 8c6235be16
commit 31a673e185
10 changed files with 356 additions and 392 deletions

View File

@ -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

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -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,17 +712,14 @@ 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 - ";
if (hak->shuterr) return;
if (msgfmt)
{
va_list ap;
int i, selen;
if (hak->shuterr) return;
va_start(ap, msgfmt);
hak_seterrbfmtv(hak, HAK_ESYNERR, msgfmt, ap);
va_end(ap);
@ -731,11 +728,7 @@ void hak_setsynerrbfmt (hak_t* hak, hak_synerrnum_t num, const hak_loc_t* loc, c
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,17 +746,14 @@ 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 - ";
if (hak->shuterr) return;
if (msgfmt)
{
va_list ap;
int i, selen;
if (hak->shuterr) return;
va_start(ap, msgfmt);
hak_seterrufmtv(hak, HAK_ESYNERR, msgfmt, ap);
va_end(ap);
@ -772,11 +762,7 @@ void hak_setsynerrufmt (hak_t* hak, hak_synerrnum_t num, const hak_loc_t* loc, c
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:

View File

@ -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

View File

@ -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,35 +2239,35 @@ 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,
@ -2289,7 +2275,7 @@ HAK_EXPORT void hak_seterrbfmtwithsyserr (
int syserr_code,
const hak_bch_t* fmt,
...
);
) HAK_NONNULL_2(1,4);
HAK_EXPORT void hak_seterrufmtwithsyserr (
hak_t* hak,
@ -2297,21 +2283,21 @@ HAK_EXPORT void hak_seterrufmtwithsyserr (
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

View File

@ -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;
}

View File

@ -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);

View File

@ -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'
---