changed arr to use gem instead of hawk
This commit is contained in:
parent
58d06e55b3
commit
e21d307a8c
@ -28,7 +28,7 @@
|
||||
#include "hawk-prv.h"
|
||||
|
||||
/////////////////////////////////
|
||||
HAWK_BEGIN_NAMESPACE(QSE)
|
||||
HAWK_BEGIN_NAMESPACE(HAWK)
|
||||
/////////////////////////////////
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
@ -1702,7 +1702,7 @@ int Hawk::dispatch_function (Run* run, const fnc_info_t* fi)
|
||||
// call the default constructor on the space allocated above.
|
||||
// no exception handling is implemented here as i know
|
||||
// that Value::Value() doesn't throw an exception
|
||||
new((QSE::Mmgr*)HAWK_NULL, (void*)&args[i]) Value ();
|
||||
new((HAWK::Mmgr*)HAWK_NULL, (void*)&args[i]) Value ();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@ -2449,5 +2449,5 @@ void* Hawk::modsym (awk_t* awk, void* handle, const char_t* name)
|
||||
return xtn->awk->modsym (handle, name);
|
||||
}
|
||||
/////////////////////////////////
|
||||
HAWK_END_NAMESPACE(QSE)
|
||||
HAWK_END_NAMESPACE(HAWK)
|
||||
/////////////////////////////////
|
||||
|
@ -44,7 +44,7 @@
|
||||
/// AWK Interpreter
|
||||
|
||||
/////////////////////////////////
|
||||
HAWK_BEGIN_NAMESPACE(QSE)
|
||||
HAWK_BEGIN_NAMESPACE(HAWK)
|
||||
/////////////////////////////////
|
||||
|
||||
///
|
||||
@ -1424,7 +1424,7 @@ private:
|
||||
};
|
||||
|
||||
/////////////////////////////////
|
||||
HAWK_END_NAMESPACE(QSE)
|
||||
HAWK_END_NAMESPACE(HAWK)
|
||||
/////////////////////////////////
|
||||
|
||||
#endif
|
||||
|
@ -47,7 +47,7 @@
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
HAWK_BEGIN_NAMESPACE(QSE)
|
||||
HAWK_BEGIN_NAMESPACE(HAWK)
|
||||
/////////////////////////////////
|
||||
|
||||
StdHawk::ioattr_t StdHawk::default_ioattr;
|
||||
@ -1371,6 +1371,6 @@ StdHawk::ssize_t StdHawk::SourceString::write (Data& io, const char_t* buf, size
|
||||
}
|
||||
|
||||
/////////////////////////////////
|
||||
HAWK_END_NAMESPACE(QSE)
|
||||
HAWK_END_NAMESPACE(HAWK)
|
||||
/////////////////////////////////
|
||||
|
||||
|
@ -34,7 +34,7 @@
|
||||
/// Standard AWK Interpreter
|
||||
|
||||
/////////////////////////////////
|
||||
HAWK_BEGIN_NAMESPACE(QSE)
|
||||
HAWK_BEGIN_NAMESPACE(HAWK)
|
||||
////////////////////////////////
|
||||
|
||||
///
|
||||
@ -219,7 +219,7 @@ private:
|
||||
};
|
||||
|
||||
/////////////////////////////////
|
||||
HAWK_END_NAMESPACE(QSE)
|
||||
HAWK_END_NAMESPACE(HAWK)
|
||||
/////////////////////////////////
|
||||
|
||||
#endif
|
||||
|
@ -70,13 +70,13 @@ static HAWK_INLINE slot_t* alloc_slot (hawk_arr_t* arr, void* dptr, hawk_oow_t d
|
||||
|
||||
if (arr->copier == HAWK_ARR_COPIER_SIMPLE)
|
||||
{
|
||||
n = (slot_t*)hawk_allocmem(arr->hawk, HAWK_SIZEOF(slot_t));
|
||||
n = (slot_t*)hawk_gem_allocmem(arr->gem, HAWK_SIZEOF(slot_t));
|
||||
if (!n) return HAWK_NULL;
|
||||
DPTR(n) = dptr;
|
||||
}
|
||||
else if (arr->copier == HAWK_ARR_COPIER_INLINE)
|
||||
{
|
||||
n = (slot_t*)hawk_allocmem(arr->hawk, HAWK_SIZEOF(slot_t) + TOB(arr,dlen));
|
||||
n = (slot_t*)hawk_gem_allocmem(arr->gem, HAWK_SIZEOF(slot_t) + TOB(arr,dlen));
|
||||
if (!n) return HAWK_NULL;
|
||||
|
||||
HAWK_MEMCPY (n + 1, dptr, TOB(arr,dlen));
|
||||
@ -84,12 +84,12 @@ static HAWK_INLINE slot_t* alloc_slot (hawk_arr_t* arr, void* dptr, hawk_oow_t d
|
||||
}
|
||||
else
|
||||
{
|
||||
n = (slot_t*)hawk_allocmem(arr->hawk, HAWK_SIZEOF(slot_t));
|
||||
n = (slot_t*)hawk_gem_allocmem(arr->gem, HAWK_SIZEOF(slot_t));
|
||||
if (!n) return HAWK_NULL;
|
||||
DPTR(n) = arr->copier(arr, dptr, dlen);
|
||||
if (DPTR(n) == HAWK_NULL)
|
||||
{
|
||||
hawk_freemem (arr->hawk, n);
|
||||
hawk_gem_freemem (arr->gem, n);
|
||||
return HAWK_NULL;
|
||||
}
|
||||
}
|
||||
@ -99,16 +99,16 @@ static HAWK_INLINE slot_t* alloc_slot (hawk_arr_t* arr, void* dptr, hawk_oow_t d
|
||||
return n;
|
||||
}
|
||||
|
||||
hawk_arr_t* hawk_arr_open (hawk_t* awk, hawk_oow_t xtnsize, hawk_oow_t capa)
|
||||
hawk_arr_t* hawk_arr_open (hawk_gem_t* gem, hawk_oow_t xtnsize, hawk_oow_t capa)
|
||||
{
|
||||
hawk_arr_t* arr;
|
||||
|
||||
arr = (hawk_arr_t*)hawk_allocmem(awk, HAWK_SIZEOF(hawk_arr_t) + xtnsize);
|
||||
arr = (hawk_arr_t*)hawk_gem_allocmem(gem, HAWK_SIZEOF(hawk_arr_t) + xtnsize);
|
||||
if (arr == HAWK_NULL) return HAWK_NULL;
|
||||
|
||||
if (hawk_arr_init(arr, awk, capa) <= -1)
|
||||
if (hawk_arr_init(arr, gem, capa) <= -1)
|
||||
{
|
||||
hawk_freemem (awk, arr);
|
||||
hawk_gem_freemem (gem, arr);
|
||||
return HAWK_NULL;
|
||||
}
|
||||
|
||||
@ -119,14 +119,14 @@ hawk_arr_t* hawk_arr_open (hawk_t* awk, hawk_oow_t xtnsize, hawk_oow_t capa)
|
||||
void hawk_arr_close (hawk_arr_t* arr)
|
||||
{
|
||||
hawk_arr_fini (arr);
|
||||
hawk_freemem (arr->hawk, arr);
|
||||
hawk_gem_freemem (arr->gem, arr);
|
||||
}
|
||||
|
||||
int hawk_arr_init (hawk_arr_t* arr, hawk_t* awk, hawk_oow_t capa)
|
||||
int hawk_arr_init (hawk_arr_t* arr, hawk_gem_t* gem, hawk_oow_t capa)
|
||||
{
|
||||
HAWK_MEMSET (arr, 0, HAWK_SIZEOF(*arr));
|
||||
|
||||
arr->hawk = awk;
|
||||
arr->gem = gem;
|
||||
arr->size = 0;
|
||||
arr->capa = 0;
|
||||
arr->slot = HAWK_NULL;
|
||||
@ -145,7 +145,7 @@ void hawk_arr_fini (hawk_arr_t* arr)
|
||||
|
||||
if (arr->slot)
|
||||
{
|
||||
hawk_freemem (arr->hawk, arr->slot);
|
||||
hawk_gem_freemem (arr->gem, arr->slot);
|
||||
arr->slot = HAWK_NULL;
|
||||
arr->capa = 0;
|
||||
}
|
||||
@ -160,7 +160,7 @@ void hawk_arr_setscale (hawk_arr_t* arr, int scale)
|
||||
{
|
||||
/* The scale should be larger than 0 and less than or equal to the
|
||||
* maximum value that the hawk_uint8_t type can hold */
|
||||
HAWK_ASSERT (arr->hawk, scale > 0 && scale <= HAWK_TYPE_MAX(hawk_uint8_t));
|
||||
/*HAWK_ASSERT (arr->gem, scale > 0 && scale <= HAWK_TYPE_MAX(hawk_uint8_t));*/
|
||||
|
||||
if (scale <= 0) scale = 1;
|
||||
if (scale > HAWK_TYPE_MAX(hawk_uint8_t)) scale = HAWK_TYPE_MAX(hawk_uint8_t);
|
||||
@ -240,12 +240,12 @@ hawk_arr_t* hawk_arr_setcapa (hawk_arr_t* arr, hawk_oow_t capa)
|
||||
{
|
||||
/* to trigger freeers on the items truncated */
|
||||
hawk_arr_delete (arr, capa, arr->size - capa);
|
||||
HAWK_ASSERT (arr->hawk, arr->size <= capa);
|
||||
/*HAWK_ASSERT (arr->gem, arr->size <= capa);*/
|
||||
}
|
||||
|
||||
if (capa > 0)
|
||||
{
|
||||
tmp = (slot_t**)hawk_reallocmem(arr->hawk, arr->slot, HAWK_SIZEOF(*arr->slot) * capa);
|
||||
tmp = (slot_t**)hawk_gem_reallocmem(arr->gem, arr->slot, HAWK_SIZEOF(*arr->slot) * capa);
|
||||
if (!tmp) return HAWK_NULL;
|
||||
}
|
||||
else
|
||||
@ -253,7 +253,7 @@ hawk_arr_t* hawk_arr_setcapa (hawk_arr_t* arr, hawk_oow_t capa)
|
||||
if (arr->slot)
|
||||
{
|
||||
hawk_arr_clear (arr);
|
||||
hawk_freemem (arr->hawk, arr->slot);
|
||||
hawk_gem_freemem (arr->gem, arr->slot);
|
||||
}
|
||||
|
||||
tmp = HAWK_NULL;
|
||||
@ -272,12 +272,10 @@ hawk_oow_t hawk_arr_search (hawk_arr_t* arr, hawk_oow_t pos, const void* dptr, h
|
||||
for (i = pos; i < arr->size; i++)
|
||||
{
|
||||
if (arr->slot[i] == HAWK_NULL) continue;
|
||||
|
||||
if (arr->comper (arr,
|
||||
DPTR(arr->slot[i]), DLEN(arr->slot[i]),
|
||||
dptr, dlen) == 0) return i;
|
||||
if (arr->comper(arr, DPTR(arr->slot[i]), DLEN(arr->slot[i]), dptr, dlen) == 0) return i;
|
||||
}
|
||||
|
||||
hawk_gem_seterrnum (arr->gem, HAWK_NULL, HAWK_ENOENT);
|
||||
return HAWK_ARR_NIL;
|
||||
}
|
||||
|
||||
@ -292,13 +290,11 @@ hawk_oow_t hawk_arr_rsearch (hawk_arr_t* arr, hawk_oow_t pos, const void* dptr,
|
||||
for (i = pos + 1; i-- > 0; )
|
||||
{
|
||||
if (arr->slot[i] == HAWK_NULL) continue;
|
||||
|
||||
if (arr->comper (arr,
|
||||
DPTR(arr->slot[i]), DLEN(arr->slot[i]),
|
||||
dptr, dlen) == 0) return i;
|
||||
if (arr->comper (arr, DPTR(arr->slot[i]), DLEN(arr->slot[i]), dptr, dlen) == 0) return i;
|
||||
}
|
||||
}
|
||||
|
||||
hawk_gem_seterrnum (arr->gem, HAWK_NULL, HAWK_ENOENT);
|
||||
return HAWK_ARR_NIL;
|
||||
}
|
||||
|
||||
@ -335,12 +331,13 @@ hawk_oow_t hawk_arr_insert (hawk_arr_t* arr, hawk_oow_t pos, void* dptr, hawk_oo
|
||||
{
|
||||
if (arr->capa <= 0)
|
||||
{
|
||||
HAWK_ASSERT (arr->hawk, arr->size <= 0);
|
||||
capa = (pos < 16)? 16: (pos + 1);
|
||||
/*HAWK_ASSERT (arr->gem, arr->size <= 0);*/
|
||||
capa = HAWK_ALIGN_POW2(pos + 1, 64);
|
||||
}
|
||||
else
|
||||
{
|
||||
hawk_oow_t bound = (pos >= arr->size)? pos: arr->size;
|
||||
capa = HAWK_ALIGN_POW2(bound + 1, 64);
|
||||
do { capa = arr->capa * 2; } while (capa <= bound);
|
||||
}
|
||||
}
|
||||
@ -352,22 +349,23 @@ hawk_oow_t hawk_arr_insert (hawk_arr_t* arr, hawk_oow_t pos, void* dptr, hawk_oo
|
||||
if (capa <= mincapa)
|
||||
{
|
||||
if (arr->freeer) arr->freeer (arr, DPTR(slot), DLEN(slot));
|
||||
hawk_freemem (arr->hawk, slot);
|
||||
hawk_gem_freemem (arr->gem, slot);
|
||||
return HAWK_ARR_NIL;
|
||||
}
|
||||
|
||||
capa--; /* let it retry after lowering the capacity */
|
||||
}
|
||||
while (1);
|
||||
}
|
||||
|
||||
if (pos >= arr->capa || arr->size >= arr->capa)
|
||||
if (pos >= arr->capa || arr->size >= arr->capa) /* can happen if the sizer() callback isn't good enough */
|
||||
{
|
||||
/* the buffer is not still enough after resizing */
|
||||
if (arr->freeer) arr->freeer (arr, DPTR(slot), DLEN(slot));
|
||||
hawk_freemem (arr->hawk, slot);
|
||||
hawk_gem_freemem (arr->gem, slot);
|
||||
hawk_gem_seterrnum (arr->gem, HAWK_NULL, HAWK_EBUFFULL);
|
||||
return HAWK_ARR_NIL;
|
||||
}
|
||||
}
|
||||
|
||||
/* fill in the gap with HAWK_NULL */
|
||||
for (i = arr->size; i < pos; i++) arr->slot[i] = HAWK_NULL;
|
||||
@ -388,7 +386,11 @@ hawk_oow_t hawk_arr_update (hawk_arr_t* arr, hawk_oow_t pos, void* dptr, hawk_oo
|
||||
{
|
||||
slot_t* c;
|
||||
|
||||
if (pos >= arr->size) return HAWK_ARR_NIL;
|
||||
if (pos >= arr->size)
|
||||
{
|
||||
hawk_gem_seterrnum (arr->gem, HAWK_NULL, HAWK_EINVAL);
|
||||
return HAWK_ARR_NIL;
|
||||
}
|
||||
|
||||
c = arr->slot[pos];
|
||||
if (c == HAWK_NULL)
|
||||
@ -411,7 +413,7 @@ hawk_oow_t hawk_arr_update (hawk_arr_t* arr, hawk_oow_t pos, void* dptr, hawk_oo
|
||||
if (slot == HAWK_NULL) return HAWK_ARR_NIL;
|
||||
|
||||
if (arr->freeer) arr->freeer (arr, DPTR(c), DLEN(c));
|
||||
hawk_freemem (arr->hawk, c);
|
||||
hawk_gem_freemem (arr->gem, c);
|
||||
|
||||
arr->slot[pos] = slot;
|
||||
}
|
||||
@ -436,8 +438,7 @@ hawk_oow_t hawk_arr_delete (hawk_arr_t* arr, hawk_oow_t index, hawk_oow_t count)
|
||||
if (c != HAWK_NULL)
|
||||
{
|
||||
if (arr->freeer) arr->freeer (arr, DPTR(c), DLEN(c));
|
||||
hawk_freemem (arr->hawk, c);
|
||||
|
||||
hawk_gem_freemem (arr->gem, c);
|
||||
arr->slot[i] = HAWK_NULL;
|
||||
}
|
||||
}
|
||||
@ -468,8 +469,7 @@ hawk_oow_t hawk_arr_uplete (hawk_arr_t* arr, hawk_oow_t index, hawk_oow_t count)
|
||||
if (c != HAWK_NULL)
|
||||
{
|
||||
if (arr->freeer) arr->freeer (arr, DPTR(c), DLEN(c));
|
||||
hawk_freemem (arr->hawk, c);
|
||||
|
||||
hawk_gem_freemem (arr->gem, c);
|
||||
arr->slot[i] = HAWK_NULL;
|
||||
}
|
||||
}
|
||||
@ -486,9 +486,8 @@ void hawk_arr_clear (hawk_arr_t* arr)
|
||||
slot_t* c = arr->slot[i];
|
||||
if (c != HAWK_NULL)
|
||||
{
|
||||
if (arr->freeer)
|
||||
arr->freeer (arr, DPTR(c), DLEN(c));
|
||||
hawk_freemem (arr->hawk, c);
|
||||
if (arr->freeer) arr->freeer (arr, DPTR(c), DLEN(c));
|
||||
hawk_gem_freemem (arr->gem, c);
|
||||
arr->slot[i] = HAWK_NULL;
|
||||
}
|
||||
}
|
||||
@ -568,7 +567,7 @@ hawk_oow_t hawk_arr_pushstack (hawk_arr_t* arr, void* dptr, hawk_oow_t dlen)
|
||||
|
||||
void hawk_arr_popstack (hawk_arr_t* arr)
|
||||
{
|
||||
HAWK_ASSERT (arr->hawk, arr->size > 0);
|
||||
/*HAWK_ASSERT (arr->gem, arr->size > 0);*/
|
||||
hawk_arr_delete (arr, arr->size - 1, 1);
|
||||
}
|
||||
|
||||
@ -682,7 +681,7 @@ hawk_oow_t hawk_arr_pushheap (hawk_arr_t* arr, void* dptr, hawk_oow_t dlen)
|
||||
if (hawk_arr_insert(arr, index, dptr, dlen) == HAWK_ARR_NIL) return HAWK_ARR_NIL;
|
||||
HEAP_UPDATE_POS (arr, index);
|
||||
|
||||
HAWK_ASSERT (arr->hawk, arr->size == index + 1);
|
||||
/*HAWK_ASSERT (arr->gem, arr->size == index + 1);*/
|
||||
|
||||
/* move the item upto the top if it's greater than the parent items */
|
||||
sift_up (arr, index);
|
||||
@ -691,7 +690,7 @@ hawk_oow_t hawk_arr_pushheap (hawk_arr_t* arr, void* dptr, hawk_oow_t dlen)
|
||||
|
||||
void hawk_arr_popheap (hawk_arr_t* arr)
|
||||
{
|
||||
HAWK_ASSERT (arr->hawk, arr->size > 0);
|
||||
/*HAWK_ASSERT (arr->gem, arr->size > 0);*/
|
||||
hawk_arr_deleteheap (arr, 0);
|
||||
}
|
||||
|
||||
@ -699,8 +698,8 @@ void hawk_arr_deleteheap (hawk_arr_t* arr, hawk_oow_t index)
|
||||
{
|
||||
slot_t* tmp;
|
||||
|
||||
HAWK_ASSERT (arr->hawk, arr->size > 0);
|
||||
HAWK_ASSERT (arr->hawk, index < arr->size);
|
||||
/*HAWK_ASSERT (arr->gem, arr->size > 0);
|
||||
HAWK_ASSERT (arr->gem, index < arr->size);*/
|
||||
|
||||
/* remember the item to destroy */
|
||||
tmp = arr->slot[index];
|
||||
@ -725,7 +724,7 @@ void hawk_arr_deleteheap (hawk_arr_t* arr, hawk_oow_t index)
|
||||
|
||||
/* destroy the actual item */
|
||||
if (arr->freeer) arr->freeer (arr, DPTR(tmp), DLEN(tmp));
|
||||
hawk_freemem (arr->hawk, tmp);
|
||||
hawk_gem_freemem (arr->gem, tmp);
|
||||
|
||||
/* empty the last slot */
|
||||
arr->slot[arr->size] = HAWK_NULL;
|
||||
@ -737,7 +736,7 @@ hawk_oow_t hawk_arr_updateheap (hawk_arr_t* arr, hawk_oow_t index, void* dptr, h
|
||||
int n;
|
||||
|
||||
tmp = arr->slot[index];
|
||||
HAWK_ASSERT (arr->hawk, tmp != HAWK_NULL);
|
||||
/*HAWK_ASSERT (arr->gem, tmp != HAWK_NULL);*/
|
||||
|
||||
n = arr->comper(arr, dptr, dlen, DPTR(tmp), DLEN(tmp));
|
||||
if (n)
|
||||
|
@ -70,14 +70,12 @@ hawk_oow_t hawk_becs_ncatuchars (hawk_becs_t* str, const hawk_uch_t* s, hawk_oow
|
||||
hawk_oow_t bcslen, ucslen;
|
||||
|
||||
ucslen = len;
|
||||
//if (qse_wcsntombsnwithcmgr(s, &ucslen, QSE_NULL, &bcslen, cmgr) <= -1) return (hawk_oow_t)-1;
|
||||
if (hawk_conv_uchars_to_bchars_with_cmgr(s, &ucslen, HAWK_NULL, &bcslen, cmgr) <= -1) return (hawk_oow_t)-1;
|
||||
|
||||
if (hawk_becs_resize_for_ncat(str, bcslen) <= 0) return -1;
|
||||
|
||||
ucslen = len;
|
||||
bcslen = str->capa - str->val.len;
|
||||
//qse_wcsntombsnwithcmgr(s, &ucslen, &str->val.ptr[str->val.len], &bcslen, cmgr);
|
||||
hawk_conv_uchars_to_bchars_with_cmgr (s, &ucslen, &str->val.ptr[str->val.len], &bcslen, cmgr);
|
||||
str->val.len += bcslen;
|
||||
str->val.ptr[str->val.len] = '\0';
|
||||
@ -90,14 +88,12 @@ hawk_oow_t hawk_uecs_ncatbchars (hawk_uecs_t* str, const hawk_bch_t* s, hawk_oow
|
||||
hawk_oow_t bcslen, ucslen;
|
||||
|
||||
bcslen = len;
|
||||
//if (qse_mbsntowcsnallwithcmgr(s, &bcslen, QSE_NULL, &ucslen, cmgr) <= -1) return (hawk_oow_t)-1;
|
||||
if (hawk_conv_bchars_to_uchars_with_cmgr(s, &bcslen, HAWK_NULL, &ucslen, cmgr, all) <= -1) return (hawk_oow_t)-1;
|
||||
|
||||
if (hawk_uecs_resize_for_ncat(str, ucslen) <= 0) return -1;
|
||||
|
||||
bcslen = len;
|
||||
ucslen = str->capa - str->val.len;
|
||||
//qse_mbsntowcsnallwithcmgr(s, &bcslen, &str->val.ptr[str->val.len], &ucslen, cmgr);
|
||||
hawk_conv_bchars_to_uchars_with_cmgr (s, &bcslen, &str->val.ptr[str->val.len], &ucslen, cmgr, all);
|
||||
str->val.len += ucslen;
|
||||
str->val.ptr[str->val.len] = '\0';
|
||||
|
@ -92,7 +92,7 @@ const hawk_ooch_t* hawk_dflerrstr (hawk_t* awk, hawk_errnum_t errnum)
|
||||
HAWK_T("variable '${0}' redefined"),
|
||||
HAWK_T("duplicate parameter name '${0}'"),
|
||||
HAWK_T("duplicate global variable '${0}'"),
|
||||
HAWK_T("duplicate local variable '${0}'"),
|
||||
HAWK_T("duplicate local variable"),
|
||||
HAWK_T("'${0}' not a valid parameter name"),
|
||||
HAWK_T("'${0}' not a valid variable name"),
|
||||
HAWK_T("variable name missing"),
|
||||
|
@ -141,7 +141,7 @@ typedef hawk_arr_walk_t (*hawk_arr_walker_t) (
|
||||
*/
|
||||
struct hawk_arr_t
|
||||
{
|
||||
hawk_t* hawk;
|
||||
hawk_gem_t* gem;
|
||||
hawk_arr_copier_t copier; /* data copier */
|
||||
hawk_arr_freeer_t freeer; /* data freeer */
|
||||
hawk_arr_comper_t comper; /* data comparator */
|
||||
@ -171,7 +171,7 @@ extern "C" {
|
||||
* The hawk_arr_open() function creates a linear dynamic array.
|
||||
*/
|
||||
HAWK_EXPORT hawk_arr_t* hawk_arr_open (
|
||||
hawk_t* awk, /**< memory manager */
|
||||
hawk_gem_t* gem,
|
||||
hawk_oow_t ext, /**< extension size in bytes */
|
||||
hawk_oow_t capa /**< initial array capacity */
|
||||
);
|
||||
@ -188,7 +188,7 @@ HAWK_EXPORT void hawk_arr_close (
|
||||
*/
|
||||
HAWK_EXPORT int hawk_arr_init (
|
||||
hawk_arr_t* arr,
|
||||
hawk_t* awk,
|
||||
hawk_gem_t* gem,
|
||||
hawk_oow_t capa
|
||||
);
|
||||
|
||||
|
@ -201,9 +201,9 @@ int hawk_init (hawk_t* awk, hawk_mmgr_t* mmgr, hawk_cmgr_t* cmgr, const hawk_prm
|
||||
awk->parse.funs = hawk_htb_open(hawk_getgem(awk), HAWK_SIZEOF(awk), 256, 70, HAWK_SIZEOF(hawk_ooch_t), 1);
|
||||
awk->parse.named = hawk_htb_open(hawk_getgem(awk), HAWK_SIZEOF(awk), 256, 70, HAWK_SIZEOF(hawk_ooch_t), 1);
|
||||
|
||||
awk->parse.gbls = hawk_arr_open(awk, HAWK_SIZEOF(awk), 128);
|
||||
awk->parse.lcls = hawk_arr_open(awk, HAWK_SIZEOF(awk), 64);
|
||||
awk->parse.params = hawk_arr_open(awk, HAWK_SIZEOF(awk), 32);
|
||||
awk->parse.gbls = hawk_arr_open(hawk_getgem(awk), HAWK_SIZEOF(awk), 128);
|
||||
awk->parse.lcls = hawk_arr_open(hawk_getgem(awk), HAWK_SIZEOF(awk), 64);
|
||||
awk->parse.params = hawk_arr_open(hawk_getgem(awk), HAWK_SIZEOF(awk), 32);
|
||||
|
||||
awk->fnc.sys = HAWK_NULL;
|
||||
awk->fnc.user = hawk_htb_open(hawk_getgem(awk), HAWK_SIZEOF(awk), 512, 70, HAWK_SIZEOF(hawk_ooch_t), 1);
|
||||
|
@ -1327,7 +1327,7 @@ static hawk_nde_t* parse_function (hawk_t* awk)
|
||||
|
||||
if (hawk_arr_insert(awk->parse.params, HAWK_ARR_SIZE(awk->parse.params), pa, pal) == HAWK_ARR_NIL)
|
||||
{
|
||||
SETERR_LOC (awk, HAWK_ENOMEM, &awk->tok.loc);
|
||||
ADJERR_LOC (awk, &awk->tok.loc);
|
||||
goto oops;
|
||||
}
|
||||
|
||||
@ -1977,7 +1977,7 @@ int hawk_addgblwithucstr (hawk_t* awk, const hawk_uch_t* name)
|
||||
#define HAWK_NUM_STATIC_GBLS \
|
||||
(HAWK_MAX_GBL_ID-HAWK_MIN_GBL_ID+1)
|
||||
|
||||
int hawk_delgblwithbcstr (hawk_t* awk, const hawk_bch_t* name)
|
||||
int hawk_delgblwithbcstr (hawk_t* hawk, const hawk_bch_t* name)
|
||||
{
|
||||
hawk_oow_t n;
|
||||
hawk_bcs_t ncs;
|
||||
@ -1986,31 +1986,31 @@ int hawk_delgblwithbcstr (hawk_t* awk, const hawk_bch_t* name)
|
||||
ncs.ptr = (hawk_bch_t*)name;
|
||||
ncs.len = hawk_count_bcstr(name);
|
||||
|
||||
if (awk->tree.ngbls > awk->tree.ngbls_base)
|
||||
if (hawk->tree.ngbls > hawk->tree.ngbls_base)
|
||||
{
|
||||
/* this function is not allow after hawk_parse is called */
|
||||
hawk_seterrnum (awk, HAWK_EPERM, HAWK_NULL);
|
||||
hawk_seterrnum (hawk, HAWK_EPERM, HAWK_NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
#if defined(HAWK_OOCH_IS_BCH)
|
||||
n = hawk_arr_search(awk->parse.gbls, HAWK_NUM_STATIC_GBLS, ncs.ptr, ncs.len);
|
||||
n = hawk_arr_search(hawk->parse.gbls, HAWK_NUM_STATIC_GBLS, ncs.ptr, ncs.len);
|
||||
if (n == HAWK_ARR_NIL)
|
||||
{
|
||||
hawk_seterrnum (awk, HAWK_ENOENT, &ncs);
|
||||
hawk_seterrbfmt (hawk, HAWK_NULL, HAWK_ENOENT "no such global variable - %.*hs", ncs.len, ncs.ptr);
|
||||
return -1;
|
||||
}
|
||||
#else
|
||||
wcs.ptr = hawk_dupbtoucstr(awk, ncs.ptr, &wcs.len, 0);
|
||||
wcs.ptr = hawk_dupbtoucstr(hawk, ncs.ptr, &wcs.len, 0);
|
||||
if (!wcs.ptr) return -1;
|
||||
n = hawk_arr_search(awk->parse.gbls, HAWK_NUM_STATIC_GBLS, wcs.ptr, wcs.len);
|
||||
n = hawk_arr_search(hawk->parse.gbls, HAWK_NUM_STATIC_GBLS, wcs.ptr, wcs.len);
|
||||
if (n == HAWK_ARR_NIL)
|
||||
{
|
||||
hawk_seterrnum (awk, HAWK_ENOENT, &wcs);
|
||||
hawk_freemem (awk, wcs.ptr);
|
||||
hawk_seterrbfmt (hawk, HAWK_NULL, HAWK_ENOENT, "no such global variable - %.*ls", wcs.len, wcs.ptr);
|
||||
hawk_freemem (hawk, wcs.ptr);
|
||||
return -1;
|
||||
}
|
||||
hawk_freemem (awk, wcs.ptr);
|
||||
hawk_freemem (hawk, wcs.ptr);
|
||||
#endif
|
||||
|
||||
/* invalidate the name if deletion is requested.
|
||||
@ -2019,16 +2019,16 @@ int hawk_delgblwithbcstr (hawk_t* awk, const hawk_bch_t* name)
|
||||
* again, the entry will be appended again.
|
||||
* never call this funciton unless it is really required. */
|
||||
/*
|
||||
awk->parse.gbls.buf[n].name.ptr[0] = HAWK_T('\0');
|
||||
awk->parse.gbls.buf[n].name.len = 0;
|
||||
hawk->parse.gbls.buf[n].name.ptr[0] = HAWK_T('\0');
|
||||
hawk->parse.gbls.buf[n].name.len = 0;
|
||||
*/
|
||||
n = hawk_arr_uplete(awk->parse.gbls, n, 1);
|
||||
HAWK_ASSERT (awk, n == 1);
|
||||
n = hawk_arr_uplete(hawk->parse.gbls, n, 1);
|
||||
HAWK_ASSERT (hawk, n == 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int hawk_delgblwithucstr (hawk_t* awk, const hawk_uch_t* name)
|
||||
int hawk_delgblwithucstr (hawk_t* hawk, const hawk_uch_t* name)
|
||||
{
|
||||
hawk_oow_t n;
|
||||
hawk_ucs_t ncs;
|
||||
@ -2037,29 +2037,29 @@ int hawk_delgblwithucstr (hawk_t* awk, const hawk_uch_t* name)
|
||||
ncs.ptr = (hawk_uch_t*)name;
|
||||
ncs.len = hawk_count_ucstr(name);
|
||||
|
||||
if (awk->tree.ngbls > awk->tree.ngbls_base)
|
||||
if (hawk->tree.ngbls > hawk->tree.ngbls_base)
|
||||
{
|
||||
/* this function is not allow after hawk_parse is called */
|
||||
hawk_seterrnum (awk, HAWK_EPERM, HAWK_NULL);
|
||||
hawk_seterrnum (hawk, HAWK_EPERM, HAWK_NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
#if defined(HAWK_OOCH_IS_BCH)
|
||||
mbs.ptr = hawk_duputobcstr(awk, ncs.ptr, &mbs.len);
|
||||
mbs.ptr = hawk_duputobcstr(hawk, ncs.ptr, &mbs.len);
|
||||
if (!mbs.ptr) return -1;
|
||||
n = hawk_arr_search(awk->parse.gbls, HAWK_NUM_STATIC_GBLS, mbs.ptr, mbs.len);
|
||||
n = hawk_arr_search(hawk->parse.gbls, HAWK_NUM_STATIC_GBLS, mbs.ptr, mbs.len);
|
||||
if (n == HAWK_ARR_NIL)
|
||||
{
|
||||
hawk_seterrnum (awk, HAWK_ENOENT, &mbs);
|
||||
hawk_freemem (awk, mbs.ptr);
|
||||
hawk_seterrbfmt (hawk, HAWK_NULL, HAWK_ENOENT, "no such global variable - %.*hs", mbs.len, mbs.ptr);
|
||||
hawk_freemem (hawk, mbs.ptr);
|
||||
return -1;
|
||||
}
|
||||
hawk_freemem (awk, mbs.ptr);
|
||||
hawk_freemem (hawk, mbs.ptr);
|
||||
#else
|
||||
n = hawk_arr_search(awk->parse.gbls, HAWK_NUM_STATIC_GBLS, ncs.ptr, ncs.len);
|
||||
n = hawk_arr_search(hawk->parse.gbls, HAWK_NUM_STATIC_GBLS, ncs.ptr, ncs.len);
|
||||
if (n == HAWK_ARR_NIL)
|
||||
{
|
||||
hawk_seterrnum (awk, HAWK_ENOENT, &ncs);
|
||||
hawk_seterrbfmt (hawk, HAWK_NULL, HAWK_ENOENT, "no such global variable - %.*ls", ncs.len, ncs.ptr);
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
@ -2070,16 +2070,16 @@ int hawk_delgblwithucstr (hawk_t* awk, const hawk_uch_t* name)
|
||||
* again, the entry will be appended again.
|
||||
* never call this funciton unless it is really required. */
|
||||
/*
|
||||
awk->parse.gbls.buf[n].name.ptr[0] = HAWK_T('\0');
|
||||
awk->parse.gbls.buf[n].name.len = 0;
|
||||
hawk->parse.gbls.buf[n].name.ptr[0] = HAWK_T('\0');
|
||||
hawk->parse.gbls.buf[n].name.len = 0;
|
||||
*/
|
||||
n = hawk_arr_uplete(awk->parse.gbls, n, 1);
|
||||
n = hawk_arr_uplete(hawk->parse.gbls, n, 1);
|
||||
HAWK_ASSERT (awk, n == 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int hawk_findgblwithbcstr (hawk_t* awk, const hawk_bch_t* name)
|
||||
int hawk_findgblwithbcstr (hawk_t* hawk, const hawk_bch_t* name)
|
||||
{
|
||||
hawk_oow_t n;
|
||||
hawk_bcs_t ncs;
|
||||
@ -2089,29 +2089,29 @@ int hawk_findgblwithbcstr (hawk_t* awk, const hawk_bch_t* name)
|
||||
ncs.len = hawk_count_bcstr(name);
|
||||
|
||||
#if defined(HAWK_OOCH_IS_BCH)
|
||||
n = hawk_arr_search(awk->parse.gbls, HAWK_NUM_STATIC_GBLS, ncs.ptr, ncs.len);
|
||||
n = hawk_arr_search(hawk->parse.gbls, HAWK_NUM_STATIC_GBLS, ncs.ptr, ncs.len);
|
||||
if (n == HAWK_ARR_NIL)
|
||||
{
|
||||
hawk_seterrnum (awk, HAWK_ENOENT, &ncs);
|
||||
hawk_seterrbfmt (hawk, HAWK_NULL, HAWK_ENOENT, "no such global variable - %.*hs", ncs.len, ncs.ptr);
|
||||
return -1;
|
||||
}
|
||||
#else
|
||||
wcs.ptr = hawk_dupbtoucstr(awk, ncs.ptr, &wcs.len, 0);
|
||||
wcs.ptr = hawk_dupbtoucstr(hawk, ncs.ptr, &wcs.len, 0);
|
||||
if (!wcs.ptr) return -1;
|
||||
n = hawk_arr_search(awk->parse.gbls, HAWK_NUM_STATIC_GBLS, wcs.ptr, wcs.len);
|
||||
n = hawk_arr_search(hawk->parse.gbls, HAWK_NUM_STATIC_GBLS, wcs.ptr, wcs.len);
|
||||
if (n == HAWK_ARR_NIL)
|
||||
{
|
||||
hawk_seterrnum (awk, HAWK_ENOENT, &wcs);
|
||||
hawk_freemem (awk, wcs.ptr);
|
||||
hawk_seterrbfmt (hawk, HAWK_NULL, HAWK_ENOENT, "no such global variable - %.*ls", wcs.len, wcs.ptr);
|
||||
hawk_freemem (hawk, wcs.ptr);
|
||||
return -1;
|
||||
}
|
||||
hawk_freemem (awk, wcs.ptr);
|
||||
hawk_freemem (hawk, wcs.ptr);
|
||||
#endif
|
||||
|
||||
return (int)n;
|
||||
}
|
||||
|
||||
int hawk_findgblwithucstr (hawk_t* awk, const hawk_uch_t* name)
|
||||
int hawk_findgblwithucstr (hawk_t* hawk, const hawk_uch_t* name)
|
||||
{
|
||||
hawk_oow_t n;
|
||||
hawk_ucs_t ncs;
|
||||
@ -2121,21 +2121,21 @@ int hawk_findgblwithucstr (hawk_t* awk, const hawk_uch_t* name)
|
||||
ncs.len = hawk_count_ucstr(name);
|
||||
|
||||
#if defined(HAWK_OOCH_IS_BCH)
|
||||
mbs.ptr = hawk_duputobcstr(awk, ncs.ptr, &mbs.len);
|
||||
mbs.ptr = hawk_duputobcstr(hawk, ncs.ptr, &mbs.len);
|
||||
if (!mbs.ptr) return -1;
|
||||
n = hawk_arr_search(awk->parse.gbls, HAWK_NUM_STATIC_GBLS, mbs.ptr, mbs.len);
|
||||
n = hawk_arr_search(hawk->parse.gbls, HAWK_NUM_STATIC_GBLS, mbs.ptr, mbs.len);
|
||||
if (n == HAWK_ARR_NIL)
|
||||
{
|
||||
hawk_seterrnum (awk, HAWK_ENOENT, &mbs);
|
||||
hawk_freemem (awk, mbs.ptr);
|
||||
hawk_seterrbfmt (hawk, HAWK_NULL, HAWK_ENOENT, "no such global variable - %.*hs", mbs.len, mbs.ptr);
|
||||
hawk_freemem (hawk, mbs.ptr);
|
||||
return -1;
|
||||
}
|
||||
hawk_freemem (awk, mbs.ptr);
|
||||
hawk_freemem (hawk, mbs.ptr);
|
||||
#else
|
||||
n = hawk_arr_search(awk->parse.gbls, HAWK_NUM_STATIC_GBLS, ncs.ptr, ncs.len);
|
||||
n = hawk_arr_search(hawk->parse.gbls, HAWK_NUM_STATIC_GBLS, ncs.ptr, ncs.len);
|
||||
if (n == HAWK_ARR_NIL)
|
||||
{
|
||||
hawk_seterrnum (awk, HAWK_ENOENT, &ncs);
|
||||
hawk_seterrbfmt (hawk, HAWK_NULL, HAWK_ENOENT, "no such global variable - %.*ls", ncs.len, ncs.ptr);
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
@ -2257,7 +2257,7 @@ static hawk_t* collect_locals (hawk_t* awk, hawk_oow_t nlcls, int istop)
|
||||
n = hawk_arr_search(awk->parse.lcls, nlcls, lcl.ptr, lcl.len);
|
||||
if (n != HAWK_ARR_NIL)
|
||||
{
|
||||
SETERR_ARG_LOC (awk, HAWK_EDUPLCL, lcl.ptr, lcl.len, &awk->tok.loc);
|
||||
hawk_seterrbfmt (awk, &awk->tok.loc, HAWK_EDUPLCL, "duplicate local variable - %.*js", lcl.len, lcl.ptr);
|
||||
return HAWK_NULL;
|
||||
}
|
||||
|
||||
@ -2269,20 +2269,20 @@ static hawk_t* collect_locals (hawk_t* awk, hawk_oow_t nlcls, int istop)
|
||||
{
|
||||
/* it is a conflict only if it is one of a
|
||||
* static global variable */
|
||||
SETERR_ARG_LOC (awk, HAWK_EDUPLCL, lcl.ptr, lcl.len, &awk->tok.loc);
|
||||
hawk_seterrbfmt (awk, &awk->tok.loc, HAWK_EDUPLCL, "duplicate local variable - %.*js", lcl.len, lcl.ptr);
|
||||
return HAWK_NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (HAWK_ARR_SIZE(awk->parse.lcls) >= HAWK_MAX_LCLS)
|
||||
{
|
||||
SETERR_LOC (awk, HAWK_ELCLTM, &awk->tok.loc);
|
||||
hawk_seterrbfmt (awk, &awk->tok.loc, HAWK_ELCLTM, "too many local variables defined - %.*js", lcl.len, lcl.ptr);
|
||||
return HAWK_NULL;
|
||||
}
|
||||
|
||||
if (hawk_arr_insert(awk->parse.lcls, HAWK_ARR_SIZE(awk->parse.lcls), lcl.ptr, lcl.len) == HAWK_ARR_NIL)
|
||||
{
|
||||
SETERR_LOC (awk, HAWK_ENOMEM, &awk->tok.loc);
|
||||
ADJERR_LOC (awk, &awk->tok.loc);
|
||||
return HAWK_NULL;
|
||||
}
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* This is the TRE memory allocator modified for QSE.
|
||||
* This is the TRE memory allocator modified for Hawk.
|
||||
* See the original license notice below.
|
||||
*/
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user