fixed building problems with old compilers
This commit is contained in:
@ -1452,7 +1452,11 @@ int Awk::dispatch_function (Run* run, const fnc_info_t* fi)
|
||||
return -1;
|
||||
}
|
||||
#else
|
||||
try { args = (Value*)::operator new (QSE_SIZEOF(Value) * nargs, this->getMmgr()); }
|
||||
try
|
||||
{
|
||||
//args = (Value*)::operator new (QSE_SIZEOF(Value) * nargs, this->getMmgr());
|
||||
args = (Value*)this->getMmgr()->allocate (QSE_SIZEOF(Value) * nargs);
|
||||
}
|
||||
catch (...) { args = QSE_NULL; }
|
||||
if (args == QSE_NULL)
|
||||
{
|
||||
@ -1564,9 +1568,11 @@ int Awk::dispatch_function (Run* run, const fnc_info_t* fi)
|
||||
for (i = nargs; i > 0; )
|
||||
{
|
||||
--i;
|
||||
args[i].~Value ();
|
||||
args[i].Value::~Value ();
|
||||
}
|
||||
::operator delete (args, this->getMmgr());
|
||||
|
||||
//::operator delete (args, this->getMmgr());
|
||||
this->getMmgr()->dispose (args);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -490,6 +490,14 @@ static void free_val (qse_xli_root_list_t* root, qse_xli_val_t* val)
|
||||
|
||||
static void free_atom (qse_xli_root_list_t* root, qse_xli_atom_t* atom)
|
||||
{
|
||||
/* Among all atom type, QSE_XLI_PAIR has a value to dispose of specially.
|
||||
* A tag and an alise are inlined to the atom itself. see insert_atom()
|
||||
* above for details.
|
||||
*
|
||||
* for QSE_XLI_TEXT, QSE_XLI_FILE, QSE_XLI_EOF, data are inlined to
|
||||
* the atom itself as well.
|
||||
*/
|
||||
|
||||
if (atom->type == QSE_XLI_PAIR) free_val (root, ((qse_xli_pair_t*)atom)->val);
|
||||
QSE_MMGR_FREE (root->mmgr, atom);
|
||||
}
|
||||
@ -947,15 +955,58 @@ void qse_xli_undefinepairs (qse_xli_t* xli)
|
||||
qse_rbt_clear (xli->schema);
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
/*
|
||||
qse_xli_pair_t* qse_xli_getpair (qse_xli_t* xli, const qse_char_t* fqpn)
|
||||
{
|
||||
return qse_xli_findpair (xli, &xli->root->list, fqpn);
|
||||
}
|
||||
*/
|
||||
|
||||
qse_xli_pair_t* qse_xli_setpair (qse_xli_t* xli, const qse_char_t* fqpn, const qse_xli_val_t* val) -> str, val, nil
|
||||
#if 0
|
||||
/* val is str , list or nil */
|
||||
qse_xli_pair_t* qse_xli_updatepair (qse_xli_t* xli, const qse_char_t* fqpn, const qse_xli_val_t* val)
|
||||
{
|
||||
qse_xli_pair_t* pair;
|
||||
|
||||
pair = qse_xli_findpair (xli, fqpn);
|
||||
if (pair)
|
||||
{
|
||||
/* update the value of an existing pair */
|
||||
qse_xli_val_t* old_val;
|
||||
qse_xli_scm_t* scm;
|
||||
|
||||
if (xli->opt.trait & QSE_XLI_VALIDATE)
|
||||
{
|
||||
qse_rbt_pair_t* scm_pair;
|
||||
|
||||
scm_pair = qse_rbt_search (xli->schema, fqpn, qse_strlen(fqpn));
|
||||
if (!scm_pair)
|
||||
{
|
||||
/*qse_xli_seterror (xli, QSE_XLI_EUDKEY, (const qse_cstr_t*)&key, &kloc);*/
|
||||
goto oops;
|
||||
}
|
||||
|
||||
scm = (qse_xli_scm_t*)QSE_RBT_VPTR(pair);
|
||||
}
|
||||
|
||||
if (scm->flags & QSE_XLI_SCM_KEYNODUP) key_nodup = 2;
|
||||
if (scm->flags & QSE_XLI_SCM_KEYALIAS) key_alias = 2;
|
||||
if (scm->flags & QSE_XLI_SCM_VALIFFY) val_iffy = 1;
|
||||
|
||||
/* TODO: alias, tag??
|
||||
* when alias and tags are to changed, it can't just update the value only
|
||||
* the whole pair may have to get reallocated and update must be made to the rbt data array.
|
||||
*/
|
||||
|
||||
old_val = pair->val;
|
||||
pair->val = val;
|
||||
free_val (old_val);
|
||||
|
||||
}
|
||||
|
||||
return pair;
|
||||
|
||||
#if 0
|
||||
const qse_char_t* ptr;
|
||||
const qse_xli_list_t* curlist;
|
||||
fqpn_seg_t seg;
|
||||
@ -1035,7 +1086,10 @@ qse_xli_pair_t* qse_xli_setpair (qse_xli_t* xli, const qse_char_t* fqpn, const q
|
||||
noent:
|
||||
qse_xli_seterrnum (xli, QSE_XLI_ENOENT, &seg.ki);
|
||||
return QSE_NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
void* qse_getxlipairxtn (qse_xli_pair_t* pair)
|
||||
|
Reference in New Issue
Block a user