minor code refactoring
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
2025-08-02 14:50:38 +09:00
parent 2c63c56e0e
commit 17b0dfcee3
4 changed files with 84 additions and 81 deletions

View File

@ -466,8 +466,9 @@ static void stop_run (int signo)
#endif #endif
} }
static void do_nothing (int unucut) static void do_nothing (int unused)
{ {
/* do nothing */
} }
static void set_intr_run (void) static void set_intr_run (void)

View File

@ -105,7 +105,6 @@ struct xarg_t
struct arg_t struct arg_t
{ {
int incl_conv;
hawk_parsestd_t* psin; /* input source streams */ hawk_parsestd_t* psin; /* input source streams */
hawk_bch_t* osf; /* output source file */ hawk_bch_t* osf; /* output source file */
xarg_t icf; /* input console files */ xarg_t icf; /* input console files */
@ -377,7 +376,7 @@ static int add_gvs_to_hawk (hawk_t* hawk, arg_t* arg)
return 0; return 0;
} }
static int apply_fs_and_gvs_to_rtx (hawk_rtx_t* rtx, arg_t* arg) static int apply_fs_and_gvs_to_rtx (hawk_rtx_t* rtx, const arg_t* arg)
{ {
hawk_oow_t i; hawk_oow_t i;
@ -399,8 +398,6 @@ static int apply_fs_and_gvs_to_rtx (hawk_rtx_t* rtx, arg_t* arg)
{ {
/* set the value of user-defined global variables /* set the value of user-defined global variables
* to a runtime context */ * to a runtime context */
hawk_oow_t i;
for (i = 0; i < arg->gvm.size; i++) for (i = 0; i < arg->gvm.size; i++)
{ {
hawk_val_t* v; hawk_val_t* v;
@ -579,8 +576,8 @@ static void purge_xarg (xarg_t* xarg)
{ {
hawk_oow_t i; hawk_oow_t i;
for (i = 0; i < xarg->size; i++) free (xarg->ptr[i]); for (i = 0; i < xarg->size; i++) free(xarg->ptr[i]);
free (xarg->ptr); free(xarg->ptr);
xarg->size = 0; xarg->size = 0;
xarg->capa = 0; xarg->capa = 0;
@ -825,8 +822,6 @@ static int process_argv (int argc, hawk_bch_t* argv[], const hawk_bch_t* real_ar
case '\0': case '\0':
{ {
/* a long option with no corresponding short option */ /* a long option with no corresponding short option */
hawk_oow_t i;
if (hawk_comp_bcstr(opt.lngopt, "script-encoding", 0) == 0) if (hawk_comp_bcstr(opt.lngopt, "script-encoding", 0) == 0)
{ {
arg->script_cmgr = hawk_get_cmgr_by_bcstr(opt.arg); arg->script_cmgr = hawk_get_cmgr_by_bcstr(opt.arg);
@ -946,29 +941,20 @@ static int process_argv (int argc, hawk_bch_t* argv[], const hawk_bch_t* real_ar
return 1; return 1;
oops: oops:
if (arg->gvm.ptr) free (arg->gvm.ptr); if (arg->gvm.ptr) free(arg->gvm.ptr);
purge_xarg (&arg->icf); purge_xarg(&arg->icf);
purge_xarg (&arg->ocf); purge_xarg(&arg->ocf);
if (isf) if (isf) free(isf);
{
if (arg->incl_conv) free (isf[0].u.bcs.ptr);
free (isf);
}
return oops_ret; return oops_ret;
} }
static void freearg (struct arg_t* arg) static void freearg (struct arg_t* arg)
{ {
if (arg->psin) if (arg->psin) free(arg->psin);
{ /*if (arg->osf) free(arg->osf);*/
if (arg->incl_conv) free (arg->psin[0].u.bcs.ptr);
free (arg->psin);
}
/*if (arg->osf != HAWK_NULL) free (arg->osf);*/
purge_xarg (&arg->icf); purge_xarg (&arg->icf);
purge_xarg (&arg->ocf); purge_xarg (&arg->ocf);
if (arg->gvm.ptr) free (arg->gvm.ptr); if (arg->gvm.ptr) free(arg->gvm.ptr);
} }
static void print_hawk_error (hawk_t* hawk) static void print_hawk_error (hawk_t* hawk)

View File

@ -89,13 +89,13 @@ static hawk_sio_t* open_sio (Hawk* hawk, HawkStd::Run* run, const hawk_ooch_t* f
{ {
const hawk_ooch_t* bem = hawk_rtx_backuperrmsg((hawk_rtx_t*)*run); const hawk_ooch_t* bem = hawk_rtx_backuperrmsg((hawk_rtx_t*)*run);
//run->formatError (HAWK_EOPEN, HAWK_NULL, HAWK_T("unable to open %js - %js"), file, bem); //run->formatError (HAWK_EOPEN, HAWK_NULL, HAWK_T("unable to open %js - %js"), file, bem);
hawk_rtx_seterrfmt ((hawk_rtx_t*)*run, HAWK_NULL, HAWK_EOPEN, HAWK_T("unable to open %js - %js"), file, bem); hawk_rtx_seterrfmt((hawk_rtx_t*)*run, HAWK_NULL, HAWK_EOPEN, HAWK_T("unable to open %js - %js"), file, bem);
} }
else else
{ {
const hawk_ooch_t* bem = hawk_backuperrmsg((hawk_t*)*hawk); const hawk_ooch_t* bem = hawk_backuperrmsg((hawk_t*)*hawk);
//hawk->formatError (HAWK_EOPEN, HAWK_NULL, HAWK_T("unable to open %js - %js"), file, bem); //hawk->formatError (HAWK_EOPEN, HAWK_NULL, HAWK_T("unable to open %js - %js"), file, bem);
hawk_seterrfmt ((hawk_t*)*hawk, HAWK_NULL, HAWK_EOPEN, HAWK_T("unable to open %js - %js"), file, bem); hawk_seterrfmt((hawk_t*)*hawk, HAWK_NULL, HAWK_EOPEN, HAWK_T("unable to open %js - %js"), file, bem);
} }
} }
return sio; return sio;
@ -119,13 +119,13 @@ static hawk_sio_t* open_sio_std (Hawk* hawk, HawkStd::Run* run, hawk_sio_std_t s
{ {
const hawk_ooch_t* bem = hawk_rtx_backuperrmsg((hawk_rtx_t*)*run); const hawk_ooch_t* bem = hawk_rtx_backuperrmsg((hawk_rtx_t*)*run);
//run->formatError (HAWK_EOPEN, HAWK_NULL, HAWK_T("unable to open %js - %js"), std_names[std], bem); //run->formatError (HAWK_EOPEN, HAWK_NULL, HAWK_T("unable to open %js - %js"), std_names[std], bem);
hawk_rtx_seterrfmt ((hawk_rtx_t*)*run, HAWK_NULL, HAWK_EOPEN, HAWK_T("unable to open %js - %js"), std_names[std], bem); hawk_rtx_seterrfmt((hawk_rtx_t*)*run, HAWK_NULL, HAWK_EOPEN, HAWK_T("unable to open %js - %js"), std_names[std], bem);
} }
else else
{ {
const hawk_ooch_t* bem = hawk_backuperrmsg((hawk_t*)*hawk); const hawk_ooch_t* bem = hawk_backuperrmsg((hawk_t*)*hawk);
//hawk->formatError (HAWK_EOPEN, HAWK_NULL, HAWK_T("unable to open %js - %js"), std_names[std], bem); //hawk->formatError (HAWK_EOPEN, HAWK_NULL, HAWK_T("unable to open %js - %js"), std_names[std], bem);
hawk_seterrfmt ((hawk_t*)*hawk, HAWK_NULL, HAWK_EOPEN, HAWK_T("unable to open %js - %js"), std_names[std], bem); hawk_seterrfmt((hawk_t*)*hawk, HAWK_NULL, HAWK_EOPEN, HAWK_T("unable to open %js - %js"), std_names[std], bem);
} }
} }
return sio; return sio;
@ -294,8 +294,8 @@ int HawkStd::build_environ (Run* run, env_char_t* envarr[])
vptr = hawk_rtx_dupbtoucstr(rtx, eq + 1, HAWK_NULL, 1); vptr = hawk_rtx_dupbtoucstr(rtx, eq + 1, HAWK_NULL, 1);
if (kptr == HAWK_NULL || vptr == HAWK_NULL) if (kptr == HAWK_NULL || vptr == HAWK_NULL)
{ {
if (kptr) hawk_rtx_freemem (rtx, kptr); if (kptr) hawk_rtx_freemem(rtx, kptr);
if (vptr) hawk_rtx_freemem (rtx, kptr); if (vptr) hawk_rtx_freemem(rtx, kptr);
/* mbstowcsdup() may fail for invalid encoding. /* mbstowcsdup() may fail for invalid encoding.
* so setting the error code to ENOMEM may not * so setting the error code to ENOMEM may not
@ -319,8 +319,8 @@ int HawkStd::build_environ (Run* run, env_char_t* envarr[])
(defined(HAWK_STD_ENV_CHAR_IS_UCH) && defined(HAWK_OOCH_IS_UCH))) (defined(HAWK_STD_ENV_CHAR_IS_UCH) && defined(HAWK_OOCH_IS_UCH)))
/* nothing to do */ /* nothing to do */
#else #else
if (vptr) hawk_rtx_freemem (rtx, vptr); if (vptr) hawk_rtx_freemem(rtx, vptr);
if (kptr) hawk_rtx_freemem (rtx, kptr); if (kptr) hawk_rtx_freemem(rtx, kptr);
#endif #endif
this->setError (HAWK_ENOMEM); this->setError (HAWK_ENOMEM);
@ -337,8 +337,8 @@ int HawkStd::build_environ (Run* run, env_char_t* envarr[])
(defined(HAWK_STD_ENV_CHAR_IS_UCH) && defined(HAWK_OOCH_IS_UCH))) (defined(HAWK_STD_ENV_CHAR_IS_UCH) && defined(HAWK_OOCH_IS_UCH)))
/* nothing to do */ /* nothing to do */
#else #else
if (vptr) hawk_rtx_freemem (rtx, vptr); if (vptr) hawk_rtx_freemem(rtx, vptr);
if (kptr) hawk_rtx_freemem (rtx, kptr); if (kptr) hawk_rtx_freemem(rtx, kptr);
#endif #endif
} }
} }
@ -357,7 +357,7 @@ int HawkStd::make_additional_globals (Run* run)
hawk_cmgr_t* HawkStd::getiocmgr (const hawk_ooch_t* ioname) hawk_cmgr_t* HawkStd::getiocmgr (const hawk_ooch_t* ioname)
{ {
HAWK_ASSERT (this->cmgrtab_inited == true); HAWK_ASSERT(this->cmgrtab_inited == true);
#if defined(HAWK_OOCH_IS_UCH) #if defined(HAWK_OOCH_IS_UCH)
ioattr_t* ioattr = get_ioattr(ioname, hawk_count_oocstr(ioname)); ioattr_t* ioattr = get_ioattr(ioname, hawk_count_oocstr(ioname));
@ -410,7 +410,7 @@ int HawkStd::setioattr (
Run& run, Value& ret, Value* args, hawk_oow_t nargs, Run& run, Value& ret, Value* args, hawk_oow_t nargs,
const hawk_ooch_t* name, hawk_oow_t len) const hawk_ooch_t* name, hawk_oow_t len)
{ {
HAWK_ASSERT (this->cmgrtab_inited == true); HAWK_ASSERT(this->cmgrtab_inited == true);
hawk_oow_t l[3]; hawk_oow_t l[3];
const hawk_ooch_t* ptr[3]; const hawk_ooch_t* ptr[3];
@ -485,7 +485,7 @@ int HawkStd::getioattr (
Run& run, Value& ret, Value* args, hawk_oow_t nargs, Run& run, Value& ret, Value* args, hawk_oow_t nargs,
const hawk_ooch_t* name, hawk_oow_t len) const hawk_ooch_t* name, hawk_oow_t len)
{ {
HAWK_ASSERT (this->cmgrtab_inited == true); HAWK_ASSERT(this->cmgrtab_inited == true);
hawk_oow_t l[2]; hawk_oow_t l[2];
const hawk_ooch_t* ptr[2]; const hawk_ooch_t* ptr[2];
@ -549,7 +549,7 @@ int HawkStd::open_nwio (Pipe& io, int flags, void* nwad)
#if defined(HAWK_OOCH_IS_UCH) #if defined(HAWK_OOCH_IS_UCH)
hawk_cmgr_t* cmgr = this->getiocmgr(io.getName()); hawk_cmgr_t* cmgr = this->getiocmgr(io.getName());
if (cmgr) hawk_nwio_setcmgr (handle, cmgr); if (cmgr) hawk_nwio_setcmgr(handle, cmgr);
#endif #endif
io.setHandle ((void*)handle); io.setHandle ((void*)handle);
@ -588,9 +588,9 @@ int HawkStd::open_pio (Pipe& io)
hawk_cmgr_t* cmgr = this->getiocmgr(io.getName()); hawk_cmgr_t* cmgr = this->getiocmgr(io.getName());
if (cmgr) if (cmgr)
{ {
hawk_pio_setcmgr (pio, HAWK_PIO_IN, cmgr); hawk_pio_setcmgr(pio, HAWK_PIO_IN, cmgr);
hawk_pio_setcmgr (pio, HAWK_PIO_OUT, cmgr); hawk_pio_setcmgr(pio, HAWK_PIO_OUT, cmgr);
hawk_pio_setcmgr (pio, HAWK_PIO_ERR, cmgr); hawk_pio_setcmgr(pio, HAWK_PIO_ERR, cmgr);
} }
#endif #endif
io.setHandle (pio); io.setHandle (pio);
@ -772,7 +772,7 @@ int HawkStd::openFile (File& io)
if (!sio) return -1; if (!sio) return -1;
#if defined(HAWK_OOCH_IS_UCH) #if defined(HAWK_OOCH_IS_UCH)
hawk_cmgr_t* cmgr = this->getiocmgr(ioname); hawk_cmgr_t* cmgr = this->getiocmgr(ioname);
if (cmgr) hawk_sio_setcmgr (sio, cmgr); if (cmgr) hawk_sio_setcmgr(sio, cmgr);
#endif #endif
io.setHandle (sio); io.setHandle (sio);
@ -822,7 +822,7 @@ const hawk_cmgr_t* HawkStd::getConsoleCmgr () const
int HawkStd::addConsoleOutput (const hawk_uch_t* arg, hawk_oow_t len) int HawkStd::addConsoleOutput (const hawk_uch_t* arg, hawk_oow_t len)
{ {
HAWK_ASSERT (this->hawk != HAWK_NULL); HAWK_ASSERT(this->hawk != HAWK_NULL);
int n = this->ofile.add(this->hawk, arg, len); int n = this->ofile.add(this->hawk, arg, len);
if (n <= -1) this->setError (HAWK_ENOMEM); if (n <= -1) this->setError (HAWK_ENOMEM);
return n; return n;
@ -835,7 +835,7 @@ int HawkStd::addConsoleOutput (const hawk_uch_t* arg)
int HawkStd::addConsoleOutput (const hawk_bch_t* arg, hawk_oow_t len) int HawkStd::addConsoleOutput (const hawk_bch_t* arg, hawk_oow_t len)
{ {
HAWK_ASSERT (this->hawk != HAWK_NULL); HAWK_ASSERT(this->hawk != HAWK_NULL);
int n = this->ofile.add(this->hawk, arg, len); int n = this->ofile.add(this->hawk, arg, len);
if (n <= -1) this->setError (HAWK_ENOMEM); if (n <= -1) this->setError (HAWK_ENOMEM);
return n; return n;
@ -876,7 +876,7 @@ static int check_var_assign (hawk_rtx_t* rtx, const hawk_ooch_t* str)
n = 0; n = 0;
} }
hawk_rtx_freemem (rtx, dstr); hawk_rtx_freemem(rtx, dstr);
return n; return n;
} }
@ -895,7 +895,7 @@ int HawkStd::open_console_in (Console& io)
int x; int x;
v_argc = hawk_rtx_getgbl(rtx, this->gbl_argc); v_argc = hawk_rtx_getgbl(rtx, this->gbl_argc);
HAWK_ASSERT (v_argc != HAWK_NULL); HAWK_ASSERT(v_argc != HAWK_NULL);
if (hawk_rtx_valtoint(rtx, v_argc, &i_argc) <= -1) return -1; if (hawk_rtx_valtoint(rtx, v_argc, &i_argc) <= -1) return -1;
/* handle special case when ARGV[x] has been altered. /* handle special case when ARGV[x] has been altered.
@ -906,18 +906,18 @@ int HawkStd::open_console_in (Console& io)
* { print $0; }' file1 file2 * { print $0; }' file1 file2
*/ */
v_argv = hawk_rtx_getgbl(rtx, this->gbl_argv); v_argv = hawk_rtx_getgbl(rtx, this->gbl_argv);
HAWK_ASSERT (v_argv != HAWK_NULL); HAWK_ASSERT(v_argv != HAWK_NULL);
if (HAWK_RTX_GETVALTYPE(rtx, v_argv) != HAWK_VAL_MAP) if (HAWK_RTX_GETVALTYPE(rtx, v_argv) != HAWK_VAL_MAP)
{ {
/* with flexmap on, you can change ARGV to a scalar. /* with flexmap on, you can change ARGV to a scalar.
* BEGIN { ARGV="xxx"; } * BEGIN { ARGV="xxx"; }
* you must not do this. */ * you must not do this. */
hawk_rtx_seterrfmt (rtx, HAWK_NULL, HAWK_EINVAL, HAWK_T("phony value in ARGV")); hawk_rtx_seterrfmt(rtx, HAWK_NULL, HAWK_EINVAL, HAWK_T("phony value in ARGV"));
return -1; return -1;
} }
map = ((hawk_val_map_t*)v_argv)->map; map = ((hawk_val_map_t*)v_argv)->map;
HAWK_ASSERT (map != HAWK_NULL); HAWK_ASSERT(map != HAWK_NULL);
nextfile: nextfile:
if ((hawk_int_t)this->runarg_index >= (i_argc - 1)) /* ARGV is a kind of 0-based array unlike other normal arrays or substring indexing scheme */ if ((hawk_int_t)this->runarg_index >= (i_argc - 1)) /* ARGV is a kind of 0-based array unlike other normal arrays or substring indexing scheme */
@ -931,7 +931,7 @@ nextfile:
sio = open_sio_std(HAWK_NULL, io, HAWK_SIO_STDIN, HAWK_SIO_READ | HAWK_SIO_IGNOREECERR); sio = open_sio_std(HAWK_NULL, io, HAWK_SIO_STDIN, HAWK_SIO_READ | HAWK_SIO_IGNOREECERR);
if (sio == HAWK_NULL) return -1; if (sio == HAWK_NULL) return -1;
if (this->console_cmgr) hawk_sio_setcmgr (sio, this->console_cmgr); if (this->console_cmgr) hawk_sio_setcmgr(sio, this->console_cmgr);
io.setHandle (sio); io.setHandle (sio);
this->runarg_count++; this->runarg_count++;
@ -950,7 +950,7 @@ nextfile:
} }
v_pair = (hawk_val_t*)HAWK_HTB_VPTR(pair); v_pair = (hawk_val_t*)HAWK_HTB_VPTR(pair);
HAWK_ASSERT (v_pair != HAWK_NULL); HAWK_ASSERT(v_pair != HAWK_NULL);
as.ptr = hawk_rtx_getvaloocstr(rtx, v_pair, &as.len); as.ptr = hawk_rtx_getvaloocstr(rtx, v_pair, &as.len);
if (HAWK_UNLIKELY(!as.ptr)) return -1; if (HAWK_UNLIKELY(!as.ptr)) return -1;
@ -1010,7 +1010,7 @@ nextfile:
hawk_rtx_freevaloocstr (rtx, v_pair, as.ptr); hawk_rtx_freevaloocstr (rtx, v_pair, as.ptr);
if (this->console_cmgr) hawk_sio_setcmgr (sio, this->console_cmgr); if (this->console_cmgr) hawk_sio_setcmgr(sio, this->console_cmgr);
io.setHandle (sio); io.setHandle (sio);
@ -1026,7 +1026,7 @@ int HawkStd::open_console_out (Console& io)
if (this->ofile.ptr == HAWK_NULL) if (this->ofile.ptr == HAWK_NULL)
{ {
HAWK_ASSERT (this->ofile.len == 0 && this->ofile.capa == 0); HAWK_ASSERT(this->ofile.len == 0 && this->ofile.capa == 0);
if (this->ofile_count == 0) if (this->ofile_count == 0)
{ {
@ -1036,7 +1036,7 @@ int HawkStd::open_console_out (Console& io)
HAWK_SIO_WRITE | HAWK_SIO_IGNOREECERR | HAWK_SIO_LINEBREAK); HAWK_SIO_WRITE | HAWK_SIO_IGNOREECERR | HAWK_SIO_LINEBREAK);
if (sio == HAWK_NULL) return -1; if (sio == HAWK_NULL) return -1;
if (this->console_cmgr) hawk_sio_setcmgr (sio, this->console_cmgr); if (this->console_cmgr) hawk_sio_setcmgr(sio, this->console_cmgr);
io.setHandle (sio); io.setHandle (sio);
this->ofile_count++; this->ofile_count++;
@ -1078,7 +1078,7 @@ int HawkStd::open_console_out (Console& io)
return -1; return -1;
} }
if (this->console_cmgr) hawk_sio_setcmgr (sio, this->console_cmgr); if (this->console_cmgr) hawk_sio_setcmgr(sio, this->console_cmgr);
io.setHandle (sio); io.setHandle (sio);
this->ofile_index++; this->ofile_index++;
@ -1099,7 +1099,7 @@ int HawkStd::openConsole (Console& io)
} }
else else
{ {
HAWK_ASSERT (mode == Console::WRITE); HAWK_ASSERT(mode == Console::WRITE);
this->ofile_count = 0; this->ofile_count = 0;
this->ofile_index = 0; this->ofile_index = 0;
@ -1283,7 +1283,7 @@ int HawkStd::SourceFile::open (Data& io)
if (sio == HAWK_NULL) return -1; if (sio == HAWK_NULL) return -1;
} }
if (this->cmgr) hawk_sio_setcmgr (sio, this->cmgr); if (this->cmgr) hawk_sio_setcmgr(sio, this->cmgr);
io.setName (xpath); io.setName (xpath);
io.setPath (xpath); // let the parser use this path, especially upon an error io.setPath (xpath); // let the parser use this path, especially upon an error
} }
@ -1294,7 +1294,7 @@ int HawkStd::SourceFile::open (Data& io)
hawk_ooch_t* xpath; hawk_ooch_t* xpath;
ioname = io.getName(); ioname = io.getName();
HAWK_ASSERT (ioname != HAWK_NULL); HAWK_ASSERT(ioname != HAWK_NULL);
if (io.getPrevHandle()) if (io.getPrevHandle())
{ {
@ -1336,7 +1336,7 @@ int HawkStd::SourceFile::open (Data& io)
} }
xpath = hawk_addsionamewithoochars((hawk_t*)io, path, hawk_count_oocstr(path)); xpath = hawk_addsionamewithoochars((hawk_t*)io, path, hawk_count_oocstr(path));
if (dbuf) hawk_freemem ((hawk_t*)io, dbuf); if (dbuf) hawk_freemem((hawk_t*)io, dbuf);
} }
else else
{ {
@ -1364,7 +1364,7 @@ int HawkStd::SourceFile::open (Data& io)
io.setPath (xpath); io.setPath (xpath);
io.setHandle (sio); io.setHandle (sio);
if (this->cmgr) hawk_sio_setcmgr (sio, this->cmgr); if (this->cmgr) hawk_sio_setcmgr(sio, this->cmgr);
} }
io.setHandle (sio); io.setHandle (sio);
@ -1391,8 +1391,8 @@ hawk_ooi_t HawkStd::SourceFile::write (Data& io, const hawk_ooch_t* buf, hawk_oo
HawkStd::SourceString::~SourceString () HawkStd::SourceString::~SourceString ()
{ {
HAWK_ASSERT (this->_hawk == HAWK_NULL); HAWK_ASSERT(this->_hawk == HAWK_NULL);
HAWK_ASSERT (this->str == HAWK_NULL); HAWK_ASSERT(this->str == HAWK_NULL);
} }
int HawkStd::SourceString::open (Data& io) int HawkStd::SourceString::open (Data& io)
@ -1422,7 +1422,7 @@ int HawkStd::SourceString::open (Data& io)
} }
else else
{ {
HAWK_ASSERT (this->_type == STR_BCH); HAWK_ASSERT(this->_type == STR_BCH);
#if defined(HAWK_OOCH_IS_UCH) #if defined(HAWK_OOCH_IS_UCH)
this->str = hawk_dupbtoucstr(this->_hawk, (const hawk_bch_t*)this->_str, HAWK_NULL, 0); this->str = hawk_dupbtoucstr(this->_hawk, (const hawk_bch_t*)this->_str, HAWK_NULL, 0);
#else #else
@ -1445,7 +1445,7 @@ int HawkStd::SourceString::open (Data& io)
hawk_ooch_t* xpath; hawk_ooch_t* xpath;
ioname = io.getName(); ioname = io.getName();
HAWK_ASSERT (ioname != HAWK_NULL); HAWK_ASSERT(ioname != HAWK_NULL);
if (io.getPrevHandle()) if (io.getPrevHandle())
{ {
@ -1479,7 +1479,7 @@ int HawkStd::SourceString::open (Data& io)
} }
} }
xpath = hawk_addsionamewithoochars((hawk_t*)io, path, hawk_count_oocstr(path)); xpath = hawk_addsionamewithoochars((hawk_t*)io, path, hawk_count_oocstr(path));
if (dbuf) hawk_freemem ((hawk_t*)io, dbuf); if (dbuf) hawk_freemem((hawk_t*)io, dbuf);
} }
else else
{ {
@ -1495,9 +1495,9 @@ int HawkStd::SourceString::open (Data& io)
); );
if (!sio) return -1; if (!sio) return -1;
io.setPath (xpath); io.setPath(xpath);
io.setHandle (sio); io.setHandle(sio);
if (this->cmgr) hawk_sio_setcmgr (sio, this->cmgr); if (this->cmgr) hawk_sio_setcmgr(sio, this->cmgr);
} }
return 1; return 1;
@ -1510,9 +1510,9 @@ int HawkStd::SourceString::close (Data& io)
// free the resources and nullify this->_hawk in particular // free the resources and nullify this->_hawk in particular
// to prevent this object from outliving the hawk instance pointed to // to prevent this object from outliving the hawk instance pointed to
// by this->_hawk. // by this->_hawk.
HAWK_ASSERT (this->_hawk != HAWK_NULL); HAWK_ASSERT(this->_hawk != HAWK_NULL);
HAWK_ASSERT (this->str != HAWK_NULL); HAWK_ASSERT(this->str != HAWK_NULL);
hawk_freemem (this->_hawk, this->str); hawk_freemem(this->_hawk, this->str);
this->str = HAWK_NULL; this->str = HAWK_NULL;
this->ptr = HAWK_NULL; this->ptr = HAWK_NULL;
this->_hawk = HAWK_NULL; this->_hawk = HAWK_NULL;

