implemented switch ... case .. default ..
This commit is contained in:
parent
846cbcf951
commit
fac4aa7af5
22
README.md
22
README.md
@ -476,7 +476,9 @@ The following words are reserved and cannot be used as a variable name, a parame
|
|||||||
- BEGIN
|
- BEGIN
|
||||||
- END
|
- END
|
||||||
- break
|
- break
|
||||||
|
- case
|
||||||
- continue
|
- continue
|
||||||
|
- default
|
||||||
- delete
|
- delete
|
||||||
- do
|
- do
|
||||||
- else
|
- else
|
||||||
@ -494,6 +496,7 @@ The following words are reserved and cannot be used as a variable name, a parame
|
|||||||
- printf
|
- printf
|
||||||
- return
|
- return
|
||||||
- while
|
- while
|
||||||
|
- switch
|
||||||
|
|
||||||
However, some of these words not beginning with `@` can be used as normal names in the context of a module call. For example, `mymod::break`. In practice, the predefined names used for built-in commands, functions, and variables are treated as if they are reserved since you can't create another definition with the same name.
|
However, some of these words not beginning with `@` can be used as normal names in the context of a module call. For example, `mymod::break`. In practice, the predefined names used for built-in commands, functions, and variables are treated as if they are reserved since you can't create another definition with the same name.
|
||||||
|
|
||||||
@ -633,7 +636,7 @@ BEGIN {
|
|||||||
|
|
||||||
Hawk supports various control structures for flow control and iteration, similar to those found in awk.
|
Hawk supports various control structures for flow control and iteration, similar to those found in awk.
|
||||||
|
|
||||||
The `if` statement in Hawk follows the same syntax as in awk and other programming languages. It allows you to execute a block of code conditionally based on a specified condition.
|
The `if` statement follows the same syntax as in awk and other programming languages. It allows you to execute a block of code conditionally based on a specified condition.
|
||||||
|
|
||||||
```awk
|
```awk
|
||||||
if (condition) {
|
if (condition) {
|
||||||
@ -645,7 +648,18 @@ if (condition) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
The `while` loop in Hawk is used to repeatedly execute a block of code as long as a specific condition is true.
|
The `switch` statement allows the result of an expression to be tested against a list of values.
|
||||||
|
```awk
|
||||||
|
switch (expression) {
|
||||||
|
case value:
|
||||||
|
## statements
|
||||||
|
...
|
||||||
|
default:
|
||||||
|
## statements
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The `while` loop is used to repeatedly execute a block of code as long as a specific condition is true.
|
||||||
```awk
|
```awk
|
||||||
while (condition) {
|
while (condition) {
|
||||||
# statements
|
# statements
|
||||||
@ -659,13 +673,13 @@ do {
|
|||||||
} while (condition)
|
} while (condition)
|
||||||
```
|
```
|
||||||
|
|
||||||
The `for` loop in Hawk follows the same syntax as in awk and allows you to iterate over a range of values or an array.
|
The `for` loop follows the same syntax as in awk and allows you to iterate over a range of values or an array.
|
||||||
```awk
|
```awk
|
||||||
for (initialization; condition; increment/decrement) {
|
for (initialization; condition; increment/decrement) {
|
||||||
## statements
|
## statements
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
You can also use the for loop to iterate over the elements of an array:
|
You can also use the `fo`r loop to iterate over the elements of an array:
|
||||||
```awk
|
```awk
|
||||||
for (index in array) {
|
for (index in array) {
|
||||||
## statements using array[index]
|
## statements using array[index]
|
||||||
|
@ -539,6 +539,15 @@ static void print_usage (FILE* out, const hawk_bch_t* argv0, const hawk_bch_t* r
|
|||||||
{
|
{
|
||||||
fprintf (out, " --%-18s on/off %s\n", opttab[j].name, opttab[j].desc);
|
fprintf (out, " --%-18s on/off %s\n", opttab[j].name, opttab[j].desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!real_argv0)
|
||||||
|
{
|
||||||
|
fprintf (out, "\n");
|
||||||
|
fprintf (out, "Special mode switching options(must be specified first to take effect):\n");
|
||||||
|
fprintf (out, " --hawk/--awk run in the hawk mode\n");
|
||||||
|
fprintf (out, " --cut run in the cut mode\n");
|
||||||
|
fprintf (out, " --sed run in the sed mode\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
12
lib/Hawk.cpp
12
lib/Hawk.cpp
@ -1914,7 +1914,7 @@ int Hawk::setIncludeDirs (const hawk_uch_t* dirs)
|
|||||||
if (HAWK_UNLIKELY(!tmp)) return -1;
|
if (HAWK_UNLIKELY(!tmp)) return -1;
|
||||||
|
|
||||||
int n = hawk_setopt(hawk, HAWK_OPT_INCLUDEDIRS, tmp);
|
int n = hawk_setopt(hawk, HAWK_OPT_INCLUDEDIRS, tmp);
|
||||||
hawk_freemem (hawk, tmp);
|
hawk_freemem(hawk, tmp);
|
||||||
return n;
|
return n;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -1927,7 +1927,7 @@ int Hawk::setIncludeDirs (const hawk_bch_t* dirs)
|
|||||||
if (HAWK_UNLIKELY(!tmp)) return -1;
|
if (HAWK_UNLIKELY(!tmp)) return -1;
|
||||||
|
|
||||||
int n = hawk_setopt(hawk, HAWK_OPT_INCLUDEDIRS, tmp);
|
int n = hawk_setopt(hawk, HAWK_OPT_INCLUDEDIRS, tmp);
|
||||||
hawk_freemem (hawk, tmp);
|
hawk_freemem(hawk, tmp);
|
||||||
return n;
|
return n;
|
||||||
#else
|
#else
|
||||||
return hawk_setopt(this->hawk, HAWK_OPT_INCLUDEDIRS, dirs);
|
return hawk_setopt(this->hawk, HAWK_OPT_INCLUDEDIRS, dirs);
|
||||||
@ -2175,9 +2175,9 @@ void Hawk::xstrs_t::clear (hawk_t* hawk)
|
|||||||
if (this->ptr != HAWK_NULL)
|
if (this->ptr != HAWK_NULL)
|
||||||
{
|
{
|
||||||
while (this->len > 0)
|
while (this->len > 0)
|
||||||
hawk_freemem (hawk, this->ptr[--this->len].ptr);
|
hawk_freemem(hawk, this->ptr[--this->len].ptr);
|
||||||
|
|
||||||
hawk_freemem (hawk, this->ptr);
|
hawk_freemem(hawk, this->ptr);
|
||||||
this->ptr = HAWK_NULL;
|
this->ptr = HAWK_NULL;
|
||||||
this->capa = 0;
|
this->capa = 0;
|
||||||
}
|
}
|
||||||
@ -2423,7 +2423,7 @@ hawk_ooi_t Hawk::readSource (hawk_t* hawk, hawk_sio_cmd_t cmd, hawk_sio_arg_t* a
|
|||||||
case HAWK_SIO_CMD_READ:
|
case HAWK_SIO_CMD_READ:
|
||||||
return xtn->hawk->source_reader->read(sdat, data, count);
|
return xtn->hawk->source_reader->read(sdat, data, count);
|
||||||
default:
|
default:
|
||||||
hawk_seterrnum (hawk, HAWK_NULL, HAWK_EINTERN);
|
hawk_seterrnum(hawk, HAWK_NULL, HAWK_EINTERN);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2442,7 +2442,7 @@ hawk_ooi_t Hawk::writeSource (hawk_t* hawk, hawk_sio_cmd_t cmd, hawk_sio_arg_t*
|
|||||||
case HAWK_SIO_CMD_WRITE:
|
case HAWK_SIO_CMD_WRITE:
|
||||||
return xtn->hawk->source_writer->write (sdat, data, count);
|
return xtn->hawk->source_writer->write (sdat, data, count);
|
||||||
default:
|
default:
|
||||||
hawk_seterrnum (hawk, HAWK_NULL, HAWK_EINTERN);
|
hawk_seterrnum(hawk, HAWK_NULL, HAWK_EINTERN);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -76,6 +76,7 @@ const hawk_ooch_t* hawk_dfl_errstr (hawk_errnum_t errnum)
|
|||||||
HAWK_T("left brace expected"),
|
HAWK_T("left brace expected"),
|
||||||
HAWK_T("left parenthesis expected"),
|
HAWK_T("left parenthesis expected"),
|
||||||
HAWK_T("right parenthesis expected"),
|
HAWK_T("right parenthesis expected"),
|
||||||
|
HAWK_T("right brace expected"),
|
||||||
HAWK_T("right bracket expected"),
|
HAWK_T("right bracket expected"),
|
||||||
HAWK_T("comma expected"),
|
HAWK_T("comma expected"),
|
||||||
HAWK_T("semicolon expected"),
|
HAWK_T("semicolon expected"),
|
||||||
@ -88,6 +89,8 @@ const hawk_ooch_t* hawk_dfl_errstr (hawk_errnum_t errnum)
|
|||||||
|
|
||||||
HAWK_T("keyword 'function' expected"),
|
HAWK_T("keyword 'function' expected"),
|
||||||
HAWK_T("keyword 'while' expected"),
|
HAWK_T("keyword 'while' expected"),
|
||||||
|
HAWK_T("keyword 'case' expected"),
|
||||||
|
HAWK_T("multiple 'default' labels"),
|
||||||
HAWK_T("invalid assignment statement"),
|
HAWK_T("invalid assignment statement"),
|
||||||
HAWK_T("identifier expected"),
|
HAWK_T("identifier expected"),
|
||||||
HAWK_T("not a valid function name"),
|
HAWK_T("not a valid function name"),
|
||||||
|
@ -284,7 +284,7 @@ int hawk_fio_init (hawk_fio_t* fio, hawk_gem_t* gem, const hawk_ooch_t* path, in
|
|||||||
{
|
{
|
||||||
handle = *(hawk_fio_hnd_t*)path;
|
handle = *(hawk_fio_hnd_t*)path;
|
||||||
/* do not specify an invalid handle value */
|
/* do not specify an invalid handle value */
|
||||||
/*HAWK_ASSERT (hawk, handle != INVALID_HANDLE_VALUE);*/
|
/*HAWK_ASSERT(hawk, handle != INVALID_HANDLE_VALUE);*/
|
||||||
|
|
||||||
if (handle == GetStdHandle (STD_INPUT_HANDLE))
|
if (handle == GetStdHandle (STD_INPUT_HANDLE))
|
||||||
fio->status |= STATUS_WIN32_STDIN;
|
fio->status |= STATUS_WIN32_STDIN;
|
||||||
@ -573,7 +573,7 @@ int hawk_fio_init (hawk_fio_t* fio, hawk_gem_t* gem, const hawk_ooch_t* path, in
|
|||||||
{
|
{
|
||||||
handle = *(hawk_fio_hnd_t*)path;
|
handle = *(hawk_fio_hnd_t*)path;
|
||||||
/* do not specify an invalid handle value */
|
/* do not specify an invalid handle value */
|
||||||
/*HAWK_ASSERT (hawk, handle >= 0);*/
|
/*HAWK_ASSERT(hawk, handle >= 0);*/
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -784,7 +784,7 @@ int hawk_fio_init (hawk_fio_t* fio, hawk_gem_t* gem, const hawk_ooch_t* path, in
|
|||||||
{
|
{
|
||||||
handle = *(hawk_fio_hnd_t*)path;
|
handle = *(hawk_fio_hnd_t*)path;
|
||||||
/* do not specify an invalid handle value */
|
/* do not specify an invalid handle value */
|
||||||
/*HAWK_ASSERT (hawk, handle >= 0);*/
|
/*HAWK_ASSERT(hawk, handle >= 0);*/
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
12
lib/fmt.c
12
lib/fmt.c
@ -1218,7 +1218,7 @@ static int fmt_outv (hawk_fmtout_t* fmtout, va_list ap)
|
|||||||
newcapa = precision + width + 32;
|
newcapa = precision + width + 32;
|
||||||
if (fltout->capa < newcapa)
|
if (fltout->capa < newcapa)
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (hawk, fltout->ptr == fltout->buf);
|
HAWK_ASSERT(hawk, fltout->ptr == fltout->buf);
|
||||||
|
|
||||||
fltout->ptr = HAWK_MMGR_ALLOC(fmtout->mmgr, HAWK_SIZEOF(char_t) * (newcapa + 1));
|
fltout->ptr = HAWK_MMGR_ALLOC(fmtout->mmgr, HAWK_SIZEOF(char_t) * (newcapa + 1));
|
||||||
if (!fltout->ptr) goto oops;
|
if (!fltout->ptr) goto oops;
|
||||||
@ -1583,7 +1583,7 @@ int hawk_ufmt_out (hawk_fmtout_t* fmtout, const hawk_uch_t* fmt, ...)
|
|||||||
#define log_write(hawk,mask,ptr,len) do { \
|
#define log_write(hawk,mask,ptr,len) do { \
|
||||||
int shuterr = (hawk)->shuterr; \
|
int shuterr = (hawk)->shuterr; \
|
||||||
(hawk)->shuterr = 1; \
|
(hawk)->shuterr = 1; \
|
||||||
(hawk)->prm.logwrite (hawk, mask, ptr, len); \
|
(hawk)->prm.logwrite(hawk, mask, ptr, len); \
|
||||||
(hawk)->shuterr = shuterr; \
|
(hawk)->shuterr = shuterr; \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
@ -1604,7 +1604,7 @@ static int log_oocs (hawk_fmtout_t* fmtout, const hawk_ooch_t* ptr, hawk_oow_t l
|
|||||||
hawk->log.ptr[hawk->log.len++] = '\n';
|
hawk->log.ptr[hawk->log.len++] = '\n';
|
||||||
}
|
}
|
||||||
|
|
||||||
log_write (hawk, hawk->log.last_mask, hawk->log.ptr, hawk->log.len);
|
log_write(hawk, hawk->log.last_mask, hawk->log.ptr, hawk->log.len);
|
||||||
hawk->log.len = 0;
|
hawk->log.len = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1648,7 +1648,7 @@ redo:
|
|||||||
/* no line ending - append a line terminator */
|
/* no line ending - append a line terminator */
|
||||||
hawk->log.ptr[hawk->log.len++] = '\n';
|
hawk->log.ptr[hawk->log.len++] = '\n';
|
||||||
}
|
}
|
||||||
log_write (hawk, hawk->log.last_mask, hawk->log.ptr, hawk->log.len);
|
log_write(hawk, hawk->log.last_mask, hawk->log.ptr, hawk->log.len);
|
||||||
hawk->log.len = 0;
|
hawk->log.len = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1761,7 +1761,7 @@ hawk_ooi_t hawk_logbfmtv (hawk_t* hawk, hawk_bitmask_t mask, const hawk_bch_t* f
|
|||||||
|
|
||||||
if (hawk->log.len > 0 && hawk->log.ptr[hawk->log.len - 1] == '\n')
|
if (hawk->log.len > 0 && hawk->log.ptr[hawk->log.len - 1] == '\n')
|
||||||
{
|
{
|
||||||
log_write (hawk, hawk->log.last_mask, hawk->log.ptr, hawk->log.len);
|
log_write(hawk, hawk->log.last_mask, hawk->log.ptr, hawk->log.len);
|
||||||
hawk->log.len = 0;
|
hawk->log.len = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1814,7 +1814,7 @@ hawk_ooi_t hawk_logufmtv (hawk_t* hawk, hawk_bitmask_t mask, const hawk_uch_t* f
|
|||||||
|
|
||||||
if (hawk->log.len > 0 && hawk->log.ptr[hawk->log.len - 1] == '\n')
|
if (hawk->log.len > 0 && hawk->log.ptr[hawk->log.len - 1] == '\n')
|
||||||
{
|
{
|
||||||
log_write (hawk, hawk->log.last_mask, hawk->log.ptr, hawk->log.len);
|
log_write(hawk, hawk->log.last_mask, hawk->log.ptr, hawk->log.len);
|
||||||
hawk->log.len = 0;
|
hawk->log.len = 0;
|
||||||
}
|
}
|
||||||
return (x <= -1)? -1: fo.count;
|
return (x <= -1)? -1: fo.count;
|
||||||
|
42
lib/fnc.c
42
lib/fnc.c
@ -98,7 +98,7 @@ static hawk_fnc_t* add_fnc (hawk_t* hawk, const hawk_ooch_t* name, const hawk_fn
|
|||||||
ncs.len = hawk_count_oocstr(name);
|
ncs.len = hawk_count_oocstr(name);
|
||||||
if (ncs.len <= 0)
|
if (ncs.len <= 0)
|
||||||
{
|
{
|
||||||
hawk_seterrnum (hawk, HAWK_NULL, HAWK_EINVAL);
|
hawk_seterrnum(hawk, HAWK_NULL, HAWK_EINVAL);
|
||||||
return HAWK_NULL;
|
return HAWK_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,7 +108,7 @@ static hawk_fnc_t* add_fnc (hawk_t* hawk, const hawk_ooch_t* name, const hawk_fn
|
|||||||
|
|
||||||
if (hawk_findfncwithoocs(hawk, &ncs) != HAWK_NULL)
|
if (hawk_findfncwithoocs(hawk, &ncs) != HAWK_NULL)
|
||||||
{
|
{
|
||||||
hawk_seterrfmt (hawk, HAWK_NULL, HAWK_EEXIST, HAWK_T("unable to add existing function - %js"), name);
|
hawk_seterrfmt(hawk, HAWK_NULL, HAWK_EEXIST, HAWK_T("unable to add existing function - %js"), name);
|
||||||
return HAWK_NULL;
|
return HAWK_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -135,8 +135,8 @@ static hawk_fnc_t* add_fnc (hawk_t* hawk, const hawk_ooch_t* name, const hawk_fn
|
|||||||
if (!hawk_htb_insert(hawk->fnc.user, (hawk_ooch_t*)ncs.ptr, ncs.len, fnc, 0))
|
if (!hawk_htb_insert(hawk->fnc.user, (hawk_ooch_t*)ncs.ptr, ncs.len, fnc, 0))
|
||||||
{
|
{
|
||||||
const hawk_ooch_t* bem = hawk_backuperrmsg(hawk);
|
const hawk_ooch_t* bem = hawk_backuperrmsg(hawk);
|
||||||
hawk_seterrfmt (hawk, HAWK_NULL, hawk_geterrnum(hawk), HAWK_T("unable to add function - %js - %js"), name, bem);
|
hawk_seterrfmt(hawk, HAWK_NULL, hawk_geterrnum(hawk), HAWK_T("unable to add function - %js - %js"), name, bem);
|
||||||
hawk_freemem (hawk, fnc);
|
hawk_freemem(hawk, fnc);
|
||||||
fnc = HAWK_NULL;
|
fnc = HAWK_NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -166,13 +166,13 @@ hawk_fnc_t* hawk_addfncwithbcstr (hawk_t* hawk, const hawk_bch_t* name, const ha
|
|||||||
wcs.ptr = hawk_dupbtoucstr(hawk, name, &wcs.len, 0);
|
wcs.ptr = hawk_dupbtoucstr(hawk, name, &wcs.len, 0);
|
||||||
if (HAWK_UNLIKELY(!wcs.ptr))
|
if (HAWK_UNLIKELY(!wcs.ptr))
|
||||||
{
|
{
|
||||||
if (wspec.arg.spec) hawk_freemem (hawk, (hawk_uch_t*)wspec.arg.spec);
|
if (wspec.arg.spec) hawk_freemem(hawk, (hawk_uch_t*)wspec.arg.spec);
|
||||||
return HAWK_NULL;
|
return HAWK_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
fnc = add_fnc(hawk, wcs.ptr, &wspec);
|
fnc = add_fnc(hawk, wcs.ptr, &wspec);
|
||||||
hawk_freemem (hawk, wcs.ptr);
|
hawk_freemem(hawk, wcs.ptr);
|
||||||
if (wspec.arg.spec) hawk_freemem (hawk, (hawk_uch_t*)wspec.arg.spec);
|
if (wspec.arg.spec) hawk_freemem(hawk, (hawk_uch_t*)wspec.arg.spec);
|
||||||
return fnc;
|
return fnc;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -197,13 +197,13 @@ hawk_fnc_t* hawk_addfncwithucstr (hawk_t* hawk, const hawk_uch_t* name, const ha
|
|||||||
mbs.ptr = hawk_duputobcstr(hawk, name, &mbs.len);
|
mbs.ptr = hawk_duputobcstr(hawk, name, &mbs.len);
|
||||||
if (HAWK_UNLIKELY(!mbs.ptr))
|
if (HAWK_UNLIKELY(!mbs.ptr))
|
||||||
{
|
{
|
||||||
if (mspec.arg.spec) hawk_freemem (hawk, (hawk_bch_t*)mspec.arg.spec);
|
if (mspec.arg.spec) hawk_freemem(hawk, (hawk_bch_t*)mspec.arg.spec);
|
||||||
return HAWK_NULL;
|
return HAWK_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
fnc = add_fnc(hawk, mbs.ptr, &mspec);
|
fnc = add_fnc(hawk, mbs.ptr, &mspec);
|
||||||
hawk_freemem (hawk, mbs.ptr);
|
hawk_freemem(hawk, mbs.ptr);
|
||||||
if (mspec.arg.spec) hawk_freemem (hawk, (hawk_bch_t*)mspec.arg.spec);
|
if (mspec.arg.spec) hawk_freemem(hawk, (hawk_bch_t*)mspec.arg.spec);
|
||||||
return fnc;
|
return fnc;
|
||||||
#else
|
#else
|
||||||
return add_fnc(hawk, name, spec);
|
return add_fnc(hawk, name, spec);
|
||||||
@ -221,7 +221,7 @@ int hawk_delfncwithbcstr (hawk_t* hawk, const hawk_bch_t* name)
|
|||||||
#if defined(HAWK_OOCH_IS_BCH)
|
#if defined(HAWK_OOCH_IS_BCH)
|
||||||
if (hawk_htb_delete(hawk->fnc.user, ncs.ptr, ncs.len) <= -1)
|
if (hawk_htb_delete(hawk->fnc.user, ncs.ptr, ncs.len) <= -1)
|
||||||
{
|
{
|
||||||
hawk_seterrfmt (hawk, HAWK_NULL, HAWK_ENOENT, HAWK_T("no such function - %hs"), name);
|
hawk_seterrfmt(hawk, HAWK_NULL, HAWK_ENOENT, HAWK_T("no such function - %hs"), name);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
@ -229,11 +229,11 @@ int hawk_delfncwithbcstr (hawk_t* hawk, const hawk_bch_t* name)
|
|||||||
if (!wcs.ptr) return -1;
|
if (!wcs.ptr) return -1;
|
||||||
if (hawk_htb_delete(hawk->fnc.user, wcs.ptr, wcs.len) <= -1)
|
if (hawk_htb_delete(hawk->fnc.user, wcs.ptr, wcs.len) <= -1)
|
||||||
{
|
{
|
||||||
hawk_seterrfmt (hawk, HAWK_NULL, HAWK_ENOENT, HAWK_T("no such function - %hs"), name);
|
hawk_seterrfmt(hawk, HAWK_NULL, HAWK_ENOENT, HAWK_T("no such function - %hs"), name);
|
||||||
hawk_freemem (hawk, wcs.ptr);
|
hawk_freemem(hawk, wcs.ptr);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
hawk_freemem (hawk, wcs.ptr);
|
hawk_freemem(hawk, wcs.ptr);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -252,15 +252,15 @@ int hawk_delfncwithucstr (hawk_t* hawk, const hawk_uch_t* name)
|
|||||||
if (!mbs.ptr) return -1;
|
if (!mbs.ptr) return -1;
|
||||||
if (hawk_htb_delete(hawk->fnc.user, mbs.ptr, mbs.len) <= -1)
|
if (hawk_htb_delete(hawk->fnc.user, mbs.ptr, mbs.len) <= -1)
|
||||||
{
|
{
|
||||||
hawk_seterrfmt (hawk, HAWK_NULL, HAWK_ENOENT, HAWK_T("no such function - %ls"), name);
|
hawk_seterrfmt(hawk, HAWK_NULL, HAWK_ENOENT, HAWK_T("no such function - %ls"), name);
|
||||||
hawk_freemem (hawk, mbs.ptr);
|
hawk_freemem(hawk, mbs.ptr);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
hawk_freemem (hawk, mbs.ptr);
|
hawk_freemem(hawk, mbs.ptr);
|
||||||
#else
|
#else
|
||||||
if (hawk_htb_delete(hawk->fnc.user, ncs.ptr, ncs.len) <= -1)
|
if (hawk_htb_delete(hawk->fnc.user, ncs.ptr, ncs.len) <= -1)
|
||||||
{
|
{
|
||||||
hawk_seterrfmt (hawk, HAWK_NULL, HAWK_ENOENT, HAWK_T("no such function - %ls"), name);
|
hawk_seterrfmt(hawk, HAWK_NULL, HAWK_ENOENT, HAWK_T("no such function - %ls"), name);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -297,7 +297,7 @@ static hawk_fnc_t* find_fnc (hawk_t* hawk, const hawk_oocs_t* name)
|
|||||||
if ((hawk->opt.trait & fnc->spec.trait) == fnc->spec.trait) return fnc;
|
if ((hawk->opt.trait & fnc->spec.trait) == fnc->spec.trait) return fnc;
|
||||||
}
|
}
|
||||||
|
|
||||||
hawk_seterrfmt (hawk, HAWK_NULL, HAWK_ENOENT, HAWK_T("no such function - %js"), name);
|
hawk_seterrfmt(hawk, HAWK_NULL, HAWK_ENOENT, HAWK_T("no such function - %js"), name);
|
||||||
return HAWK_NULL;
|
return HAWK_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -312,7 +312,7 @@ hawk_fnc_t* hawk_findfncwithbcs (hawk_t* hawk, const hawk_bcs_t* name)
|
|||||||
wcs.ptr = hawk_dupbtouchars(hawk, name->ptr, name->len, &wcs.len, 0);
|
wcs.ptr = hawk_dupbtouchars(hawk, name->ptr, name->len, &wcs.len, 0);
|
||||||
if (HAWK_UNLIKELY(!wcs.ptr)) return HAWK_NULL;
|
if (HAWK_UNLIKELY(!wcs.ptr)) return HAWK_NULL;
|
||||||
fnc = find_fnc(hawk, &wcs);
|
fnc = find_fnc(hawk, &wcs);
|
||||||
hawk_freemem (hawk, wcs.ptr);
|
hawk_freemem(hawk, wcs.ptr);
|
||||||
return fnc;
|
return fnc;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -326,7 +326,7 @@ hawk_fnc_t* hawk_findfncwithucs (hawk_t* hawk, const hawk_ucs_t* name)
|
|||||||
mbs.ptr = hawk_duputobchars(hawk, name->ptr, name->len, &mbs.len);
|
mbs.ptr = hawk_duputobchars(hawk, name->ptr, name->len, &mbs.len);
|
||||||
if (HAWK_UNLIKELY(!mbs.ptr)) return HAWK_NULL;
|
if (HAWK_UNLIKELY(!mbs.ptr)) return HAWK_NULL;
|
||||||
fnc = find_fnc(hawk, &mbs);
|
fnc = find_fnc(hawk, &mbs);
|
||||||
hawk_freemem (hawk, mbs.ptr);
|
hawk_freemem(hawk, mbs.ptr);
|
||||||
return fnc;
|
return fnc;
|
||||||
#else
|
#else
|
||||||
return find_fnc(hawk, name);
|
return find_fnc(hawk, name);
|
||||||
|
@ -940,6 +940,7 @@ enum hawk_errnum_t
|
|||||||
HAWK_ELBRACE, /**< left brace expected */
|
HAWK_ELBRACE, /**< left brace expected */
|
||||||
HAWK_ELPAREN, /**< left parenthesis expected */
|
HAWK_ELPAREN, /**< left parenthesis expected */
|
||||||
HAWK_ERPAREN, /**< right parenthesis expected */
|
HAWK_ERPAREN, /**< right parenthesis expected */
|
||||||
|
HAWK_ERBRACE, /**< right brace expected */
|
||||||
HAWK_ERBRACK, /**< right bracket expected */
|
HAWK_ERBRACK, /**< right bracket expected */
|
||||||
HAWK_ECOMMA, /**< comma expected */
|
HAWK_ECOMMA, /**< comma expected */
|
||||||
HAWK_ESCOLON, /**< semicolon expected */
|
HAWK_ESCOLON, /**< semicolon expected */
|
||||||
@ -952,6 +953,8 @@ enum hawk_errnum_t
|
|||||||
|
|
||||||
HAWK_EKWFNC, /**< keyword 'function' expected */
|
HAWK_EKWFNC, /**< keyword 'function' expected */
|
||||||
HAWK_EKWWHL, /**< keyword 'while' expected */
|
HAWK_EKWWHL, /**< keyword 'while' expected */
|
||||||
|
HAWK_EKWCASE, /**< keyword 'case' expected */
|
||||||
|
HAWK_EMULDFL, /**< multiple 'default' labels */
|
||||||
HAWK_EASSIGN, /**< assignment statement expected */
|
HAWK_EASSIGN, /**< assignment statement expected */
|
||||||
HAWK_EIDENT, /**< identifier expected */
|
HAWK_EIDENT, /**< identifier expected */
|
||||||
HAWK_EFUNNAM, /**< not a valid function name */
|
HAWK_EFUNNAM, /**< not a valid function name */
|
||||||
|
@ -278,6 +278,7 @@ struct hawk_t
|
|||||||
hawk_oow_t loop;
|
hawk_oow_t loop;
|
||||||
hawk_oow_t expr; /* expression */
|
hawk_oow_t expr; /* expression */
|
||||||
hawk_oow_t incl;
|
hawk_oow_t incl;
|
||||||
|
hawk_oow_t swtch; /* switch */
|
||||||
} depth;
|
} depth;
|
||||||
|
|
||||||
/* current pragma values */
|
/* current pragma values */
|
||||||
|
62
lib/hawk.c
62
lib/hawk.c
@ -30,18 +30,18 @@ static void free_fun (hawk_htb_t* map, void* vptr, hawk_oow_t vlen)
|
|||||||
hawk_fun_t* f = (hawk_fun_t*)vptr;
|
hawk_fun_t* f = (hawk_fun_t*)vptr;
|
||||||
|
|
||||||
/* f->name doesn't have to be freed */
|
/* f->name doesn't have to be freed */
|
||||||
/*hawk_freemem (hawk, f->name);*/
|
/*hawk_freemem(hawk, f->name);*/
|
||||||
|
|
||||||
if (f->argspec) hawk_freemem (hawk, f->argspec);
|
if (f->argspec) hawk_freemem(hawk, f->argspec);
|
||||||
hawk_clrpt (hawk, f->body);
|
hawk_clrpt(hawk, f->body);
|
||||||
hawk_freemem (hawk, f);
|
hawk_freemem(hawk, f);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void free_fnc (hawk_htb_t* map, void* vptr, hawk_oow_t vlen)
|
static void free_fnc (hawk_htb_t* map, void* vptr, hawk_oow_t vlen)
|
||||||
{
|
{
|
||||||
hawk_t* hawk = *(hawk_t**)(map + 1);
|
hawk_t* hawk = *(hawk_t**)(map + 1);
|
||||||
hawk_fnc_t* f = (hawk_fnc_t*)vptr;
|
hawk_fnc_t* f = (hawk_fnc_t*)vptr;
|
||||||
hawk_freemem (hawk, f);
|
hawk_freemem(hawk, f);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int init_token (hawk_t* hawk, hawk_tok_t* tok)
|
static int init_token (hawk_t* hawk, hawk_tok_t* tok)
|
||||||
@ -139,7 +139,7 @@ int hawk_init (hawk_t* hawk, hawk_mmgr_t* mmgr, hawk_cmgr_t* cmgr, const hawk_pr
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* zero out the object */
|
/* zero out the object */
|
||||||
HAWK_MEMSET (hawk, 0, HAWK_SIZEOF(*hawk));
|
HAWK_MEMSET(hawk, 0, HAWK_SIZEOF(*hawk));
|
||||||
|
|
||||||
/* remember the memory manager */
|
/* remember the memory manager */
|
||||||
hawk->_instsize = HAWK_SIZEOF(*hawk);
|
hawk->_instsize = HAWK_SIZEOF(*hawk);
|
||||||
@ -164,7 +164,7 @@ int hawk_init (hawk_t* hawk, hawk_mmgr_t* mmgr, hawk_cmgr_t* cmgr, const hawk_pr
|
|||||||
prm->math.pow == HAWK_NULL ||
|
prm->math.pow == HAWK_NULL ||
|
||||||
prm->math.mod == HAWK_NULL)
|
prm->math.mod == HAWK_NULL)
|
||||||
{
|
{
|
||||||
hawk_seterrnum (hawk, HAWK_NULL, HAWK_EINVAL);
|
hawk_seterrnum(hawk, HAWK_NULL, HAWK_EINVAL);
|
||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
hawk->prm = *prm;
|
hawk->prm = *prm;
|
||||||
@ -217,7 +217,7 @@ int hawk_init (hawk_t* hawk, hawk_mmgr_t* mmgr, hawk_cmgr_t* cmgr, const hawk_pr
|
|||||||
hawk->fnc.user == HAWK_NULL ||
|
hawk->fnc.user == HAWK_NULL ||
|
||||||
hawk->modtab == HAWK_NULL)
|
hawk->modtab == HAWK_NULL)
|
||||||
{
|
{
|
||||||
hawk_seterrnum (hawk, HAWK_NULL, HAWK_ENOMEM);
|
hawk_seterrnum(hawk, HAWK_NULL, HAWK_ENOMEM);
|
||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -262,7 +262,7 @@ oops:
|
|||||||
fini_token (&hawk->ntok);
|
fini_token (&hawk->ntok);
|
||||||
fini_token (&hawk->tok);
|
fini_token (&hawk->tok);
|
||||||
fini_token (&hawk->ptok);
|
fini_token (&hawk->ptok);
|
||||||
if (hawk->log.ptr) hawk_freemem (hawk, hawk->log.ptr);
|
if (hawk->log.ptr) hawk_freemem(hawk, hawk->log.ptr);
|
||||||
hawk->log.capa = 0;
|
hawk->log.capa = 0;
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
@ -280,14 +280,14 @@ void hawk_fini (hawk_t* hawk)
|
|||||||
{
|
{
|
||||||
int shuterr = hawk->shuterr;
|
int shuterr = hawk->shuterr;
|
||||||
hawk->shuterr = 1;
|
hawk->shuterr = 1;
|
||||||
hawk->prm.logwrite (hawk, hawk->log.last_mask, hawk->log.ptr, hawk->log.len);
|
hawk->prm.logwrite(hawk, hawk->log.last_mask, hawk->log.ptr, hawk->log.len);
|
||||||
hawk->shuterr = shuterr;
|
hawk->shuterr = shuterr;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (ecb = hawk->ecb; ecb != (hawk_ecb_t*)hawk; ecb = ecb_next)
|
for (ecb = hawk->ecb; ecb != (hawk_ecb_t*)hawk; ecb = ecb_next)
|
||||||
{
|
{
|
||||||
ecb_next = ecb->next;
|
ecb_next = ecb->next;
|
||||||
if (ecb->close) ecb->close (hawk, ecb->ctx);
|
if (ecb->close) ecb->close(hawk, ecb->ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
do { ecb = hawk_popecb(hawk); } while (ecb);
|
do { ecb = hawk_popecb(hawk); } while (ecb);
|
||||||
@ -309,23 +309,23 @@ void hawk_fini (hawk_t* hawk)
|
|||||||
fini_token (&hawk->tok);
|
fini_token (&hawk->tok);
|
||||||
fini_token (&hawk->ptok);
|
fini_token (&hawk->ptok);
|
||||||
|
|
||||||
if (hawk->parse.incl_hist.ptr) hawk_freemem (hawk, hawk->parse.incl_hist.ptr);
|
if (hawk->parse.incl_hist.ptr) hawk_freemem(hawk, hawk->parse.incl_hist.ptr);
|
||||||
hawk_clearsionames (hawk);
|
hawk_clearsionames (hawk);
|
||||||
|
|
||||||
/* destroy dynamically allocated options */
|
/* destroy dynamically allocated options */
|
||||||
for (i = 0; i < HAWK_COUNTOF(hawk->opt.mod); i++)
|
for (i = 0; i < HAWK_COUNTOF(hawk->opt.mod); i++)
|
||||||
{
|
{
|
||||||
if (hawk->opt.mod[i].ptr) hawk_freemem (hawk, hawk->opt.mod[i].ptr);
|
if (hawk->opt.mod[i].ptr) hawk_freemem(hawk, hawk->opt.mod[i].ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hawk->opt.includedirs.ptr) hawk_freemem (hawk, hawk->opt.includedirs.ptr);
|
if (hawk->opt.includedirs.ptr) hawk_freemem(hawk, hawk->opt.includedirs.ptr);
|
||||||
|
|
||||||
|
|
||||||
for (i = 0; i < HAWK_COUNTOF(hawk->sbuf); i++)
|
for (i = 0; i < HAWK_COUNTOF(hawk->sbuf); i++)
|
||||||
{
|
{
|
||||||
if (hawk->sbuf[i].ptr)
|
if (hawk->sbuf[i].ptr)
|
||||||
{
|
{
|
||||||
hawk_freemem (hawk, hawk->sbuf[i].ptr);
|
hawk_freemem(hawk, hawk->sbuf[i].ptr);
|
||||||
hawk->sbuf[i].ptr = HAWK_NULL;
|
hawk->sbuf[i].ptr = HAWK_NULL;
|
||||||
hawk->sbuf[i].len = 0;
|
hawk->sbuf[i].len = 0;
|
||||||
hawk->sbuf[i].capa = 0;
|
hawk->sbuf[i].capa = 0;
|
||||||
@ -340,13 +340,13 @@ void hawk_fini (hawk_t* hawk)
|
|||||||
* logging */
|
* logging */
|
||||||
int shuterr = hawk->shuterr;
|
int shuterr = hawk->shuterr;
|
||||||
hawk->shuterr = 1;
|
hawk->shuterr = 1;
|
||||||
hawk->prm.logwrite (hawk, hawk->log.last_mask, hawk->log.ptr, hawk->log.len);
|
hawk->prm.logwrite(hawk, hawk->log.last_mask, hawk->log.ptr, hawk->log.len);
|
||||||
hawk->shuterr = shuterr;
|
hawk->shuterr = shuterr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hawk->log.ptr)
|
if (hawk->log.ptr)
|
||||||
{
|
{
|
||||||
hawk_freemem (hawk, hawk->log.ptr);
|
hawk_freemem(hawk, hawk->log.ptr);
|
||||||
hawk->log.capa = 0;
|
hawk->log.capa = 0;
|
||||||
hawk->log.len = 0;
|
hawk->log.len = 0;
|
||||||
}
|
}
|
||||||
@ -359,7 +359,7 @@ static hawk_rbt_walk_t unload_module (hawk_rbt_t* rbt, hawk_rbt_pair_t* pair, vo
|
|||||||
|
|
||||||
md = HAWK_RBT_VPTR(pair);
|
md = HAWK_RBT_VPTR(pair);
|
||||||
if (md->mod.unload) md->mod.unload (&md->mod, hawk);
|
if (md->mod.unload) md->mod.unload (&md->mod, hawk);
|
||||||
if (md->handle) hawk->prm.modclose (hawk, md->handle);
|
if (md->handle) hawk->prm.modclose(hawk, md->handle);
|
||||||
|
|
||||||
return HAWK_RBT_WALK_FORWARD;
|
return HAWK_RBT_WALK_FORWARD;
|
||||||
}
|
}
|
||||||
@ -371,7 +371,7 @@ void hawk_clear (hawk_t* hawk)
|
|||||||
for (ecb = hawk->ecb; ecb != (hawk_ecb_t*)hawk; ecb = ecb_next)
|
for (ecb = hawk->ecb; ecb != (hawk_ecb_t*)hawk; ecb = ecb_next)
|
||||||
{
|
{
|
||||||
ecb_next = ecb->next;
|
ecb_next = ecb->next;
|
||||||
if (ecb->clear) ecb->clear (hawk, ecb->ctx);
|
if (ecb->clear) ecb->clear(hawk, ecb->ctx);
|
||||||
}
|
}
|
||||||
/* hawk_clear() this doesn't pop event callbacks */
|
/* hawk_clear() this doesn't pop event callbacks */
|
||||||
|
|
||||||
@ -418,14 +418,14 @@ void hawk_clear (hawk_t* hawk)
|
|||||||
|
|
||||||
if (hawk->tree.begin)
|
if (hawk->tree.begin)
|
||||||
{
|
{
|
||||||
hawk_clrpt (hawk, hawk->tree.begin);
|
hawk_clrpt(hawk, hawk->tree.begin);
|
||||||
hawk->tree.begin = HAWK_NULL;
|
hawk->tree.begin = HAWK_NULL;
|
||||||
hawk->tree.begin_tail = HAWK_NULL;
|
hawk->tree.begin_tail = HAWK_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hawk->tree.end)
|
if (hawk->tree.end)
|
||||||
{
|
{
|
||||||
hawk_clrpt (hawk, hawk->tree.end);
|
hawk_clrpt(hawk, hawk->tree.end);
|
||||||
hawk->tree.end = HAWK_NULL;
|
hawk->tree.end = HAWK_NULL;
|
||||||
hawk->tree.end_tail = HAWK_NULL;
|
hawk->tree.end_tail = HAWK_NULL;
|
||||||
}
|
}
|
||||||
@ -433,9 +433,9 @@ void hawk_clear (hawk_t* hawk)
|
|||||||
while (hawk->tree.chain)
|
while (hawk->tree.chain)
|
||||||
{
|
{
|
||||||
hawk_chain_t* next = hawk->tree.chain->next;
|
hawk_chain_t* next = hawk->tree.chain->next;
|
||||||
if (hawk->tree.chain->pattern) hawk_clrpt (hawk, hawk->tree.chain->pattern);
|
if (hawk->tree.chain->pattern) hawk_clrpt(hawk, hawk->tree.chain->pattern);
|
||||||
if (hawk->tree.chain->action) hawk_clrpt (hawk, hawk->tree.chain->action);
|
if (hawk->tree.chain->action) hawk_clrpt(hawk, hawk->tree.chain->action);
|
||||||
hawk_freemem (hawk, hawk->tree.chain);
|
hawk_freemem(hawk, hawk->tree.chain);
|
||||||
hawk->tree.chain = next;
|
hawk->tree.chain = next;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -493,7 +493,7 @@ int hawk_setopt (hawk_t* hawk, hawk_opt_t id, const void* value)
|
|||||||
if (dup_str_opt(hawk, value, &tmp) <= -1) return -1;
|
if (dup_str_opt(hawk, value, &tmp) <= -1) return -1;
|
||||||
|
|
||||||
idx = id - HAWK_OPT_MODLIBDIRS;
|
idx = id - HAWK_OPT_MODLIBDIRS;
|
||||||
if (hawk->opt.mod[idx].ptr) hawk_freemem (hawk, hawk->opt.mod[idx].ptr);
|
if (hawk->opt.mod[idx].ptr) hawk_freemem(hawk, hawk->opt.mod[idx].ptr);
|
||||||
|
|
||||||
hawk->opt.mod[idx] = tmp;
|
hawk->opt.mod[idx] = tmp;
|
||||||
return 0;
|
return 0;
|
||||||
@ -503,7 +503,7 @@ int hawk_setopt (hawk_t* hawk, hawk_opt_t id, const void* value)
|
|||||||
{
|
{
|
||||||
hawk_oocs_t tmp;
|
hawk_oocs_t tmp;
|
||||||
if (dup_str_opt(hawk, value, &tmp) <= -1) return -1;
|
if (dup_str_opt(hawk, value, &tmp) <= -1) return -1;
|
||||||
if (hawk->opt.includedirs.ptr) hawk_freemem (hawk, hawk->opt.includedirs.ptr);
|
if (hawk->opt.includedirs.ptr) hawk_freemem(hawk, hawk->opt.includedirs.ptr);
|
||||||
hawk->opt.includedirs = tmp;
|
hawk->opt.includedirs = tmp;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -535,7 +535,7 @@ int hawk_setopt (hawk_t* hawk, hawk_opt_t id, const void* value)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hawk_seterrnum (hawk, HAWK_NULL, HAWK_EINVAL);
|
hawk_seterrnum(hawk, HAWK_NULL, HAWK_EINVAL);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -581,7 +581,7 @@ int hawk_getopt (hawk_t* hawk, hawk_opt_t id, void* value)
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
hawk_seterrnum (hawk, HAWK_NULL, HAWK_EINVAL);
|
hawk_seterrnum(hawk, HAWK_NULL, HAWK_EINVAL);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -728,21 +728,21 @@ int hawk_findmodsymflt_noseterr (hawk_t* hawk, hawk_mod_flt_tab_t* flttab, hawk_
|
|||||||
int hawk_findmodsymfnc (hawk_t* hawk, hawk_mod_fnc_tab_t* fnctab, hawk_oow_t count, const hawk_ooch_t* name, hawk_mod_sym_t* sym)
|
int hawk_findmodsymfnc (hawk_t* hawk, hawk_mod_fnc_tab_t* fnctab, hawk_oow_t count, const hawk_ooch_t* name, hawk_mod_sym_t* sym)
|
||||||
{
|
{
|
||||||
int n = hawk_findmodsymfnc_noseterr(hawk, fnctab, count, name, sym);
|
int n = hawk_findmodsymfnc_noseterr(hawk, fnctab, count, name, sym);
|
||||||
if (n <= -1) hawk_seterrfmt (hawk, HAWK_NULL, HAWK_ENOENT, HAWK_T("'%js' not found"), name);
|
if (n <= -1) hawk_seterrfmt(hawk, HAWK_NULL, HAWK_ENOENT, HAWK_T("'%js' not found"), name);
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
int hawk_findmodsymint (hawk_t* hawk, hawk_mod_int_tab_t* inttab, hawk_oow_t count, const hawk_ooch_t* name, hawk_mod_sym_t* sym)
|
int hawk_findmodsymint (hawk_t* hawk, hawk_mod_int_tab_t* inttab, hawk_oow_t count, const hawk_ooch_t* name, hawk_mod_sym_t* sym)
|
||||||
{
|
{
|
||||||
int n = hawk_findmodsymint_noseterr(hawk, inttab, count, name, sym);
|
int n = hawk_findmodsymint_noseterr(hawk, inttab, count, name, sym);
|
||||||
if (n <= -1) hawk_seterrfmt (hawk, HAWK_NULL, HAWK_ENOENT, HAWK_T("'%js' not found"), name);
|
if (n <= -1) hawk_seterrfmt(hawk, HAWK_NULL, HAWK_ENOENT, HAWK_T("'%js' not found"), name);
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
int hawk_findmodsymflt (hawk_t* hawk, hawk_mod_flt_tab_t* flttab, hawk_oow_t count, const hawk_ooch_t* name, hawk_mod_sym_t* sym)
|
int hawk_findmodsymflt (hawk_t* hawk, hawk_mod_flt_tab_t* flttab, hawk_oow_t count, const hawk_ooch_t* name, hawk_mod_sym_t* sym)
|
||||||
{
|
{
|
||||||
int n = hawk_findmodsymflt_noseterr(hawk, flttab, count, name, sym);
|
int n = hawk_findmodsymflt_noseterr(hawk, flttab, count, name, sym);
|
||||||
if (n <= -1) hawk_seterrfmt (hawk, HAWK_NULL, HAWK_ENOENT, HAWK_T("'%js' not found"), name);
|
if (n <= -1) hawk_seterrfmt(hawk, HAWK_NULL, HAWK_ENOENT, HAWK_T("'%js' not found"), name);
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
14
lib/hawk.h
14
lib/hawk.h
@ -60,7 +60,7 @@
|
|||||||
* hawk_rio_cbs_t rio; // need to initialize it with callback functions
|
* hawk_rio_cbs_t rio; // need to initialize it with callback functions
|
||||||
*
|
*
|
||||||
* hawk = hawk_open(mmgr, 0, prm); // create an interpreter
|
* hawk = hawk_open(mmgr, 0, prm); // create an interpreter
|
||||||
* hawk_parse (hawk, &sio); // parse a script
|
* hawk_parse(hawk, &sio); // parse a script
|
||||||
* rtx = hawk_rtx_open(hawk, 0, &rio); // create a runtime context
|
* rtx = hawk_rtx_open(hawk, 0, &rio); // create a runtime context
|
||||||
* retv = hawk_rtx_loop(rtx); // run a standard AWK loop
|
* retv = hawk_rtx_loop(rtx); // run a standard AWK loop
|
||||||
* if (retv) hawk_rtx_refdownval (rtx, retv); // free return value
|
* if (retv) hawk_rtx_refdownval (rtx, retv); // free return value
|
||||||
@ -398,6 +398,8 @@ enum hawk_nde_type_t
|
|||||||
/* statement */
|
/* statement */
|
||||||
HAWK_NDE_BLK,
|
HAWK_NDE_BLK,
|
||||||
HAWK_NDE_IF,
|
HAWK_NDE_IF,
|
||||||
|
HAWK_NDE_SWITCH,
|
||||||
|
HAWK_NDE_CASE,
|
||||||
HAWK_NDE_WHILE,
|
HAWK_NDE_WHILE,
|
||||||
HAWK_NDE_DOWHILE,
|
HAWK_NDE_DOWHILE,
|
||||||
HAWK_NDE_FOR,
|
HAWK_NDE_FOR,
|
||||||
@ -1903,8 +1905,8 @@ HAWK_EXPORT void hawk_clrfnc (
|
|||||||
* if (n >= 0)
|
* if (n >= 0)
|
||||||
* {
|
* {
|
||||||
* while (n > 0)
|
* while (n > 0)
|
||||||
* n = sio->in (hawk, HAWK_SIO_CMD_READ, buf, buf_size);
|
* n = sio->in(hawk, HAWK_SIO_CMD_READ, buf, buf_size);
|
||||||
* sio->in (hawk, HAWK_SIO_CMD_CLOSE);
|
* sio->in(hawk, HAWK_SIO_CMD_CLOSE);
|
||||||
* }
|
* }
|
||||||
* \endcode
|
* \endcode
|
||||||
*
|
*
|
||||||
@ -1917,12 +1919,12 @@ HAWK_EXPORT void hawk_clrfnc (
|
|||||||
* calling \a sio->out as shown below:
|
* calling \a sio->out as shown below:
|
||||||
*
|
*
|
||||||
* \code
|
* \code
|
||||||
* n = sio->out (hawk, HAWK_SIO_CMD_OPEN);
|
* n = sio->out(hawk, HAWK_SIO_CMD_OPEN);
|
||||||
* if (n >= 0)
|
* if (n >= 0)
|
||||||
* {
|
* {
|
||||||
* while (n > 0)
|
* while (n > 0)
|
||||||
* n = sio->out (hawk, HAWK_SIO_CMD_WRITE, text, text_size);
|
* n = sio->out(hawk, HAWK_SIO_CMD_WRITE, text, text_size);
|
||||||
* sio->out (hawk, HAWK_SIO_CMD_CLOSE);
|
* sio->out(hawk, HAWK_SIO_CMD_CLOSE);
|
||||||
* }
|
* }
|
||||||
* \endcode
|
* \endcode
|
||||||
*
|
*
|
||||||
|
@ -182,7 +182,7 @@ static hawk_flt_t math_round (hawk_t* hawk, hawk_flt_t x)
|
|||||||
|
|
||||||
hawk_flt_t f, d;
|
hawk_flt_t f, d;
|
||||||
|
|
||||||
f = math_floor (hawk, x);
|
f = math_floor(hawk, x);
|
||||||
d = x - f; /* get fraction */
|
d = x - f; /* get fraction */
|
||||||
|
|
||||||
if (d > (hawk_flt_t)0.5)
|
if (d > (hawk_flt_t)0.5)
|
||||||
@ -670,7 +670,7 @@ static void unload (hawk_mod_t* mod, hawk_t* hawk)
|
|||||||
modctx_t* modctx;
|
modctx_t* modctx;
|
||||||
|
|
||||||
modctx = (modctx_t*)mod->ctx;
|
modctx = (modctx_t*)mod->ctx;
|
||||||
hawk_freemem (hawk, modctx);
|
hawk_freemem(hawk, modctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
int hawk_mod_math (hawk_mod_t* mod, hawk_t* hawk)
|
int hawk_mod_math (hawk_mod_t* mod, hawk_t* hawk)
|
||||||
|
@ -6394,7 +6394,7 @@ static void unload (hawk_mod_t* mod, hawk_t* hawk)
|
|||||||
HAWK_ASSERT (HAWK_RBT_SIZE(mctx->rtxtab) == 0);
|
HAWK_ASSERT (HAWK_RBT_SIZE(mctx->rtxtab) == 0);
|
||||||
hawk_rbt_close (mctx->rtxtab);
|
hawk_rbt_close (mctx->rtxtab);
|
||||||
|
|
||||||
hawk_freemem (hawk, mctx);
|
hawk_freemem(hawk, mctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
int hawk_mod_sys (hawk_mod_t* mod, hawk_t* hawk)
|
int hawk_mod_sys (hawk_mod_t* mod, hawk_t* hawk)
|
||||||
@ -6413,7 +6413,7 @@ int hawk_mod_sys (hawk_mod_t* mod, hawk_t* hawk)
|
|||||||
rbt = hawk_rbt_open(hawk_getgem(hawk), 0, 1, 1);
|
rbt = hawk_rbt_open(hawk_getgem(hawk), 0, 1, 1);
|
||||||
if (HAWK_UNLIKELY(!rbt))
|
if (HAWK_UNLIKELY(!rbt))
|
||||||
{
|
{
|
||||||
hawk_freemem (hawk, mod->ctx);
|
hawk_freemem(hawk, mod->ctx);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
hawk_rbt_setstyle (rbt, hawk_get_rbt_style(HAWK_RBT_STYLE_INLINE_COPIERS));
|
hawk_rbt_setstyle (rbt, hawk_get_rbt_style(HAWK_RBT_STYLE_INLINE_COPIERS));
|
||||||
|
@ -41,7 +41,9 @@ enum hawk_kwid_t
|
|||||||
HAWK_KWID_BEGIN,
|
HAWK_KWID_BEGIN,
|
||||||
HAWK_KWID_END,
|
HAWK_KWID_END,
|
||||||
HAWK_KWID_BREAK,
|
HAWK_KWID_BREAK,
|
||||||
|
HAWK_KWID_CASE,
|
||||||
HAWK_KWID_CONTINUE,
|
HAWK_KWID_CONTINUE,
|
||||||
|
HAWK_KWID_DEFAULT,
|
||||||
HAWK_KWID_DELETE,
|
HAWK_KWID_DELETE,
|
||||||
HAWK_KWID_DO,
|
HAWK_KWID_DO,
|
||||||
HAWK_KWID_ELSE,
|
HAWK_KWID_ELSE,
|
||||||
@ -58,6 +60,7 @@ enum hawk_kwid_t
|
|||||||
HAWK_KWID_PRINT,
|
HAWK_KWID_PRINT,
|
||||||
HAWK_KWID_PRINTF,
|
HAWK_KWID_PRINTF,
|
||||||
HAWK_KWID_RETURN,
|
HAWK_KWID_RETURN,
|
||||||
|
HAWK_KWID_SWITCH,
|
||||||
HAWK_KWID_WHILE
|
HAWK_KWID_WHILE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
1328
lib/parse.c
1328
lib/parse.c
File diff suppressed because it is too large
Load Diff
@ -156,7 +156,7 @@ int hawk_sio_init (hawk_sio_t* sio, hawk_gem_t* gem, const hawk_ooch_t* path, in
|
|||||||
if (hawk_tio_init(&sio->tio.io, gem, topt) <= -1) goto oops03;
|
if (hawk_tio_init(&sio->tio.io, gem, topt) <= -1) goto oops03;
|
||||||
|
|
||||||
/* store the back-reference to sio in the extension area.*/
|
/* store the back-reference to sio in the extension area.*/
|
||||||
/*HAWK_ASSERT (hawk, (&sio->tio.io + 1) == &sio->tio.xtn);*/
|
/*HAWK_ASSERT(hawk, (&sio->tio.io + 1) == &sio->tio.xtn);*/
|
||||||
*(hawk_sio_t**)(&sio->tio.io + 1) = sio;
|
*(hawk_sio_t**)(&sio->tio.io + 1) = sio;
|
||||||
|
|
||||||
if (hawk_tio_attachin(&sio->tio.io, file_input, sio->inbuf, HAWK_COUNTOF(sio->inbuf)) <= -1 ||
|
if (hawk_tio_attachin(&sio->tio.io, file_input, sio->inbuf, HAWK_COUNTOF(sio->inbuf)) <= -1 ||
|
||||||
|
134
lib/std.c
134
lib/std.c
@ -346,7 +346,7 @@ static void* std_mod_open_checked (hawk_t* hawk, const hawk_mod_spec_t* spec)
|
|||||||
{
|
{
|
||||||
/* hawk_stdmodstartup() must have failed upon start-up.
|
/* hawk_stdmodstartup() must have failed upon start-up.
|
||||||
* return failure immediately */
|
* return failure immediately */
|
||||||
hawk_seterrnum (hawk, HAWK_NULL, HAWK_ENOIMPL);
|
hawk_seterrnum(hawk, HAWK_NULL, HAWK_ENOIMPL);
|
||||||
return HAWK_NULL;
|
return HAWK_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -388,7 +388,7 @@ void* hawk_stdmodopen (hawk_t* hawk, const hawk_mod_spec_t* spec)
|
|||||||
|
|
||||||
if (lt_dladvise_init(&adv) != 0)
|
if (lt_dladvise_init(&adv) != 0)
|
||||||
{
|
{
|
||||||
hawk_seterrfmt (hawk, HAWK_NULL, HAWK_ESYSERR, HAWK_T("%hs"), lt_dlerror());
|
hawk_seterrfmt(hawk, HAWK_NULL, HAWK_ESYSERR, HAWK_T("%hs"), lt_dlerror());
|
||||||
return HAWK_NULL;
|
return HAWK_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -396,7 +396,7 @@ void* hawk_stdmodopen (hawk_t* hawk, const hawk_mod_spec_t* spec)
|
|||||||
/*lt_dladvise_resident (&adv); useful for debugging with valgrind */
|
/*lt_dladvise_resident (&adv); useful for debugging with valgrind */
|
||||||
|
|
||||||
h = lt_dlopenadvise(modpath, adv);
|
h = lt_dlopenadvise(modpath, adv);
|
||||||
if (!h) hawk_seterrfmt (hawk, HAWK_NULL, HAWK_ESYSERR, HAWK_T("%hs"), lt_dlerror());
|
if (!h) hawk_seterrfmt(hawk, HAWK_NULL, HAWK_ESYSERR, HAWK_T("%hs"), lt_dlerror());
|
||||||
|
|
||||||
lt_dladvise_destroy (&adv);
|
lt_dladvise_destroy (&adv);
|
||||||
|
|
||||||
@ -407,7 +407,7 @@ void* hawk_stdmodopen (hawk_t* hawk, const hawk_mod_spec_t* spec)
|
|||||||
{
|
{
|
||||||
void* h;
|
void* h;
|
||||||
h = lt_dlopen(HAWK_NULL);
|
h = lt_dlopen(HAWK_NULL);
|
||||||
if (HAWK_UNLIKELY(!h)) hawk_seterrfmt (hawk, HAWK_NULL, HAWK_ESYSERR, HAWK_T("%hs"), lt_dlerror());
|
if (HAWK_UNLIKELY(!h)) hawk_seterrfmt(hawk, HAWK_NULL, HAWK_ESYSERR, HAWK_T("%hs"), lt_dlerror());
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -442,9 +442,9 @@ void* hawk_stdmodopen (hawk_t* hawk, const hawk_mod_spec_t* spec)
|
|||||||
if (!modpath) return HAWK_NULL;
|
if (!modpath) return HAWK_NULL;
|
||||||
|
|
||||||
h = LoadLibrary(modpath);
|
h = LoadLibrary(modpath);
|
||||||
if (!h) hawk_seterrnum (hawk, HAWK_NULL, hawk_syserr_to_errnum(GetLastError());
|
if (!h) hawk_seterrnum(hawk, HAWK_NULL, hawk_syserr_to_errnum(GetLastError());
|
||||||
|
|
||||||
hawk_freemem (hawk, modpath);
|
hawk_freemem(hawk, modpath);
|
||||||
|
|
||||||
HAWK_ASSERT (HAWK_SIZEOF(h) <= HAWK_SIZEOF(void*));
|
HAWK_ASSERT (HAWK_SIZEOF(h) <= HAWK_SIZEOF(void*));
|
||||||
return h;
|
return h;
|
||||||
@ -453,7 +453,7 @@ void* hawk_stdmodopen (hawk_t* hawk, const hawk_mod_spec_t* spec)
|
|||||||
{
|
{
|
||||||
HMODULE h;
|
HMODULE h;
|
||||||
h = GetModuleHandle(HAWK_NULL);
|
h = GetModuleHandle(HAWK_NULL);
|
||||||
if (!h) hawk_seterrnum (hawk, HAWK_NULL, hawk_syserr_to_errnum(GetLastError());
|
if (!h) hawk_seterrnum(hawk, HAWK_NULL, hawk_syserr_to_errnum(GetLastError());
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -496,17 +496,17 @@ void* hawk_stdmodopen (hawk_t* hawk, const hawk_mod_spec_t* spec)
|
|||||||
if (rc != NO_ERROR)
|
if (rc != NO_ERROR)
|
||||||
{
|
{
|
||||||
h = HAWK_NULL;
|
h = HAWK_NULL;
|
||||||
hawk_seterrnum (hawk, HAWK_NULL, hawk_syserr_to_errnum(rc));
|
hawk_seterrnum(hawk, HAWK_NULL, hawk_syserr_to_errnum(rc));
|
||||||
}
|
}
|
||||||
|
|
||||||
hawk_freemem (hawk, modpath);
|
hawk_freemem(hawk, modpath);
|
||||||
|
|
||||||
HAWK_ASSERT (HAWK_SIZEOF(h) <= HAWK_SIZEOF(void*));
|
HAWK_ASSERT (HAWK_SIZEOF(h) <= HAWK_SIZEOF(void*));
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
hawk_seterrnum (hawk, HAWK_NULL, HAWK_ENOIMPL);
|
hawk_seterrnum(hawk, HAWK_NULL, HAWK_ENOIMPL);
|
||||||
return HAWK_NULL;
|
return HAWK_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -545,9 +545,9 @@ void* hawk_stdmodopen (hawk_t* hawk, const hawk_mod_spec_t* spec)
|
|||||||
if (!modpath) return HAWK_NULL;
|
if (!modpath) return HAWK_NULL;
|
||||||
|
|
||||||
h = LoadModule(modpath);
|
h = LoadModule(modpath);
|
||||||
if (!h) hawk_seterrnum (hawk, HAWK_NULL, HAWK_ESYSERR);
|
if (!h) hawk_seterrnum(hawk, HAWK_NULL, HAWK_ESYSERR);
|
||||||
|
|
||||||
hawk_freemem (hawk, modpath);
|
hawk_freemem(hawk, modpath);
|
||||||
|
|
||||||
HAWK_ASSERT (HAWK_SIZEOF(h) <= HAWK_SIZEOF(void*));
|
HAWK_ASSERT (HAWK_SIZEOF(h) <= HAWK_SIZEOF(void*));
|
||||||
return h;
|
return h;
|
||||||
@ -556,7 +556,7 @@ void* hawk_stdmodopen (hawk_t* hawk, const hawk_mod_spec_t* spec)
|
|||||||
{
|
{
|
||||||
void* h;
|
void* h;
|
||||||
h = GetModuleHandle(HAWK_NULL);
|
h = GetModuleHandle(HAWK_NULL);
|
||||||
if (!h) hawk_seterrnum (hawk, HAWK_NULL, HAWK_ESYSERR);
|
if (!h) hawk_seterrnum(hawk, HAWK_NULL, HAWK_ESYSERR);
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -591,9 +591,9 @@ void* hawk_stdmodopen (hawk_t* hawk, const hawk_mod_spec_t* spec)
|
|||||||
if (!modpath) return HAWK_NULL;
|
if (!modpath) return HAWK_NULL;
|
||||||
|
|
||||||
h = dlopen(modpath, RTLD_NOW | RTLD_LOCAL);
|
h = dlopen(modpath, RTLD_NOW | RTLD_LOCAL);
|
||||||
if (!h) hawk_seterrfmt (hawk, HAWK_NULL, HAWK_ESYSERR, HAWK_T("%hs"), dlerror());
|
if (!h) hawk_seterrfmt(hawk, HAWK_NULL, HAWK_ESYSERR, HAWK_T("%hs"), dlerror());
|
||||||
|
|
||||||
hawk_freemem (hawk, modpath);
|
hawk_freemem(hawk, modpath);
|
||||||
|
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
@ -601,11 +601,11 @@ void* hawk_stdmodopen (hawk_t* hawk, const hawk_mod_spec_t* spec)
|
|||||||
{
|
{
|
||||||
void* h;
|
void* h;
|
||||||
h = dlopen(NULL, RTLD_NOW | RTLD_LOCAL);
|
h = dlopen(NULL, RTLD_NOW | RTLD_LOCAL);
|
||||||
if (!h) hawk_seterrfmt (hawk, HAWK_NULL, HAWK_ESYSERR, HAWK_T("%hs"), dlerror());
|
if (!h) hawk_seterrfmt(hawk, HAWK_NULL, HAWK_ESYSERR, HAWK_T("%hs"), dlerror());
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
hawk_seterrnum (hawk, HAWK_NULL, HAWK_ENOIMPL);
|
hawk_seterrnum(hawk, HAWK_NULL, HAWK_ENOIMPL);
|
||||||
return HAWK_NULL;
|
return HAWK_NULL;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -641,11 +641,11 @@ void* hawk_stdmodgetsym (hawk_t* hawk, void* handle, const hawk_ooch_t* name)
|
|||||||
|
|
||||||
#if defined(USE_LTDL)
|
#if defined(USE_LTDL)
|
||||||
s = lt_dlsym(handle, mname);
|
s = lt_dlsym(handle, mname);
|
||||||
if (!s) hawk_seterrfmt (hawk, HAWK_NULL, HAWK_ESYSERR, HAWK_T("%hs"), lt_dlerror());
|
if (!s) hawk_seterrfmt(hawk, HAWK_NULL, HAWK_ESYSERR, HAWK_T("%hs"), lt_dlerror());
|
||||||
|
|
||||||
#elif defined(_WIN32)
|
#elif defined(_WIN32)
|
||||||
s = GetProcAddress((HMODULE)handle, mname);
|
s = GetProcAddress((HMODULE)handle, mname);
|
||||||
if (!s) hawk_seterrnum (hawk, HAWK_NULL, hawk_syserr_to_errnum(GetLastError());
|
if (!s) hawk_seterrnum(hawk, HAWK_NULL, hawk_syserr_to_errnum(GetLastError());
|
||||||
|
|
||||||
#elif defined(__OS2__)
|
#elif defined(__OS2__)
|
||||||
{
|
{
|
||||||
@ -654,17 +654,17 @@ void* hawk_stdmodgetsym (hawk_t* hawk, void* handle, const hawk_ooch_t* name)
|
|||||||
if (rc != NO_ERROR)
|
if (rc != NO_ERROR)
|
||||||
{
|
{
|
||||||
s = HAWK_NULL;
|
s = HAWK_NULL;
|
||||||
hawk_seterrnum (hawk, HAWK_NULL, hawk_syserr_to_errnum(rc));
|
hawk_seterrnum(hawk, HAWK_NULL, hawk_syserr_to_errnum(rc));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif defined(__DOS__) && defined(HAWK_ENABLE_DOS_DYNAMIC_MODULE)
|
#elif defined(__DOS__) && defined(HAWK_ENABLE_DOS_DYNAMIC_MODULE)
|
||||||
s = GetProcAddress(handle, mname);
|
s = GetProcAddress(handle, mname);
|
||||||
if (!s) hawk_seterrnum (hawk, HAWK_NULL, HAWK_ESYSERR);
|
if (!s) hawk_seterrnum(hawk, HAWK_NULL, HAWK_ESYSERR);
|
||||||
|
|
||||||
#elif defined(USE_DLFCN)
|
#elif defined(USE_DLFCN)
|
||||||
s = dlsym(handle, mname);
|
s = dlsym(handle, mname);
|
||||||
if (!s) hawk_seterrfmt (hawk, HAWK_NULL, HAWK_ESYSERR, HAWK_T("%hs"), dlerror());
|
if (!s) hawk_seterrfmt(hawk, HAWK_NULL, HAWK_ESYSERR, HAWK_T("%hs"), dlerror());
|
||||||
|
|
||||||
#else
|
#else
|
||||||
s = HAWK_NULL;
|
s = HAWK_NULL;
|
||||||
@ -673,7 +673,7 @@ void* hawk_stdmodgetsym (hawk_t* hawk, void* handle, const hawk_ooch_t* name)
|
|||||||
#if defined(HAWK_OOCH_IS_BCH)
|
#if defined(HAWK_OOCH_IS_BCH)
|
||||||
/* nothing to do */
|
/* nothing to do */
|
||||||
#else
|
#else
|
||||||
hawk_freemem (hawk, mname);
|
hawk_freemem(hawk, mname);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
@ -910,14 +910,14 @@ static void log_write (hawk_t* hawk, hawk_bitmask_t mask, const hawk_ooch_t* msg
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
write_log (hawk, logfd, ts, tslen);
|
write_log(hawk, logfd, ts, tslen);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (logfd == xtn->log.fd && (xtn->log.fd_flag & LOGFD_TTY))
|
if (logfd == xtn->log.fd && (xtn->log.fd_flag & LOGFD_TTY))
|
||||||
{
|
{
|
||||||
if (mask & HAWK_LOG_FATAL) write_log (hawk, logfd, "\x1B[1;31m", 7);
|
if (mask & HAWK_LOG_FATAL) write_log(hawk, logfd, "\x1B[1;31m", 7);
|
||||||
else if (mask & HAWK_LOG_ERROR) write_log (hawk, logfd, "\x1B[1;32m", 7);
|
else if (mask & HAWK_LOG_ERROR) write_log(hawk, logfd, "\x1B[1;32m", 7);
|
||||||
else if (mask & HAWK_LOG_WARN) write_log (hawk, logfd, "\x1B[1;33m", 7);
|
else if (mask & HAWK_LOG_WARN) write_log(hawk, logfd, "\x1B[1;33m", 7);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(HAWK_OOCH_IS_UCH)
|
#if defined(HAWK_OOCH_IS_UCH)
|
||||||
@ -956,15 +956,15 @@ static void log_write (hawk_t* hawk, hawk_bitmask_t mask, const hawk_ooch_t* msg
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
write_log (hawk, logfd, msg, len);
|
write_log(hawk, logfd, msg, len);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (logfd == xtn->log.fd && (xtn->log.fd_flag & LOGFD_TTY))
|
if (logfd == xtn->log.fd && (xtn->log.fd_flag & LOGFD_TTY))
|
||||||
{
|
{
|
||||||
if (mask & (HAWK_LOG_FATAL | HAWK_LOG_ERROR | HAWK_LOG_WARN)) write_log (hawk, logfd, "\x1B[0m", 4);
|
if (mask & (HAWK_LOG_FATAL | HAWK_LOG_ERROR | HAWK_LOG_WARN)) write_log(hawk, logfd, "\x1B[0m", 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
flush_log (hawk, logfd);
|
flush_log(hawk, logfd);
|
||||||
}
|
}
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
|
|
||||||
@ -1054,7 +1054,7 @@ hawk_t* hawk_openstdwithmmgr (hawk_mmgr_t* mmgr, hawk_oow_t xtnsize, hawk_cmgr_t
|
|||||||
xtn->ecb.close = fini_xtn;
|
xtn->ecb.close = fini_xtn;
|
||||||
xtn->ecb.clear = clear_xtn;
|
xtn->ecb.clear = clear_xtn;
|
||||||
xtn->ecb.ctx = HAWK_NULL;
|
xtn->ecb.ctx = HAWK_NULL;
|
||||||
hawk_pushecb (hawk, &xtn->ecb);
|
hawk_pushecb(hawk, &xtn->ecb);
|
||||||
|
|
||||||
return hawk;
|
return hawk;
|
||||||
|
|
||||||
@ -1070,7 +1070,7 @@ static hawk_sio_t* open_sio (hawk_t* hawk, const hawk_ooch_t* file, int flags)
|
|||||||
if (sio == HAWK_NULL)
|
if (sio == HAWK_NULL)
|
||||||
{
|
{
|
||||||
const hawk_ooch_t* bem = hawk_backuperrmsg(hawk);
|
const hawk_ooch_t* bem = hawk_backuperrmsg(hawk);
|
||||||
hawk_seterrfmt (hawk, HAWK_NULL, HAWK_EOPEN, HAWK_T("unable to open %js - %js"), file, bem);
|
hawk_seterrfmt(hawk, HAWK_NULL, HAWK_EOPEN, HAWK_T("unable to open %js - %js"), file, bem);
|
||||||
}
|
}
|
||||||
return sio;
|
return sio;
|
||||||
}
|
}
|
||||||
@ -1101,7 +1101,7 @@ static hawk_sio_t* open_sio_std (hawk_t* hawk, hawk_sio_std_t std, int flags)
|
|||||||
if (sio == HAWK_NULL)
|
if (sio == HAWK_NULL)
|
||||||
{
|
{
|
||||||
const hawk_ooch_t* bem = hawk_backuperrmsg(hawk);
|
const hawk_ooch_t* bem = hawk_backuperrmsg(hawk);
|
||||||
hawk_seterrfmt (hawk, HAWK_NULL, HAWK_EOPEN, HAWK_T("unable to open %js - %js"), &sio_std_names[std], bem);
|
hawk_seterrfmt(hawk, HAWK_NULL, HAWK_EOPEN, HAWK_T("unable to open %js - %js"), &sio_std_names[std], bem);
|
||||||
}
|
}
|
||||||
return sio;
|
return sio;
|
||||||
}
|
}
|
||||||
@ -1218,7 +1218,7 @@ static int open_parsestd (hawk_t* hawk, hawk_sio_arg_t* arg, xtn_t* xtn, hawk_oo
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
hawk_seterrnum (hawk, HAWK_NULL, HAWK_EINTERN);
|
hawk_seterrnum(hawk, HAWK_NULL, HAWK_EINTERN);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1253,7 +1253,7 @@ static int fill_sio_arg_unique_id (hawk_t* hawk, hawk_sio_arg_t* arg, const hawk
|
|||||||
if (!bpath) return -1;
|
if (!bpath) return -1;
|
||||||
|
|
||||||
x = HAWK_STAT(bpath, &st);
|
x = HAWK_STAT(bpath, &st);
|
||||||
hawk_freemem (hawk, bpath);
|
hawk_freemem(hawk, bpath);
|
||||||
if (x <= -1) return -1;
|
if (x <= -1) return -1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1283,7 +1283,7 @@ int hawk_stdplainfileexists (hawk_t* hawk, const hawk_ooch_t* file)
|
|||||||
tmp = hawk_duputobcstr(hawk, file, HAWK_NULL);
|
tmp = hawk_duputobcstr(hawk, file, HAWK_NULL);
|
||||||
if (!tmp) return 0;
|
if (!tmp) return 0;
|
||||||
n = stat(tmp, &st);
|
n = stat(tmp, &st);
|
||||||
hawk_freemem (hawk, tmp);
|
hawk_freemem(hawk, tmp);
|
||||||
if (n == -1) return 0;
|
if (n == -1) return 0;
|
||||||
#else
|
#else
|
||||||
if (stat(file, &st) == -1) return 0;
|
if (stat(file, &st) == -1) return 0;
|
||||||
@ -1384,7 +1384,7 @@ static hawk_ooi_t sf_in_open (hawk_t* hawk, hawk_sio_arg_t* arg, xtn_t* xtn)
|
|||||||
}
|
}
|
||||||
|
|
||||||
xpath = hawk_addsionamewithoochars(hawk, path, hawk_count_oocstr(path));
|
xpath = hawk_addsionamewithoochars(hawk, path, hawk_count_oocstr(path));
|
||||||
if (dbuf) hawk_freemem (hawk, dbuf);
|
if (dbuf) hawk_freemem(hawk, dbuf);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1408,14 +1408,14 @@ static hawk_ooi_t sf_in_open (hawk_t* hawk, hawk_sio_arg_t* arg, xtn_t* xtn)
|
|||||||
const hawk_ooch_t* bem;
|
const hawk_ooch_t* bem;
|
||||||
fail:
|
fail:
|
||||||
bem = hawk_backuperrmsg(hawk);
|
bem = hawk_backuperrmsg(hawk);
|
||||||
hawk_seterrfmt (hawk, HAWK_NULL, HAWK_EOPEN, HAWK_T("unable to open %js - %js"), arg->name, bem);
|
hawk_seterrfmt(hawk, HAWK_NULL, HAWK_EOPEN, HAWK_T("unable to open %js - %js"), arg->name, bem);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
arg->path = xpath;
|
arg->path = xpath;
|
||||||
/* TODO: use the system handle(file descriptor) instead of the path? */
|
/* TODO: use the system handle(file descriptor) instead of the path? */
|
||||||
/*syshnd = hawk_sio_gethnd(arg->handle);*/
|
/*syshnd = hawk_sio_gethnd(arg->handle);*/
|
||||||
fill_sio_arg_unique_id (hawk, arg, xpath); /* ignore failure */
|
fill_sio_arg_unique_id(hawk, arg, xpath); /* ignore failure */
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1478,9 +1478,9 @@ static hawk_ooi_t sf_in_read (hawk_t* hawk, hawk_sio_arg_t* arg, hawk_ooch_t* da
|
|||||||
const hawk_uch_t* path;
|
const hawk_uch_t* path;
|
||||||
path = xtn->s.in.x[xtn->s.in.xindex].u.fileu.path;
|
path = xtn->s.in.x[xtn->s.in.xindex].u.fileu.path;
|
||||||
if (path)
|
if (path)
|
||||||
hawk_seterrfmt (hawk, HAWK_NULL, HAWK_EREAD, HAWK_T("unable to read %ls - %js"), path, bem);
|
hawk_seterrfmt(hawk, HAWK_NULL, HAWK_EREAD, HAWK_T("unable to read %ls - %js"), path, bem);
|
||||||
else
|
else
|
||||||
hawk_seterrfmt (hawk, HAWK_NULL, HAWK_EREAD, HAWK_T("unable to read %js - %js"), sio_std_names[HAWK_SIO_STDIN].ptr, bem);
|
hawk_seterrfmt(hawk, HAWK_NULL, HAWK_EREAD, HAWK_T("unable to read %js - %js"), sio_std_names[HAWK_SIO_STDIN].ptr, bem);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1496,9 +1496,9 @@ static hawk_ooi_t sf_in_read (hawk_t* hawk, hawk_sio_arg_t* arg, hawk_ooch_t* da
|
|||||||
const hawk_bch_t* path;
|
const hawk_bch_t* path;
|
||||||
path = xtn->s.in.x[xtn->s.in.xindex].u.fileb.path;
|
path = xtn->s.in.x[xtn->s.in.xindex].u.fileb.path;
|
||||||
if (path)
|
if (path)
|
||||||
hawk_seterrfmt (hawk, HAWK_NULL, HAWK_EREAD, HAWK_T("unable to read %hs - %js"), path, bem);
|
hawk_seterrfmt(hawk, HAWK_NULL, HAWK_EREAD, HAWK_T("unable to read %hs - %js"), path, bem);
|
||||||
else
|
else
|
||||||
hawk_seterrfmt (hawk, HAWK_NULL, HAWK_EREAD, HAWK_T("unable to read %js - %js"), sio_std_names[HAWK_SIO_STDIN].ptr, bem);
|
hawk_seterrfmt(hawk, HAWK_NULL, HAWK_EREAD, HAWK_T("unable to read %js - %js"), sio_std_names[HAWK_SIO_STDIN].ptr, bem);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1523,7 +1523,7 @@ static hawk_ooi_t sf_in_read (hawk_t* hawk, hawk_sio_arg_t* arg, hawk_ooch_t* da
|
|||||||
wcslen = size;
|
wcslen = size;
|
||||||
if ((m = hawk_conv_bchars_to_uchars_with_cmgr(xtn->s.in.u.bcs.ptr, &mbslen, data, &wcslen, hawk_getcmgr(hawk), 0)) <= -1 && m != -2)
|
if ((m = hawk_conv_bchars_to_uchars_with_cmgr(xtn->s.in.u.bcs.ptr, &mbslen, data, &wcslen, hawk_getcmgr(hawk), 0)) <= -1 && m != -2)
|
||||||
{
|
{
|
||||||
hawk_seterrnum (hawk, HAWK_NULL, HAWK_EINVAL);
|
hawk_seterrnum(hawk, HAWK_NULL, HAWK_EINVAL);
|
||||||
n = -1;
|
n = -1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1545,7 +1545,7 @@ static hawk_ooi_t sf_in_read (hawk_t* hawk, hawk_sio_arg_t* arg, hawk_ooch_t* da
|
|||||||
mbslen = size;
|
mbslen = size;
|
||||||
if ((m = hawk_conv_uchars_to_bchars_with_cmgr(xtn->s.in.u.ucs.ptr, &wcslen, data, &mbslen, hawk_getcmgr(hawk))) <= -1 && m != -2)
|
if ((m = hawk_conv_uchars_to_bchars_with_cmgr(xtn->s.in.u.ucs.ptr, &wcslen, data, &mbslen, hawk_getcmgr(hawk))) <= -1 && m != -2)
|
||||||
{
|
{
|
||||||
hawk_seterrnum (hawk, HAWK_NULL, HAWK_EINVAL);
|
hawk_seterrnum(hawk, HAWK_NULL, HAWK_EINVAL);
|
||||||
n = -1;
|
n = -1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1561,7 +1561,7 @@ static hawk_ooi_t sf_in_read (hawk_t* hawk, hawk_sio_arg_t* arg, hawk_ooch_t* da
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
/* this should never happen */
|
/* this should never happen */
|
||||||
hawk_seterrnum (hawk, HAWK_NULL, HAWK_EINTERN);
|
hawk_seterrnum(hawk, HAWK_NULL, HAWK_EINTERN);
|
||||||
n = -1;
|
n = -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1599,7 +1599,7 @@ static hawk_ooi_t sf_in_read (hawk_t* hawk, hawk_sio_arg_t* arg, hawk_ooch_t* da
|
|||||||
if (n <= -1)
|
if (n <= -1)
|
||||||
{
|
{
|
||||||
const hawk_ooch_t* bem = hawk_backuperrmsg(hawk);
|
const hawk_ooch_t* bem = hawk_backuperrmsg(hawk);
|
||||||
hawk_seterrfmt (hawk, HAWK_NULL, HAWK_EREAD, HAWK_T("unable to read %js - %js"), arg->name, bem);
|
hawk_seterrfmt(hawk, HAWK_NULL, HAWK_EREAD, HAWK_T("unable to read %js - %js"), arg->name, bem);
|
||||||
}
|
}
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
@ -1621,7 +1621,7 @@ static hawk_ooi_t sf_in (hawk_t* hawk, hawk_sio_cmd_t cmd, hawk_sio_arg_t* arg,
|
|||||||
return sf_in_read(hawk, arg, data, size, xtn);
|
return sf_in_read(hawk, arg, data, size, xtn);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
hawk_seterrnum (hawk, HAWK_NULL, HAWK_EINTERN);
|
hawk_seterrnum(hawk, HAWK_NULL, HAWK_EINTERN);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1655,7 +1655,7 @@ static hawk_ooi_t sf_out (hawk_t* hawk, hawk_sio_cmd_t cmd, hawk_sio_arg_t* arg,
|
|||||||
upath = hawk_dupbtoucstr(hawk, xtn->s.out.x->u.fileb.path, HAWK_NULL, 1);
|
upath = hawk_dupbtoucstr(hawk, xtn->s.out.x->u.fileb.path, HAWK_NULL, 1);
|
||||||
if (!upath) return -1;
|
if (!upath) return -1;
|
||||||
xtn->s.out.u.file.sio = open_sio(hawk, upath, HAWK_SIO_WRITE | HAWK_SIO_CREATE | HAWK_SIO_TRUNCATE | HAWK_SIO_IGNOREECERR);
|
xtn->s.out.u.file.sio = open_sio(hawk, upath, HAWK_SIO_WRITE | HAWK_SIO_CREATE | HAWK_SIO_TRUNCATE | HAWK_SIO_IGNOREECERR);
|
||||||
hawk_freemem (hawk, upath);
|
hawk_freemem(hawk, upath);
|
||||||
#else
|
#else
|
||||||
xtn->s.out.u.file.sio = open_sio(hawk, xtn->s.out.x->u.fileb.path, HAWK_SIO_WRITE | HAWK_SIO_CREATE | HAWK_SIO_TRUNCATE | HAWK_SIO_IGNOREECERR);
|
xtn->s.out.u.file.sio = open_sio(hawk, xtn->s.out.x->u.fileb.path, HAWK_SIO_WRITE | HAWK_SIO_CREATE | HAWK_SIO_TRUNCATE | HAWK_SIO_IGNOREECERR);
|
||||||
#endif
|
#endif
|
||||||
@ -1686,7 +1686,7 @@ static hawk_ooi_t sf_out (hawk_t* hawk, hawk_sio_cmd_t cmd, hawk_sio_arg_t* arg,
|
|||||||
bpath = hawk_duputobcstr(hawk, xtn->s.out.x->u.fileu.path, HAWK_NULL);
|
bpath = hawk_duputobcstr(hawk, xtn->s.out.x->u.fileu.path, HAWK_NULL);
|
||||||
if (!bpath) return -1;
|
if (!bpath) return -1;
|
||||||
xtn->s.out.u.file.sio = open_sio(hawk, bpath, HAWK_SIO_WRITE | HAWK_SIO_CREATE | HAWK_SIO_TRUNCATE | HAWK_SIO_IGNOREECERR);
|
xtn->s.out.u.file.sio = open_sio(hawk, bpath, HAWK_SIO_WRITE | HAWK_SIO_CREATE | HAWK_SIO_TRUNCATE | HAWK_SIO_IGNOREECERR);
|
||||||
hawk_freemem (hawk, bpath);
|
hawk_freemem(hawk, bpath);
|
||||||
#endif
|
#endif
|
||||||
if (xtn->s.out.u.file.sio == HAWK_NULL) return -1;
|
if (xtn->s.out.u.file.sio == HAWK_NULL) return -1;
|
||||||
}
|
}
|
||||||
@ -1757,7 +1757,7 @@ static hawk_ooi_t sf_out (hawk_t* hawk, hawk_sio_cmd_t cmd, hawk_sio_arg_t* arg,
|
|||||||
const hawk_ooch_t* bem = hawk_backuperrmsg(hawk);
|
const hawk_ooch_t* bem = hawk_backuperrmsg(hawk);
|
||||||
ioname = xtn->s.out.x->u.file.path;
|
ioname = xtn->s.out.x->u.file.path;
|
||||||
if (!ioname) ioname = sio_std_names[HAWK_SIO_STDOUT].ptr;
|
if (!ioname) ioname = sio_std_names[HAWK_SIO_STDOUT].ptr;
|
||||||
hawk_seterrfmt (hawk, HAWK_NULL, HAWK_EWRITE, HAWK_T("unable to write to %js - %js"), ioname, bem);
|
hawk_seterrfmt(hawk, HAWK_NULL, HAWK_EWRITE, HAWK_T("unable to write to %js - %js"), ioname, bem);
|
||||||
}
|
}
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
@ -1784,7 +1784,7 @@ static hawk_ooi_t sf_out (hawk_t* hawk, hawk_sio_cmd_t cmd, hawk_sio_arg_t* arg,
|
|||||||
if (hawk_becs_setlen(xtn->s.out.u.bcs.buf, orglen + mbslen) == (hawk_oow_t)-1) return -1;
|
if (hawk_becs_setlen(xtn->s.out.u.bcs.buf, orglen + mbslen) == (hawk_oow_t)-1) return -1;
|
||||||
|
|
||||||
wcslen = size;
|
wcslen = size;
|
||||||
hawk_convutobchars (hawk, data, &wcslen, HAWK_BECS_CPTR(xtn->s.out.u.bcs.buf, orglen), &mbslen);
|
hawk_convutobchars(hawk, data, &wcslen, HAWK_BECS_CPTR(xtn->s.out.u.bcs.buf, orglen), &mbslen);
|
||||||
size = wcslen;
|
size = wcslen;
|
||||||
|
|
||||||
return size;
|
return size;
|
||||||
@ -1805,7 +1805,7 @@ static hawk_ooi_t sf_out (hawk_t* hawk, hawk_sio_cmd_t cmd, hawk_sio_arg_t* arg,
|
|||||||
if (hawk_uecs_setlen(xtn->s.out.u.ucs.buf, orglen + wcslen) == (hawk_oow_t)-1) return -1;
|
if (hawk_uecs_setlen(xtn->s.out.u.ucs.buf, orglen + wcslen) == (hawk_oow_t)-1) return -1;
|
||||||
|
|
||||||
mbslen = size;
|
mbslen = size;
|
||||||
hawk_convbtouchars (hawk, data, &mbslen, HAWK_UECS_CPTR(xtn->s.out.u.ucs.buf, orglen), &wcslen, 0);
|
hawk_convbtouchars(hawk, data, &mbslen, HAWK_UECS_CPTR(xtn->s.out.u.ucs.buf, orglen), &wcslen, 0);
|
||||||
size = mbslen;
|
size = mbslen;
|
||||||
|
|
||||||
return size;
|
return size;
|
||||||
@ -1827,7 +1827,7 @@ static hawk_ooi_t sf_out (hawk_t* hawk, hawk_sio_cmd_t cmd, hawk_sio_arg_t* arg,
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal_error:
|
internal_error:
|
||||||
hawk_seterrnum (hawk, HAWK_NULL, HAWK_EINTERN);
|
hawk_seterrnum(hawk, HAWK_NULL, HAWK_EINTERN);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1846,7 +1846,7 @@ int hawk_parsestd (hawk_t* hawk, hawk_parsestd_t in[], hawk_parsestd_t* out)
|
|||||||
{
|
{
|
||||||
/* the input is a must. at least 1 file or 1 string
|
/* the input is a must. at least 1 file or 1 string
|
||||||
* must be specified */
|
* must be specified */
|
||||||
hawk_seterrnum (hawk, HAWK_NULL, HAWK_EINVAL);
|
hawk_seterrnum(hawk, HAWK_NULL, HAWK_EINVAL);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1863,7 +1863,7 @@ int hawk_parsestd (hawk_t* hawk, hawk_parsestd_t in[], hawk_parsestd_t* out)
|
|||||||
out->type != HAWK_PARSESTD_BCS &&
|
out->type != HAWK_PARSESTD_BCS &&
|
||||||
out->type != HAWK_PARSESTD_UCS)
|
out->type != HAWK_PARSESTD_UCS)
|
||||||
{
|
{
|
||||||
hawk_seterrnum (hawk, HAWK_NULL, HAWK_EINVAL);
|
hawk_seterrnum(hawk, HAWK_NULL, HAWK_EINVAL);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
sio.out = sf_out;
|
sio.out = sf_out;
|
||||||
@ -3125,18 +3125,18 @@ done:
|
|||||||
{
|
{
|
||||||
if (xocf)
|
if (xocf)
|
||||||
{
|
{
|
||||||
for (i = 0; xocf[i]; i++) hawk_freemem (hawk, xocf[i]);
|
for (i = 0; xocf[i]; i++) hawk_freemem(hawk, xocf[i]);
|
||||||
hawk_freemem (hawk, xocf);
|
hawk_freemem(hawk, xocf);
|
||||||
}
|
}
|
||||||
if (xicf)
|
if (xicf)
|
||||||
{
|
{
|
||||||
for (i = 0; xicf[i]; i++) hawk_freemem (hawk, xicf[i]);
|
for (i = 0; xicf[i]; i++) hawk_freemem(hawk, xicf[i]);
|
||||||
hawk_freemem (hawk, xicf);
|
hawk_freemem(hawk, xicf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(HAWK_OOCH_IS_UCH)
|
#if defined(HAWK_OOCH_IS_UCH)
|
||||||
hawk_freemem (hawk, xid);
|
hawk_freemem(hawk, xid);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return rtx;
|
return rtx;
|
||||||
@ -3206,18 +3206,18 @@ done:
|
|||||||
{
|
{
|
||||||
if (xocf)
|
if (xocf)
|
||||||
{
|
{
|
||||||
for (i = 0; xocf[i]; i++) hawk_freemem (hawk, xocf[i]);
|
for (i = 0; xocf[i]; i++) hawk_freemem(hawk, xocf[i]);
|
||||||
hawk_freemem (hawk, xocf);
|
hawk_freemem(hawk, xocf);
|
||||||
}
|
}
|
||||||
if (xicf)
|
if (xicf)
|
||||||
{
|
{
|
||||||
for (i = 0; xicf[i]; i++) hawk_freemem (hawk, xicf[i]);
|
for (i = 0; xicf[i]; i++) hawk_freemem(hawk, xicf[i]);
|
||||||
hawk_freemem (hawk, xicf);
|
hawk_freemem(hawk, xicf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(HAWK_OOCH_IS_BCH)
|
#if defined(HAWK_OOCH_IS_BCH)
|
||||||
hawk_freemem (hawk, xid);
|
hawk_freemem(hawk, xid);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return rtx;
|
return rtx;
|
||||||
@ -3532,7 +3532,7 @@ static int add_functions (hawk_t* hawk)
|
|||||||
|
|
||||||
for (i = 0; i < HAWK_COUNTOF(fnctab); i++)
|
for (i = 0; i < HAWK_COUNTOF(fnctab); i++)
|
||||||
{
|
{
|
||||||
if (hawk_addfnc (hawk, fnctab[i].name, &fnctab[i].spec) == HAWK_NULL) return -1;
|
if (hawk_addfnc(hawk, fnctab[i].name, &fnctab[i].spec) == HAWK_NULL) return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -75,6 +75,8 @@ typedef struct hawk_nde_fncall_t hawk_nde_fncall_t;
|
|||||||
typedef struct hawk_nde_getline_t hawk_nde_getline_t;
|
typedef struct hawk_nde_getline_t hawk_nde_getline_t;
|
||||||
|
|
||||||
typedef struct hawk_nde_if_t hawk_nde_if_t;
|
typedef struct hawk_nde_if_t hawk_nde_if_t;
|
||||||
|
typedef struct hawk_nde_switch_t hawk_nde_switch_t;
|
||||||
|
typedef struct hawk_nde_case_t hawk_nde_case_t;
|
||||||
typedef struct hawk_nde_while_t hawk_nde_while_t;
|
typedef struct hawk_nde_while_t hawk_nde_while_t;
|
||||||
typedef struct hawk_nde_for_t hawk_nde_for_t;
|
typedef struct hawk_nde_for_t hawk_nde_for_t;
|
||||||
typedef struct hawk_nde_forin_t hawk_nde_forin_t;
|
typedef struct hawk_nde_forin_t hawk_nde_forin_t;
|
||||||
@ -280,6 +282,23 @@ struct hawk_nde_if_t
|
|||||||
hawk_nde_t* else_part; /* optional */
|
hawk_nde_t* else_part; /* optional */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* HAWK_NDE_SWITCH */
|
||||||
|
struct hawk_nde_switch_t
|
||||||
|
{
|
||||||
|
HAWK_NDE_HDR;
|
||||||
|
hawk_nde_t* test;
|
||||||
|
hawk_nde_t* case_part; /* optional */
|
||||||
|
hawk_nde_t* default_part; /* optional */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* HAWK_NDE_CASE */
|
||||||
|
struct hawk_nde_case_t
|
||||||
|
{
|
||||||
|
HAWK_NDE_HDR;
|
||||||
|
hawk_nde_t* val;
|
||||||
|
hawk_nde_t* action;
|
||||||
|
};
|
||||||
|
|
||||||
/* HAWK_NDE_WHILE, HAWK_NDE_DOWHILE */
|
/* HAWK_NDE_WHILE, HAWK_NDE_DOWHILE */
|
||||||
struct hawk_nde_while_t
|
struct hawk_nde_while_t
|
||||||
{
|
{
|
||||||
|
884
lib/tree.c
884
lib/tree.c
File diff suppressed because it is too large
Load Diff
12
lib/utf8.c
12
lib/utf8.c
@ -74,8 +74,8 @@ static HAWK_INLINE __utf8_t* get_utf8_slot (hawk_uch_t uc)
|
|||||||
{
|
{
|
||||||
__utf8_t* cur, * end;
|
__utf8_t* cur, * end;
|
||||||
|
|
||||||
/*HAWK_ASSERT (hawk, HAWK_SIZEOF(hawk_bch_t) == 1);
|
/*HAWK_ASSERT(hawk, HAWK_SIZEOF(hawk_bch_t) == 1);
|
||||||
HAWK_ASSERT (hawk, HAWK_SIZEOF(hawk_uch_t) >= 2);*/
|
HAWK_ASSERT(hawk, HAWK_SIZEOF(hawk_uch_t) >= 2);*/
|
||||||
|
|
||||||
end = utf8_table + HAWK_COUNTOF(utf8_table);
|
end = utf8_table + HAWK_COUNTOF(utf8_table);
|
||||||
cur = utf8_table;
|
cur = utf8_table;
|
||||||
@ -120,10 +120,10 @@ hawk_oow_t hawk_utf8_to_uc (const hawk_bch_t* utf8, hawk_oow_t size, hawk_uch_t*
|
|||||||
{
|
{
|
||||||
__utf8_t* cur, * end;
|
__utf8_t* cur, * end;
|
||||||
|
|
||||||
/*HAWK_ASSERT (hawk, utf8 != HAWK_NULL);
|
/*HAWK_ASSERT(hawk, utf8 != HAWK_NULL);
|
||||||
HAWK_ASSERT (hawk, size > 0);
|
HAWK_ASSERT(hawk, size > 0);
|
||||||
HAWK_ASSERT (hawk, HAWK_SIZEOF(hawk_bch_t) == 1);
|
HAWK_ASSERT(hawk, HAWK_SIZEOF(hawk_bch_t) == 1);
|
||||||
HAWK_ASSERT (hawk, HAWK_SIZEOF(hawk_uch_t) >= 2);*/
|
HAWK_ASSERT(hawk, HAWK_SIZEOF(hawk_uch_t) >= 2);*/
|
||||||
|
|
||||||
end = utf8_table + HAWK_COUNTOF(utf8_table);
|
end = utf8_table + HAWK_COUNTOF(utf8_table);
|
||||||
cur = utf8_table;
|
cur = utf8_table;
|
||||||
|
@ -354,7 +354,7 @@ int hawk_conv_uchars_to_bchars_with_cmgr (const hawk_uch_t* ucs, hawk_oow_t* ucs
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* it assumes that bcsbuf is large enough to hold a character */
|
/* it assumes that bcsbuf is large enough to hold a character */
|
||||||
/*HAWK_ASSERT (hawk, n <= HAWK_COUNTOF(bcsbuf));*/
|
/*HAWK_ASSERT(hawk, n <= HAWK_COUNTOF(bcsbuf));*/
|
||||||
|
|
||||||
p++; mlen += n;
|
p++; mlen += n;
|
||||||
}
|
}
|
||||||
@ -435,7 +435,7 @@ int hawk_conv_ucstr_to_bcstr_with_cmgr (
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* it assumes that bcs is large enough to hold a character */
|
/* it assumes that bcs is large enough to hold a character */
|
||||||
/*HAWK_ASSERT (hawk, n <= HAWK_COUNTOF(bcs));*/
|
/*HAWK_ASSERT(hawk, n <= HAWK_COUNTOF(bcs));*/
|
||||||
|
|
||||||
p++; mlen += n;
|
p++; mlen += n;
|
||||||
}
|
}
|
||||||
|
@ -2778,7 +2778,7 @@ int hawk_rtx_valtonum (hawk_rtx_t* rtx, const hawk_val_t* v, hawk_int_t* l, hawk
|
|||||||
default:
|
default:
|
||||||
invalid:
|
invalid:
|
||||||
#if defined(DEBUG_VAL)
|
#if defined(DEBUG_VAL)
|
||||||
hawk_logfmt (hawk, HAWK_T(">>WRONG VALUE TYPE [%d] in hawk_rtx_valtonum()\n"), v->type);
|
hawk_logfmt(hawk, HAWK_T(">>WRONG VALUE TYPE [%d] in hawk_rtx_valtonum()\n"), v->type);
|
||||||
#endif
|
#endif
|
||||||
hawk_rtx_seterrnum (rtx, HAWK_NULL, HAWK_EVALTONUM);
|
hawk_rtx_seterrnum (rtx, HAWK_NULL, HAWK_EVALTONUM);
|
||||||
return -1; /* error */
|
return -1; /* error */
|
||||||
|
108
t/h-002.hawk
108
t/h-002.hawk
@ -665,6 +665,29 @@ function main()
|
|||||||
f = test10
|
f = test10
|
||||||
tap_ensure (f(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 55, @SCRIPTNAME, @SCRIPTLINE);
|
tap_ensure (f(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 55, @SCRIPTNAME, @SCRIPTLINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
tap_ensure(test12(2,5), -3, @SCRIPTNAME, @SCRIPTLINE);
|
||||||
|
tap_ensure(test12(3,5), 8, @SCRIPTNAME, @SCRIPTLINE);
|
||||||
|
|
||||||
|
tap_ensure(test13(1), 1, @SCRIPTNAME, @SCRIPTLINE);
|
||||||
|
tap_ensure(test13(2), 2, @SCRIPTNAME, @SCRIPTLINE);
|
||||||
|
tap_ensure(test13(3), 3, @SCRIPTNAME, @SCRIPTLINE);
|
||||||
|
tap_ensure(test13(4), 4, @SCRIPTNAME, @SCRIPTLINE);
|
||||||
|
tap_ensure(test13(5), 5, @SCRIPTNAME, @SCRIPTLINE);
|
||||||
|
tap_ensure(test13(6), 1005, @SCRIPTNAME, @SCRIPTLINE);
|
||||||
|
|
||||||
|
tap_ensure(test14("hello"), "world", @SCRIPTNAME, @SCRIPTLINE);
|
||||||
|
tap_ensure(test14("donkey"), "rankey", @SCRIPTNAME, @SCRIPTLINE);
|
||||||
|
tap_ensure(test14("speed"), "unknown", @SCRIPTNAME, @SCRIPTLINE);
|
||||||
|
|
||||||
|
tap_ensure(test15("hello"), "world", @SCRIPTNAME, @SCRIPTLINE);
|
||||||
|
tap_ensure(test15("donkey"), "[rankey012]", @SCRIPTNAME, @SCRIPTLINE);
|
||||||
|
tap_ensure(test15("skunk"), "stinks", @SCRIPTNAME, @SCRIPTLINE);
|
||||||
|
tap_ensure(test15("speed"), "unknown", @SCRIPTNAME, @SCRIPTLINE);
|
||||||
|
}
|
||||||
|
|
||||||
tap_end ();
|
tap_end ();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -709,3 +732,88 @@ function test10(...) {
|
|||||||
function test11(...) {
|
function test11(...) {
|
||||||
return (3 in @argv);
|
return (3 in @argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function test12(...) {
|
||||||
|
switch(@argv[0] * @argv[1]) {
|
||||||
|
case 10:
|
||||||
|
return @argv[0] - @argv[1];
|
||||||
|
|
||||||
|
default:
|
||||||
|
return @argv[0] + @argv[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function test13(x) {
|
||||||
|
@local a;
|
||||||
|
|
||||||
|
a = 0;
|
||||||
|
|
||||||
|
switch(x) {
|
||||||
|
default:
|
||||||
|
a = 1000;
|
||||||
|
|
||||||
|
case 5:
|
||||||
|
a++;
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
a++;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
a++;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
a++;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
a++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
function test14(x) {
|
||||||
|
switch(x) {
|
||||||
|
case "hello":
|
||||||
|
return "world";
|
||||||
|
|
||||||
|
case "donkey":
|
||||||
|
return "rankey";
|
||||||
|
|
||||||
|
default:
|
||||||
|
return "unknown";
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function test15(x) {
|
||||||
|
@local a, i;
|
||||||
|
|
||||||
|
switch(x) {
|
||||||
|
case "hello":
|
||||||
|
a = "world";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "donkey":
|
||||||
|
{
|
||||||
|
@local l;
|
||||||
|
a = "rankey";
|
||||||
|
l = length(a);
|
||||||
|
for (i = 0; i < l; i++) {
|
||||||
|
if (i == 3) break;
|
||||||
|
a = sprintf("%s%d", a, i);
|
||||||
|
}
|
||||||
|
a = sprintf("[%s]", a);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
if (x == "skunk") a = "stinks";
|
||||||
|
else a = "unknown";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user