added the _instsize field to qse_awk_t and qse_awk_rtx_t to get rid of qse_awk_getxtnstd() and qse_awk_rtx_getxtnstd()

This commit is contained in:
hyung-hwan 2019-06-24 08:53:49 +00:00
parent f4a8a5bff7
commit 35a24a56d1
16 changed files with 189 additions and 200 deletions

View File

@ -78,8 +78,8 @@ use this extension area to store data associated with the object.
You can specify the size of the extension area when calling qse_awk_open(),
qse_awk_rtx_open(), qse_awk_openstd(), and qse_awk_rtx_openstd().
These functions iniitlize the area to zeros. You can get the pointer
to the beginning of the area with qse_awk_getxtn(), qse_awk_rtx_getxtn(),
qse_awk_getxtnstd(), qse_awk_rtx_getxtnstd() respectively.
to the beginning of the area with qse_awk_getxtn() and qse_awk_rtx_getxtn().
In the sample above, the string and the buffer used for I/O customization
are declared globally. When you have multiple runtime contexts and independent

View File

@ -1411,7 +1411,7 @@ private:
void fini_runctx ();
int dispatch_function (Run* run, const fnc_info_t* fi);
static const char_t* xerrstr (const awk_t* a, errnum_t num);
static const char_t* xerrstr (awk_t* a, errnum_t num);
};
/////////////////////////////////

View File

