some code reformatting
This commit is contained in:
96
bin/hak.c
96
bin/hak.c
@ -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;
|
||||||
}
|
}
|
||||||
|
140
lib/comp.c
140
lib/comp.c
@ -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
1258
lib/exec.c
File diff suppressed because it is too large
Load Diff
@ -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;
|
||||||
|
@ -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)
|
||||||
|
Reference in New Issue
Block a user