cleaned up code
This commit is contained in:
@ -19,6 +19,7 @@
|
||||
#include <qse/awk/Awk.hpp>
|
||||
#include <qse/cmn/str.h>
|
||||
#include "../cmn/mem.h"
|
||||
#include "awk.h"
|
||||
|
||||
#include <qse/utl/stdio.h>
|
||||
/////////////////////////////////
|
||||
@ -83,7 +84,7 @@ void Awk::RIO::setHandle (void* handle)
|
||||
|
||||
Awk::RIO::operator Awk::Awk* () const
|
||||
{
|
||||
rxtn_t* rxtn = (rxtn_t*) qse_awk_rtx_getxtn (this->rtx);
|
||||
rxtn_t* rxtn = (rxtn_t*) QSE_XTN (this->rtx);
|
||||
return rxtn->run->awk;
|
||||
}
|
||||
|
||||
@ -909,13 +910,11 @@ void Awk::Return::clear ()
|
||||
// Awk::Run
|
||||
//////////////////////////////////////////////////////////////////
|
||||
|
||||
Awk::Run::Run (Awk* awk):
|
||||
awk (awk), run (QSE_NULL), callbackFailed (false)
|
||||
Awk::Run::Run (Awk* awk): awk (awk), run (QSE_NULL)
|
||||
{
|
||||
}
|
||||
|
||||
Awk::Run::Run (Awk* awk, rtx_t* run):
|
||||
awk (awk), run (run), callbackFailed (false), data (QSE_NULL)
|
||||
Awk::Run::Run (Awk* awk, rtx_t* run): awk (awk), run (run), data (QSE_NULL)
|
||||
{
|
||||
QSE_ASSERT (this->run != QSE_NULL);
|
||||
}
|
||||
@ -1077,13 +1076,6 @@ Awk::Awk (): awk (QSE_NULL), functionMap (QSE_NULL),
|
||||
mmgr.realloc = reallocMem;
|
||||
mmgr.free = freeMem;
|
||||
mmgr.data = this;
|
||||
|
||||
ccls.is = isType;
|
||||
ccls.to = transCase;
|
||||
ccls.data = this;
|
||||
|
||||
prm.pow = pow;
|
||||
prm.sprintf = sprintf;
|
||||
}
|
||||
|
||||
Awk::~Awk ()
|
||||
@ -1196,7 +1188,13 @@ int Awk::open ()
|
||||
{
|
||||
QSE_ASSERT (awk == QSE_NULL && functionMap == QSE_NULL);
|
||||
|
||||
awk = qse_awk_open (&mmgr, QSE_SIZEOF(xtn_t), &ccls);
|
||||
qse_awk_prm_t prm;
|
||||
prm.pow = pow;
|
||||
prm.sprintf = sprintf;
|
||||
prm.isccls = isType;
|
||||
prm.toccls = transCase;
|
||||
|
||||
awk = qse_awk_open (&mmgr, QSE_SIZEOF(xtn_t), &prm);
|
||||
if (awk == QSE_NULL)
|
||||
{
|
||||
setError (ERR_NOMEM);
|
||||
@ -1204,11 +1202,9 @@ int Awk::open ()
|
||||
}
|
||||
|
||||
// associate this Awk object with the underlying awk object
|
||||
xtn_t* xtn = (xtn_t*)qse_awk_getxtn (awk);
|
||||
xtn_t* xtn = (xtn_t*) QSE_XTN (awk);
|
||||
xtn->awk = this;
|
||||
|
||||
qse_awk_setprm (awk, &prm);
|
||||
|
||||
//functionMap = qse_map_open (
|
||||
// this, 512, 70, freeFunctionMapValue, QSE_NULL,
|
||||
// qse_awk_getmmgr(awk));
|
||||
@ -1223,7 +1219,7 @@ int Awk::open ()
|
||||
return -1;
|
||||
}
|
||||
|
||||
*(Awk**)qse_map_getxtn(functionMap) = this;
|
||||
*(Awk**)QSE_XTN(functionMap) = this;
|
||||
qse_map_setcopier (functionMap, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setfreeer (functionMap, QSE_MAP_VAL, freeFunctionMapValue);
|
||||
qse_map_setscale (functionMap, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
|
||||
@ -1415,7 +1411,7 @@ int Awk::run (const char_t** args, size_t nargs)
|
||||
{
|
||||
runctx.run = rtx;
|
||||
|
||||
rxtn_t* rxtn = (rxtn_t*) qse_awk_rtx_getxtn (rtx);
|
||||
rxtn_t* rxtn = (rxtn_t*) QSE_XTN (rtx);
|
||||
rxtn->run = &runctx;
|
||||
|
||||
if (runCallback) qse_awk_rtx_setrcb (rtx, &rcb);
|
||||
@ -1581,15 +1577,6 @@ void Awk::disableRunCallback ()
|
||||
runCallback = false;
|
||||
}
|
||||
|
||||
bool Awk::onRunStart (Run& run)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void Awk::onRunEnd (Run& run)
|
||||
{
|
||||
}
|
||||
|
||||
bool Awk::onRunEnter (Run& run)
|
||||
{
|
||||
return true;
|
||||
@ -1604,45 +1591,50 @@ void Awk::onRunStatement (Run& run, size_t line)
|
||||
}
|
||||
|
||||
Awk::ssize_t Awk::sourceReader (
|
||||
awk_t* awk, int cmd, char_t* data, size_t count)
|
||||
awk_t* awk, qse_awk_sio_cmd_t cmd, char_t* data, size_t count)
|
||||
{
|
||||
xtn_t* xtn = (xtn_t*) qse_awk_getxtn (awk);
|
||||
xtn_t* xtn = (xtn_t*) QSE_XTN (awk);
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
case QSE_AWK_IO_OPEN:
|
||||
case QSE_AWK_SIO_OPEN:
|
||||
return xtn->awk->openSource (xtn->awk->sourceIn);
|
||||
case QSE_AWK_IO_CLOSE:
|
||||
case QSE_AWK_SIO_CLOSE:
|
||||
return xtn->awk->closeSource (xtn->awk->sourceIn);
|
||||
case QSE_AWK_IO_READ:
|
||||
case QSE_AWK_SIO_READ:
|
||||
return xtn->awk->readSource (xtn->awk->sourceIn, data, count);
|
||||
case QSE_AWK_SIO_WRITE:
|
||||
return -1;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
Awk::ssize_t Awk::sourceWriter (
|
||||
awk_t* awk, int cmd, char_t* data, size_t count)
|
||||
awk_t* awk, qse_awk_sio_cmd_t cmd, char_t* data, size_t count)
|
||||
{
|
||||
xtn_t* xtn = (xtn_t*) qse_awk_getxtn (awk);
|
||||
xtn_t* xtn = (xtn_t*) QSE_XTN (awk);
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
case QSE_AWK_IO_OPEN:
|
||||
case QSE_AWK_SIO_OPEN:
|
||||
return xtn->awk->openSource (xtn->awk->sourceOut);
|
||||
case QSE_AWK_IO_CLOSE:
|
||||
case QSE_AWK_SIO_CLOSE:
|
||||
return xtn->awk->closeSource (xtn->awk->sourceOut);
|
||||
case QSE_AWK_IO_WRITE:
|
||||
case QSE_AWK_SIO_WRITE:
|
||||
return xtn->awk->writeSource (xtn->awk->sourceOut, data, count);
|
||||
case QSE_AWK_SIO_READ:
|
||||
return -1;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
Awk::ssize_t Awk::pipeHandler (
|
||||
rtx_t* rtx, int cmd, riod_t* riod, char_t* data, size_t count)
|
||||
rtx_t* rtx, qse_awk_rio_cmd_t cmd, riod_t* riod,
|
||||
char_t* data, size_t count)
|
||||
{
|
||||
rxtn_t* rxtn = (rxtn_t*) qse_awk_rtx_getxtn (rtx);
|
||||
rxtn_t* rxtn = (rxtn_t*) QSE_XTN (rtx);
|
||||
Awk* awk = rxtn->run->awk;
|
||||
|
||||
QSE_ASSERT ((riod->type & 0xFF) == QSE_AWK_RIO_PIPE);
|
||||
@ -1651,20 +1643,20 @@ Awk::ssize_t Awk::pipeHandler (
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
case QSE_AWK_IO_OPEN:
|
||||
case QSE_AWK_RIO_OPEN:
|
||||
return awk->openPipe (pipe);
|
||||
case QSE_AWK_IO_CLOSE:
|
||||
case QSE_AWK_RIO_CLOSE:
|
||||
return awk->closePipe (pipe);
|
||||
|
||||
case QSE_AWK_IO_READ:
|
||||
case QSE_AWK_RIO_READ:
|
||||
return awk->readPipe (pipe, data, count);
|
||||
case QSE_AWK_IO_WRITE:
|
||||
case QSE_AWK_RIO_WRITE:
|
||||
return awk->writePipe (pipe, data, count);
|
||||
|
||||
case QSE_AWK_IO_FLUSH:
|
||||
case QSE_AWK_RIO_FLUSH:
|
||||
return awk->flushPipe (pipe);
|
||||
|
||||
case QSE_AWK_IO_NEXT:
|
||||
case QSE_AWK_RIO_NEXT:
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1672,9 +1664,10 @@ Awk::ssize_t Awk::pipeHandler (
|
||||
}
|
||||
|
||||
Awk::ssize_t Awk::fileHandler (
|
||||
rtx_t* rtx, int cmd, riod_t* riod, char_t* data, size_t count)
|
||||
rtx_t* rtx, qse_awk_rio_cmd_t cmd, riod_t* riod,
|
||||
char_t* data, size_t count)
|
||||
{
|
||||
rxtn_t* rxtn = (rxtn_t*) qse_awk_rtx_getxtn (rtx);
|
||||
rxtn_t* rxtn = (rxtn_t*) QSE_XTN (rtx);
|
||||
Awk* awk = rxtn->run->awk;
|
||||
|
||||
QSE_ASSERT ((riod->type & 0xFF) == QSE_AWK_RIO_FILE);
|
||||
@ -1683,20 +1676,20 @@ Awk::ssize_t Awk::fileHandler (
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
case QSE_AWK_IO_OPEN:
|
||||
case QSE_AWK_RIO_OPEN:
|
||||
return awk->openFile (file);
|
||||
case QSE_AWK_IO_CLOSE:
|
||||
case QSE_AWK_RIO_CLOSE:
|
||||
return awk->closeFile (file);
|
||||
|
||||
case QSE_AWK_IO_READ:
|
||||
case QSE_AWK_RIO_READ:
|
||||
return awk->readFile (file, data, count);
|
||||
case QSE_AWK_IO_WRITE:
|
||||
case QSE_AWK_RIO_WRITE:
|
||||
return awk->writeFile (file, data, count);
|
||||
|
||||
case QSE_AWK_IO_FLUSH:
|
||||
case QSE_AWK_RIO_FLUSH:
|
||||
return awk->flushFile (file);
|
||||
|
||||
case QSE_AWK_IO_NEXT:
|
||||
case QSE_AWK_RIO_NEXT:
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1704,9 +1697,10 @@ Awk::ssize_t Awk::fileHandler (
|
||||
}
|
||||
|
||||
Awk::ssize_t Awk::consoleHandler (
|
||||
rtx_t* rtx, int cmd, riod_t* riod, char_t* data, size_t count)
|
||||
rtx_t* rtx, qse_awk_rio_cmd_t cmd, riod_t* riod,
|
||||
char_t* data, size_t count)
|
||||
{
|
||||
rxtn_t* rxtn = (rxtn_t*) qse_awk_rtx_getxtn (rtx);
|
||||
rxtn_t* rxtn = (rxtn_t*) QSE_XTN (rtx);
|
||||
Awk* awk = rxtn->run->awk;
|
||||
|
||||
QSE_ASSERT ((riod->type & 0xFF) == QSE_AWK_RIO_CONSOLE);
|
||||
@ -1715,19 +1709,19 @@ Awk::ssize_t Awk::consoleHandler (
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
case QSE_AWK_IO_OPEN:
|
||||
case QSE_AWK_RIO_OPEN:
|
||||
return awk->openConsole (console);
|
||||
case QSE_AWK_IO_CLOSE:
|
||||
case QSE_AWK_RIO_CLOSE:
|
||||
return awk->closeConsole (console);
|
||||
|
||||
case QSE_AWK_IO_READ:
|
||||
case QSE_AWK_RIO_READ:
|
||||
return awk->readConsole (console, data, count);
|
||||
case QSE_AWK_IO_WRITE:
|
||||
case QSE_AWK_RIO_WRITE:
|
||||
return awk->writeConsole (console, data, count);
|
||||
|
||||
case QSE_AWK_IO_FLUSH:
|
||||
case QSE_AWK_RIO_FLUSH:
|
||||
return awk->flushConsole (console);
|
||||
case QSE_AWK_IO_NEXT:
|
||||
case QSE_AWK_RIO_NEXT:
|
||||
return awk->nextConsole (console);
|
||||
}
|
||||
|
||||
@ -1736,57 +1730,35 @@ Awk::ssize_t Awk::consoleHandler (
|
||||
|
||||
int Awk::functionHandler (rtx_t* rtx, const char_t* name, size_t len)
|
||||
{
|
||||
rxtn_t* rxtn = (rxtn_t*) qse_awk_rtx_getxtn (rtx);
|
||||
rxtn_t* rxtn = (rxtn_t*) QSE_XTN (rtx);
|
||||
return rxtn->run->awk->dispatchFunction (rxtn->run, name, len);
|
||||
}
|
||||
|
||||
void Awk::freeFunctionMapValue (map_t* map, void* dptr, size_t dlen)
|
||||
{
|
||||
//Awk* awk = (Awk*)owner;
|
||||
Awk* awk = *(Awk**)qse_map_getxtn(map);
|
||||
Awk* awk = *(Awk**) QSE_XTN (map);
|
||||
qse_awk_free (awk->awk, dptr);
|
||||
}
|
||||
|
||||
int Awk::onRunStart (rtx_t* run, void* data)
|
||||
{
|
||||
Run* r = (Run*)data;
|
||||
r->callbackFailed = false;
|
||||
return r->awk->onRunStart(*r)? 0: -1;
|
||||
}
|
||||
|
||||
void Awk::onRunEnd (rtx_t* run, int errnum, void* data)
|
||||
{
|
||||
Run* r = (Run*)data;
|
||||
|
||||
if (errnum == ERR_NOERR && r->callbackFailed)
|
||||
{
|
||||
qse_awk_rtx_seterrnum (r->run, ERR_NOMEM);
|
||||
}
|
||||
|
||||
r->awk->onRunEnd (*r);
|
||||
}
|
||||
|
||||
int Awk::onRunEnter (rtx_t* run, void* data)
|
||||
{
|
||||
Run* r = (Run*)data;
|
||||
if (r->callbackFailed) return false;
|
||||
return r->awk->onRunEnter(*r)? 0: -1;
|
||||
}
|
||||
|
||||
void Awk::onRunExit (rtx_t* run, val_t* ret, void* data)
|
||||
{
|
||||
Run* r = (Run*)data;
|
||||
if (r->callbackFailed) return;
|
||||
|
||||
Argument x (r);
|
||||
if (x.init (ret) == -1) r->callbackFailed = true;
|
||||
if (x.init (ret) == -1)
|
||||
qse_awk_rtx_seterrnum (r->run, ERR_NOMEM);
|
||||
else r->awk->onRunExit (*r, x);
|
||||
}
|
||||
|
||||
void Awk::onRunStatement (rtx_t* run, size_t line, void* data)
|
||||
{
|
||||
Run* r = (Run*)data;
|
||||
if (r->callbackFailed) return;
|
||||
r->awk->onRunStatement (*r, line);
|
||||
}
|
||||
|
||||
@ -1805,26 +1777,28 @@ void Awk::freeMem (void* data, void* ptr)
|
||||
((Awk*)data)->freeMem (ptr);
|
||||
}
|
||||
|
||||
Awk::bool_t Awk::isType (void* data, cint_t c, qse_ccls_type_t type)
|
||||
Awk::bool_t Awk::isType (awk_t* awk, cint_t c, qse_ccls_id_t type)
|
||||
{
|
||||
return ((Awk*)data)->isType (c, (ccls_type_t)type);
|
||||
xtn_t* xtn = (xtn_t*) QSE_XTN (awk);
|
||||
return xtn->awk->isType (c, (ccls_id_t)type);
|
||||
}
|
||||
|
||||
Awk::cint_t Awk::transCase (void* data, cint_t c, qse_ccls_type_t type)
|
||||
Awk::cint_t Awk::transCase (awk_t* awk, cint_t c, qse_ccls_id_t type)
|
||||
{
|
||||
return ((Awk*)data)->transCase (c, (ccls_type_t)type);
|
||||
xtn_t* xtn = (xtn_t*) QSE_XTN (awk);
|
||||
return xtn->awk->transCase (c, (ccls_id_t)type);
|
||||
}
|
||||
|
||||
Awk::real_t Awk::pow (awk_t* awk, real_t x, real_t y)
|
||||
{
|
||||
xtn_t* xtn = (xtn_t*) qse_awk_getxtn (awk);
|
||||
xtn_t* xtn = (xtn_t*) QSE_XTN (awk);
|
||||
return xtn->awk->pow (x, y);
|
||||
}
|
||||
|
||||
int Awk::sprintf (awk_t* awk, char_t* buf, size_t size,
|
||||
const char_t* fmt, ...)
|
||||
{
|
||||
xtn_t* xtn = (xtn_t*) qse_awk_getxtn (awk);
|
||||
xtn_t* xtn = (xtn_t*) QSE_XTN (awk);
|
||||
|
||||
va_list ap;
|
||||
va_start (ap, fmt);
|
||||
|
@ -412,14 +412,14 @@ void StdAwk::freeMem (void* ptr)
|
||||
}
|
||||
|
||||
// character handling primitive
|
||||
Awk::bool_t StdAwk::isType (cint_t c, ccls_type_t type)
|
||||
Awk::bool_t StdAwk::isType (cint_t c, ccls_id_t type)
|
||||
{
|
||||
return qse_ccls_is (c, (qse_ccls_type_t)type);
|
||||
return qse_ccls_is (c, (qse_ccls_id_t)type);
|
||||
}
|
||||
|
||||
Awk::cint_t StdAwk::transCase (cint_t c, ccls_type_t type)
|
||||
Awk::cint_t StdAwk::transCase (cint_t c, ccls_id_t type)
|
||||
{
|
||||
return qse_ccls_to (c, (qse_ccls_type_t)type);
|
||||
return qse_ccls_to (c, (qse_ccls_id_t)type);
|
||||
}
|
||||
|
||||
// miscellaneous primitive
|
||||
|
@ -35,7 +35,7 @@
|
||||
|
||||
static void free_fun (qse_map_t* map, void* vptr, qse_size_t vlen)
|
||||
{
|
||||
qse_awk_t* awk = *(qse_awk_t**)qse_map_getxtn(map);
|
||||
qse_awk_t* awk = *(qse_awk_t**)QSE_XTN(map);
|
||||
qse_awk_fun_t* f = (qse_awk_fun_t*)vptr;
|
||||
|
||||
/* f->name doesn't have to be freed */
|
||||
@ -47,13 +47,13 @@ static void free_fun (qse_map_t* map, void* vptr, qse_size_t vlen)
|
||||
|
||||
static void free_fnc (qse_map_t* map, void* vptr, qse_size_t vlen)
|
||||
{
|
||||
qse_awk_t* awk = *(qse_awk_t**)qse_map_getxtn(map);
|
||||
qse_awk_t* awk = *(qse_awk_t**)QSE_XTN(map);
|
||||
qse_awk_fnc_t* f = (qse_awk_fnc_t*)vptr;
|
||||
|
||||
QSE_AWK_FREE (awk, f);
|
||||
}
|
||||
|
||||
qse_awk_t* qse_awk_open (qse_mmgr_t* mmgr, qse_size_t xtn, qse_ccls_t* ccls)
|
||||
qse_awk_t* qse_awk_open (qse_mmgr_t* mmgr, qse_size_t xtn, qse_awk_prm_t* prm)
|
||||
{
|
||||
qse_awk_t* awk;
|
||||
|
||||
@ -67,19 +67,34 @@ qse_awk_t* qse_awk_open (qse_mmgr_t* mmgr, qse_size_t xtn, qse_ccls_t* ccls)
|
||||
if (mmgr == QSE_NULL) return QSE_NULL;
|
||||
}
|
||||
|
||||
/* allocate the object */
|
||||
awk = QSE_MMGR_ALLOC (mmgr, QSE_SIZEOF(qse_awk_t) + xtn);
|
||||
if (awk == QSE_NULL) return QSE_NULL;
|
||||
|
||||
/* zero out the object */
|
||||
QSE_MEMSET (awk, 0, QSE_SIZEOF(qse_awk_t) + xtn);
|
||||
|
||||
/* remember the memory manager */
|
||||
awk->mmgr = mmgr;
|
||||
awk->ccls = ccls;
|
||||
|
||||
/* progagate the primitive functions */
|
||||
QSE_ASSERT (prm->pow != QSE_NULL);
|
||||
QSE_ASSERT (prm->sprintf != QSE_NULL);
|
||||
QSE_ASSERT (prm->isccls != QSE_NULL);
|
||||
QSE_ASSERT (prm->toccls != QSE_NULL);
|
||||
awk->prm = *prm;
|
||||
|
||||
/* build a character classifier from the primitive functions */
|
||||
awk->ccls.is = (qse_ccls_is_t) prm->isccls;
|
||||
awk->ccls.to = (qse_ccls_to_t) prm->toccls;
|
||||
awk->ccls.data = awk;
|
||||
|
||||
awk->token.name = qse_str_open (mmgr, 0, 128);
|
||||
if (awk->token.name == QSE_NULL) goto oops;
|
||||
|
||||
awk->wtab = qse_map_open (mmgr, QSE_SIZEOF(awk), 512, 70);
|
||||
if (awk->wtab == QSE_NULL) goto oops;
|
||||
*(qse_awk_t**)qse_map_getxtn(awk->wtab) = awk;
|
||||
*(qse_awk_t**)QSE_XTN(awk->wtab) = awk;
|
||||
qse_map_setcopier (awk->wtab, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setcopier (awk->wtab, QSE_MAP_VAL, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setscale (awk->wtab, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
|
||||
@ -87,7 +102,7 @@ qse_awk_t* qse_awk_open (qse_mmgr_t* mmgr, qse_size_t xtn, qse_ccls_t* ccls)
|
||||
|
||||
awk->rwtab = qse_map_open (mmgr, QSE_SIZEOF(awk), 512, 70);
|
||||
if (awk->rwtab == QSE_NULL) goto oops;
|
||||
*(qse_awk_t**)qse_map_getxtn(awk->rwtab) = awk;
|
||||
*(qse_awk_t**)QSE_XTN(awk->rwtab) = awk;
|
||||
qse_map_setcopier (awk->rwtab, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setcopier (awk->rwtab, QSE_MAP_VAL, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setscale (awk->rwtab, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
|
||||
@ -96,21 +111,21 @@ qse_awk_t* qse_awk_open (qse_mmgr_t* mmgr, qse_size_t xtn, qse_ccls_t* ccls)
|
||||
/* TODO: initial map size?? */
|
||||
awk->tree.funs = qse_map_open (mmgr, QSE_SIZEOF(awk), 512, 70);
|
||||
if (awk->tree.funs == QSE_NULL) goto oops;
|
||||
*(qse_awk_t**)qse_map_getxtn(awk->tree.funs) = awk;
|
||||
*(qse_awk_t**)QSE_XTN(awk->tree.funs) = awk;
|
||||
qse_map_setcopier (awk->tree.funs, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setfreeer (awk->tree.funs, QSE_MAP_VAL, free_fun);
|
||||
qse_map_setscale (awk->tree.funs, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
|
||||
|
||||
awk->parse.funs = qse_map_open (mmgr, QSE_SIZEOF(awk), 256, 70);
|
||||
if (awk->parse.funs == QSE_NULL) goto oops;
|
||||
*(qse_awk_t**)qse_map_getxtn(awk->parse.funs) = awk;
|
||||
*(qse_awk_t**)QSE_XTN(awk->parse.funs) = awk;
|
||||
qse_map_setcopier (awk->parse.funs, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setcopier (awk->parse.funs, QSE_MAP_VAL, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setscale (awk->parse.funs, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
|
||||
|
||||
awk->parse.named = qse_map_open (mmgr, QSE_SIZEOF(awk), 256, 70);
|
||||
if (awk->parse.named == QSE_NULL) goto oops;
|
||||
*(qse_awk_t**)qse_map_getxtn(awk->parse.named) = awk;
|
||||
*(qse_awk_t**)QSE_XTN(awk->parse.named) = awk;
|
||||
qse_map_setcopier (awk->parse.named, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setcopier (awk->parse.named, QSE_MAP_VAL, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setscale (awk->parse.named, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
|
||||
@ -123,15 +138,15 @@ qse_awk_t* qse_awk_open (qse_mmgr_t* mmgr, qse_size_t xtn, qse_ccls_t* ccls)
|
||||
awk->parse.lcls == QSE_NULL ||
|
||||
awk->parse.params == QSE_NULL) goto oops;
|
||||
|
||||
*(qse_awk_t**)qse_lda_getxtn(awk->parse.gbls) = awk;
|
||||
*(qse_awk_t**)QSE_XTN(awk->parse.gbls) = awk;
|
||||
qse_lda_setcopier (awk->parse.gbls, QSE_LDA_COPIER_INLINE);
|
||||
qse_lda_setscale (awk->parse.gbls, QSE_SIZEOF(qse_char_t));
|
||||
|
||||
*(qse_awk_t**)qse_lda_getxtn(awk->parse.lcls) = awk;
|
||||
*(qse_awk_t**)QSE_XTN(awk->parse.lcls) = awk;
|
||||
qse_lda_setcopier (awk->parse.lcls, QSE_LDA_COPIER_INLINE);
|
||||
qse_lda_setscale (awk->parse.lcls, QSE_SIZEOF(qse_char_t));
|
||||
|
||||
*(qse_awk_t**)qse_lda_getxtn(awk->parse.params) = awk;
|
||||
*(qse_awk_t**)QSE_XTN(awk->parse.params) = awk;
|
||||
qse_lda_setcopier (awk->parse.params, QSE_LDA_COPIER_INLINE);
|
||||
qse_lda_setscale (awk->parse.params, QSE_SIZEOF(qse_char_t));
|
||||
|
||||
@ -169,7 +184,7 @@ qse_awk_t* qse_awk_open (qse_mmgr_t* mmgr, qse_size_t xtn, qse_ccls_t* ccls)
|
||||
awk->fnc.sys = QSE_NULL;
|
||||
awk->fnc.user = qse_map_open (mmgr, QSE_SIZEOF(awk), 512, 70);
|
||||
if (awk->fnc.user == QSE_NULL) goto oops;
|
||||
*(qse_awk_t**)qse_map_getxtn(awk->fnc.user) = awk;
|
||||
*(qse_awk_t**)QSE_XTN(awk->fnc.user) = awk;
|
||||
qse_map_setcopier (awk->fnc.user, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setfreeer (awk->fnc.user, QSE_MAP_VAL, free_fnc);
|
||||
qse_map_setscale (awk->fnc.user, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
|
||||
@ -329,28 +344,14 @@ void qse_awk_setmmgr (qse_awk_t* awk, qse_mmgr_t* mmgr)
|
||||
awk->mmgr = mmgr;
|
||||
}
|
||||
|
||||
qse_ccls_t* qse_awk_getccls (qse_awk_t* awk)
|
||||
{
|
||||
return awk->ccls;
|
||||
}
|
||||
|
||||
void qse_awk_setccls (qse_awk_t* awk, qse_ccls_t* ccls)
|
||||
{
|
||||
QSE_ASSERT (ccls->is != QSE_NULL);
|
||||
QSE_ASSERT (ccls->to != QSE_NULL);
|
||||
awk->ccls = ccls;
|
||||
}
|
||||
|
||||
qse_awk_prm_t* qse_awk_getprm (qse_awk_t* awk)
|
||||
{
|
||||
return &awk->prm;
|
||||
}
|
||||
|
||||
void qse_awk_setprm (qse_awk_t* awk, qse_awk_prm_t* prm)
|
||||
qse_ccls_t* qse_awk_getccls (qse_awk_t* awk)
|
||||
{
|
||||
QSE_ASSERT (prm->pow != QSE_NULL);
|
||||
QSE_ASSERT (prm->sprintf != QSE_NULL);
|
||||
awk->prm = *prm;
|
||||
return &awk->ccls;
|
||||
}
|
||||
|
||||
int qse_awk_getoption (qse_awk_t* awk)
|
||||
@ -446,20 +447,3 @@ int qse_awk_setword (qse_awk_t* awk,
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* TODO: qse_awk_setrexfns... */
|
||||
int qse_awk_setrexfns (qse_awk_t* awk, qse_awk_rexfns_t* rexfns)
|
||||
{
|
||||
if (rexfns->build == QSE_NULL ||
|
||||
rexfns->match == QSE_NULL ||
|
||||
rexfns->free == QSE_NULL ||
|
||||
rexfns->isempty == QSE_NULL)
|
||||
{
|
||||
SETERR (awk, QSE_AWK_EINVAL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
awk->rexfns = rexfns;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
@ -46,19 +46,19 @@ typedef struct qse_awk_tree_t qse_awk_tree_t;
|
||||
#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_ISUPPER(awk,c) QSE_CCLS_ISUPPER((awk)->ccls,c)
|
||||
#define QSE_AWK_ISLOWER(awk,c) QSE_CCLS_ISLOWER((awk)->ccls,c)
|
||||
#define QSE_AWK_ISALPHA(awk,c) QSE_CCLS_ISALPHA((awk)->ccls,c)
|
||||
#define QSE_AWK_ISDIGIT(awk,c) QSE_CCLS_ISDIGIT((awk)->ccls,c)
|
||||
#define QSE_AWK_ISXDIGIT(awk,c) QSE_CCLS_ISXDIGIT((awk)->ccls,c)
|
||||
#define QSE_AWK_ISALNUM(awk,c) QSE_CCLS_ISALNUM((awk)->ccls,c)
|
||||
#define QSE_AWK_ISSPACE(awk,c) QSE_CCLS_ISSPACE((awk)->ccls,c)
|
||||
#define QSE_AWK_ISPRINT(awk,c) QSE_CCLS_ISPRINT((awk)->ccls,c)
|
||||
#define QSE_AWK_ISGRAPH(awk,c) QSE_CCLS_ISGRAPH((awk)->ccls,c)
|
||||
#define QSE_AWK_ISCNTRL(awk,c) QSE_CCLS_ISCNTRL((awk)->ccls,c)
|
||||
#define QSE_AWK_ISPUNCT(awk,c) QSE_CCLS_ISPUNCT((awk)->ccls,c)
|
||||
#define QSE_AWK_TOUPPER(awk,c) QSE_CCLS_TOUPPER((awk)->ccls,c)
|
||||
#define QSE_AWK_TOLOWER(awk,c) QSE_CCLS_TOLOWER((awk)->ccls,c)
|
||||
#define QSE_AWK_ISUPPER(awk,c) awk->prm.isccls(awk,c,QSE_CCLS_UPPER)
|
||||
#define QSE_AWK_ISLOWER(awk,c) awk->prm.isccls(awk,c,QSE_CCLS_UPPER)
|
||||
#define QSE_AWK_ISALPHA(awk,c) awk->prm.isccls(awk,c,QSE_CCLS_ALPHA)
|
||||
#define QSE_AWK_ISDIGIT(awk,c) awk->prm.isccls(awk,c,QSE_CCLS_DIGIT)
|
||||
#define QSE_AWK_ISXDIGIT(awk,c) awk->prm.isccls(awk,c,QSE_CCLS_XDIGIT)
|
||||
#define QSE_AWK_ISALNUM(awk,c) awk->prm.isccls(awk,c,QSE_CCLS_ALNUM)
|
||||
#define QSE_AWK_ISSPACE(awk,c) awk->prm.isccls(awk,c,QSE_CCLS_SPACE)
|
||||
#define QSE_AWK_ISPRINT(awk,c) awk->prm.isccls(awk,c,QSE_CCLS_PRINT)
|
||||
#define QSE_AWK_ISGRAPH(awk,c) awk->prm.isccls(awk,c,QSE_CCLS_GRAPH)
|
||||
#define QSE_AWK_ISCNTRL(awk,c) awk->prm.isccls(awk,c,QSE_CCLS_CNTRL)
|
||||
#define QSE_AWK_ISPUNCT(awk,c) awk->prm.isccls(awk,c,QSE_CCLS_PUNCT)
|
||||
#define QSE_AWK_TOUPPER(awk,c) awk->prm.toccls(awk,c,QSE_CCLS_UPPER)
|
||||
#define QSE_AWK_TOLOWER(awk,c) awk->prm.toccls(awk,c,QSE_CCLS_LOWER)
|
||||
|
||||
#define QSE_AWK_STRDUP(awk,str) (qse_strdup(str,(awk)->mmgr))
|
||||
#define QSE_AWK_STRXDUP(awk,str,len) (qse_strxdup(str,len,(awk)->mmgr))
|
||||
@ -85,10 +85,17 @@ struct qse_awk_tree_t
|
||||
|
||||
struct qse_awk_t
|
||||
{
|
||||
/* memory manager */
|
||||
qse_mmgr_t* mmgr;
|
||||
qse_ccls_t* ccls;
|
||||
|
||||
/* primitive functions */
|
||||
qse_awk_prm_t prm;
|
||||
|
||||
/* character classifier composed from primitive functions.
|
||||
* it is used in calling some functions that require a character
|
||||
* classifier */
|
||||
qse_ccls_t ccls;
|
||||
|
||||
/* options */
|
||||
int option;
|
||||
|
||||
@ -97,9 +104,6 @@ struct qse_awk_t
|
||||
/* reverse word table */
|
||||
qse_map_t* rwtab;
|
||||
|
||||
/* regular expression processing routines */
|
||||
qse_awk_rexfns_t* rexfns;
|
||||
|
||||
/* parse tree */
|
||||
qse_awk_tree_t tree;
|
||||
|
||||
|
@ -961,7 +961,7 @@ int qse_awk_matchrex (
|
||||
int err, x;
|
||||
|
||||
x = qse_matchrex (
|
||||
awk->mmgr, awk->ccls, awk->rex.depth.max.match,
|
||||
awk->mmgr, &awk->ccls, awk->rex.depth.max.match,
|
||||
code, option, str, len, match_ptr, match_len, &err);
|
||||
if (x < 0) *errnum = QSE_AWK_REXERRTOERR(err);
|
||||
return x;
|
||||
|
@ -469,8 +469,6 @@ int qse_awk_parse (qse_awk_t* awk, qse_awk_sio_t* sio)
|
||||
{
|
||||
int n;
|
||||
|
||||
QSE_ASSERTX (awk->ccls != QSE_NULL, "Call qse_setccls() first");
|
||||
|
||||
QSE_ASSERTX (
|
||||
sio != QSE_NULL && sio->in != QSE_NULL,
|
||||
"the source code input stream must be provided at least");
|
||||
@ -496,7 +494,7 @@ static int parse (qse_awk_t* awk)
|
||||
QSE_ASSERT (awk->src.ios.in != QSE_NULL);
|
||||
|
||||
CLRERR (awk);
|
||||
op = awk->src.ios.in (awk, QSE_AWK_IO_OPEN, QSE_NULL, 0);
|
||||
op = awk->src.ios.in (awk, QSE_AWK_SIO_OPEN, QSE_NULL, 0);
|
||||
if (op <= -1)
|
||||
{
|
||||
/* cannot open the source file.
|
||||
@ -567,7 +565,7 @@ static int parse (qse_awk_t* awk)
|
||||
#undef EXIT_PARSE
|
||||
exit_parse:
|
||||
if (n == 0) CLRERR (awk);
|
||||
if (awk->src.ios.in (awk, QSE_AWK_IO_CLOSE, QSE_NULL, 0) != 0)
|
||||
if (awk->src.ios.in (awk, QSE_AWK_SIO_CLOSE, QSE_NULL, 0) != 0)
|
||||
{
|
||||
if (n == 0)
|
||||
{
|
||||
@ -1421,7 +1419,7 @@ struct check_global_t
|
||||
static qse_lda_walk_t check_global (qse_lda_t* lda, qse_size_t index, void* arg)
|
||||
{
|
||||
qse_cstr_t tmp;
|
||||
qse_awk_t* awk = *(qse_awk_t**)qse_lda_getxtn(lda);
|
||||
qse_awk_t* awk = *(qse_awk_t**)QSE_XTN(lda);
|
||||
check_global_t* cg = (check_global_t*)arg;
|
||||
|
||||
tmp.ptr = QSE_LDA_DPTR(lda,index);
|
||||
@ -5276,7 +5274,7 @@ static int get_char (qse_awk_t* awk)
|
||||
{
|
||||
CLRERR (awk);
|
||||
n = awk->src.ios.in (
|
||||
awk, QSE_AWK_IO_READ,
|
||||
awk, QSE_AWK_SIO_READ,
|
||||
awk->src.shared.buf, QSE_COUNTOF(awk->src.shared.buf)
|
||||
);
|
||||
if (n <= -1)
|
||||
@ -5578,7 +5576,7 @@ static int deparse (qse_awk_t* awk)
|
||||
awk->src.shared.buf_pos = 0;
|
||||
|
||||
CLRERR (awk);
|
||||
op = awk->src.ios.out (awk, QSE_AWK_IO_OPEN, QSE_NULL, 0);
|
||||
op = awk->src.ios.out (awk, QSE_AWK_SIO_OPEN, QSE_NULL, 0);
|
||||
if (op <= -1)
|
||||
{
|
||||
if (ISNOERR(awk)) SETERR (awk, QSE_AWK_ESOUTOP);
|
||||
@ -5783,7 +5781,7 @@ static int deparse (qse_awk_t* awk)
|
||||
|
||||
exit_deparse:
|
||||
if (n == 0) CLRERR (awk);
|
||||
if (awk->src.ios.out (awk, QSE_AWK_IO_CLOSE, QSE_NULL, 0) != 0)
|
||||
if (awk->src.ios.out (awk, QSE_AWK_SIO_CLOSE, QSE_NULL, 0) != 0)
|
||||
{
|
||||
if (n == 0)
|
||||
{
|
||||
@ -5880,7 +5878,7 @@ static int flush_out (qse_awk_t* awk)
|
||||
CLRERR (awk);
|
||||
|
||||
n = awk->src.ios.out (
|
||||
awk, QSE_AWK_IO_WRITE,
|
||||
awk, QSE_AWK_SIO_WRITE,
|
||||
&awk->src.shared.buf[awk->src.shared.buf_pos],
|
||||
awk->src.shared.buf_len - awk->src.shared.buf_pos
|
||||
);
|
||||
|
@ -146,7 +146,6 @@ int qse_awk_rtx_readio (
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*p->rtx = run;*/
|
||||
p->type = (io_type | io_mask);
|
||||
p->mode = io_mode;
|
||||
p->handle = QSE_NULL;
|
||||
@ -161,7 +160,7 @@ int qse_awk_rtx_readio (
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOERR);
|
||||
|
||||
/* request to open the stream */
|
||||
x = handler (run, QSE_AWK_IO_OPEN, p, QSE_NULL, 0);
|
||||
x = handler (run, QSE_AWK_RIO_OPEN, p, QSE_NULL, 0);
|
||||
if (x <= -1)
|
||||
{
|
||||
QSE_AWK_FREE (run->awk, p->name);
|
||||
@ -244,7 +243,7 @@ int qse_awk_rtx_readio (
|
||||
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOERR);
|
||||
|
||||
n = handler (run, QSE_AWK_IO_READ,
|
||||
n = handler (run, QSE_AWK_RIO_READ,
|
||||
p, p->in.buf, QSE_COUNTOF(p->in.buf));
|
||||
if (n <= -1)
|
||||
{
|
||||
@ -503,7 +502,6 @@ int qse_awk_rtx_writeio_str (
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*p->rtx = run;*/
|
||||
p->type = (io_type | io_mask);
|
||||
p->mode = io_mode;
|
||||
p->handle = QSE_NULL;
|
||||
@ -513,7 +511,7 @@ int qse_awk_rtx_writeio_str (
|
||||
p->out.eos = QSE_FALSE;
|
||||
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOERR);
|
||||
n = handler (run, QSE_AWK_IO_OPEN, p, QSE_NULL, 0);
|
||||
n = handler (run, QSE_AWK_RIO_OPEN, p, QSE_NULL, 0);
|
||||
if (n <= -1)
|
||||
{
|
||||
QSE_AWK_FREE (run->awk, p->name);
|
||||
@ -557,7 +555,7 @@ int qse_awk_rtx_writeio_str (
|
||||
while (len > 0)
|
||||
{
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOERR);
|
||||
n = handler (run, QSE_AWK_IO_WRITE, p, str, len);
|
||||
n = handler (run, QSE_AWK_RIO_WRITE, p, str, len);
|
||||
if (n <= -1)
|
||||
{
|
||||
if (run->errnum == QSE_AWK_ENOERR)
|
||||
@ -612,7 +610,7 @@ int qse_awk_rtx_flushio (
|
||||
(name == QSE_NULL || qse_strcmp(p->name,name) == 0))
|
||||
{
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOERR);
|
||||
n = handler (run, QSE_AWK_IO_FLUSH, p, QSE_NULL, 0);
|
||||
n = handler (run, QSE_AWK_RIO_FLUSH, p, QSE_NULL, 0);
|
||||
|
||||
if (n <= -1)
|
||||
{
|
||||
@ -682,7 +680,7 @@ int qse_awk_rtx_nextio_read (
|
||||
}
|
||||
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOERR);
|
||||
n = handler (run, QSE_AWK_IO_NEXT, p, QSE_NULL, 0);
|
||||
n = handler (run, QSE_AWK_RIO_NEXT, p, QSE_NULL, 0);
|
||||
if (n <= -1)
|
||||
{
|
||||
if (run->errnum == QSE_AWK_ENOERR)
|
||||
@ -760,7 +758,7 @@ int qse_awk_rtx_nextio_write (
|
||||
}
|
||||
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOERR);
|
||||
n = handler (run, QSE_AWK_IO_NEXT, p, QSE_NULL, 0);
|
||||
n = handler (run, QSE_AWK_RIO_NEXT, p, QSE_NULL, 0);
|
||||
if (n <= -1)
|
||||
{
|
||||
if (run->errnum == QSE_AWK_ENOERR)
|
||||
@ -819,7 +817,7 @@ int qse_awk_rtx_closio_read (
|
||||
handler = run->rio.handler[p->type & MASK_CLEAR];
|
||||
if (handler != QSE_NULL)
|
||||
{
|
||||
if (handler (run, QSE_AWK_IO_CLOSE, p, QSE_NULL, 0) <= -1)
|
||||
if (handler (run, QSE_AWK_RIO_CLOSE, p, QSE_NULL, 0) <= -1)
|
||||
{
|
||||
/* this is not a run-time error.*/
|
||||
qse_awk_rtx_seterror (run, QSE_AWK_EIOIMPL, 0, QSE_NULL);
|
||||
@ -879,7 +877,7 @@ int qse_awk_rtx_closio_write (
|
||||
if (handler != QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOERR);
|
||||
if (handler (run, QSE_AWK_IO_CLOSE, p, QSE_NULL, 0) <= -1)
|
||||
if (handler (run, QSE_AWK_RIO_CLOSE, p, QSE_NULL, 0) <= -1)
|
||||
{
|
||||
if (run->errnum == QSE_AWK_ENOERR)
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_EIOIMPL);
|
||||
@ -919,7 +917,7 @@ int qse_awk_rtx_closeio (qse_awk_rtx_t* run, const qse_char_t* name)
|
||||
if (handler != QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOERR);
|
||||
if (handler (run, QSE_AWK_IO_CLOSE, p, QSE_NULL, 0) <= -1)
|
||||
if (handler (run, QSE_AWK_RIO_CLOSE, p, QSE_NULL, 0) <= -1)
|
||||
{
|
||||
/* this is not a run-time error.*/
|
||||
if (run->errnum == QSE_AWK_ENOERR)
|
||||
@ -960,7 +958,7 @@ void qse_awk_rtx_cleario (qse_awk_rtx_t* run)
|
||||
if (handler != QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOERR);
|
||||
n = handler (run, QSE_AWK_IO_CLOSE, run->rio.chain, QSE_NULL, 0);
|
||||
n = handler (run, QSE_AWK_RIO_CLOSE, run->rio.chain, QSE_NULL, 0);
|
||||
if (n <= -1)
|
||||
{
|
||||
if (run->errnum == QSE_AWK_ENOERR)
|
||||
|
@ -29,7 +29,6 @@
|
||||
#define IDXBUFSIZE 64
|
||||
|
||||
#define MMGR(run) ((run)->awk->mmgr)
|
||||
#define CCLS(run) ((run)->awk->ccls)
|
||||
|
||||
#define STACK_AT(run,n) ((run)->stack[(run)->stack_base+(n)])
|
||||
#define STACK_NARGS(run) (STACK_AT(run,3))
|
||||
@ -617,7 +616,7 @@ int qse_awk_rtx_setofilename (
|
||||
|
||||
void* qse_awk_rtx_getxtn (qse_awk_rtx_t* rtx)
|
||||
{
|
||||
return (void*)(rtx + 1);
|
||||
return QSE_XTN(rtx);
|
||||
}
|
||||
|
||||
qse_awk_t* qse_awk_rtx_getawk (qse_awk_rtx_t* rtx)
|
||||
@ -627,7 +626,7 @@ qse_awk_t* qse_awk_rtx_getawk (qse_awk_rtx_t* rtx)
|
||||
|
||||
qse_mmgr_t* qse_awk_rtx_getmmgr (qse_awk_rtx_t* rtx)
|
||||
{
|
||||
return rtx->awk->mmgr;
|
||||
return MMGR(rtx);
|
||||
}
|
||||
|
||||
qse_map_t* qse_awk_rtx_getnvmap (qse_awk_rtx_t* rtx)
|
||||
@ -641,9 +640,10 @@ qse_awk_rtx_t* qse_awk_rtx_open (
|
||||
{
|
||||
qse_awk_rtx_t* rtx;
|
||||
|
||||
QSE_ASSERTX (awk->ccls != QSE_NULL, "Call qse_awk_setccls() first");
|
||||
QSE_ASSERTX (awk->prm.pow != QSE_NULL, "Call qse_awk_setprm() first");
|
||||
QSE_ASSERTX (awk->prm.sprintf != QSE_NULL, "Call qse_awk_setprm() first");
|
||||
QSE_ASSERTX (awk->prm.isccls != QSE_NULL, "Call qse_awk_setprm() first");
|
||||
QSE_ASSERTX (awk->prm.toccls != QSE_NULL, "Call qse_awk_setprm() first");
|
||||
|
||||
/* clear the awk error code */
|
||||
qse_awk_seterror (awk, QSE_AWK_ENOERR, 0, QSE_NULL);
|
||||
@ -723,13 +723,13 @@ void qse_awk_rtx_setrcb (qse_awk_rtx_t* rtx, qse_awk_rcb_t* rcb)
|
||||
static void free_namedval (qse_map_t* map, void* dptr, qse_size_t dlen)
|
||||
{
|
||||
qse_awk_rtx_refdownval (
|
||||
*(qse_awk_rtx_t**)qse_map_getxtn(map), dptr);
|
||||
*(qse_awk_rtx_t**)QSE_XTN(map), dptr);
|
||||
}
|
||||
|
||||
static void same_namedval (qse_map_t* map, void* dptr, qse_size_t dlen)
|
||||
{
|
||||
qse_awk_rtx_refdownval_nofree (
|
||||
*(qse_awk_rtx_t**)qse_map_getxtn(map), dptr);
|
||||
*(qse_awk_rtx_t**)QSE_XTN(map), dptr);
|
||||
}
|
||||
|
||||
static int init_rtx (qse_awk_rtx_t* rtx, qse_awk_t* awk, qse_awk_rio_t* rio)
|
||||
@ -796,7 +796,7 @@ static int init_rtx (qse_awk_rtx_t* rtx, qse_awk_t* awk, qse_awk_rio_t* rio)
|
||||
qse_awk_seterror (awk, QSE_AWK_ENOMEM, 0, QSE_NULL);
|
||||
return -1;
|
||||
}
|
||||
*(qse_awk_rtx_t**)qse_map_getxtn(rtx->named) = rtx;
|
||||
*(qse_awk_rtx_t**)QSE_XTN(rtx->named) = rtx;
|
||||
qse_map_setcopier (rtx->named, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
|
||||
qse_map_setfreeer (rtx->named, QSE_MAP_VAL, free_namedval);
|
||||
qse_map_setkeeper (rtx->named, same_namedval);
|
||||
@ -1430,16 +1430,21 @@ static int run_bpae_loop (qse_awk_rtx_t* rtx)
|
||||
* for BEGIN/pattern action/END block execution.*/
|
||||
nargs = (qse_size_t)STACK_NARGS(rtx);
|
||||
QSE_ASSERT (nargs == 0);
|
||||
for (i = 0; i < nargs; i++) qse_awk_rtx_refdownval (rtx, STACK_ARG(rtx,i));
|
||||
for (i = 0; i < nargs; i++)
|
||||
qse_awk_rtx_refdownval (rtx, STACK_ARG(rtx,i));
|
||||
|
||||
/* get the return value in the current stack frame */
|
||||
v = STACK_RETVAL(rtx);
|
||||
if (ret == 0)
|
||||
|
||||
if (rtx->rcb.on_exit != QSE_NULL)
|
||||
{
|
||||
if (rtx->rcb.on_exit != QSE_NULL)
|
||||
rtx->rcb.on_exit (rtx, v, rtx->rcb.data);
|
||||
/* we call the on_exit handler regardless of ret.
|
||||
* the return value passed is the global return value
|
||||
* in the stack. */
|
||||
rtx->rcb.on_exit (rtx, v, rtx->rcb.data);
|
||||
}
|
||||
/* end the life of the gbl return value */
|
||||
|
||||
/* end the life of the global return value */
|
||||
qse_awk_rtx_refdownval (rtx, v);
|
||||
|
||||
return ret;
|
||||
@ -4042,7 +4047,7 @@ static int __cmp_int_str (
|
||||
str, len,
|
||||
((qse_awk_val_str_t*)right)->ptr,
|
||||
((qse_awk_val_str_t*)right)->len,
|
||||
CCLS(run));
|
||||
&run->awk->ccls);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -4114,7 +4119,7 @@ static int __cmp_real_str (
|
||||
str, len,
|
||||
((qse_awk_val_str_t*)right)->ptr,
|
||||
((qse_awk_val_str_t*)right)->len,
|
||||
CCLS(run));
|
||||
&run->awk->ccls);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -4158,7 +4163,8 @@ static int __cmp_str_str (
|
||||
if (run->gbl.ignorecase)
|
||||
{
|
||||
n = qse_strxncasecmp (
|
||||
ls->ptr, ls->len, rs->ptr, rs->len, CCLS(run));
|
||||
ls->ptr, ls->len, rs->ptr, rs->len,
|
||||
&run->awk->ccls);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -93,6 +93,20 @@ static int custom_awk_sprintf (
|
||||
return n;
|
||||
}
|
||||
|
||||
static qse_bool_t custom_awk_isccls (
|
||||
qse_awk_t* awk, qse_cint_t c, qse_ccls_id_t id)
|
||||
{
|
||||
qse_ccls_t* ccls = QSE_CCLS_GETDFL();
|
||||
return ccls->is (ccls->data, c, id);
|
||||
}
|
||||
|
||||
static qse_cint_t custom_awk_toccls (
|
||||
qse_awk_t* awk, qse_cint_t c, qse_ccls_id_t id)
|
||||
{
|
||||
qse_ccls_t* ccls = QSE_CCLS_GETDFL();
|
||||
return ccls->to (ccls->data, c, id);
|
||||
}
|
||||
|
||||
static int add_functions (qse_awk_t* awk);
|
||||
|
||||
qse_awk_t* qse_awk_opensimple (void)
|
||||
@ -101,23 +115,19 @@ qse_awk_t* qse_awk_opensimple (void)
|
||||
qse_awk_prm_t prm;
|
||||
xtn_t* xtn;
|
||||
|
||||
prm.pow = custom_awk_pow;
|
||||
prm.sprintf = custom_awk_sprintf;
|
||||
prm.isccls = custom_awk_isccls;
|
||||
prm.toccls = custom_awk_toccls;
|
||||
|
||||
/* create an object */
|
||||
awk = qse_awk_open (
|
||||
QSE_MMGR_GETDFL(),
|
||||
QSE_SIZEOF(xtn_t),
|
||||
QSE_CCLS_GETDFL()
|
||||
);
|
||||
awk = qse_awk_open (QSE_MMGR_GETDFL(), QSE_SIZEOF(xtn_t), &prm);
|
||||
if (awk == QSE_NULL) return QSE_NULL;
|
||||
|
||||
/* initialize extension */
|
||||
xtn = (xtn_t*) qse_awk_getxtn (awk);
|
||||
xtn = (xtn_t*) QSE_XTN (awk);
|
||||
QSE_MEMSET (xtn, 0, QSE_SIZEOF(xtn_t));
|
||||
|
||||
/* set primitive functions */
|
||||
prm.pow = custom_awk_pow;
|
||||
prm.sprintf = custom_awk_sprintf;
|
||||
qse_awk_setprm (awk, &prm);
|
||||
|
||||
/* set default options */
|
||||
qse_awk_setoption (awk,
|
||||
QSE_AWK_IMPLICIT | QSE_AWK_RIO | QSE_AWK_NEWLINE |
|
||||
@ -135,11 +145,13 @@ qse_awk_t* qse_awk_opensimple (void)
|
||||
|
||||
/*** PARSESIMPLE ***/
|
||||
|
||||
static qse_ssize_t sf_in (qse_awk_t* awk, int cmd, qse_char_t* data, qse_size_t size)
|
||||
static qse_ssize_t sf_in (
|
||||
qse_awk_t* awk, qse_awk_sio_cmd_t cmd,
|
||||
qse_char_t* data, qse_size_t size)
|
||||
{
|
||||
xtn_t* xtn = qse_awk_getxtn (awk);
|
||||
xtn_t* xtn = QSE_XTN (awk);
|
||||
|
||||
if (cmd == QSE_AWK_IO_OPEN)
|
||||
if (cmd == QSE_AWK_SIO_OPEN)
|
||||
{
|
||||
if (xtn->s.in.type == QSE_AWK_PARSE_FILES)
|
||||
{
|
||||
@ -167,7 +179,7 @@ static qse_ssize_t sf_in (qse_awk_t* awk, int cmd, qse_char_t* data, qse_size_t
|
||||
|
||||
return 1;
|
||||
}
|
||||
else if (cmd == QSE_AWK_IO_CLOSE)
|
||||
else if (cmd == QSE_AWK_SIO_CLOSE)
|
||||
{
|
||||
if (xtn->s.in.handle != QSE_NULL &&
|
||||
xtn->s.in.handle != qse_sio_in &&
|
||||
@ -179,7 +191,7 @@ static qse_ssize_t sf_in (qse_awk_t* awk, int cmd, qse_char_t* data, qse_size_t
|
||||
|
||||
return 0;
|
||||
}
|
||||
else if (cmd == QSE_AWK_IO_READ)
|
||||
else if (cmd == QSE_AWK_SIO_READ)
|
||||
{
|
||||
qse_ssize_t n = 0;
|
||||
|
||||
@ -231,11 +243,13 @@ static qse_ssize_t sf_in (qse_awk_t* awk, int cmd, qse_char_t* data, qse_size_t
|
||||
return -1;
|
||||
}
|
||||
|
||||
static qse_ssize_t sf_out (qse_awk_t* awk, int cmd, qse_char_t* data, qse_size_t size)
|
||||
static qse_ssize_t sf_out (
|
||||
qse_awk_t* awk, qse_awk_sio_cmd_t cmd,
|
||||
qse_char_t* data, qse_size_t size)
|
||||
{
|
||||
xtn_t* xtn = qse_awk_getxtn (awk);
|
||||
xtn_t* xtn = QSE_XTN (awk);
|
||||
|
||||
if (cmd == QSE_AWK_IO_OPEN)
|
||||
if (cmd == QSE_AWK_SIO_OPEN)
|
||||
{
|
||||
if (xtn->s.out.file[0] == QSE_T('\0'))
|
||||
{
|
||||
@ -254,7 +268,7 @@ static qse_ssize_t sf_out (qse_awk_t* awk, int cmd, qse_char_t* data, qse_size_t
|
||||
|
||||
return 1;
|
||||
}
|
||||
else if (cmd == QSE_AWK_IO_CLOSE)
|
||||
else if (cmd == QSE_AWK_SIO_CLOSE)
|
||||
{
|
||||
if (xtn->s.out.handle != QSE_NULL)
|
||||
{
|
||||
@ -269,7 +283,7 @@ static qse_ssize_t sf_out (qse_awk_t* awk, int cmd, qse_char_t* data, qse_size_t
|
||||
|
||||
return 0;
|
||||
}
|
||||
else if (cmd == QSE_AWK_IO_WRITE)
|
||||
else if (cmd == QSE_AWK_SIO_WRITE)
|
||||
{
|
||||
/*
|
||||
qse_size_t left = size;
|
||||
@ -302,7 +316,7 @@ int qse_awk_parsesimple (
|
||||
qse_awk_t* awk, int ist, const void* isp, const qse_char_t* osf)
|
||||
{
|
||||
qse_awk_sio_t sio;
|
||||
xtn_t* xtn = (xtn_t*) qse_awk_getxtn (awk);
|
||||
xtn_t* xtn = (xtn_t*) QSE_XTN (awk);
|
||||
|
||||
if (isp == QSE_NULL)
|
||||
{
|
||||
@ -340,12 +354,12 @@ int qse_awk_parsesimple (
|
||||
/*** RUNSIMPLE ***/
|
||||
|
||||
static qse_ssize_t awk_rio_pipe (
|
||||
qse_awk_rtx_t* rtx, int cmd, qse_awk_riod_t* riod,
|
||||
qse_awk_rtx_t* rtx, qse_awk_rio_cmd_t cmd, qse_awk_riod_t* riod,
|
||||
qse_char_t* data, qse_size_t size)
|
||||
{
|
||||
switch (cmd)
|
||||
{
|
||||
case QSE_AWK_IO_OPEN:
|
||||
case QSE_AWK_RIO_OPEN:
|
||||
{
|
||||
qse_pio_t* handle;
|
||||
int flags;
|
||||
@ -382,7 +396,7 @@ static qse_ssize_t awk_rio_pipe (
|
||||
return 1;
|
||||
}
|
||||
|
||||
case QSE_AWK_IO_CLOSE:
|
||||
case QSE_AWK_RIO_CLOSE:
|
||||
{
|
||||
/*dprint (QSE_T("closing %s of type (pipe) %d\n"), riod->name, riod->type);*/
|
||||
qse_pio_close ((qse_pio_t*)riod->handle);
|
||||
@ -390,7 +404,7 @@ static qse_ssize_t awk_rio_pipe (
|
||||
return 0;
|
||||
}
|
||||
|
||||
case QSE_AWK_IO_READ:
|
||||
case QSE_AWK_RIO_READ:
|
||||
{
|
||||
return qse_pio_read (
|
||||
(qse_pio_t*)riod->handle,
|
||||
@ -400,7 +414,7 @@ static qse_ssize_t awk_rio_pipe (
|
||||
);
|
||||
}
|
||||
|
||||
case QSE_AWK_IO_WRITE:
|
||||
case QSE_AWK_RIO_WRITE:
|
||||
{
|
||||
return qse_pio_write (
|
||||
(qse_pio_t*)riod->handle,
|
||||
@ -410,13 +424,13 @@ static qse_ssize_t awk_rio_pipe (
|
||||
);
|
||||
}
|
||||
|
||||
case QSE_AWK_IO_FLUSH:
|
||||
case QSE_AWK_RIO_FLUSH:
|
||||
{
|
||||
/*if (riod->mode == QSE_AWK_RIO_PIPE_READ) return -1;*/
|
||||
return qse_pio_flush ((qse_pio_t*)riod->handle, QSE_PIO_IN);
|
||||
}
|
||||
|
||||
case QSE_AWK_IO_NEXT:
|
||||
case QSE_AWK_RIO_NEXT:
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
@ -426,12 +440,12 @@ static qse_ssize_t awk_rio_pipe (
|
||||
}
|
||||
|
||||
static qse_ssize_t awk_rio_file (
|
||||
qse_awk_rtx_t* rtx, int cmd, qse_awk_riod_t* riod,
|
||||
qse_awk_rtx_t* rtx, qse_awk_rio_cmd_t cmd, qse_awk_riod_t* riod,
|
||||
qse_char_t* data, qse_size_t size)
|
||||
{
|
||||
switch (cmd)
|
||||
{
|
||||
case QSE_AWK_IO_OPEN:
|
||||
case QSE_AWK_RIO_OPEN:
|
||||
{
|
||||
qse_fio_t* handle;
|
||||
int flags;
|
||||
@ -477,7 +491,7 @@ static qse_ssize_t awk_rio_file (
|
||||
return 1;
|
||||
}
|
||||
|
||||
case QSE_AWK_IO_CLOSE:
|
||||
case QSE_AWK_RIO_CLOSE:
|
||||
{
|
||||
/*dprint (QSE_T("closing %s of type %d (file)\n"), riod->name, riod->type);*/
|
||||
qse_fio_close ((qse_fio_t*)riod->handle);
|
||||
@ -485,7 +499,7 @@ static qse_ssize_t awk_rio_file (
|
||||
return 0;
|
||||
}
|
||||
|
||||
case QSE_AWK_IO_READ:
|
||||
case QSE_AWK_RIO_READ:
|
||||
{
|
||||
return qse_fio_read (
|
||||
(qse_fio_t*)riod->handle,
|
||||
@ -494,7 +508,7 @@ static qse_ssize_t awk_rio_file (
|
||||
);
|
||||
}
|
||||
|
||||
case QSE_AWK_IO_WRITE:
|
||||
case QSE_AWK_RIO_WRITE:
|
||||
{
|
||||
return qse_fio_write (
|
||||
(qse_fio_t*)riod->handle,
|
||||
@ -503,12 +517,12 @@ static qse_ssize_t awk_rio_file (
|
||||
);
|
||||
}
|
||||
|
||||
case QSE_AWK_IO_FLUSH:
|
||||
case QSE_AWK_RIO_FLUSH:
|
||||
{
|
||||
return qse_fio_flush ((qse_fio_t*)riod->handle);
|
||||
}
|
||||
|
||||
case QSE_AWK_IO_NEXT:
|
||||
case QSE_AWK_RIO_NEXT:
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
@ -520,7 +534,7 @@ static qse_ssize_t awk_rio_file (
|
||||
|
||||
static int open_rio_console (qse_awk_rtx_t* rtx, qse_awk_riod_t* riod)
|
||||
{
|
||||
rxtn_t* rxtn = (rxtn_t*) qse_awk_rtx_getxtn (rtx);
|
||||
rxtn_t* rxtn = (rxtn_t*) QSE_XTN (rtx);
|
||||
|
||||
/*dprint (QSE_T("opening console[%s] of type %x\n"), riod->name, riod->type);*/
|
||||
|
||||
@ -593,16 +607,16 @@ static int open_rio_console (qse_awk_rtx_t* rtx, qse_awk_riod_t* riod)
|
||||
}
|
||||
|
||||
static qse_ssize_t awk_rio_console (
|
||||
qse_awk_rtx_t* rtx, int cmd, qse_awk_riod_t* riod,
|
||||
qse_awk_rtx_t* rtx, qse_awk_rio_cmd_t cmd, qse_awk_riod_t* riod,
|
||||
qse_char_t* data, qse_size_t size)
|
||||
{
|
||||
rxtn_t* rxtn = (rxtn_t*) qse_awk_rtx_getxtn (rtx);
|
||||
rxtn_t* rxtn = (rxtn_t*) QSE_XTN (rtx);
|
||||
|
||||
if (cmd == QSE_AWK_IO_OPEN)
|
||||
if (cmd == QSE_AWK_RIO_OPEN)
|
||||
{
|
||||
return open_rio_console (rtx, riod);
|
||||
}
|
||||
else if (cmd == QSE_AWK_IO_CLOSE)
|
||||
else if (cmd == QSE_AWK_RIO_CLOSE)
|
||||
{
|
||||
/*dprint (QSE_T("closing console of type %x\n"), riod->type);*/
|
||||
|
||||
@ -616,7 +630,7 @@ static qse_ssize_t awk_rio_console (
|
||||
|
||||
return 0;
|
||||
}
|
||||
else if (cmd == QSE_AWK_IO_READ)
|
||||
else if (cmd == QSE_AWK_RIO_READ)
|
||||
{
|
||||
qse_ssize_t n;
|
||||
|
||||
@ -697,7 +711,7 @@ static qse_ssize_t awk_rio_console (
|
||||
|
||||
return n;
|
||||
}
|
||||
else if (cmd == QSE_AWK_IO_WRITE)
|
||||
else if (cmd == QSE_AWK_RIO_WRITE)
|
||||
{
|
||||
return qse_sio_putsn (
|
||||
(qse_sio_t*)riod->handle,
|
||||
@ -705,11 +719,11 @@ static qse_ssize_t awk_rio_console (
|
||||
size
|
||||
);
|
||||
}
|
||||
else if (cmd == QSE_AWK_IO_FLUSH)
|
||||
else if (cmd == QSE_AWK_RIO_FLUSH)
|
||||
{
|
||||
return qse_sio_flush ((qse_sio_t*)riod->handle);
|
||||
}
|
||||
else if (cmd == QSE_AWK_IO_NEXT)
|
||||
else if (cmd == QSE_AWK_RIO_NEXT)
|
||||
{
|
||||
int n;
|
||||
qse_sio_t* fp = (qse_sio_t*)riod->handle;
|
||||
@ -758,7 +772,7 @@ qse_awk_rtx_t* qse_awk_rtx_opensimple (qse_awk_t* awk, qse_char_t** icf)
|
||||
);
|
||||
if (rtx == QSE_NULL) return QSE_NULL;
|
||||
|
||||
rxtn = (rxtn_t*) qse_awk_rtx_getxtn (rtx);
|
||||
rxtn = (rxtn_t*) QSE_XTN (rtx);
|
||||
QSE_MEMSET (rxtn, 0, QSE_SIZEOF(rxtn_t));
|
||||
|
||||
if (qse_gettime (&now) == -1) rxtn->seed = 0;
|
||||
@ -1061,7 +1075,7 @@ static int fnc_srand (qse_awk_rtx_t* run, const qse_char_t* fnm, qse_size_t fnl)
|
||||
unsigned int prev;
|
||||
rxtn_t* rxtn;
|
||||
|
||||
rxtn = (rxtn_t*)qse_awk_rtx_getxtn (run);
|
||||
rxtn = (rxtn_t*) QSE_XTN (run);
|
||||
nargs = qse_awk_rtx_getnargs (run);
|
||||
QSE_ASSERT (nargs == 0 || nargs == 1);
|
||||
|
||||
|
@ -384,68 +384,41 @@ qse_awk_val_t* qse_awk_rtx_makerexval (
|
||||
qse_awk_rtx_t* run, const qse_char_t* buf, qse_size_t len, void* code)
|
||||
{
|
||||
qse_awk_val_rex_t* val;
|
||||
qse_size_t totsz;
|
||||
|
||||
val = (qse_awk_val_rex_t*) QSE_AWK_ALLOC (
|
||||
run->awk, QSE_SIZEOF(qse_awk_val_rex_t) +
|
||||
(QSE_SIZEOF(*buf)*len+1) + QSE_REX_LEN(code));
|
||||
if (val == QSE_NULL) return QSE_NULL;
|
||||
/* the regular expression value holds:
|
||||
* header
|
||||
* a raw string plus with added a terminating '\0'
|
||||
* a compiled regular expression
|
||||
* the total size is just large enough for all these.
|
||||
*/
|
||||
totsz = QSE_SIZEOF(qse_awk_val_rex_t) +
|
||||
(QSE_SIZEOF(*buf) * (len + 1)) +
|
||||
QSE_REX_LEN(code);
|
||||
|
||||
val = (qse_awk_val_rex_t*) QSE_AWK_ALLOC (run->awk, totsz);
|
||||
if (val == QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
val->type = QSE_AWK_VAL_REX;
|
||||
val->ref = 0;
|
||||
val->len = len;
|
||||
/*
|
||||
val->ptr = QSE_AWK_STRXDUP (run->awk, buf, len);
|
||||
if (val->ptr == QSE_NULL)
|
||||
{
|
||||
QSE_AWK_FREE (run->awk, val);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return QSE_NULL;
|
||||
}*/
|
||||
|
||||
val->ptr = (qse_char_t*)(val + 1);
|
||||
qse_strncpy (val->ptr, buf, len);
|
||||
|
||||
/*
|
||||
val->code = QSE_AWK_ALLOC (run->awk, QSE_REX_LEN(code));
|
||||
if (val->code == QSE_NULL)
|
||||
{
|
||||
QSE_AWK_FREE (run->awk, val->ptr);
|
||||
QSE_AWK_FREE (run->awk, val);
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return QSE_NULL;
|
||||
}
|
||||
*/
|
||||
val->code = val->ptr + len + 1;
|
||||
QSE_MEMCPY (val->code, code, QSE_REX_LEN(code));
|
||||
|
||||
return (qse_awk_val_t*)val;
|
||||
}
|
||||
|
||||
/* CHECK */
|
||||
/*
|
||||
static void free_mapval (void* run, void* v)
|
||||
{
|
||||
#ifdef DEBUG_VAL
|
||||
qse_dprintf (QSE_T("refdown in map free..."));
|
||||
qse_awk_dprintval (run, v);
|
||||
qse_dprintf (QSE_T("\n"));
|
||||
#endif
|
||||
|
||||
qse_awk_rtx_refdownval (run, v);
|
||||
}
|
||||
|
||||
static void same_mapval (void* run, void* v)
|
||||
{
|
||||
#ifdef DEBUG_VAL
|
||||
qse_dprintf (QSE_T("refdown nofree in map free..."));
|
||||
qse_awk_dprintval (run, v);
|
||||
qse_dprintf (QSE_T("\n"));
|
||||
#endif
|
||||
qse_awk_rtx_refdownval_nofree (run, v);
|
||||
}
|
||||
*/
|
||||
static void free_mapval (qse_map_t* map, void* dptr, qse_size_t dlen)
|
||||
{
|
||||
qse_awk_rtx_t* run = *(qse_awk_rtx_t**)qse_map_getxtn(map);
|
||||
qse_awk_rtx_t* run = *(qse_awk_rtx_t**)QSE_XTN(map);
|
||||
|
||||
#ifdef DEBUG_VAL
|
||||
qse_dprintf (QSE_T("refdown in map free..."));
|
||||
@ -458,7 +431,7 @@ static void free_mapval (qse_map_t* map, void* dptr, qse_size_t dlen)
|
||||
|
||||
static void same_mapval (qse_map_t* map, void* dptr, qse_size_t dlen)
|
||||
{
|
||||
qse_awk_rtx_t* run = *(qse_awk_rtx_t**)qse_map_getxtn(map);
|
||||
qse_awk_rtx_t* run = *(qse_awk_rtx_t**)QSE_XTN(map);
|
||||
#ifdef DEBUG_VAL
|
||||
qse_dprintf (QSE_T("refdown nofree in map free..."));
|
||||
qse_awk_dprintval (run, dptr);
|
||||
@ -466,7 +439,6 @@ static void same_mapval (qse_map_t* map, void* dptr, qse_size_t dlen)
|
||||
#endif
|
||||
qse_awk_rtx_refdownval_nofree (run, dptr);
|
||||
}
|
||||
/* END CHECK */
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_makemapval (qse_awk_rtx_t* run)
|
||||
{
|
||||
@ -516,7 +488,7 @@ qse_awk_val_t* qse_awk_rtx_makemapval (qse_awk_rtx_t* run)
|
||||
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM);
|
||||
return QSE_NULL;
|
||||
}
|
||||
*(qse_awk_rtx_t**)qse_map_getxtn(val->map) = run;
|
||||
*(qse_awk_rtx_t**)QSE_XTN(val->map) = run;
|
||||
|
||||
/* the key is copied inline into a pair and is freed when the pair
|
||||
* is destroyed */
|
||||
@ -569,7 +541,7 @@ qse_awk_val_t* qse_awk_rtx_makerefval (qse_awk_rtx_t* run, int id, qse_awk_val_t
|
||||
((val) >= (qse_awk_val_t*)&awk_int[0] && \
|
||||
(val) <= (qse_awk_val_t*)&awk_int[QSE_COUNTOF(awk_int)-1]))
|
||||
|
||||
qse_bool_t qse_awk_isstaticval (qse_awk_rtx_t* rtx, qse_awk_val_t* val)
|
||||
qse_bool_t qse_awk_rtx_isstaticval (qse_awk_rtx_t* rtx, qse_awk_val_t* val)
|
||||
{
|
||||
return IS_STATICVAL(val);
|
||||
}
|
||||
@ -1151,7 +1123,7 @@ static qse_map_walk_t print_pair (
|
||||
{
|
||||
qse_awk_rtx_t* run = (qse_awk_rtx_t*)arg;
|
||||
|
||||
QSE_ASSERT (run == *(qse_awk_rtx_t**)qse_map_getxtn(map));
|
||||
QSE_ASSERT (run == *(qse_awk_rtx_t**)QSE_XTN(map));
|
||||
|
||||
DPRINTF (DCUSTOM, QSE_T(" %.*s=>"),
|
||||
(int)QSE_MAP_KLEN(pair), QSE_MAP_KPTR(pair));
|
||||
|
@ -34,7 +34,7 @@ static qse_bool_t is_graph (qse_cint_t c) { return isgraph(c); }
|
||||
static qse_bool_t is_cntrl (qse_cint_t c) { return iscntrl(c); }
|
||||
static qse_bool_t is_punct (qse_cint_t c) { return ispunct(c); }
|
||||
|
||||
qse_bool_t qse_ccls_is (qse_cint_t c, qse_ccls_type_t type)
|
||||
qse_bool_t qse_ccls_is (qse_cint_t c, qse_ccls_id_t type)
|
||||
{
|
||||
/* TODO: use GetStringTypeW/A for WIN32 to implement these */
|
||||
|
||||
@ -54,11 +54,11 @@ qse_bool_t qse_ccls_is (qse_cint_t c, qse_ccls_type_t type)
|
||||
};
|
||||
|
||||
QSE_ASSERTX (type >= QSE_CCLS_UPPER && type <= QSE_CCLS_PUNCT,
|
||||
"The character type should be one of qse_ccls_type_t values");
|
||||
"The character type should be one of qse_ccls_id_t values");
|
||||
return f[type] (c);
|
||||
}
|
||||
|
||||
qse_cint_t qse_ccls_to (qse_cint_t c, qse_ccls_type_t type)
|
||||
qse_cint_t qse_ccls_to (qse_cint_t c, qse_ccls_id_t type)
|
||||
{
|
||||
QSE_ASSERTX (type >= QSE_CCLS_UPPER && type <= QSE_CCLS_LOWER,
|
||||
"The character type should be one of QSE_CCLS_UPPER and QSE_CCLS_LOWER");
|
||||
@ -72,7 +72,7 @@ qse_cint_t qse_ccls_to (qse_cint_t c, qse_ccls_type_t type)
|
||||
|
||||
#include <wctype.h>
|
||||
|
||||
qse_bool_t qse_ccls_is (qse_cint_t c, qse_ccls_type_t type)
|
||||
qse_bool_t qse_ccls_is (qse_cint_t c, qse_ccls_id_t type)
|
||||
{
|
||||
static const char* name[] =
|
||||
{
|
||||
@ -105,13 +105,13 @@ qse_bool_t qse_ccls_is (qse_cint_t c, qse_ccls_type_t type)
|
||||
};
|
||||
|
||||
QSE_ASSERTX (type >= QSE_CCLS_UPPER && type <= QSE_CCLS_PUNCT,
|
||||
"The character type should be one of qse_ccls_type_t values");
|
||||
"The character type should be one of qse_ccls_id_t values");
|
||||
|
||||
if (desc[type] == (wctype_t)0) desc[type] = wctype(name[type]);
|
||||
return iswctype (c, desc[type]);
|
||||
}
|
||||
|
||||
qse_cint_t qse_ccls_to (qse_cint_t c, qse_ccls_type_t type)
|
||||
qse_cint_t qse_ccls_to (qse_cint_t c, qse_ccls_id_t type)
|
||||
{
|
||||
static const char* name[] =
|
||||
{
|
||||
@ -136,12 +136,12 @@ qse_cint_t qse_ccls_to (qse_cint_t c, qse_ccls_type_t type)
|
||||
#error unsupported character type
|
||||
#endif
|
||||
|
||||
static qse_bool_t ccls_is (void* data, qse_cint_t c, qse_ccls_type_t type)
|
||||
static qse_bool_t ccls_is (void* data, qse_cint_t c, qse_ccls_id_t type)
|
||||
{
|
||||
return qse_ccls_is (c, type);
|
||||
}
|
||||
|
||||
static qse_cint_t ccls_to (void* data, qse_cint_t c, qse_ccls_type_t type)
|
||||
static qse_cint_t ccls_to (void* data, qse_cint_t c, qse_ccls_id_t type)
|
||||
{
|
||||
return qse_ccls_to (c, type);
|
||||
}
|
||||
|
Reference in New Issue
Block a user