some code reformatting

This commit is contained in:
2025-09-05 01:16:24 +09:00
parent ad510b1436
commit 4d3172e552
5 changed files with 780 additions and 737 deletions

View File

@ -231,7 +231,7 @@ static int handle_logopt (hak_t* hak, const hak_bch_t* logstr)
if (i >= HAK_COUNTOF(xtab)) if (i >= HAK_COUNTOF(xtab))
{ {
fprintf (stderr, "ERROR: unrecognized value - [%.*s] - [%s]\n", (int)tlen, flt, logstr); fprintf(stderr, "ERROR: unrecognized value - [%.*s] - [%s]\n", (int)tlen, flt, logstr);
return -1; return -1;
} }
} }
@ -273,7 +273,7 @@ static int handle_dbgopt (hak_t* hak, const hak_bch_t* str)
else if (hak_comp_bchars_bcstr(flt, len, "bigint") == 0) dbgopt |= HAK_TRAIT_DEBUG_BIGINT; else if (hak_comp_bchars_bcstr(flt, len, "bigint") == 0) dbgopt |= HAK_TRAIT_DEBUG_BIGINT;
else else
{ {
fprintf (stderr, "ERROR: unknown debug option value - %.*s\n", (int)len, flt); fprintf(stderr, "ERROR: unknown debug option value - %.*s\n", (int)len, flt);
return -1; return -1;
} }
} }
@ -380,21 +380,21 @@ static void print_synerr (hak_t* hak)
xtn = (xtn_t*)hak_getxtn(hak); xtn = (xtn_t*)hak_getxtn(hak);
hak_getsynerr (hak, &synerr); hak_getsynerr (hak, &synerr);
hak_logbfmt (hak,HAK_LOG_STDERR, "ERROR: "); hak_logbfmt(hak,HAK_LOG_STDERR, "ERROR: ");
if (synerr.loc.file) if (synerr.loc.file)
hak_logbfmt (hak, HAK_LOG_STDERR, "%js", synerr.loc.file); hak_logbfmt(hak, HAK_LOG_STDERR, "%js", synerr.loc.file);
else else
hak_logbfmt (hak, HAK_LOG_STDERR, "%hs", xtn->cci_path); hak_logbfmt(hak, HAK_LOG_STDERR, "%hs", xtn->cci_path);
hak_logbfmt (hak, HAK_LOG_STDERR, "[%zu,%zu] %js", hak_logbfmt(hak, HAK_LOG_STDERR, "[%zu,%zu] %js",
synerr.loc.line, synerr.loc.colm, synerr.loc.line, synerr.loc.colm,
(hak_geterrmsg(hak) != hak_geterrstr(hak)? hak_geterrmsg(hak): hak_geterrstr(hak)) (hak_geterrmsg(hak) != hak_geterrstr(hak)? hak_geterrmsg(hak): hak_geterrstr(hak))
); );
if (synerr.tgt.len > 0) if (synerr.tgt.len > 0)
hak_logbfmt (hak, HAK_LOG_STDERR, " - %.*js", synerr.tgt.len, synerr.tgt.val); hak_logbfmt(hak, HAK_LOG_STDERR, " - %.*js", synerr.tgt.len, synerr.tgt.val);
hak_logbfmt (hak, HAK_LOG_STDERR, "\n"); hak_logbfmt(hak, HAK_LOG_STDERR, "\n");
} }
static void print_other_error (hak_t* hak) static void print_other_error (hak_t* hak)
@ -405,22 +405,22 @@ static void print_other_error (hak_t* hak)
xtn = (xtn_t*)hak_getxtn(hak); xtn = (xtn_t*)hak_getxtn(hak);
hak_geterrloc(hak, &loc); hak_geterrloc(hak, &loc);
hak_logbfmt (hak,HAK_LOG_STDERR, "ERROR: "); hak_logbfmt(hak,HAK_LOG_STDERR, "ERROR: ");
if (loc.file) if (loc.file)
hak_logbfmt (hak, HAK_LOG_STDERR, "%js", loc.file); hak_logbfmt(hak, HAK_LOG_STDERR, "%js", loc.file);
else else
hak_logbfmt (hak, HAK_LOG_STDERR, "%hs", xtn->cci_path); hak_logbfmt(hak, HAK_LOG_STDERR, "%hs", xtn->cci_path);
hak_logbfmt (hak, HAK_LOG_STDERR, "[%zu,%zu] %js", loc.line, loc.colm, hak_geterrmsg(hak)); hak_logbfmt(hak, HAK_LOG_STDERR, "[%zu,%zu] %js", loc.line, loc.colm, hak_geterrmsg(hak));
hak_logbfmt (hak, HAK_LOG_STDERR, "\n"); hak_logbfmt(hak, HAK_LOG_STDERR, "\n");
} }
static void print_error (hak_t* hak, const hak_bch_t* msghdr) static void print_error (hak_t* hak, const hak_bch_t* msghdr)
{ {
if (HAK_ERRNUM(hak) == HAK_ESYNERR) print_synerr (hak); if (HAK_ERRNUM(hak) == HAK_ESYNERR) print_synerr (hak);
else print_other_error (hak); else print_other_error (hak);
/*else hak_logbfmt (hak, HAK_LOG_STDERR, "ERROR: %hs - [%d] %js\n", msghdr, hak_geterrnum(hak), hak_geterrmsg(hak));*/ /*else hak_logbfmt(hak, HAK_LOG_STDERR, "ERROR: %hs - [%d] %js\n", msghdr, hak_geterrnum(hak), hak_geterrmsg(hak));*/
} }
@ -435,17 +435,17 @@ static void print_incomplete_expression_error (hak_t* hak)
xtn = hak_getxtn(hak); xtn = hak_getxtn(hak);
hak_getfeedloc (hak, &loc); hak_getfeedloc (hak, &loc);
hak_logbfmt (hak, HAK_LOG_STDERR, "ERROR: "); hak_logbfmt(hak, HAK_LOG_STDERR, "ERROR: ");
if (loc.file) if (loc.file)
hak_logbfmt (hak, HAK_LOG_STDERR, "%js", loc.file); hak_logbfmt(hak, HAK_LOG_STDERR, "%js", loc.file);
else else
hak_logbfmt (hak, HAK_LOG_STDERR, "%hs", xtn->cci_path); hak_logbfmt(hak, HAK_LOG_STDERR, "%hs", xtn->cci_path);
/* if the input is like this /* if the input is like this
* a := 2; c := { * a := 2; c := {
* the second expression is incompelete. however, the whole input is not executed. * the second expression is incompelete. however, the whole input is not executed.
* the number of compiled expressions so far is in xtn->feed.ncompexprs, however */ * the number of compiled expressions so far is in xtn->feed.ncompexprs, however */
hak_logbfmt (hak, HAK_LOG_STDERR, "[%zu,%zu] incomplete expression\n", loc.line, loc.colm); hak_logbfmt(hak, HAK_LOG_STDERR, "[%zu,%zu] incomplete expression\n", loc.line, loc.colm);
} }
#endif #endif
@ -454,8 +454,8 @@ static void show_prompt (hak_t* hak, int level)
/* TODO: different prompt per level */ /* TODO: different prompt per level */
hak_resetfeedloc (hak); /* restore the line number to 1 in the interactive mode */ hak_resetfeedloc (hak); /* restore the line number to 1 in the interactive mode */
#if !defined(USE_ISOCLINE) #if !defined(USE_ISOCLINE)
hak_logbfmt (hak, HAK_LOG_STDOUT, "HAK> "); hak_logbfmt(hak, HAK_LOG_STDOUT, "HAK> ");
hak_logbfmt (hak, HAK_LOG_STDOUT, HAK_NULL); /* flushing */ hak_logbfmt(hak, HAK_LOG_STDOUT, HAK_NULL); /* flushing */
#endif #endif
} }
@ -480,7 +480,7 @@ static hak_oop_t execute_in_interactive_mode (hak_t* hak)
else else
{ {
/* print the result in the interactive mode regardless 'verbose' */ /* print the result in the interactive mode regardless 'verbose' */
hak_logbfmt (hak, HAK_LOG_STDOUT, "%O\n", retv); /* TODO: show this go to the output handler?? */ hak_logbfmt(hak, HAK_LOG_STDOUT, "%O\n", retv); /* TODO: show this go to the output handler?? */
/* /*
* print the value of ERRSTR. * print the value of ERRSTR.
hak_oop_cons_t cons = hak_getatsysdic(hak, xtn->sym_errstr); hak_oop_cons_t cons = hak_getatsysdic(hak, xtn->sym_errstr);
@ -519,7 +519,7 @@ static hak_oop_t execute_in_batch_mode(hak_t* hak, int verbose)
hak_marshalcodetomem(hak, &hak->code, &mem); hak_marshalcodetomem(hak, &hak->code, &mem);
hak_unmarshalcodefrommem(hak, &xcode, (const hak_ptl_t*)&mem); hak_unmarshalcodefrommem(hak, &xcode, (const hak_ptl_t*)&mem);
hak_freemem (hak, mem.ptr); hak_freemem(hak, mem.ptr);
hak_decode(hak, &xcode, 0, xcode.bc.len); hak_decode(hak, &xcode, 0, xcode.bc.len);
hak_purgecode (hak, &xcode); hak_purgecode (hak, &xcode);
@ -531,7 +531,7 @@ static hak_oop_t execute_in_batch_mode(hak_t* hak, int verbose)
hak_flushudio (hak); hak_flushudio (hak);
if (!retv) print_error (hak, "execute"); if (!retv) print_error (hak, "execute");
else if (verbose) hak_logbfmt (hak, HAK_LOG_STDERR, "EXECUTION OK - EXITED WITH %O\n", retv); else if (verbose) hak_logbfmt(hak, HAK_LOG_STDERR, "EXECUTION OK - EXITED WITH %O\n", retv);
/*cancel_tick();*/ /*cancel_tick();*/
g_hak = HAK_NULL; g_hak = HAK_NULL;
@ -636,7 +636,7 @@ static int get_line (hak_t* hak, xtn_t* xtn, FILE* fp)
{ {
if (ferror(fp)) if (ferror(fp))
{ {
hak_logbfmt (hak, HAK_LOG_STDERR, "ERROR: failed to read - %hs - %hs\n", xtn->cci_path, strerror(errno)); hak_logbfmt(hak, HAK_LOG_STDERR, "ERROR: failed to read - %hs - %hs\n", xtn->cci_path, strerror(errno));
return -1; return -1;
} }
@ -670,7 +670,7 @@ static int feed_loop (hak_t* hak, xtn_t* xtn, int verbose)
fp = fopen(xtn->cci_path, FOPEN_R_FLAGS); fp = fopen(xtn->cci_path, FOPEN_R_FLAGS);
if (!fp) if (!fp)
{ {
hak_logbfmt (hak, HAK_LOG_STDERR, "ERROR: failed to open - %hs - %hs\n", xtn->cci_path, strerror(errno)); hak_logbfmt(hak, HAK_LOG_STDERR, "ERROR: failed to open - %hs - %hs\n", xtn->cci_path, strerror(errno));
goto oops; goto oops;
} }
#endif #endif
@ -686,7 +686,7 @@ static int feed_loop (hak_t* hak, xtn_t* xtn, int verbose)
/*if (hak_beginfeed(hak, is_tty? on_fed_cnode_in_interactive_mode: HAK_NULL) <= -1)*/ /*if (hak_beginfeed(hak, is_tty? on_fed_cnode_in_interactive_mode: HAK_NULL) <= -1)*/
if (hak_beginfeed(hak, is_tty? on_fed_cnode_in_interactive_mode: on_fed_cnode_in_batch_mode) <= -1) if (hak_beginfeed(hak, is_tty? on_fed_cnode_in_interactive_mode: on_fed_cnode_in_batch_mode) <= -1)
{ {
hak_logbfmt (hak, HAK_LOG_STDERR, "ERROR: cannot begin feed - [%d] %js\n", hak_geterrnum(hak), hak_geterrmsg(hak)); hak_logbfmt(hak, HAK_LOG_STDERR, "ERROR: cannot begin feed - [%d] %js\n", hak_geterrnum(hak), hak_geterrmsg(hak));
goto oops; goto oops;
} }
@ -773,7 +773,7 @@ static int feed_loop (hak_t* hak, xtn_t* xtn, int verbose)
* this results in the OS prompt on the same line as this program's prompt. * this results in the OS prompt on the same line as this program's prompt.
* however ISOCLINE prints a newline upon ctrl-D. print \n when ISOCLINE is * however ISOCLINE prints a newline upon ctrl-D. print \n when ISOCLINE is
* not used */ * not used */
hak_logbfmt (hak, HAK_LOG_STDOUT, "\n"); hak_logbfmt(hak, HAK_LOG_STDOUT, "\n");
#endif #endif
} }
else else
@ -790,7 +790,7 @@ static int feed_loop (hak_t* hak, xtn_t* xtn, int verbose)
{ {
if (ferror(fp)) if (ferror(fp))
{ {
hak_logbfmt (hak, HAK_LOG_STDERR, "ERROR: failed to read - %hs - %hs\n", xtn->cci_path, strerror(errno)); hak_logbfmt(hak, HAK_LOG_STDERR, "ERROR: failed to read - %hs - %hs\n", xtn->cci_path, strerror(errno));
goto oops; goto oops;
} }
break; break;
@ -852,15 +852,15 @@ int main (int argc, char* argv[])
const char* dbgopt = HAK_NULL; const char* dbgopt = HAK_NULL;
#endif #endif
setlocale (LC_ALL, ""); setlocale(LC_ALL, "");
#if !defined(macintosh) #if !defined(macintosh)
if (argc < 2) if (argc < 2)
{ {
print_usage: print_usage:
fprintf (stderr, "Usage: %s [options] script-filename [output-filename]\n", argv[0]); fprintf(stderr, "Usage: %s [options] script-filename [output-filename]\n", argv[0]);
fprintf (stderr, "Options are:\n"); fprintf(stderr, "Options are:\n");
fprintf (stderr, " -v show verbose messages\n"); fprintf(stderr, " -v show verbose messages\n");
return -1; return -1;
} }
@ -904,9 +904,9 @@ int main (int argc, char* argv[])
case ':': case ':':
if (opt.lngopt) if (opt.lngopt)
fprintf (stderr, "bad argument for '%s'\n", opt.lngopt); fprintf(stderr, "bad argument for '%s'\n", opt.lngopt);
else else
fprintf (stderr, "bad argument for '%c'\n", opt.opt); fprintf(stderr, "bad argument for '%c'\n", opt.opt);
return -1; return -1;
@ -953,21 +953,21 @@ int main (int argc, char* argv[])
tmp = hak_dupbtoucstr(hak, modlibdirs, HAK_NULL); tmp = hak_dupbtoucstr(hak, modlibdirs, HAK_NULL);
if (HAK_UNLIKELY(!tmp)) if (HAK_UNLIKELY(!tmp))
{ {
hak_logbfmt (hak, HAK_LOG_STDERR,"ERROR: cannot duplicate modlibdirs - [%d] %js\n", hak_geterrnum(hak), hak_geterrmsg(hak)); hak_logbfmt(hak, HAK_LOG_STDERR,"ERROR: cannot duplicate modlibdirs - [%d] %js\n", hak_geterrnum(hak), hak_geterrmsg(hak));
goto oops; goto oops;
} }
if (hak_setoption(hak, HAK_MOD_LIBDIRS, tmp) <= -1) if (hak_setoption(hak, HAK_MOD_LIBDIRS, tmp) <= -1)
{ {
hak_logbfmt (hak, HAK_LOG_STDERR,"ERROR: cannot set modlibdirs - [%d] %js\n", hak_geterrnum(hak), hak_geterrmsg(hak)); hak_logbfmt(hak, HAK_LOG_STDERR,"ERROR: cannot set modlibdirs - [%d] %js\n", hak_geterrnum(hak), hak_geterrmsg(hak));
hak_freemem (hak, tmp); hak_freemem(hak, tmp);
goto oops; goto oops;
} }
hak_freemem (hak, tmp); hak_freemem(hak, tmp);
#else #else
if (hak_setoption(hak, HAK_MOD_LIBDIRS, modlibdirs) <= -1) if (hak_setoption(hak, HAK_MOD_LIBDIRS, modlibdirs) <= -1)
{ {
hak_logbfmt (hak, HAK_LOG_STDERR,"ERROR: cannot set modlibdirs - [%d] %js\n", hak_geterrnum(hak), hak_geterrmsg(hak)); hak_logbfmt(hak, HAK_LOG_STDERR,"ERROR: cannot set modlibdirs - [%d] %js\n", hak_geterrnum(hak), hak_geterrmsg(hak));
goto oops; goto oops;
} }
#endif #endif
@ -1000,13 +1000,13 @@ int main (int argc, char* argv[])
if (hak_ignite(hak, heapsize) <= -1) if (hak_ignite(hak, heapsize) <= -1)
{ {
hak_logbfmt (hak, HAK_LOG_STDERR, "cannot ignite hak - [%d] %js\n", hak_geterrnum(hak), hak_geterrmsg(hak)); hak_logbfmt(hak, HAK_LOG_STDERR, "cannot ignite hak - [%d] %js\n", hak_geterrnum(hak), hak_geterrmsg(hak));
goto oops; goto oops;
} }
if (hak_addbuiltinprims(hak) <= -1) if (hak_addbuiltinprims(hak) <= -1)
{ {
hak_logbfmt (hak, HAK_LOG_STDERR, "cannot add builtin primitives - [%d] %js\n", hak_geterrnum(hak), hak_geterrmsg(hak)); hak_logbfmt(hak, HAK_LOG_STDERR, "cannot add builtin primitives - [%d] %js\n", hak_geterrnum(hak), hak_geterrmsg(hak));
goto oops; goto oops;
} }
@ -1015,19 +1015,19 @@ int main (int argc, char* argv[])
if (hak_attachcciostdwithbcstr(hak, xtn->cci_path) <= -1) if (hak_attachcciostdwithbcstr(hak, xtn->cci_path) <= -1)
{ {
hak_logbfmt (hak, HAK_LOG_STDERR, "ERROR: cannot attach source input stream - [%d] %js\n", hak_geterrnum(hak), hak_geterrmsg(hak)); hak_logbfmt(hak, HAK_LOG_STDERR, "ERROR: cannot attach source input stream - [%d] %js\n", hak_geterrnum(hak), hak_geterrmsg(hak));
goto oops; goto oops;
} }
if (hak_attachudiostdwithbcstr(hak, "", xtn->udo_path) <= -1) /* TODO: add udi path */ if (hak_attachudiostdwithbcstr(hak, "", xtn->udo_path) <= -1) /* TODO: add udi path */
{ {
hak_logbfmt (hak, HAK_LOG_STDERR, "ERROR: cannot attach user data streams - [%d] %js\n", hak_geterrnum(hak), hak_geterrmsg(hak)); hak_logbfmt(hak, HAK_LOG_STDERR, "ERROR: cannot attach user data streams - [%d] %js\n", hak_geterrnum(hak), hak_geterrmsg(hak));
goto oops; goto oops;
} }
/* -- from this point onward, any failure leads to jumping to the oops label /* -- from this point onward, any failure leads to jumping to the oops label
* -- instead of returning -1 immediately. --*/ * -- instead of returning -1 immediately. --*/
set_signal (SIGINT, handle_sigint); set_signal(SIGINT, handle_sigint);
#if 0 #if 0
// TODO: change the option name // TODO: change the option name
@ -1043,13 +1043,13 @@ int main (int argc, char* argv[])
if (feed_loop(hak, xtn, verbose) <= -1) goto oops; if (feed_loop(hak, xtn, verbose) <= -1) goto oops;
set_signal_to_default (SIGINT); set_signal_to_default(SIGINT);
hak_close (hak); hak_close(hak);
return 0; return 0;
oops: oops:
set_signal_to_default (SIGINT); /* harmless to call multiple times without set_signal() */ set_signal_to_default(SIGINT); /* harmless to call multiple times without set_signal() */
if (hak) hak_close (hak); if (hak) hak_close(hak);
return -1; return -1;
} }

View File

@ -221,14 +221,14 @@ static int add_temporary_variable (hak_t* hak, const hak_cnode_t* var, hak_oow_t
{ {
if (tgt) if (tgt)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_VARNAMEDUP, HAK_CNODE_GET_LOC(var), HAK_NULL, hak, HAK_SYNERR_VARNAMEDUP, HAK_CNODE_GET_LOC(var), HAK_NULL,
"duplicate %hs name '%.*js' for '%.*js'", "duplicate %hs name '%.*js' for '%.*js'",
desc, name->len, name->ptr, tgt->len, tgt->ptr); desc, name->len, name->ptr, tgt->len, tgt->ptr);
} }
else else
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_VARNAMEDUP, HAK_CNODE_GET_LOC(var), HAK_NULL, hak, HAK_SYNERR_VARNAMEDUP, HAK_CNODE_GET_LOC(var), HAK_NULL,
"duplicate %hs name '%.*js'", "duplicate %hs name '%.*js'",
desc, name->len, name->ptr); desc, name->len, name->ptr);
@ -305,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 || 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)) (__find_word_in_string((hak_oocs_t*)altdst, name, 0, HAK_NULL) >= 0))
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_VARNAMEDUP, HAK_CNODE_GET_LOC(var), HAK_NULL, hak, HAK_SYNERR_VARNAMEDUP, HAK_CNODE_GET_LOC(var), HAK_NULL,
"duplicate %hs variable name '%.*js'", desc, name->len, name->ptr); "duplicate %hs variable name '%.*js'", desc, name->len, name->ptr);
return -1; return -1;
@ -541,7 +541,7 @@ static int check_block_expression_as_body (hak_t* hak, hak_cnode_t* c, const hak
HAK_CNODE_IS_ELIST_CONCODED(car, HAK_CONCODE_VLIST))) HAK_CNODE_IS_ELIST_CONCODED(car, HAK_CONCODE_VLIST)))
{ {
no_block: no_block:
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_BLOCK, 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)), HAK_NULL,
"block expression expected as '%.*js' body", HAK_CNODE_GET_TOKLEN(ctx), HAK_CNODE_GET_TOKPTR(ctx) "block expression expected as '%.*js' body", HAK_CNODE_GET_TOKLEN(ctx), HAK_CNODE_GET_TOKPTR(ctx)
@ -585,7 +585,7 @@ static int check_block_expression_as_body (hak_t* hak, hak_cnode_t* c, const hak
} }
} }
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(cdr), HAK_NULL, hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(cdr), HAK_NULL,
"redundant expression prohibited after '%.*js' body", "redundant expression prohibited after '%.*js' body",
HAK_CNODE_GET_TOKLEN(ctx), HAK_CNODE_GET_TOKPTR(ctx) HAK_CNODE_GET_TOKLEN(ctx), HAK_CNODE_GET_TOKPTR(ctx)
@ -1291,7 +1291,7 @@ static void pop_funblk (hak_t* hak)
/* patch the temporaries mask parameter for the MAKE_BLOCK or MAKE_FUNCTION instruction */ /* patch the temporaries mask parameter for the MAKE_BLOCK or MAKE_FUNCTION instruction */
HAK_ASSERT(hak, hak->code.bc.ptr[fbi->make_inst_pos] == HAK_CODE_MAKE_BLOCK || HAK_ASSERT(hak, hak->code.bc.ptr[fbi->make_inst_pos] == HAK_CODE_MAKE_BLOCK ||
hak->code.bc.ptr[fbi->make_inst_pos] == HAK_CODE_MAKE_FUNCTION); hak->code.bc.ptr[fbi->make_inst_pos] == HAK_CODE_MAKE_FUNCTION);
/* the total number of temporaries in this function block must be the sum of /* the total number of temporaries in this function block must be the sum of
* the number of arguments, return variables and local variables */ * the number of arguments, return variables and local variables */
@ -1479,7 +1479,7 @@ static int collect_vardcl_for_class (hak_t* hak, hak_cnode_t* obj, hak_cnode_t**
if (enclosed) if (enclosed)
{ {
synerr_varname: synerr_varname:
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(var), HAK_NULL, hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(var), HAK_NULL,
"not variable name '%.*js'", HAK_CNODE_GET_TOKLEN(var), HAK_CNODE_GET_TOKPTR(var)); "not variable name '%.*js'", HAK_CNODE_GET_TOKLEN(var), HAK_CNODE_GET_TOKPTR(var));
return -1; return -1;
@ -1507,7 +1507,7 @@ static int collect_vardcl_for_class (hak_t* hak, hak_cnode_t* obj, hak_cnode_t**
/* class variable */ /* class variable */
if (vardcl->nivars >= MAX_NCVARS) if (vardcl->nivars >= MAX_NCVARS)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_VARFLOOD, HAK_CNODE_GET_LOC(var), HAK_NULL, hak, HAK_SYNERR_VARFLOOD, HAK_CNODE_GET_LOC(var), HAK_NULL,
"too many(%zu) class variables before '%.*js'", "too many(%zu) class variables before '%.*js'",
vardcl->nivars, HAK_CNODE_GET_TOKLEN(var), HAK_CNODE_GET_TOKPTR(var)); vardcl->nivars, HAK_CNODE_GET_TOKLEN(var), HAK_CNODE_GET_TOKPTR(var));
@ -1524,7 +1524,7 @@ static int collect_vardcl_for_class (hak_t* hak, hak_cnode_t* obj, hak_cnode_t**
/* instance variable */ /* instance variable */
if (vardcl->nivars >= MAX_NIVARS) if (vardcl->nivars >= MAX_NIVARS)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_VARFLOOD, HAK_CNODE_GET_LOC(var), HAK_NULL, hak, HAK_SYNERR_VARFLOOD, HAK_CNODE_GET_LOC(var), HAK_NULL,
"too many(%zu) instance variables before '%.*js'", "too many(%zu) instance variables before '%.*js'",
vardcl->nivars, HAK_CNODE_GET_TOKLEN(var), HAK_CNODE_GET_TOKPTR(var)); vardcl->nivars, HAK_CNODE_GET_TOKLEN(var), HAK_CNODE_GET_TOKPTR(var));
@ -1588,7 +1588,7 @@ static int collect_vardcl (hak_t* hak, hak_cnode_t* obj, hak_cnode_t** nextobj,
#if 0 #if 0
if (!HAK_CNODE_IS_SYMBOL(var)) if (!HAK_CNODE_IS_SYMBOL(var))
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_ARGNAME, HAK_CNODE_GET_LOC(var), HAK_NULL, hak, HAK_SYNERR_ARGNAME, HAK_CNODE_GET_LOC(var), HAK_NULL,
"invalid local variable name '%.*js'", "invalid local variable name '%.*js'",
HAK_CNODE_GET_TOKLEN(var), HAK_CNODE_GET_TOKPTR(var)); HAK_CNODE_GET_TOKLEN(var), HAK_CNODE_GET_TOKPTR(var));
@ -2050,7 +2050,7 @@ static int compile_break (hak_t* hak, hak_cnode_t* src)
} }
} }
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_BREAK, HAK_CNODE_GET_LOC(src), HAK_NULL, hak, HAK_SYNERR_BREAK, HAK_CNODE_GET_LOC(src), HAK_NULL,
"%.*js outside loop", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); "%.*js outside loop", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd));
return -1; return -1;
@ -2090,7 +2090,7 @@ inside_loop:
/* this part must no be reached. if a loop control block is found, /* 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 */ * there must exist a COP_POST_UNTIL_BODY or COP_POST_WHILE_BODY frame */
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_INTERN, HAK_CNODE_GET_LOC(src), HAK_NULL, 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)); "internal error in compiling %.*js", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd));
return -1; return -1;
@ -2225,7 +2225,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 */ obj = HAK_CNODE_CONS_CDR(src); /* expression list after it */
if (obj && !HAK_CNODE_IS_CONS(obj)) if (obj && !HAK_CNODE_IS_CONS(obj))
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), HAK_CNODE_GET_TOK(obj), hak, HAK_SYNERR_DOTBANNED, HAK_CNODE_GET_LOC(obj), HAK_CNODE_GET_TOK(obj),
"redundant cdr in %.*js", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); "redundant cdr in %.*js", HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd));
return -1; return -1;
@ -2236,7 +2236,7 @@ static int compile_expression_block (hak_t* hak, hak_cnode_t* src, const hak_bch
{ {
if (is_in_class_init_scope(hak)) if (is_in_class_init_scope(hak))
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_VARDCLBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, hak, HAK_SYNERR_VARDCLBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL,
"variable declaration disallowed in class init scope"); "variable declaration disallowed in class init scope");
return -1; return -1;
@ -2254,7 +2254,7 @@ static int compile_expression_block (hak_t* hak, hak_cnode_t* src, const hak_bch
* ^ * ^
* not allowed either * not allowed either
*/ */
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_VARDCLBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL, hak, HAK_SYNERR_VARDCLBANNED, HAK_CNODE_GET_LOC(obj), HAK_NULL,
"variable declaration disallowed in '%hs' context", ctxname); "variable declaration disallowed in '%hs' context", ctxname);
return -1; return -1;
@ -2270,7 +2270,7 @@ static int compile_expression_block (hak_t* hak, hak_cnode_t* src, const hak_bch
if (collect_vardcls(hak, obj, &obj, tvslen, &nlvars, ctxname) <= -1) return -1; if (collect_vardcls(hak, obj, &obj, tvslen, &nlvars, ctxname) <= -1) return -1;
if (nlvars > MAX_CODE_NBLKLVARS) if (nlvars > MAX_CODE_NBLKLVARS)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_VARFLOOD, HAK_CNODE_GET_LOC(tmp), HAK_NULL, hak, HAK_SYNERR_VARFLOOD, HAK_CNODE_GET_LOC(tmp), HAK_NULL,
"too many(%zu) variables in %.*js", nlvars, HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); "too many(%zu) variables in %.*js", nlvars, HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd));
return -1; return -1;
@ -2596,7 +2596,7 @@ static int check_class_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned i
/* don't allow empty attribute list */ /* don't allow empty attribute list */
if (class_name) if (class_name)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), HAK_NULL,
"empty attribute list on '%.*js' for '%.*js'", "empty attribute list on '%.*js' for '%.*js'",
HAK_CNODE_GET_TOKLEN(class_name), HAK_CNODE_GET_TOKPTR(class_name), HAK_CNODE_GET_TOKLEN(class_name), HAK_CNODE_GET_TOKPTR(class_name),
@ -2604,7 +2604,7 @@ static int check_class_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned i
} }
else else
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), HAK_NULL,
"empty attribute list on unnamed class for '%.*js'", "empty attribute list on unnamed class for '%.*js'",
HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd));
@ -2632,7 +2632,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)) if (!HAK_CNODE_IS_TYPED(attr, HAK_CNODE_SYMLIT))
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr), HAK_NULL,
"invalid class attribute name '%.*js'", toklen, tokptr); "invalid class attribute name '%.*js'", toklen, tokptr);
return -1; return -1;
@ -2663,7 +2663,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))) if (!!((ct >> attr_tab[i].shifts) & (attr_tab[i].mask | attr_tab[i].value)))
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr), HAK_NULL,
"conflicting or duplicate class attribute name '#%.*js'", toklen, tokptr); "conflicting or duplicate class attribute name '#%.*js'", toklen, tokptr);
return -1; return -1;
@ -2679,7 +2679,7 @@ static int check_class_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned i
if (lim <= 0) if (lim <= 0)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr), HAK_NULL,
"unrecognized class attribute name '#%.*js'", toklen, tokptr); "unrecognized class attribute name '#%.*js'", toklen, tokptr);
return -1; return -1;
@ -2763,7 +2763,7 @@ static int compile_class (hak_t* hak, hak_cnode_t* src)
{ {
if (!HAK_CNODE_IS_SYMBOL_IDENT(tmp)) if (!HAK_CNODE_IS_SYMBOL_IDENT(tmp))
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_CLASS, HAK_CNODE_GET_LOC(tmp), HAK_NULL, hak, HAK_SYNERR_CLASS, HAK_CNODE_GET_LOC(tmp), HAK_NULL,
"invalid class name '%.*js' for '%.*js'", "invalid class name '%.*js' for '%.*js'",
HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp), HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp),
@ -2780,7 +2780,7 @@ static int compile_class (hak_t* hak, hak_cnode_t* src)
{ {
if (class_name) if (class_name)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_CLASS, HAK_CNODE_GET_LOC(src), HAK_NULL, hak, HAK_SYNERR_CLASS, HAK_CNODE_GET_LOC(src), HAK_NULL,
"incomplete definition of '%.*js' for '%.*js'", "incomplete definition of '%.*js' for '%.*js'",
HAK_CNODE_GET_TOKLEN(class_name), HAK_CNODE_GET_TOKPTR(class_name), HAK_CNODE_GET_TOKLEN(class_name), HAK_CNODE_GET_TOKPTR(class_name),
@ -2788,7 +2788,7 @@ static int compile_class (hak_t* hak, hak_cnode_t* src)
} }
else else
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_CLASS, HAK_CNODE_GET_LOC(src), HAK_NULL, hak, HAK_SYNERR_CLASS, HAK_CNODE_GET_LOC(src), HAK_NULL,
"incomplete defintion of unnamed class for '%.*js'", "incomplete defintion of unnamed class for '%.*js'",
HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd));
@ -2807,7 +2807,7 @@ static int compile_class (hak_t* hak, hak_cnode_t* src)
obj = HAK_CNODE_CONS_CDR(obj); obj = HAK_CNODE_CONS_CDR(obj);
if (!obj || !HAK_CNODE_IS_CONS(obj)) if (!obj || !HAK_CNODE_IS_CONS(obj))
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_CLASS, HAK_CNODE_GET_LOC(marker), HAK_NULL, hak, HAK_SYNERR_CLASS, HAK_CNODE_GET_LOC(marker), HAK_NULL,
"no expression or declaration after %.*js", "no expression or declaration after %.*js",
HAK_CNODE_GET_TOKLEN(marker), HAK_CNODE_GET_TOKPTR(marker)); HAK_CNODE_GET_TOKLEN(marker), HAK_CNODE_GET_TOKPTR(marker));
@ -2820,7 +2820,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)) if (HAK_CNODE_IS_FOR_DATA_SIMPLE(superclass) || HAK_CNODE_IS_FOR_LANG(superclass))
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_CLASS, HAK_CNODE_GET_LOC(marker), HAK_NULL, hak, HAK_SYNERR_CLASS, HAK_CNODE_GET_LOC(marker), HAK_NULL,
"invalid superclass name '%.*js' after '%.*js' for '%.*js'", "invalid superclass name '%.*js' after '%.*js' for '%.*js'",
HAK_CNODE_GET_TOKLEN(superclass), HAK_CNODE_GET_TOKPTR(superclass), HAK_CNODE_GET_TOKLEN(superclass), HAK_CNODE_GET_TOKPTR(superclass),
@ -2829,7 +2829,7 @@ static int compile_class (hak_t* hak, hak_cnode_t* src)
} }
else else
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_CLASS, HAK_CNODE_GET_LOC(marker), HAK_NULL, hak, HAK_SYNERR_CLASS, HAK_CNODE_GET_LOC(marker), HAK_NULL,
"no valid superclass name after '%.*js' for '%.*js'", "no valid superclass name after '%.*js' for '%.*js'",
HAK_CNODE_GET_TOKLEN(marker), HAK_CNODE_GET_TOKPTR(marker), HAK_CNODE_GET_TOKLEN(marker), HAK_CNODE_GET_TOKPTR(marker),
@ -3092,7 +3092,7 @@ static int check_fun_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned int
/* don't allow empty attribute list */ /* don't allow empty attribute list */
if (class_name && fun_name) if (class_name && fun_name)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), HAK_NULL,
"empty attribute list on '%.*js:%.*js' for '%.*js'", "empty attribute list on '%.*js:%.*js' for '%.*js'",
HAK_CNODE_GET_TOKLEN(class_name), HAK_CNODE_GET_TOKPTR(class_name), HAK_CNODE_GET_TOKLEN(class_name), HAK_CNODE_GET_TOKPTR(class_name),
@ -3101,7 +3101,7 @@ static int check_fun_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned int
} }
else if (fun_name) else if (fun_name)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), HAK_NULL,
"empty attribute list on '%.*js' for '%.*js'", "empty attribute list on '%.*js' for '%.*js'",
HAK_CNODE_GET_TOKLEN(fun_name), HAK_CNODE_GET_TOKPTR(fun_name), HAK_CNODE_GET_TOKLEN(fun_name), HAK_CNODE_GET_TOKPTR(fun_name),
@ -3109,7 +3109,7 @@ static int check_fun_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned int
} }
else else
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), HAK_NULL,
"empty attribute list on unnamed function for '%.*js'", "empty attribute list on unnamed function for '%.*js'",
HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd));
@ -3133,7 +3133,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)) if (!HAK_CNODE_IS_TYPED(a, HAK_CNODE_SYMLIT))
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(a), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(a), HAK_NULL,
"invalid function attribute name '%.*js'", toklen, tokptr); "invalid function attribute name '%.*js'", toklen, tokptr);
return -1; return -1;
@ -3145,7 +3145,7 @@ static int check_fun_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned int
if (ft != FUN_IM) if (ft != FUN_IM)
{ {
conflicting: conflicting:
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(a), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(a), HAK_NULL,
"conflicting function attribute name '#%.*js'", toklen, tokptr); "conflicting function attribute name '#%.*js'", toklen, tokptr);
return -1; return -1;
@ -3160,7 +3160,7 @@ static int check_fun_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned int
} }
else else
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(a), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(a), HAK_NULL,
"unrecognized function attribute name '#%.*js'", toklen, tokptr); "unrecognized function attribute name '#%.*js'", toklen, tokptr);
return -1; return -1;
@ -3228,7 +3228,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src)
next = HAK_CNODE_CONS_CDR(next); next = HAK_CNODE_CONS_CDR(next);
if (!next) if (!next)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(fun_name), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(fun_name), HAK_NULL,
"function name '%.*js' not followed by ( or : for '%.*js'", "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(fun_name), HAK_CNODE_GET_TOKPTR(fun_name),
@ -3246,7 +3246,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src)
next = HAK_CNODE_CONS_CDR(next); next = HAK_CNODE_CONS_CDR(next);
if (!next) if (!next)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(class_name), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(class_name), HAK_NULL,
"no function name after class name '%.*js:' for '%.*js'", "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(class_name), HAK_CNODE_GET_TOKPTR(class_name),
@ -3257,7 +3257,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src)
tmp = HAK_CNODE_CONS_CAR(next); tmp = HAK_CNODE_CONS_CAR(next);
if (!HAK_CNODE_IS_SYMBOL(tmp)) if (!HAK_CNODE_IS_SYMBOL(tmp))
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(tmp), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(tmp), HAK_NULL,
"invalid function name '%.*js' after '%.*js:' for '%.*js'", "invalid function name '%.*js' after '%.*js:' for '%.*js'",
HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp), HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp),
@ -3270,7 +3270,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src)
next = HAK_CNODE_CONS_CDR(next); next = HAK_CNODE_CONS_CDR(next);
if (!next) if (!next)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(fun_name), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(fun_name), HAK_NULL,
"function name '%.*js:%.*js' not followed by ( for '%.*js'", "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(class_name), HAK_CNODE_GET_TOKPTR(class_name),
@ -3283,7 +3283,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src)
if (is_in_class_init_scope(hak)) if (is_in_class_init_scope(hak))
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(fun_name), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(fun_name), HAK_NULL,
"class name '%.*js' before :'%.*js' prohibited in class initialization context", "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(class_name), HAK_CNODE_GET_TOKPTR(class_name),
@ -3307,7 +3307,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src)
next = HAK_CNODE_CONS_CDR(next); /* point past argument list */ next = HAK_CNODE_CONS_CDR(next); /* point past argument list */
if (!next) if (!next)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(cmd), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(cmd), HAK_NULL,
"no function body after argument list of function '%.*js' for '%.*js'", "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(fun_name), HAK_CNODE_GET_TOKPTR(fun_name),
@ -3325,7 +3325,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src)
/* TODO: guess if the current list looks like attribute list or /* TODO: guess if the current list looks like attribute list or
* not by inspecting elements and produce better error mesage. * not by inspecting elements and produce better error mesage.
* another hack is to disallow ELIST as attribute list? */ * another hack is to disallow ELIST as attribute list? */
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(cmd), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(cmd), HAK_NULL,
"unnamed function not followed by function body for '%.*js'", "unnamed function not followed by function body for '%.*js'",
HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd));
@ -3350,7 +3350,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src)
next = HAK_CNODE_CONS_CDR(next); /* point past argument list */ next = HAK_CNODE_CONS_CDR(next); /* point past argument list */
if (!next) if (!next)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(cmd), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(cmd), HAK_NULL,
"no function body after attribute list and argument list of unnamed function for '%.*js'", "no function body after attribute list and argument list of unnamed function for '%.*js'",
HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd));
@ -3373,7 +3373,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src)
* fun() {} ## this is prohibited * fun() {} ## this is prohibited
* } * }
*/ */
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(cmd), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(cmd), HAK_NULL,
"unnamed function defined with '%.*js' prohibited in class initialziation context", "unnamed function defined with '%.*js' prohibited in class initialziation context",
HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd));
@ -3390,7 +3390,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src)
*/ */
if (fun_name) if (fun_name)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(tmp), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(tmp), HAK_NULL,
"'%.*js' not followed by ( but followed by '%.*js'", "'%.*js' not followed by ( but followed by '%.*js'",
HAK_CNODE_GET_TOKLEN(fun_name), HAK_CNODE_GET_TOKPTR(fun_name), HAK_CNODE_GET_TOKLEN(fun_name), HAK_CNODE_GET_TOKPTR(fun_name),
@ -3398,7 +3398,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src)
} }
else else
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(tmp), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(tmp), HAK_NULL,
"invalid function name '%.*js' for '%.*js'", "invalid function name '%.*js' for '%.*js'",
HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp), HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp),
@ -3410,7 +3410,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src)
else else
{ {
/* nothing after 'fun' (e.g. fun ) */ /* nothing after 'fun' (e.g. fun ) */
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(cmd), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(cmd), HAK_NULL,
"'%.*js' not followed by name or (", "'%.*js' not followed by name or (",
HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd));
@ -3433,14 +3433,14 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src)
{ {
if (fun_name) if (fun_name)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), HAK_NULL,
"attribute list prohibited on plain function '%.*js'", "attribute list prohibited on plain function '%.*js'",
HAK_CNODE_GET_TOKLEN(fun_name), HAK_CNODE_GET_TOKPTR(fun_name)); HAK_CNODE_GET_TOKLEN(fun_name), HAK_CNODE_GET_TOKPTR(fun_name));
} }
else else
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), HAK_NULL, hak, HAK_SYNERR_FUN, HAK_CNODE_GET_LOC(attr_list), HAK_NULL,
"attribute list prohibited on unnamed function for '%.*js'", "attribute list prohibited on unnamed function for '%.*js'",
HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd));
@ -3486,7 +3486,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 :: 20) { }', '20' is not a valid return variable name.
* in 'fun x (x :: if) { }', 'if' is not a valid return variable name. */ * in 'fun x (x :: if) { }', 'if' is not a valid return variable name. */
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(arg), HAK_NULL, hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(arg), HAK_NULL,
"invalid return variable '%.*js' for '%.*js'", "invalid return variable '%.*js' for '%.*js'",
HAK_CNODE_GET_TOKLEN(arg), HAK_CNODE_GET_TOKPTR(arg), HAK_CNODE_GET_TOKLEN(arg), HAK_CNODE_GET_TOKPTR(arg),
@ -3507,7 +3507,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src)
{ {
/* in 'fun x (... a) {}', 'a' is an unexpected token. /* in 'fun x (... a) {}', 'a' is an unexpected token.
* only ')' or '::' can follow ... */ * only ')' or '::' can follow ... */
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_CNODE, HAK_CNODE_GET_LOC(arg), HAK_NULL, hak, HAK_SYNERR_CNODE, HAK_CNODE_GET_LOC(arg), HAK_NULL,
"unexpected token '%.*js' after '...' for '%.*js'", "unexpected token '%.*js' after '...' for '%.*js'",
HAK_CNODE_GET_TOKLEN(arg), HAK_CNODE_GET_TOKPTR(arg), HAK_CNODE_GET_TOKLEN(arg), HAK_CNODE_GET_TOKPTR(arg),
@ -3527,7 +3527,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src)
} }
else if (!HAK_CNODE_IS_SYMBOL_IDENT(arg)) else if (!HAK_CNODE_IS_SYMBOL_IDENT(arg))
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_ARGNAME, HAK_CNODE_GET_LOC(arg), HAK_NULL, hak, HAK_SYNERR_ARGNAME, HAK_CNODE_GET_LOC(arg), HAK_NULL,
"invalid argument name '%.*js' for '%.*js'", "invalid argument name '%.*js' for '%.*js'",
HAK_CNODE_GET_TOKLEN(arg), HAK_CNODE_GET_TOKPTR(arg), HAK_CNODE_GET_TOKLEN(arg), HAK_CNODE_GET_TOKPTR(arg),
@ -3560,7 +3560,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src)
* block arguments, evaluation which is done by message passing * block arguments, evaluation which is done by message passing
* limits the number of arguments that can be passed. so the * limits the number of arguments that can be passed. so the
* check is implemented */ * check is implemented */
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_ARGFLOOD, HAK_CNODE_GET_LOC(arg_list), HAK_NULL, hak, HAK_SYNERR_ARGFLOOD, HAK_CNODE_GET_LOC(arg_list), HAK_NULL,
"too many(%zu) arguments in %.*js", nargs, "too many(%zu) arguments in %.*js", nargs,
HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd));
@ -3569,7 +3569,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src)
if (nrvars > MAX_CODE_NBLKLVARS) if (nrvars > MAX_CODE_NBLKLVARS)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_VARFLOOD, HAK_CNODE_GET_LOC(arg_list), HAK_NULL, hak, HAK_SYNERR_VARFLOOD, HAK_CNODE_GET_LOC(arg_list), HAK_NULL,
"too many(%zu) return variables in %.*js", nrvars, "too many(%zu) return variables in %.*js", nrvars,
HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd));
@ -3653,7 +3653,7 @@ static int check_var_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned int
/* don't allow empty attribute list */ /* don't allow empty attribute list */
if (class_name) if (class_name)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(attr_list), HAK_NULL, hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(attr_list), HAK_NULL,
"empty attribute list on '%.*js' in '%.*js' for '%.*js'", "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(var_name), HAK_CNODE_GET_TOKPTR(var_name),
@ -3662,7 +3662,7 @@ static int check_var_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned int
} }
else else
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(attr_list), HAK_NULL, hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(attr_list), HAK_NULL,
"empty attribute list on '%.*js' in unnamed class for '%.*js'", "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(var_name), HAK_CNODE_GET_TOKPTR(var_name),
@ -3687,7 +3687,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)) if (!HAK_CNODE_IS_TYPED(a, HAK_CNODE_SYMLIT))
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(a), HAK_NULL, hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(a), HAK_NULL,
"invalid variable attribute name '%.*js'", toklen, tokptr); "invalid variable attribute name '%.*js'", toklen, tokptr);
return -1; return -1;
@ -3699,7 +3699,7 @@ static int check_var_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned int
if (ft != VAR_INST) if (ft != VAR_INST)
{ {
conflicting: conflicting:
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(a), HAK_NULL, hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(a), HAK_NULL,
"conflicting variable attribute name '#%.*js'", toklen, tokptr); "conflicting variable attribute name '#%.*js'", toklen, tokptr);
return -1; return -1;
@ -3708,7 +3708,7 @@ static int check_var_attr_list (hak_t* hak, hak_cnode_t* attr_list, unsigned int
} }
else else
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(a), HAK_NULL, hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(a), HAK_NULL,
"unrecognized variable attribute name '#%.*js'", toklen, tokptr); "unrecognized variable attribute name '#%.*js'", toklen, tokptr);
return -1; return -1;
@ -3742,7 +3742,7 @@ static int compile_var (hak_t* hak, hak_cnode_t* src)
if (!next) if (!next)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(cmd), HAK_NULL, hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(cmd), HAK_NULL,
"'%.*js' not followed by name or (", "'%.*js' not followed by name or (",
HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd));
@ -3755,7 +3755,7 @@ static int compile_var (hak_t* hak, hak_cnode_t* src)
if (!is_in_class_init_scope(hak)) if (!is_in_class_init_scope(hak))
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(cmd), HAK_NULL, hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(cmd), HAK_NULL,
"'%.*js' prohibited in this context", "'%.*js' prohibited in this context",
HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd));
@ -3772,7 +3772,7 @@ static int compile_var (hak_t* hak, hak_cnode_t* src)
next = HAK_CNODE_CONS_CDR(next); next = HAK_CNODE_CONS_CDR(next);
if (!next) if (!next)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(attr_list), HAK_NULL, hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(attr_list), HAK_NULL,
"no name after attribute list for '%.*js'", "no name after attribute list for '%.*js'",
HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd));
@ -3795,7 +3795,7 @@ static int compile_var (hak_t* hak, hak_cnode_t* src)
{ {
if (cbi->nivars >= MAX_NIVARS) if (cbi->nivars >= MAX_NIVARS)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_VARFLOOD, HAK_CNODE_GET_LOC(tmp), HAK_NULL, hak, HAK_SYNERR_VARFLOOD, HAK_CNODE_GET_LOC(tmp), HAK_NULL,
"too many(%zu) instance variables before '%.*js'", "too many(%zu) instance variables before '%.*js'",
cbi->nivars, HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp)); cbi->nivars, HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp));
@ -3809,7 +3809,7 @@ static int compile_var (hak_t* hak, hak_cnode_t* src)
{ {
if (cbi->ncvars >= MAX_NCVARS) if (cbi->ncvars >= MAX_NCVARS)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_VARFLOOD, HAK_CNODE_GET_LOC(tmp), HAK_NULL, hak, HAK_SYNERR_VARFLOOD, HAK_CNODE_GET_LOC(tmp), HAK_NULL,
"too many(%zu) class variables before '%.*js'", "too many(%zu) class variables before '%.*js'",
cbi->ncvars, HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp)); cbi->ncvars, HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp));
@ -3829,7 +3829,7 @@ static int compile_var (hak_t* hak, hak_cnode_t* src)
else else
{ {
not_ident: not_ident:
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(tmp), HAK_NULL, hak, HAK_SYNERR_VAR, HAK_CNODE_GET_LOC(tmp), HAK_NULL,
"invalid variable name '%.*js' for '%.*js'", "invalid variable name '%.*js' for '%.*js'",
HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp), HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp),
@ -3889,7 +3889,7 @@ static int compile_return (hak_t* hak, hak_cnode_t* src, int ret_from_home)
if (ret_from_home) if (ret_from_home)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(src), HAK_NULL, hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(src), HAK_NULL,
"%.*js not compatible with return variables", "%.*js not compatible with return variables",
HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp)); HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp));
@ -3978,7 +3978,7 @@ static int compile_set (hak_t* hak, hak_cnode_t* src)
obj = HAK_CNODE_CONS_CDR(obj); obj = HAK_CNODE_CONS_CDR(obj);
if (!obj) if (!obj)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(var), HAK_NULL, hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(var), HAK_NULL,
"no value after '%.*js' for '%.*js'", "no value after '%.*js' for '%.*js'",
HAK_CNODE_GET_TOKLEN(var), HAK_CNODE_GET_TOKPTR(var), HAK_CNODE_GET_TOKLEN(var), HAK_CNODE_GET_TOKPTR(var),
@ -4074,7 +4074,7 @@ static int compile_set_r (hak_t* hak, hak_cnode_t* src)
if (!obj) if (!obj)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(var), HAK_NULL, hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(var), HAK_NULL,
"no value after '%.*js' for '%.*js'", "no value after '%.*js' for '%.*js'",
HAK_CNODE_GET_TOKLEN(var), HAK_CNODE_GET_TOKPTR(var), HAK_CNODE_GET_TOKLEN(var), HAK_CNODE_GET_TOKPTR(var),
@ -4280,7 +4280,7 @@ static HAK_INLINE int compile_catch (hak_t* hak)
exarg = HAK_CNODE_CONS_CAR(obj); exarg = HAK_CNODE_CONS_CAR(obj);
if (!HAK_CNODE_IS_CONS_CONCODED(exarg, HAK_CONCODE_XLIST) || hak_countcnodecons(hak, exarg) != 1) if (!HAK_CNODE_IS_CONS_CONCODED(exarg, HAK_CONCODE_XLIST) || hak_countcnodecons(hak, exarg) != 1)
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(exarg), HAK_NULL, hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(exarg), HAK_NULL,
"improper exception variable for '%.*js'", "improper exception variable for '%.*js'",
HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd)); HAK_CNODE_GET_TOKLEN(cmd), HAK_CNODE_GET_TOKPTR(cmd));
@ -4290,7 +4290,7 @@ static HAK_INLINE int compile_catch (hak_t* hak)
exarg = HAK_CNODE_CONS_CAR(exarg); exarg = HAK_CNODE_CONS_CAR(exarg);
if (!HAK_CNODE_IS_SYMBOL(exarg)) if (!HAK_CNODE_IS_SYMBOL(exarg))
{ {
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(exarg), HAK_NULL, hak, HAK_SYNERR_VARNAME, HAK_CNODE_GET_LOC(exarg), HAK_NULL,
"invalid exception variable name '%.*js' for '%.*js'", "invalid exception variable name '%.*js' for '%.*js'",
HAK_CNODE_GET_TOKLEN(exarg), HAK_CNODE_GET_TOKPTR(exarg), HAK_CNODE_GET_TOKLEN(exarg), HAK_CNODE_GET_TOKPTR(exarg),
@ -4414,7 +4414,7 @@ static int compile_throw (hak_t* hak, hak_cnode_t* src)
/* TODO: should i allow (throw)? does it return the last value on the stack? */ /* TODO: should i allow (throw)? does it return the last value on the stack? */
/* no value */ /* no value */
hak_cnode_t* tmp = HAK_CNODE_CONS_CAR(src); hak_cnode_t* tmp = HAK_CNODE_CONS_CAR(src);
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(src), HAK_NULL, hak, HAK_SYNERR_ARGCOUNT, HAK_CNODE_GET_LOC(src), HAK_NULL,
"no value or expression after '%.*js'", "no value or expression after '%.*js'",
HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp)); HAK_CNODE_GET_TOKLEN(tmp), HAK_CNODE_GET_TOKPTR(tmp));
@ -6559,7 +6559,7 @@ static HAK_INLINE int post_fun (hak_t* hak)
{ {
/* something wrong - this must not happen because the reader must prevent this /* something wrong - this must not happen because the reader must prevent this
* but if it happens, it is a syntax error */ * but if it happens, it is a syntax error */
hak_setsynerrbfmt ( hak_setsynerrbfmt(
hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(class_name), HAK_NULL, hak, HAK_SYNERR_BANNED, HAK_CNODE_GET_LOC(class_name), HAK_NULL,
"class name '%.js' prohibited class initialization context", "class name '%.js' prohibited class initialization context",
HAK_CNODE_GET_TOKLEN(class_name), HAK_CNODE_GET_TOKPTR(class_name)); HAK_CNODE_GET_TOKLEN(class_name), HAK_CNODE_GET_TOKPTR(class_name));

1258
lib/exec.c

File diff suppressed because it is too large Load Diff

View File

@ -559,7 +559,7 @@ static const hak_ooch_t* add_sr_name (hak_t* hak, const hak_oocs_t* name)
nptr = (hak_ooch_t*)(link + 1); nptr = (hak_ooch_t*)(link + 1);
hak_copy_oochars (nptr, name->ptr, name->len); hak_copy_oochars(nptr, name->ptr, name->len);
nptr[name->len] = '\0'; nptr[name->len] = '\0';
link->link = hak->c->sr_names; link->link = hak->c->sr_names;

View File

@ -141,13 +141,26 @@ class (#varying) Z: Object [ a b c ] {
self.a := 10 self.a := 10
self.b := 20 self.b := 20
self.c := 30 self.c := 30
printf "Z:new called\n" }
fun aaa() {
printf "%d %d %d\n" a b c
} }
} }
k := (Z:basicNew 10) fun Z:abc() {
##k := (Z:new) printf "%d %d %d\n" a b c ## this is not recognized as ....
}
fun k () {
k := (Z:basicNew 10) ## #varying is really required? what is the big deal even if you allow it regardless?
##k := (Z:new) ## no way to add extra fields.
k:basicAtPut 2 "hello" k:basicAtPut 2 "hello"
k:basicAtPut 3 "world" k:basicAtPut 3 "world"
printf "----------------------------------------\n" printf "----------------------------------------\n"
printf "%O\n" (k:basicAt 2) printf "%O\n" (k:basicAt 20)
##k := (Z:new)
##k:aaa
}
(k)