View File

@ -167,28 +167,28 @@ static HAWK_INLINE hawk_oow_t szlog2 (hawk_oow_t n)
#endif #endif
#if HAWK_SIZEOF_OOW_T >= 64 #if HAWK_SIZEOF_OOW_T >= 64
if ((n & (~(hawk_oow_t)0 << (BITS-128))) == 0) { x -= 256; n <<= 256; } if ((n & (~(hawk_oow_t)0 << (BITS - 128))) == 0) { x -= 256; n <<= 256; }
#endif #endif
#if HAWK_SIZEOF_OOW_T >= 32 #if HAWK_SIZEOF_OOW_T >= 32
if ((n & (~(hawk_oow_t)0 << (BITS-128))) == 0) { x -= 128; n <<= 128; } if ((n & (~(hawk_oow_t)0 << (BITS - 128))) == 0) { x -= 128; n <<= 128; }
#endif #endif
#if HAWK_SIZEOF_OOW_T >= 16 #if HAWK_SIZEOF_OOW_T >= 16
if ((n & (~(hawk_oow_t)0 << (BITS-64))) == 0) { x -= 64; n <<= 64; } if ((n & (~(hawk_oow_t)0 << (BITS - 64))) == 0) { x -= 64; n <<= 64; }
#endif #endif
#if HAWK_SIZEOF_OOW_T >= 8 #if HAWK_SIZEOF_OOW_T >= 8
if ((n & (~(hawk_oow_t)0 << (BITS-32))) == 0) { x -= 32; n <<= 32; } if ((n & (~(hawk_oow_t)0 << (BITS - 32))) == 0) { x -= 32; n <<= 32; }
#endif #endif
#if HAWK_SIZEOF_OOW_T >= 4 #if HAWK_SIZEOF_OOW_T >= 4
if ((n & (~(hawk_oow_t)0 << (BITS-16))) == 0) { x -= 16; n <<= 16; } if ((n & (~(hawk_oow_t)0 << (BITS - 16))) == 0) { x -= 16; n <<= 16; }
#endif #endif
#if HAWK_SIZEOF_OOW_T >= 2 #if HAWK_SIZEOF_OOW_T >= 2
if ((n & (~(hawk_oow_t)0 << (BITS-8))) == 0) { x -= 8; n <<= 8; } if ((n & (~(hawk_oow_t)0 << (BITS - 8))) == 0) { x -= 8; n <<= 8; }
#endif #endif
#if HAWK_SIZEOF_OOW_T >= 1 #if HAWK_SIZEOF_OOW_T >= 1
if ((n & (~(hawk_oow_t)0 << (BITS-4))) == 0) { x -= 4; n <<= 4; } if ((n & (~(hawk_oow_t)0 << (BITS - 4))) == 0) { x -= 4; n <<= 4; }
#endif #endif
if ((n & (~(hawk_oow_t)0 << (BITS-2))) == 0) { x -= 2; n <<= 2; } if ((n & (~(hawk_oow_t)0 << (BITS - 2))) == 0) { x -= 2; n <<= 2; }
if ((n & (~(hawk_oow_t)0 << (BITS-1))) == 0) { x -= 1; } if ((n & (~(hawk_oow_t)0 << (BITS - 1))) == 0) { x -= 1; }
return x; return x;
#undef BITS #undef BITS
@ -196,8 +196,24 @@ static HAWK_INLINE hawk_oow_t szlog2 (hawk_oow_t n)
static HAWK_INLINE hawk_oow_t getxfi (hawk_xma_t* xma, hawk_oow_t size) static HAWK_INLINE hawk_oow_t getxfi (hawk_xma_t* xma, hawk_oow_t size)
{ {
/* if the aligned size is below the first threshold(FIXED)
* the slot to the xma->xfree field is the aligned size itself.
* For example, assuming ALIGN is 8, size 117 produces xfi 13. ((117 / 8) - 1) */
hawk_oow_t xfi = ((size) / ALIGN) - 1; hawk_oow_t xfi = ((size) / ALIGN) - 1;
/* If the caculated index is greater than or equal to the threshold,
* each slot in the xfree field will span across a wider range of sizes.
* Roughly, like this. but all these values are dependent on ALIGN.
* Words-1 Size XFI
* 32~62 264~511 => 32
* 63~126 512~1023 => 33
* 127~254 1024~2047 => 34
* 255~510 2048~4095 => 35
* ....
*/
if (xfi >= FIXED) xfi = szlog2(size) - (xma)->bdec + FIXED; if (xfi >= FIXED) xfi = szlog2(size) - (xma)->bdec + FIXED;
/* The very large size is place at the last index */
if (xfi > XFIMAX(xma)) xfi = XFIMAX(xma); if (xfi > XFIMAX(xma)) xfi = XFIMAX(xma);
return xfi; return xfi;
} }