@ -93,8 +93,9 @@ typedef qse_flt_t qse_awk_flt_t;
typedef struct qse_awk_t qse_awk_t;
#define QSE_AWK_HDR \
qse_mmgr_t* mmgr; \
qse_cmgr_t* cmgr
qse_size_t _instsize; \
qse_mmgr_t* _mmgr; \
qse_cmgr_t* _cmgr
typedef struct qse_awk_alt_t qse_awk_alt_t;
struct qse_awk_alt_t
@ -131,6 +132,7 @@ struct qse_awk_alt_t
typedef struct qse_awk_rtx_t qse_awk_rtx_t;
#define QSE_AWK_RTX_HDR \
qse_size_t _instsize; \
int id; \
qse_awk_t* awk
@ -1385,7 +1387,7 @@ typedef struct qse_awk_errinf_t qse_awk_errinf_t;
* object with the qse_awk_seterrstr() function to customize an error string.
*/
typedef const qse_char_t* (*qse_awk_errstr_t) (
const qse_awk_t* awk, /**< awk */
qse_awk_t* awk, /**< awk */
qse_awk_errnum_t num /**< error number */
);
@ -1562,23 +1564,17 @@ QSE_EXPORT void qse_awk_close (
* qse_awk_open().
*/
#if defined(QSE_HAVE_INLINE)
static QSE_INLINE qse_mmgr_t* qse_awk_getmmgr (qse_awk_t* awk) { return ((qse_awk_alt_t*)awk)->mmgr; }
static QSE_INLINE qse_cmgr_t* qse_awk_getcmgr (qse_awk_t* awk) { return ((qse_awk_alt_t*)awk)->cmgr; }
static QSE_INLINE void qse_awk_setcmgr (qse_awk_t* awk, qse_cmgr_t* cmgr) { ((qse_awk_alt_t*)awk)->cmgr = cmgr; }
static QSE_INLINE void* qse_awk_getxtn (qse_awk_t* awk) { return (void*)((qse_uint8_t*)awk + ((qse_awk_alt_t*)awk)->_instsize); }
static QSE_INLINE qse_mmgr_t* qse_awk_getmmgr (qse_awk_t* awk) { return ((qse_awk_alt_t*)awk)->_mmgr; }
static QSE_INLINE qse_cmgr_t* qse_awk_getcmgr (qse_awk_t* awk) { return ((qse_awk_alt_t*)awk)->_cmgr; }
static QSE_INLINE void qse_awk_setcmgr (qse_awk_t* awk, qse_cmgr_t* cmgr) { ((qse_awk_alt_t*)awk)->_cmgr = cmgr; }
#else
# define qse_awk_getmmgr(awk) (((qse_awk_alt_t*)(awk))->mmgr)
# define qse_awk_getcmgr(awk) (((qse_awk_alt_t*)(awk))->cmgr)
# define qse_awk_setcmgr(awk,_cmgr) (((qse_awk_alt_t*)(awk))->cmgr = (_cmgr))
# define qse_awk_getxtn(awk) ((void*)((qse_uint8_t*)awk + ((qse_awk_alt_t*)awk)->_instsize))
# define qse_awk_getmmgr(awk) (((qse_awk_alt_t*)(awk))->_mmgr)
# define qse_awk_getcmgr(awk) (((qse_awk_alt_t*)(awk))->_cmgr)
# define qse_awk_setcmgr(awk,_cmgr) (((qse_awk_alt_t*)(awk))->_cmgr = (_cmgr))
#endif /* QSE_HAVE_INLINE */
/**
* The qse_awk_getxtn() function gets the poniter to the beginning
* of the extension area created with qse_awk_open ().
*/
QSE_EXPORT void* qse_awk_getxtn (
qse_awk_t* awk
);
/**
* The qse_awk_getprm() function retrieves primitive functions
* associated. Actual function pointers are copied into a
@ -1914,10 +1910,10 @@ QSE_EXPORT void* qse_awk_callocmem (
#if defined(QSE_HAVE_INLINE)
static QSE_INLINE void qse_awk_freemem (qse_awk_t* awk, void* ptr)
{
QSE_MMGR_FREE (((qse_awk_alt_t*)(awk))->mmgr, ptr);
QSE_MMGR_FREE (((qse_awk_alt_t*)(awk))->_mmgr, ptr);
}
#else
# define qse_awk_freemem(awk, ptr) QSE_MMGR_FREE(((qse_awk_alt_t*)(awk))->mmgr, ptr);
# define qse_awk_freemem(awk, ptr) QSE_MMGR_FREE(((qse_awk_alt_t*)(awk))->_mmgr, ptr);
#endif
@ -2282,6 +2278,15 @@ QSE_EXPORT int qse_awk_rtx_setofilename (
#if defined(QSE_HAVE_INLINE)
/**
* The qse_awk_rtx_getxtn() function gets the pointer to the extension area
* created with qse_awk_rtx_open().
*/
static QSE_INLINE void* qse_awk_rtx_getxtn (qse_awk_rtx_t* rtx)
{
return (void*)((qse_uint8_t*)rtx + ((qse_awk_rtx_alt_t*)rtx)->_instsize);
}
/**
* The qse_awk_rtx_getawk() function gets the owner of a runtime context \a rtx.
* \return owner of a runtime context \a rtx.
@ -2306,20 +2311,13 @@ static QSE_INLINE qse_cmgr_t* qse_awk_rtx_getcmgr (qse_awk_rtx_t* rtx)
}
#else
# define qse_awk_rtx_getxtn(rtx) ((void*)((qse_uint8_t*)rtx + ((qse_awk_rtx_alt_t*)rtx)->_instsize))
# define qse_awk_rtx_getawk(rtx) (((qse_awk_rtx_alt_t*)(rtx))->awk)
# define qse_awk_rtx_getmmgr(rtx) (qse_awk_getmmgr(qse_awk_rtx_getawk(rtx)))
# define qse_awk_rtx_getcmgr(rtx) (qse_awk_getcmgr(qse_awk_rtx_getawk(rtx)))
#endif /* QSE_HAVE_INLINE */
/**
* The qse_awk_rtx_getxtn() function gets the pointer to the extension area
* created with qse_awk_rtx_open().
*/
QSE_EXPORT void* qse_awk_rtx_getxtn (
qse_awk_rtx_t* rtx /**< runtime context */
);
/**
* The qse_awk_rtx_getnvmap() gets the map of named variables
*/

View File

@ -117,15 +117,6 @@ QSE_EXPORT qse_awk_t* qse_awk_openstdwithmmgr (
qse_awk_errnum_t* errnum /**< pointer to an error number variable */
);
/**
* The qse_awk_getxtnstd() gets the pointer to extension area created with
* qse_awk_openstd() or qse_awk_openstdwithmmgr(). You must not call
* qse_awk_getxtn() for sunch an object.
*/
QSE_EXPORT void* qse_awk_getxtnstd (
qse_awk_t* awk
);
/**
* The qse_awk_parsestd() functions parses source script.
* The code below shows how to parse a literal string 'BEGIN { print 10; }'

View File

@ -50,6 +50,14 @@ struct rxtn_t
Awk::NoSource Awk::Source::NONE;
#if defined(QSE_HAVE_INLINE)
static QSE_INLINE xtn_t* GET_XTN(qse_awk_t* awk) { return (xtn_t*)((qse_uint8_t*)qse_awk_getxtn(awk) - QSE_SIZEOF(xtn_t)); }
static QSE_INLINE rxtn_t* GET_RXTN(qse_awk_rtx_t* rtx) { return (rxtn_t*)((qse_uint8_t*)qse_awk_rtx_getxtn(rtx) - QSE_SIZEOF(rxtn_t)); }
#else
#define GET_XTN(awk) ((xtn_t*)((qse_uint8_t*)qse_awk_getxtn(awk) - QSE_SIZEOF(xtn_t)))
#define GET_RXTN(rtx) ((rxtn_t*)((qse_uint8_t*)qse_awk_rtx_getxtn(rtx) - QSE_SIZEOF(rxtn_t)))
#endif
//////////////////////////////////////////////////////////////////
// Awk::RIO
//////////////////////////////////////////////////////////////////
@ -1039,9 +1047,9 @@ const Awk::char_t* Awk::getErrorString (errnum_t num) const
return dflerrstr (awk, num);
}
const Awk::char_t* Awk::xerrstr (const awk_t* a, errnum_t num)
const Awk::char_t* Awk::xerrstr (awk_t* a, errnum_t num)
{
Awk* awk = *(Awk**)QSE_XTN(a);
Awk* awk = *(Awk**)GET_XTN(a);
return awk->getErrorString (num);
}
@ -1150,8 +1158,10 @@ int Awk::open ()
return -1;
}
this->awk->_instsize += QSE_SIZEOF(xtn_t);
// associate this Awk object with the underlying awk object
xtn_t* xtn = (xtn_t*) QSE_XTN (this->awk);
xtn_t* xtn = (xtn_t*)GET_XTN(this->awk);
xtn->awk = this;
xtn->ecb.close = fini_xtn;
xtn->ecb.clear = clear_xtn;
@ -1229,7 +1239,7 @@ void Awk::close ()
qse_cmgr_t* Awk::getCmgr () const
{
if (!this->awk) return QSE_NULL;
return this->awk->cmgr;
return qse_awk_getcmgr(this->awk);
}
void Awk::uponClosing ()
@ -1368,7 +1378,7 @@ int Awk::init_runctx ()
runctx.rtx = rtx;
rxtn_t* rxtn = (rxtn_t*)QSE_XTN(rtx);
rxtn_t* rxtn = GET_RXTN(rtx);
rxtn->run = &runctx;
return 0;
@ -1766,7 +1776,7 @@ Awk::ssize_t Awk::readSource (
awk_t* awk, sio_cmd_t cmd, sio_arg_t* arg,
char_t* data, size_t count)
{
xtn_t* xtn = (xtn_t*) QSE_XTN (awk);
xtn_t* xtn = GET_XTN(awk);
Source::Data sdat (xtn->awk, Source::READ, arg);
switch (cmd)
@ -1786,7 +1796,7 @@ Awk::ssize_t Awk::writeSource (
awk_t* awk, qse_awk_sio_cmd_t cmd, sio_arg_t* arg,
char_t* data, size_t count)
{
xtn_t* xtn = (xtn_t*) QSE_XTN (awk);
xtn_t* xtn = GET_XTN(awk);
Source::Data sdat (xtn->awk, Source::WRITE, arg);
switch (cmd)
@ -1804,7 +1814,7 @@ Awk::ssize_t Awk::writeSource (
Awk::ssize_t Awk::pipeHandler (rtx_t* rtx, rio_cmd_t cmd, rio_arg_t* riod, void* data, size_t count)
{
rxtn_t* rxtn = (rxtn_t*)QSE_XTN(rtx);
rxtn_t* rxtn = GET_RXTN(rtx);
Awk* awk = rxtn->run->awk;
QSE_ASSERT ((riod->type & 0xFF) == QSE_AWK_RIO_PIPE);
@ -1868,7 +1878,7 @@ Awk::ssize_t Awk::pipeHandler (rtx_t* rtx, rio_cmd_t cmd, rio_arg_t* riod, void*
Awk::ssize_t Awk::fileHandler (rtx_t* rtx, rio_cmd_t cmd, rio_arg_t* riod, void* data, size_t count)
{
rxtn_t* rxtn = (rxtn_t*)QSE_XTN(rtx);
rxtn_t* rxtn = GET_RXTN(rtx);
Awk* awk = rxtn->run->awk;
QSE_ASSERT ((riod->type & 0xFF) == QSE_AWK_RIO_FILE);
@ -1932,7 +1942,7 @@ Awk::ssize_t Awk::fileHandler (rtx_t* rtx, rio_cmd_t cmd, rio_arg_t* riod, void*
Awk::ssize_t Awk::consoleHandler (rtx_t* rtx, rio_cmd_t cmd, rio_arg_t* riod, void* data, size_t count)
{
rxtn_t* rxtn = (rxtn_t*) QSE_XTN (rtx);
rxtn_t* rxtn = GET_RXTN(rtx);
Awk* awk = rxtn->run->awk;
QSE_ASSERT ((riod->type & 0xFF) == QSE_AWK_RIO_CONSOLE);
@ -2114,37 +2124,37 @@ int Awk::nextConsole (Console& io)
int Awk::functionHandler (rtx_t* rtx, const fnc_info_t* fi)
{
rxtn_t* rxtn = (rxtn_t*) QSE_XTN (rtx);
rxtn_t* rxtn = GET_RXTN(rtx);
return rxtn->run->awk->dispatch_function (rxtn->run, fi);
}
Awk::flt_t Awk::pow (awk_t* awk, flt_t x, flt_t y)
{
xtn_t* xtn = (xtn_t*) QSE_XTN (awk);
xtn_t* xtn = GET_XTN(awk);
return xtn->awk->pow (x, y);
}
Awk::flt_t Awk::mod (awk_t* awk, flt_t x, flt_t y)
{
xtn_t* xtn = (xtn_t*) QSE_XTN (awk);
xtn_t* xtn = GET_XTN(awk);
return xtn->awk->mod (x, y);
}
void* Awk::modopen (awk_t* awk, const mod_spec_t* spec)
{
xtn_t* xtn = (xtn_t*) QSE_XTN (awk);
xtn_t* xtn = GET_XTN(awk);
return xtn->awk->modopen (spec);
}
void Awk::modclose (awk_t* awk, void* handle)
{
xtn_t* xtn = (xtn_t*) QSE_XTN (awk);
xtn_t* xtn = GET_XTN(awk);
xtn->awk->modclose (handle);
}
void* Awk::modsym (awk_t* awk, void* handle, const char_t* name)
{
xtn_t* xtn = (xtn_t*) QSE_XTN (awk);
xtn_t* xtn = GET_XTN(awk);
return xtn->awk->modsym (handle, name);
}
/////////////////////////////////

View File

@ -82,9 +82,9 @@ typedef struct qse_awk_tree_t qse_awk_tree_t;
# define QSE_AWK_MAX_RTX_STACK_LIMIT ((qse_size_t)1 << (QSE_SIZEOF_VOID_P * 4))
#endif
#define QSE_AWK_ALLOC(awk,size) QSE_MMGR_ALLOC((awk)->mmgr,size)
#define QSE_AWK_REALLOC(awk,ptr,size) QSE_MMGR_REALLOC((awk)->mmgr,ptr,size)
#define QSE_AWK_FREE(awk,ptr) QSE_MMGR_FREE((awk)->mmgr,ptr)
#define QSE_AWK_ALLOC(awk,size) QSE_MMGR_ALLOC(qse_awk_getmmgr(awk),size)
#define QSE_AWK_REALLOC(awk,ptr,size) QSE_MMGR_REALLOC(qse_awk_getmmgr(awk),ptr,size)
#define QSE_AWK_FREE(awk,ptr) QSE_MMGR_FREE(qse_awk_getmmgr(awk),ptr)
#define QSE_AWK_ISUPPER(awk,c) QSE_ISUPPER(c)
#define QSE_AWK_ISLOWER(awk,c) QSE_ISLOWER(c)
@ -128,8 +128,8 @@ typedef struct qse_awk_tree_t qse_awk_tree_t;
#define QSE_AWK_TOWUPPER(awk,c) QSE_TOWUPPER(c)
#define QSE_AWK_TOWLOWER(awk,c) QSE_TOWLOWER(c)
#define QSE_AWK_STRDUP(awk,str) (qse_strdup(str,(awk)->mmgr))
#define QSE_AWK_STRXDUP(awk,str,len) (qse_strxdup(str,len,(awk)->mmgr))
#define QSE_AWK_STRDUP(awk,str) (qse_strdup(str,qse_awk_getmmgr(awk)))
#define QSE_AWK_STRXDUP(awk,str,len) (qse_strxdup(str,len,qse_awk_getmmgr(awk)))
#define QSE_AWK_BYTE_PRINTABLE(x) ((x) <= 0x7F && (x) != '\\' && QSE_ISMPRINT(x))

View File

@ -94,7 +94,7 @@ qse_awk_t* qse_awk_open (qse_mmgr_t* mmgr, qse_size_t xtnsize, const qse_awk_prm
QSE_MMGR_FREE (mmgr, awk);
awk = QSE_NULL;
}
else QSE_MEMSET (QSE_XTN(awk), 0, xtnsize);
else QSE_MEMSET (awk + 1, 0, xtnsize);
}
else if (errnum) *errnum = QSE_AWK_ENOMEM;
@ -104,7 +104,7 @@ qse_awk_t* qse_awk_open (qse_mmgr_t* mmgr, qse_size_t xtnsize, const qse_awk_prm
void qse_awk_close (qse_awk_t* awk)
{
qse_awk_fini (awk);
QSE_MMGR_FREE (awk->mmgr, awk);
QSE_MMGR_FREE (awk->_mmgr, awk);
}
int qse_awk_init (qse_awk_t* awk, qse_mmgr_t* mmgr, const qse_awk_prm_t* prm)
@ -145,8 +145,9 @@ int qse_awk_init (qse_awk_t* awk, qse_mmgr_t* mmgr, const qse_awk_prm_t* prm)
QSE_MEMSET (awk, 0, QSE_SIZEOF(*awk));
/* remember the memory manager */
awk->mmgr = mmgr;
awk->cmgr = qse_getdflcmgr();
awk->_instsize = QSE_SIZEOF(*awk);
awk->_mmgr = mmgr;
awk->_cmgr = qse_getdflcmgr();
/* initialize error handling fields */
awk->errinf.num = QSE_AWK_ENOERR;
@ -404,11 +405,6 @@ void qse_awk_clear (qse_awk_t* awk)
*/
}
void* qse_awk_getxtn (qse_awk_t* awk)
{
return QSE_XTN(awk);
}
void qse_awk_getprm (qse_awk_t* awk, qse_awk_prm_t* prm)
{
*prm = awk->prm;
@ -423,7 +419,7 @@ static int dup_str_opt (qse_awk_t* awk, const void* value, qse_cstr_t* tmp)
{
if (value)
{
tmp->ptr = qse_strdup(value, awk->mmgr);
tmp->ptr = qse_strdup(value, qse_awk_getmmgr(awk));
if (!tmp->ptr)
{
qse_awk_seterrnum (awk, QSE_AWK_ENOMEM, QSE_NULL);

View File

@ -1020,7 +1020,7 @@ static int __substitute (qse_awk_rtx_t* rtx, qse_awk_int_t max_count)
s2_free = (qse_char_t*)s2.ptr;
}
if (qse_str_init (&new, rtx->awk->mmgr, s2.len) <= -1)
if (qse_str_init (&new, qse_awk_rtx_getmmgr(rtx), s2.len) <= -1)
{
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
goto oops;
@ -1381,14 +1381,14 @@ int qse_awk_fnc_sprintf (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
qse_mcstr_t cs0;
qse_mcstr_t x;
if (qse_mbs_init(&out, rtx->awk->mmgr, 256) <= -1)
if (qse_mbs_init(&out, qse_awk_rtx_getmmgr(rtx), 256) <= -1)
{
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
goto oops_mbs;
}
out_inited = 1;
if (qse_mbs_init(&fbu, rtx->awk->mmgr, 256) <= -1)
if (qse_mbs_init(&fbu, qse_awk_rtx_getmmgr(rtx), 256) <= -1)
{
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
goto oops_mbs;
@ -1422,14 +1422,14 @@ int qse_awk_fnc_sprintf (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
qse_cstr_t cs0;
qse_cstr_t x;
if (qse_str_init(&out, rtx->awk->mmgr, 256) <= -1)
if (qse_str_init(&out, qse_awk_rtx_getmmgr(rtx), 256) <= -1)
{
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
goto oops;
}
out_inited = 1;
if (qse_str_init(&fbu, rtx->awk->mmgr, 256) <= -1)
if (qse_str_init(&fbu, qse_awk_rtx_getmmgr(rtx), 256) <= -1)
{
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
goto oops;

View File

@ -72,7 +72,7 @@ qse_char_t* qse_awk_strxdup (qse_awk_t* awk, const qse_char_t* s, qse_size_t l)
qse_char_t* qse_awk_cstrdup (qse_awk_t* awk, const qse_cstr_t* s)
{
qse_char_t* ptr = qse_cstrdup(s, awk->mmgr);
qse_char_t* ptr = qse_cstrdup(s, qse_awk_getmmgr(awk));
if (!ptr) qse_awk_seterrnum (awk, QSE_AWK_ENOMEM, QSE_NULL);
return ptr;
}
@ -655,7 +655,7 @@ int qse_awk_buildrex (
if (code || icode)
{
p = qse_buildrex (
awk->mmgr, awk->opt.depth.s.rex_build,
qse_awk_getmmgr(awk), awk->opt.depth.s.rex_build,
((awk->opt.trait & QSE_AWK_REXBOUND)? 0: QSE_REX_NOBOUND),
ptn, len, &err
);
@ -677,7 +677,7 @@ int qse_awk_buildrex (
if (code)
{
tre = qse_tre_open (awk->mmgr, 0);
tre = qse_tre_open(qse_awk_getmmgr(awk), 0);
if (tre == QSE_NULL)
{
*errnum = QSE_AWK_ENOMEM;
@ -703,7 +703,7 @@ int qse_awk_buildrex (
if (icode)
{
itre = qse_tre_open (awk->mmgr, 0);
itre = qse_tre_open(qse_awk_getmmgr(awk), 0);
if (itre == QSE_NULL)
{
if (tre) qse_tre_close (tre);
@ -797,7 +797,7 @@ int qse_awk_matchrex (
/* submatch is not supported */
x = qse_matchrex (
awk->mmgr, awk->opt.depth.s.rex_match, code,
qse_awk_getmmgr(awk), awk->opt.depth.s.rex_match, code,
(icase? QSE_REX_IGNORECASE: 0), str, substr, match, &err);
if (x <= -1) *errnum = rexerr_to_errnum(err);
return x;
@ -873,7 +873,7 @@ int qse_awk_rtx_matchrex (
#if defined(USE_REX)
/* submatch not supported */
x = qse_matchrex (
rtx->awk->mmgr, rtx->awk->opt.depth.s.rex_match,
qse_awk_rtx_getmmgr(rtx), rtx->awk->opt.depth.s.rex_match,
code, (icase? QSE_REX_IGNORECASE: 0),
str, substr, match, &rexerr);
if (x <= -1) qse_awk_rtx_seterrnum (rtx, rexerr_to_errnum(rexerr), QSE_NULL);

View File

@ -4473,7 +4473,7 @@ static qse_awk_nde_t* parse_primary_mbs (qse_awk_t* awk, const qse_awk_loc_t* xl
/* the MBS token doesn't include a character greater than 0xFF in awk->tok.name though it is a wide character string.
* so i simply use QSE_CMGR_MB8 to store it in a byte string */
nde->ptr = qse_wcsntombsdupwithcmgr(QSE_STR_PTR(awk->tok.name), wcslen, &mbslen, awk->mmgr, qse_findcmgrbyid(QSE_CMGR_MB8));
nde->ptr = qse_wcsntombsdupwithcmgr(QSE_STR_PTR(awk->tok.name), wcslen, &mbslen, qse_awk_getmmgr(awk), qse_findcmgrbyid(QSE_CMGR_MB8));
if (!nde->ptr)
{
qse_awk_seterror (awk, QSE_AWK_ENOMEM, QSE_NULL, xloc);

View File

@ -53,9 +53,6 @@
# error unsupported. qse_awk_int_t too big
#endif
#define MMGR(rtx) ((rtx)->awk->mmgr)
#define CMGR(rtx) ((rtx)->awk->cmgr)
enum exit_level_t
{
EXIT_NONE,
@ -710,11 +707,6 @@ int qse_awk_rtx_setofilename (qse_awk_rtx_t* rtx, const qse_char_t* name, qse_si
return n;
}
void* qse_awk_rtx_getxtn (qse_awk_rtx_t* rtx)
{
return QSE_XTN(rtx);
}
qse_htb_t* qse_awk_rtx_getnvmap (qse_awk_rtx_t* rtx)
{
return rtx->named;
@ -794,6 +786,7 @@ qse_awk_rtx_t* qse_awk_rtx_open (qse_awk_t* awk, qse_size_t xtnsize, qse_awk_rio
/* initialize the rtx object */
QSE_MEMSET (rtx, 0, QSE_SIZEOF(qse_awk_rtx_t) + xtnsize);
rtx->_instsize = QSE_SIZEOF(qse_awk_rtx_t);
if (init_rtx(rtx, awk, rio) <= -1)
{
qse_awk_freemem (awk, rtx);
@ -949,16 +942,16 @@ static int init_rtx (qse_awk_rtx_t* rtx, qse_awk_t* awk, qse_awk_rio_t* rio)
rtx->inrec.maxflds = 0;
rtx->inrec.d0 = qse_awk_val_nil;
if (qse_str_init(&rtx->inrec.line, MMGR(rtx), DEF_BUF_CAPA) <= -1) goto oops_1;
if (qse_str_init(&rtx->inrec.linew, MMGR(rtx), DEF_BUF_CAPA) <= -1) goto oops_2;
if (qse_str_init(&rtx->inrec.lineg, MMGR(rtx), DEF_BUF_CAPA) <= -1) goto oops_3;
if (qse_str_init(&rtx->format.out, MMGR(rtx), 256) <= -1) goto oops_4;
if (qse_str_init(&rtx->format.fmt, MMGR(rtx), 256) <= -1) goto oops_5;
if (qse_str_init(&rtx->inrec.line, qse_awk_rtx_getmmgr(rtx), DEF_BUF_CAPA) <= -1) goto oops_1;
if (qse_str_init(&rtx->inrec.linew, qse_awk_rtx_getmmgr(rtx), DEF_BUF_CAPA) <= -1) goto oops_2;
if (qse_str_init(&rtx->inrec.lineg, qse_awk_rtx_getmmgr(rtx), DEF_BUF_CAPA) <= -1) goto oops_3;
if (qse_str_init(&rtx->format.out, qse_awk_rtx_getmmgr(rtx), 256) <= -1) goto oops_4;
if (qse_str_init(&rtx->format.fmt, qse_awk_rtx_getmmgr(rtx), 256) <= -1) goto oops_5;
if (qse_mbs_init(&rtx->formatmbs.out, MMGR(rtx), 256) <= -1) goto oops_6;
if (qse_mbs_init(&rtx->formatmbs.fmt, MMGR(rtx), 256) <= -1) goto oops_7;
if (qse_mbs_init(&rtx->formatmbs.out, qse_awk_rtx_getmmgr(rtx), 256) <= -1) goto oops_6;
if (qse_mbs_init(&rtx->formatmbs.fmt, qse_awk_rtx_getmmgr(rtx), 256) <= -1) goto oops_7;
rtx->named = qse_htb_open(MMGR(rtx), QSE_SIZEOF(rtx), 1024, 70, QSE_SIZEOF(qse_char_t), 1);
rtx->named = qse_htb_open(qse_awk_rtx_getmmgr(rtx), QSE_SIZEOF(rtx), 1024, 70, QSE_SIZEOF(qse_char_t), 1);
if (!rtx->named) goto oops_8;
*(qse_awk_rtx_t**)QSE_XTN(rtx->named) = rtx;
qse_htb_setstyle (rtx->named, &style_for_named);
@ -4559,7 +4552,7 @@ static QSE_INLINE int __cmp_str_mbs (qse_awk_rtx_t* rtx, qse_awk_val_t* left, qs
qse_size_t mbslen;
int n;
mbsptr = qse_wcsntombsdupwithcmgr(ls->val.ptr, ls->val.len, &mbslen, MMGR(rtx), CMGR(rtx));
mbsptr = qse_wcsntombsdupwithcmgr(ls->val.ptr, ls->val.len, &mbslen, qse_awk_rtx_getmmgr(rtx), qse_awk_rtx_getcmgr(rtx));
if (!mbsptr)
{
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
@ -6877,7 +6870,7 @@ static int shorten_record (qse_awk_rtx_t* rtx, qse_size_t nflds)
}
}
if (qse_str_init(&tmp, MMGR(rtx), QSE_STR_LEN(&rtx->inrec.line)) <= -1)
if (qse_str_init(&tmp, qse_awk_rtx_getmmgr(rtx), QSE_STR_LEN(&rtx->inrec.line)) <= -1)
{
if (ofs_free) qse_awk_rtx_freemem (rtx, ofs_free);
if (nflds > 1) qse_awk_rtx_refdownval (rtx, v);
@ -6994,7 +6987,7 @@ static qse_char_t* idxnde_to_str (qse_awk_rtx_t* rtx, qse_awk_nde_t* nde, qse_ch
out.type = QSE_AWK_RTX_VALTOSTR_STRPCAT;
out.u.strpcat = &idxstr;
if (qse_str_init(&idxstr, MMGR(rtx), DEF_BUF_CAPA) <= -1)
if (qse_str_init(&idxstr, qse_awk_rtx_getmmgr(rtx), DEF_BUF_CAPA) <= -1)
{
SETERR_LOC (rtx, QSE_AWK_ENOMEM, &nde->loc);
return QSE_NULL;

View File

@ -158,6 +158,15 @@ typedef struct ioattr_t
qse_ntime_t tmout[4];
} ioattr_t;
#if defined(QSE_HAVE_INLINE)
static QSE_INLINE xtn_t* GET_XTN(qse_awk_t* awk) { return (xtn_t*)((qse_uint8_t*)qse_awk_getxtn(awk) - QSE_SIZEOF(xtn_t)); }
static QSE_INLINE rxtn_t* GET_RXTN(qse_awk_rtx_t* rtx) { return (rxtn_t*)((qse_uint8_t*)qse_awk_rtx_getxtn(rtx) - QSE_SIZEOF(rxtn_t)); }
#else
#define GET_XTN(awk) ((xtn_t*)((qse_uint8_t*)qse_awk_getxtn(awk) - QSE_SIZEOF(xtn_t)))
#define GET_RXTN(rtx) ((rxtn_t*)((qse_uint8_t*)qse_awk_rtx_getxtn(rtx) - QSE_SIZEOF(rxtn_t)))
#endif
static ioattr_t* get_ioattr (qse_htb_t* tab, const qse_char_t* ptr, qse_size_t len);
qse_awk_flt_t qse_awk_stdmathpow (qse_awk_t* awk, qse_awk_flt_t x, qse_awk_flt_t y)
@ -222,7 +231,7 @@ void qse_awk_stdmodshutdown (qse_awk_t* awk)
static void* std_mod_open_checked (qse_awk_t* awk, const qse_awk_mod_spec_t* spec)
{
xtn_t* xtn = QSE_XTN(awk);
xtn_t* xtn = GET_XTN(awk);
if (!xtn->stdmod_up)
{
@ -251,9 +260,9 @@ void* qse_awk_stdmodopen (qse_awk_t* awk, const qse_awk_mod_spec_t* spec)
tmp[count] = QSE_NULL;
#if defined(QSE_CHAR_IS_MCHAR)
modpath = qse_mbsadup (tmp, QSE_NULL, awk->mmgr);
modpath = qse_mbsadup (tmp, QSE_NULL, qse_awk_getmmgr(awk));
#else
modpath = qse_wcsatombsdupwithcmgr(tmp, QSE_NULL, awk->mmgr, awk->cmgr);
modpath = qse_wcsatombsdupwithcmgr(tmp, QSE_NULL, qse_awk_getmmgr(awk), qse_awk_getcmgr(awk));
#endif
if (!modpath)
{
@ -276,7 +285,7 @@ void* qse_awk_stdmodopen (qse_awk_t* awk, const qse_awk_mod_spec_t* spec)
lt_dladvise_destroy (&adv);
QSE_MMGR_FREE (awk->mmgr, modpath);
QSE_MMGR_FREE (qse_awk_getmmgr(awk), modpath);
return h;
@ -293,7 +302,7 @@ void* qse_awk_stdmodopen (qse_awk_t* awk, const qse_awk_mod_spec_t* spec)
if (spec->postfix) tmp[count++] = spec->postfix;
tmp[count] = QSE_NULL;
modpath = qse_stradup (tmp, QSE_NULL, awk->mmgr);
modpath = qse_stradup (tmp, QSE_NULL, qse_awk_getmmgr(awk));
if (!modpath)
{
qse_awk_seterrnum (awk, QSE_AWK_ENOMEM, QSE_NULL);
@ -302,7 +311,7 @@ void* qse_awk_stdmodopen (qse_awk_t* awk, const qse_awk_mod_spec_t* spec)
h = LoadLibrary (modpath);
QSE_MMGR_FREE (awk->mmgr, modpath);
QSE_MMGR_FREE (qse_awk_getmmgr(awk), modpath);
QSE_ASSERT (QSE_SIZEOF(h) <= QSE_SIZEOF(void*));
return h;
@ -323,9 +332,9 @@ void* qse_awk_stdmodopen (qse_awk_t* awk, const qse_awk_mod_spec_t* spec)
tmp[count] = QSE_NULL;
#if defined(QSE_CHAR_IS_MCHAR)
modpath = qse_mbsadup (tmp, QSE_NULL, awk->mmgr);
modpath = qse_mbsadup (tmp, QSE_NULL, qse_awk_getmmgr(awk));
#else
modpath = qse_wcsatombsdupwithcmgr(tmp, QSE_NULL, awk->mmgr, awk->cmgr);
modpath = qse_wcsatombsdupwithcmgr(tmp, QSE_NULL, qse_awk_getmmgr(awk), qse_awk_getcmgr(awk));
#endif
if (!modpath)
{
@ -338,7 +347,7 @@ void* qse_awk_stdmodopen (qse_awk_t* awk, const qse_awk_mod_spec_t* spec)
rc = DosLoadModule (errbuf, QSE_COUNTOF(errbuf) - 1, modpath, &h);
if (rc != NO_ERROR) h = QSE_NULL;
QSE_MMGR_FREE (awk->mmgr, modpath);
QSE_MMGR_FREE (qse_awk_getmmgr(awk), modpath);
QSE_ASSERT (QSE_SIZEOF(h) <= QSE_SIZEOF(void*));
return h;
@ -360,9 +369,9 @@ void* qse_awk_stdmodopen (qse_awk_t* awk, const qse_awk_mod_spec_t* spec)
tmp[count] = QSE_NULL;
#if defined(QSE_CHAR_IS_MCHAR)
modpath = qse_mbsadup(tmp, QSE_NULL, awk->mmgr);
modpath = qse_mbsadup(tmp, QSE_NULL, qse_awk_getmmgr(awk));
#else
modpath = qse_wcsatombsdupwithcmgr(tmp, QSE_NULL, awk->mmgr, awk->cmgr);
modpath = qse_wcsatombsdupwithcmgr(tmp, QSE_NULL, qse_awk_getmmgr(awk), qse_awk_getcmgr(awk));
#endif
if (!modpath)
{
@ -372,7 +381,7 @@ void* qse_awk_stdmodopen (qse_awk_t* awk, const qse_awk_mod_spec_t* spec)
h = LoadModule (modpath);
QSE_MMGR_FREE (awk->mmgr, modpath);
QSE_MMGR_FREE (qse_awk_getmmgr(awk), modpath);
QSE_ASSERT (QSE_SIZEOF(h) <= QSE_SIZEOF(void*));
return h;
@ -391,9 +400,9 @@ void* qse_awk_stdmodopen (qse_awk_t* awk, const qse_awk_mod_spec_t* spec)
tmp[count] = QSE_NULL;
#if defined(QSE_CHAR_IS_MCHAR)
modpath = qse_mbsadup(tmp, QSE_NULL, awk->mmgr);
modpath = qse_mbsadup(tmp, QSE_NULL, qse_awk_getmmgr(awk));
#else
modpath = qse_wcsatombsdupwithcmgr(tmp, QSE_NULL, awk->mmgr, awk->cmgr);
modpath = qse_wcsatombsdupwithcmgr(tmp, QSE_NULL, qse_awk_getmmgr(awk), qse_awk_getcmgr(awk));
#endif
if (!modpath)
{
@ -407,7 +416,7 @@ void* qse_awk_stdmodopen (qse_awk_t* awk, const qse_awk_mod_spec_t* spec)
qse_awk_seterrfmt (awk, QSE_AWK_ESYSERR, QSE_NULL, QSE_T("%hs"), dlerror());
}
QSE_MMGR_FREE (awk->mmgr, modpath);
QSE_MMGR_FREE (qse_awk_getmmgr(awk), modpath);
return h;
@ -442,7 +451,7 @@ void* qse_awk_stdmodsym (qse_awk_t* awk, void* handle, const qse_char_t* name)
#if defined(QSE_CHAR_IS_MCHAR)
mname = (qse_mchar_t*)name;
#else
mname = qse_wcstombsdupwithcmgr(name, QSE_NULL, awk->mmgr, awk->cmgr);
mname = qse_wcstombsdupwithcmgr(name, QSE_NULL, qse_awk_getmmgr(awk), qse_awk_getcmgr(awk));
if (!mname)
{
qse_awk_seterrnum (awk, QSE_AWK_ENOMEM, QSE_NULL);
@ -472,7 +481,7 @@ void* qse_awk_stdmodsym (qse_awk_t* awk, void* handle, const qse_char_t* name)
#if defined(QSE_CHAR_IS_MCHAR)
/* nothing to do */
#else
QSE_MMGR_FREE (awk->mmgr, mname);
QSE_MMGR_FREE (qse_awk_getmmgr(awk), mname);
#endif
return s;
@ -488,7 +497,7 @@ qse_awk_t* qse_awk_openstd (qse_size_t xtnsize, qse_awk_errnum_t* errnum)
static void fini_xtn (qse_awk_t* awk)
{
xtn_t* xtn = QSE_XTN (awk);
xtn_t* xtn = GET_XTN(awk);
if (xtn->stdmod_up)
{
qse_awk_stdmodshutdown (awk);
@ -527,8 +536,11 @@ qse_awk_t* qse_awk_openstdwithmmgr (qse_mmgr_t* mmgr, qse_size_t xtnsize, qse_aw
}
#endif
/* adjust the object size by the sizeof xtn_t so that qse_getxtn() returns the right pointer. */
awk->_instsize += QSE_SIZEOF(xtn_t);
/* initialize extension */
xtn = (xtn_t*) QSE_XTN (awk);
xtn = GET_XTN(awk);
/* the extension area has been cleared in qse_awk_open().
* QSE_MEMSET (xtn, 0, QSE_SIZEOF(*xtn));*/
@ -560,15 +572,10 @@ oops:
return QSE_NULL;
}
void* qse_awk_getxtnstd (qse_awk_t* awk)
{
return (void*)((xtn_t*)QSE_XTN(awk) + 1);
}
static qse_sio_t* open_sio (qse_awk_t* awk, const qse_char_t* file, int flags)
{
qse_sio_t* sio;
sio = qse_sio_open (awk->mmgr, 0, file, flags);
sio = qse_sio_open (qse_awk_getmmgr(awk), 0, file, flags);
if (sio == QSE_NULL)
{
qse_cstr_t errarg;
@ -582,7 +589,7 @@ static qse_sio_t* open_sio (qse_awk_t* awk, const qse_char_t* file, int flags)
static qse_sio_t* open_sio_rtx (qse_awk_rtx_t* rtx, const qse_char_t* file, int flags)
{
qse_sio_t* sio;
sio = qse_sio_open (rtx->awk->mmgr, 0, file, flags);
sio = qse_sio_open (qse_awk_rtx_getmmgr(rtx), 0, file, flags);
if (sio == QSE_NULL)
{
qse_cstr_t errarg;
@ -603,7 +610,7 @@ static qse_cstr_t sio_std_names[] =
static qse_sio_t* open_sio_std (qse_awk_t* awk, qse_sio_std_t std, int flags)
{
qse_sio_t* sio;
sio = qse_sio_openstd (awk->mmgr, 0, std, flags);
sio = qse_sio_openstd (qse_awk_getmmgr(awk), 0, std, flags);
if (sio == QSE_NULL) qse_awk_seterrnum (awk, QSE_AWK_EOPEN, &sio_std_names[std]);
return sio;
}
@ -612,7 +619,7 @@ static qse_sio_t* open_sio_std_rtx (qse_awk_rtx_t* rtx, qse_sio_std_t std, int f
{
qse_sio_t* sio;
sio = qse_sio_openstd (rtx->awk->mmgr, 0, std, flags);
sio = qse_sio_openstd (qse_awk_rtx_getmmgr(rtx), 0, std, flags);
if (sio == QSE_NULL) qse_awk_rtx_seterrnum (rtx, QSE_AWK_EOPEN, &sio_std_names[std]);
return sio;
}
@ -739,7 +746,7 @@ static qse_ssize_t sf_in_open (qse_awk_t* awk, qse_awk_sio_arg_t* arg, xtn_t* xt
}
arg->handle = qse_sio_open (
awk->mmgr, 0, path, QSE_SIO_READ | QSE_SIO_IGNOREMBWCERR | QSE_SIO_KEEPPATH
qse_awk_getmmgr(awk), 0, path, QSE_SIO_READ | QSE_SIO_IGNOREMBWCERR | QSE_SIO_KEEPPATH
);
if (dbuf) qse_awk_freemem (awk, dbuf);
@ -754,7 +761,7 @@ static qse_ssize_t sf_in_open (qse_awk_t* awk, qse_awk_sio_arg_t* arg, xtn_t* xt
/* TODO: use the system handle(file descriptor) instead of the path? */
/*syshnd = qse_sio_gethnd(arg->handle);*/
if (qse_get_file_attr_with_mmgr(path, 0, &fattr, awk->mmgr) >= 0)
if (qse_get_file_attr_with_mmgr(path, 0, &fattr, qse_awk_getmmgr(awk)) >= 0)
{
struct
{
@ -891,7 +898,7 @@ static qse_ssize_t sf_in_read (qse_awk_t* awk, qse_awk_sio_arg_t* arg, qse_char_
static qse_ssize_t sf_in (qse_awk_t* awk, qse_awk_sio_cmd_t cmd, qse_awk_sio_arg_t* arg, qse_char_t* data, qse_size_t size)
{
xtn_t* xtn = QSE_XTN (awk);
xtn_t* xtn = GET_XTN(awk);
switch (cmd)
{
@ -912,7 +919,7 @@ static qse_ssize_t sf_in (qse_awk_t* awk, qse_awk_sio_cmd_t cmd, qse_awk_sio_arg
static qse_ssize_t sf_out (qse_awk_t* awk, qse_awk_sio_cmd_t cmd, qse_awk_sio_arg_t* arg, qse_char_t* data, qse_size_t size)
{
xtn_t* xtn = QSE_XTN (awk);
xtn_t* xtn = GET_XTN(awk);
switch (cmd)
{
@ -947,7 +954,7 @@ static qse_ssize_t sf_out (qse_awk_t* awk, qse_awk_sio_cmd_t cmd, qse_awk_sio_ar
return 1;
case QSE_AWK_PARSESTD_STR:
xtn->s.out.u.str.buf = qse_str_open (awk->mmgr, 0, 512);
xtn->s.out.u.str.buf = qse_str_open (qse_awk_getmmgr(awk), 0, 512);
if (xtn->s.out.u.str.buf == QSE_NULL)
{
qse_awk_seterrnum (awk, QSE_AWK_ENOMEM, QSE_NULL);
@ -1025,7 +1032,7 @@ static qse_ssize_t sf_out (qse_awk_t* awk, qse_awk_sio_cmd_t cmd, qse_awk_sio_ar
int qse_awk_parsestd (qse_awk_t* awk, qse_awk_parsestd_t in[], qse_awk_parsestd_t* out)
{
qse_awk_sio_t sio;
xtn_t* xtn = (xtn_t*) QSE_XTN (awk);
xtn_t* xtn = GET_XTN(awk);
int n;
if (in == QSE_NULL || (in[0].type != QSE_AWK_PARSESTD_FILE &&
@ -1183,7 +1190,7 @@ static qse_ssize_t pio_handler_open (qse_awk_rtx_t* rtx, qse_awk_rio_arg_t* riod
}
handle = qse_pio_open (
rtx->awk->mmgr,
qse_awk_rtx_getmmgr(rtx),
0,
riod->name,
QSE_NULL,
@ -1280,7 +1287,7 @@ static qse_ssize_t awk_rio_pipe (qse_awk_rtx_t* rtx, qse_awk_rio_cmd_t cmd, qse_
ioattr_t* ioattr;
rxtn_t* rxtn;
rxtn = (rxtn_t*)QSE_XTN(rtx);
rxtn = GET_RXTN(rtx);
ioattr = get_ioattr(&rxtn->cmgrtab, riod->name, qse_strlen(riod->name));
if (ioattr)
@ -1327,7 +1334,7 @@ static qse_ssize_t awk_rio_file (qse_awk_rtx_t* rtx, qse_awk_rio_cmd_t cmd, qse_
return -1;
}
handle = qse_sio_open (rtx->awk->mmgr, 0, riod->name, flags);
handle = qse_sio_open (qse_awk_rtx_getmmgr(rtx), 0, riod->name, flags);
if (handle == QSE_NULL)
{
qse_cstr_t errarg;
@ -1374,12 +1381,12 @@ static qse_ssize_t awk_rio_file (qse_awk_rtx_t* rtx, qse_awk_rio_cmd_t cmd, qse_
static int open_rio_console (qse_awk_rtx_t* rtx, qse_awk_rio_arg_t* riod)
{
rxtn_t* rxtn = (rxtn_t*) QSE_XTN (rtx);
rxtn_t* rxtn = GET_RXTN(rtx);
qse_sio_t* sio;
if (riod->mode == QSE_AWK_RIO_CONSOLE_READ)
{
xtn_t* xtn = (xtn_t*)QSE_XTN(rtx->awk);
xtn_t* xtn = (xtn_t*)GET_XTN(rtx->awk);
if (rxtn->c.in.files == QSE_NULL)
{
@ -1671,8 +1678,8 @@ static qse_ssize_t awk_rio_console (qse_awk_rtx_t* rtx, qse_awk_rio_cmd_t cmd, q
static void fini_rxtn (qse_awk_rtx_t* rtx)
{
rxtn_t* rxtn = (rxtn_t*) QSE_XTN (rtx);
/*xtn_t* xtn = (xtn_t*) QSE_XTN (rtx->awk);*/
rxtn_t* rxtn = GET_RXTN(rtx);
/*xtn_t* xtn = (xtn_t*)GET_XTN(rtx->awk);*/
if (rxtn->cmgrtab_inited)
{
@ -1826,12 +1833,12 @@ static int __build_environ (
/* mbstowcsdup() may fail for invalid encoding. as the environment
* variaables are not under control, call mbstowcsalldup() instead
* to go on despite encoding failure */
kptr = qse_mbstowcsalldupwithcmgr(envarr[count], &klen, rtx->awk->mmgr, rtx->awk->cmgr);
vptr = qse_mbstowcsalldupwithcmgr(eq + 1, QSE_NULL, rtx->awk->mmgr, rtx->awk->cmgr);
kptr = qse_mbstowcsalldupwithcmgr(envarr[count], &klen, qse_awk_rtx_getmmgr(rtx), qse_awk_rtx_getcmgr(rtx));
vptr = qse_mbstowcsalldupwithcmgr(eq + 1, QSE_NULL, qse_awk_rtx_getmmgr(rtx), qse_awk_rtx_getcmgr(rtx));
if (kptr == QSE_NULL || vptr == QSE_NULL)
{
if (kptr) QSE_MMGR_FREE (rtx->awk->mmgr, kptr);
if (vptr) QSE_MMGR_FREE (rtx->awk->mmgr, vptr);
if (kptr) QSE_MMGR_FREE (qse_awk_rtx_getmmgr(rtx), kptr);
if (vptr) QSE_MMGR_FREE (qse_awk_rtx_getmmgr(rtx), vptr);
qse_awk_rtx_refdownval (rtx, v_env);
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
@ -1845,12 +1852,12 @@ static int __build_environ (
*eq = QSE_WT('\0');
kptr = qse_wcstombsdupwithcmgr(envarr[count], &klen, rtx->awk->mmgr, rtx->awk->cmgr);
vptr = qse_wcstombsdupwithcmgr(eq + 1, QSE_NULL, rtx->awk->mmgr, rtx->awk->cmgr);
kptr = qse_wcstombsdupwithcmgr(envarr[count], &klen, qse_awk_rtx_getmmgr(rtx), qse_awk_rtx_getcmgr(rtx));
vptr = qse_wcstombsdupwithcmgr(eq + 1, QSE_NULL, qse_awk_rtx_getmmgr(rtx), qse_awk_rtx_getcmgr(rtx));
if (kptr == QSE_NULL || vptr == QSE_NULL)
{
if (kptr) QSE_MMGR_FREE (rtx->awk->mmgr, kptr);
if (vptr) QSE_MMGR_FREE (rtx->awk->mmgr, vptr);
if (kptr) QSE_MMGR_FREE (qse_awk_rtx_getmmgr(rtx), kptr);
if (vptr) QSE_MMGR_FREE (qse_awk_rtx_getmmgr(rtx), vptr);
qse_awk_rtx_refdownval (rtx, v_env);
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
@ -1870,8 +1877,8 @@ static int __build_environ (
(defined(QSE_ENV_CHAR_IS_WCHAR) && defined(QSE_CHAR_IS_WCHAR)))
/* nothing to do */
#else
if (vptr) QSE_MMGR_FREE (rtx->awk->mmgr, vptr);
if (kptr) QSE_MMGR_FREE (rtx->awk->mmgr, kptr);
if (vptr) QSE_MMGR_FREE (qse_awk_rtx_getmmgr(rtx), vptr);
if (kptr) QSE_MMGR_FREE (qse_awk_rtx_getmmgr(rtx), kptr);
#endif
qse_awk_rtx_refdownval (rtx, v_env);
return -1;
@ -1894,8 +1901,8 @@ static int __build_environ (
(defined(QSE_ENV_CHAR_IS_WCHAR) && defined(QSE_CHAR_IS_WCHAR)))
/* nothing to do */
#else
if (vptr) QSE_MMGR_FREE (rtx->awk->mmgr, vptr);
if (kptr) QSE_MMGR_FREE (rtx->awk->mmgr, kptr);
if (vptr) QSE_MMGR_FREE (qse_awk_rtx_getmmgr(rtx), vptr);
if (kptr) QSE_MMGR_FREE (qse_awk_rtx_getmmgr(rtx), kptr);
#endif
/* the values previously assigned into the
@ -1910,8 +1917,8 @@ static int __build_environ (
(defined(QSE_ENV_CHAR_IS_WCHAR) && defined(QSE_CHAR_IS_WCHAR)))
/* nothing to do */
#else
if (vptr) QSE_MMGR_FREE (rtx->awk->mmgr, vptr);
if (kptr) QSE_MMGR_FREE (rtx->awk->mmgr, kptr);
if (vptr) QSE_MMGR_FREE (qse_awk_rtx_getmmgr(rtx), vptr);
if (kptr) QSE_MMGR_FREE (qse_awk_rtx_getmmgr(rtx), kptr);
#endif
}
}
@ -1931,7 +1938,7 @@ static int build_environ (qse_awk_rtx_t* rtx, int gbl_id)
qse_env_t env;
int xret;
if (qse_env_init (&env, rtx->awk->mmgr, 1) <= -1)
if (qse_env_init(&env, qse_awk_rtx_getmmgr(rtx), 1) <= -1)
{
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
return -1;
@ -1966,7 +1973,7 @@ qse_awk_rtx_t* qse_awk_rtx_openstd (
rxtn_t* rxtn;
xtn_t* xtn;
xtn = (xtn_t*)QSE_XTN (awk);
xtn = GET_XTN(awk);
rio.pipe = awk_rio_pipe;
rio.file = awk_rio_file;
@ -1975,11 +1982,13 @@ qse_awk_rtx_t* qse_awk_rtx_openstd (
rtx = qse_awk_rtx_open(awk, QSE_SIZEOF(rxtn_t) + xtnsize, &rio);
if (!rtx) return QSE_NULL;
rxtn = (rxtn_t*) QSE_XTN (rtx);
rtx->_instsize += QSE_SIZEOF(rxtn_t);
rxtn = GET_RXTN(rtx);
if (rtx->awk->opt.trait & QSE_AWK_RIO)
{
if (qse_htb_init(&rxtn->cmgrtab, awk->mmgr, 256, 70, QSE_SIZEOF(qse_char_t), 1) <= -1)
if (qse_htb_init(&rxtn->cmgrtab, qse_awk_getmmgr(awk), 256, 70, QSE_SIZEOF(qse_char_t), 1) <= -1)
{
qse_awk_rtx_close (rtx);
qse_awk_seterrnum (awk, QSE_AWK_ENOMEM, QSE_NULL);
@ -2032,12 +2041,6 @@ qse_awk_rtx_t* qse_awk_rtx_openstd (
return rtx;
}
void* qse_awk_rtx_getxtnstd (qse_awk_rtx_t* rtx)
{
return (void*)((rxtn_t*)QSE_XTN(rtx) + 1);
}
static int timeout_code (const qse_char_t* name)
{
if (qse_strcasecmp (name, QSE_T("rtimeout")) == 0) return 0;
@ -2101,7 +2104,7 @@ static int fnc_setioattr (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
int i, ret = 0, fret = 0;
int tmout;
rxtn = (rxtn_t*) QSE_XTN (rtx);
rxtn = GET_RXTN(rtx);
QSE_ASSERT (rxtn->cmgrtab_inited == 1);
for (i = 0; i < 3; i++)
@ -2223,7 +2226,7 @@ static int fnc_getioattr (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
ioattr_t* ioattr;
ioattr_t ioattr_buf;
rxtn = (rxtn_t*) QSE_XTN (rtx);
rxtn = GET_RXTN(rtx);
QSE_ASSERT (rxtn->cmgrtab_inited == 1);
for (i = 0; i < 2; i++)
@ -2305,10 +2308,9 @@ done:
qse_cmgr_t* qse_awk_rtx_getiocmgrstd (qse_awk_rtx_t* rtx, const qse_char_t* ioname)
{
#if defined(QSE_CHAR_IS_WCHAR)
rxtn_t* rxtn;
rxtn_t* rxtn = GET_RXTN(rtx);
ioattr_t* ioattr;
rxtn = (rxtn_t*) QSE_XTN (rtx);
QSE_ASSERT (rxtn->cmgrtab_inited == 1);
ioattr = get_ioattr(&rxtn->cmgrtab, ioname, qse_strlen(ioname));
@ -2319,9 +2321,7 @@ qse_cmgr_t* qse_awk_rtx_getiocmgrstd (qse_awk_rtx_t* rtx, const qse_char_t* iona
static int add_globals (qse_awk_t* awk)
{
xtn_t* xtn;
xtn = (xtn_t*) QSE_XTN (awk);
xtn_t* xtn = GET_XTN(awk);
xtn->gbl_argc = qse_awk_addgbl (awk, QSE_T("ARGC"));
xtn->gbl_argv = qse_awk_addgbl (awk, QSE_T("ARGV"));

View File

@ -217,7 +217,7 @@ qse_awk_val_t* qse_awk_rtx_makestrvalwithmbs (qse_awk_rtx_t* rtx, const qse_mcha
qse_awk_val_t* v;
qse_wcstr_t tmp;
tmp.ptr = qse_mbstowcsalldupwithcmgr(mbs, &tmp.len, rtx->awk->mmgr, rtx->awk->cmgr);
tmp.ptr = qse_mbstowcsalldupwithcmgr(mbs, &tmp.len, qse_awk_rtx_getmmgr(rtx), qse_awk_rtx_getcmgr(rtx));
if (tmp.ptr == QSE_NULL)
{
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
@ -236,7 +236,7 @@ qse_awk_val_t* qse_awk_rtx_makestrvalwithwcs (qse_awk_rtx_t* rtx, const qse_wcha
qse_awk_val_t* v;
qse_mcstr_t tmp;
tmp.ptr = qse_wcstombsdupwithcmgr(wcs, &tmp.len, rtx->awk->mmgr, rtx->awk->cmgr);
tmp.ptr = qse_wcstombsdupwithcmgr(wcs, &tmp.len, qse_awk_rtx_getmmgr(rtx), qse_awk_rtx_getcmgr(rtx));
if (tmp.ptr == QSE_NULL)
{
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
@ -266,7 +266,7 @@ qse_awk_val_t* qse_awk_rtx_makestrvalwithmxstr (qse_awk_rtx_t* rtx, const qse_mc
qse_size_t mbslen;
mbslen = mxstr->len;
tmp.ptr = qse_mbsntowcsalldupwithcmgr(mxstr->ptr, &mbslen, &tmp.len, rtx->awk->mmgr, rtx->awk->cmgr);
tmp.ptr = qse_mbsntowcsalldupwithcmgr(mxstr->ptr, &mbslen, &tmp.len, qse_awk_rtx_getmmgr(rtx), qse_awk_rtx_getcmgr(rtx));
if (tmp.ptr == QSE_NULL)
{
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
@ -287,7 +287,7 @@ qse_awk_val_t* qse_awk_rtx_makestrvalwithwxstr (qse_awk_rtx_t* rtx, const qse_wc
qse_size_t wcslen;
wcslen = wxstr->len;
tmp.ptr = qse_wcsntombsdupwithcmgr(wxstr->ptr, wcslen, &tmp.len, rtx->awk->mmgr, rtx->awk->cmgr);
tmp.ptr = qse_wcsntombsdupwithcmgr(wxstr->ptr, wcslen, &tmp.len, qse_awk_rtx_getmmgr(rtx), qse_awk_rtx_getcmgr(rtx));
if (tmp.ptr == QSE_NULL)
{
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
@ -500,7 +500,7 @@ qse_awk_val_t* qse_awk_rtx_makemapval (qse_awk_rtx_t* rtx)
val->stat = 0;
val->nstr = 0;
val->fcb = 0;
val->map = qse_htb_open(run, 256, 70, free_mapval, same_mapval, run->awk->mmgr);
val->map = qse_htb_open(run, 256, 70, free_mapval, same_mapval, qse_awk_rtx_getmmgr(run));
if (val->map == QSE_NULL)
{
qse_awk_rtx_freemem (rtx, val);
@ -519,7 +519,7 @@ qse_awk_val_t* qse_awk_rtx_makemapval (qse_awk_rtx_t* rtx)
val->fcb = 0;
val->map = (qse_htb_t*)(val + 1);
if (qse_htb_init(val->map, rtx->awk->mmgr, 256, 70, QSE_SIZEOF(qse_char_t), 1) <= -1)
if (qse_htb_init(val->map, qse_awk_rtx_getmmgr(rtx), 256, 70, QSE_SIZEOF(qse_char_t), 1) <= -1)
{
qse_awk_rtx_freemem (rtx, val);
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
@ -1071,7 +1071,7 @@ static int mbs_to_str (qse_awk_rtx_t* rtx, const qse_mchar_t* str, qse_size_t st
mbslen = str_len;
wcslen = out->u.cplcpy.len;
/*if (qse_mbsntowcsnallwithcmgr(str, &mbslen, out->u.cplcpy.ptr, &wcslen, qse_findcmgrbyid(QSE_CMGR_MB8)) <= -1 || wcslen >= out->u.cplcpy.len)*/
if (qse_mbsntowcsnallwithcmgr(str, &mbslen, out->u.cplcpy.ptr, &wcslen, rtx->awk->cmgr) <= -1 || wcslen >= out->u.cplcpy.len)
if (qse_mbsntowcsnallwithcmgr(str, &mbslen, out->u.cplcpy.ptr, &wcslen, qse_awk_rtx_getcmgr(rtx)) <= -1 || wcslen >= out->u.cplcpy.len)
{
qse_awk_rtx_seterrnum (rtx, QSE_AWK_EINVAL, QSE_NULL); /* TODO: change error code */
return -1;
@ -1089,8 +1089,8 @@ static int mbs_to_str (qse_awk_rtx_t* rtx, const qse_mchar_t* str, qse_size_t st
qse_size_t mbslen, wcslen;
mbslen = str_len;
/*tmp = qse_mbsntowcsalldupwithcmgr(str, &mbslen, &wcslen, rtx->awk->mmgr, qse_findcmgrbyid(QSE_CMGR_MB8));*/
tmp = qse_mbsntowcsalldupwithcmgr(str, &mbslen, &wcslen, rtx->awk->mmgr, rtx->awk->cmgr);
/*tmp = qse_mbsntowcsalldupwithcmgr(str, &mbslen, &wcslen, qse_awk_rtx_getmmgr(rtx), qse_findcmgrbyid(QSE_CMGR_MB8));*/
tmp = qse_mbsntowcsalldupwithcmgr(str, &mbslen, &wcslen, qse_awk_rtx_getmmgr(rtx), qse_awk_rtx_getcmgr(rtx));
if (!tmp)
{
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
@ -1108,7 +1108,7 @@ static int mbs_to_str (qse_awk_rtx_t* rtx, const qse_mchar_t* str, qse_size_t st
qse_str_clear (out->u.strp);
/*n = qse_str_ncatmbs(out->u.strp, str, str_len, qse_findcmgrbyid(QSE_CMGR_MB8));*/
n = qse_str_ncatmbs(out->u.strp, str, str_len, rtx->awk->cmgr);
n = qse_str_ncatmbs(out->u.strp, str, str_len, qse_awk_rtx_getcmgr(rtx));
if (n == (qse_size_t)-1)
{
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
@ -1122,7 +1122,7 @@ static int mbs_to_str (qse_awk_rtx_t* rtx, const qse_mchar_t* str, qse_size_t st
qse_size_t n;
/*n = qse_str_ncatmbs(out->u.strpcat, str, str_len, qse_findcmgrbyid(QSE_CMGR_MB8));*/
n = qse_str_ncatmbs(out->u.strpcat, str, str_len, rtx->awk->cmgr);
n = qse_str_ncatmbs(out->u.strpcat, str, str_len, qse_awk_rtx_getcmgr(rtx));
if (n == (qse_size_t)-1)
{
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
@ -1273,14 +1273,14 @@ static int val_flt_to_str (qse_awk_rtx_t* rtx, const qse_awk_val_flt_t* v, qse_a
tmp_len = rtx->gbl.convfmt.len;
}
if (qse_str_init(&buf, rtx->awk->mmgr, 256) <= -1)
if (qse_str_init(&buf, qse_awk_rtx_getmmgr(rtx), 256) <= -1)
{
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
return -1;
}
buf_inited = 1;
if (qse_str_init(&fbu, rtx->awk->mmgr, 256) <= -1)
if (qse_str_init(&fbu, qse_awk_rtx_getmmgr(rtx), 256) <= -1)
{
qse_str_fini (&buf);
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
@ -1498,7 +1498,7 @@ qse_mchar_t* qse_awk_rtx_valtombsdupwithcmgr (qse_awk_rtx_t* rtx, const qse_awk_
if (QSE_AWK_RTX_GETVALTYPE(rtx,v) == QSE_AWK_VAL_MBS)
{
mbs = qse_mbsxdup(((qse_awk_val_mbs_t*)v)->val.ptr, ((qse_awk_val_mbs_t*)v)->val.len, rtx->awk->mmgr);
mbs = qse_mbsxdup(((qse_awk_val_mbs_t*)v)->val.ptr, ((qse_awk_val_mbs_t*)v)->val.len, qse_awk_rtx_getmmgr(rtx));
if (!mbs)
{
qse_awk_rtx_seterror (rtx, QSE_AWK_ENOMEM, QSE_NULL, QSE_NULL);
@ -1516,10 +1516,10 @@ qse_mchar_t* qse_awk_rtx_valtombsdupwithcmgr (qse_awk_rtx_t* rtx, const qse_awk_
if (!str0) return QSE_NULL;
#if defined(QSE_CHAR_IS_MCHAR)
mbs = qse_strxdup(str0, len0, rtx->awk->mmgr);
mbs = qse_strxdup(str0, len0, qse_awk_rtx_getmmgr(rtx));
len1 = len0;
#else
mbs = qse_wcsntombsdupwithcmgr(str0, len0, &len1, rtx->awk->mmgr, cmgr);
mbs = qse_wcsntombsdupwithcmgr(str0, len0, &len1, qse_awk_rtx_getmmgr(rtx), cmgr);
#endif
qse_awk_rtx_freevalstr (rtx, v, str0);
if (!mbs)
@ -1546,7 +1546,7 @@ qse_wchar_t* qse_awk_rtx_valtowcsdupwithcmgr (qse_awk_rtx_t* rtx, const qse_awk_
{
qse_size_t mbslen, wcslen;
mbslen = ((qse_awk_val_mbs_t*)v)->val.len;
wcs = qse_mbsntowcsalldupwithcmgr(((qse_awk_val_mbs_t*)v)->val.ptr, &mbslen, &wcslen, rtx->awk->mmgr, cmgr);
wcs = qse_mbsntowcsalldupwithcmgr(((qse_awk_val_mbs_t*)v)->val.ptr, &mbslen, &wcslen, qse_awk_rtx_getmmgr(rtx), cmgr);
if (!wcs)
{
qse_awk_rtx_seterror (rtx, QSE_AWK_ENOMEM, QSE_NULL, QSE_NULL);
@ -1562,9 +1562,9 @@ qse_wchar_t* qse_awk_rtx_valtowcsdupwithcmgr (qse_awk_rtx_t* rtx, const qse_awk_
#if defined(QSE_CHAR_IS_MCHAR)
qse_size_t wcslen, mbslen;
mbslen = ((qse_awk_val_str_t*)v)->val.len;
wcs = qse_mbsntowcsalldupwithcmgr(((qse_awk_val_str_t*)v)->val.ptr, &mbslen, &wcslen, rtx->awk->mmgr, cmgr);
wcs = qse_mbsntowcsalldupwithcmgr(((qse_awk_val_str_t*)v)->val.ptr, &mbslen, &wcslen, qse_awk_rtx_getmmgr(rtx), cmgr);
#else
wcs = qse_strxdup(((qse_awk_val_str_t*)v)->val.ptr, ((qse_awk_val_str_t*)v)->val.len, rtx->awk->mmgr);
wcs = qse_strxdup(((qse_awk_val_str_t*)v)->val.ptr, ((qse_awk_val_str_t*)v)->val.len, qse_awk_rtx_getmmgr(rtx));
#endif
if (!wcs)
{
@ -1589,7 +1589,7 @@ qse_wchar_t* qse_awk_rtx_valtowcsdupwithcmgr (qse_awk_rtx_t* rtx, const qse_awk_
out.type = QSE_AWK_RTX_VALTOSTR_CPLDUP;
if (qse_awk_rtx_valtostr(rtx, v, &out) <= -1) return QSE_NULL;
wcs = qse_mbsntowcsalldupwithcmgr(out.u.cpldup.ptr, &out.u.cpldup.len, &wcslen, rtx->awk->mmgr, cmgr);
wcs = qse_mbsntowcsalldupwithcmgr(out.u.cpldup.ptr, &out.u.cpldup.len, &wcslen, qse_awk_rtx_getmmgr(rtx), cmgr);
qse_awk_rtx_freemem (rtx, out.u.cpldup.ptr);
if (!wcs)
{

View File

@ -30,7 +30,7 @@ static qse_ssize_t handle_console (
qse_char_t* data,
qse_size_t count)
{
console_t* con = qse_awk_rtx_getxtnstd (rtx);
console_t* con = qse_awk_rtx_getxtn(rtx);
/* this function is called separately for the console input and console
* output. however, since i don't maintain underlying resources like
@ -129,7 +129,7 @@ static int awk_main (int argc, qse_char_t* argv[])
}
/* get the pointer to the extension area. */
con = (console_t*)qse_awk_rtx_getxtnstd (rtx);
con = (console_t*)qse_awk_rtx_getxtn(rtx);
/* initialize fields that require non-zero values.
* the entire extension area was initialized to zeros
* when it was created. */

View File

@ -36,7 +36,7 @@ static int awk_main (int argc, qse_char_t* argv[])
/* add global variables G1, G2, and G3. store the IDs to the extension
* area. the extension area is used for demonstration. there is no special
* need to use it when adding global variables. */
ginfo = qse_awk_getxtnstd (awk);
ginfo = qse_awk_getxtn(awk);
for (i = 0; i < QSE_COUNTOF(ginfo->g); i++)
{
qse_char_t name[] = QSE_T("GX");

View File

@ -39,7 +39,8 @@ static qse_ssize_t new_pipe_handler (
qse_char_t* data, qse_size_t size)
{
struct rtx_xtn_t* xtn;
xtn = qse_awk_rtx_getxtnstd (rtx);
xtn = qse_awk_rtx_getxtn(rtx);
if (cmd == QSE_AWK_RIO_OPEN)
qse_fprintf (QSE_STDERR, QSE_T("LOG: Executing [%s] for piping\n"), riod->name);
@ -55,7 +56,7 @@ static void extend_pipe_handler (qse_awk_rtx_t* rtx)
struct rtx_xtn_t* xtn;
qse_awk_rio_t rio;
xtn = qse_awk_rtx_getxtnstd (rtx);
xtn = qse_awk_rtx_getxtn(rtx);
/* get the previous handler functions */
qse_awk_rtx_getrio (rtx, &rio);