adding Awk::Value
This commit is contained in:
parent
852a51ae75
commit
9f382bb951
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: Awk.hpp 226 2009-07-09 12:46:14Z hyunghwan.chung $
|
* $Id: Awk.hpp 227 2009-07-10 14:05:51Z hyunghwan.chung $
|
||||||
*
|
*
|
||||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||||
|
|
||||||
@ -226,6 +226,76 @@ public:
|
|||||||
friend class Argument;
|
friend class Argument;
|
||||||
friend class Return;
|
friend class Return;
|
||||||
|
|
||||||
|
class Value
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Value (): run (QSE_NULL), val (qse_awk_val_nil) {}
|
||||||
|
Value (Run& run): run (&run), val (qse_awk_val_nil) {}
|
||||||
|
Value (Run* run): run (run), val (qse_awk_val_nil) {}
|
||||||
|
|
||||||
|
Value (const Value& v);
|
||||||
|
~Value ();
|
||||||
|
|
||||||
|
Value& operator= (const Value& v);
|
||||||
|
|
||||||
|
void clear ();
|
||||||
|
|
||||||
|
int setValue (val_t* v);
|
||||||
|
int setValue (Run* r, val_t* v);
|
||||||
|
|
||||||
|
int setInt (long_t v);
|
||||||
|
int setInt (Run* r, long_t v);
|
||||||
|
int setReal (real_t v);
|
||||||
|
int setReal (Run* r, real_t v);
|
||||||
|
int setStr (const char_t* str, size_t len);
|
||||||
|
int setStr (Run* r, const char_t* str, size_t len);
|
||||||
|
|
||||||
|
int setIndexed (const char_t* idx, size_t isz, val_t* v);
|
||||||
|
int setIndexed (Run* r, const char_t* idx, size_t isz, val_t* v);
|
||||||
|
|
||||||
|
int setIndexed (const char_t* idx, size_t isz, long_t v);
|
||||||
|
int setIndexed (Run* r, const char_t* idx, size_t isz, long_t v);
|
||||||
|
int setIndexed (
|
||||||
|
const char_t* idx,
|
||||||
|
size_t isz,
|
||||||
|
real_t v
|
||||||
|
);
|
||||||
|
|
||||||
|
int setIndexed (
|
||||||
|
Run* r,
|
||||||
|
const char_t* idx,
|
||||||
|
size_t isz,
|
||||||
|
real_t v
|
||||||
|
);
|
||||||
|
|
||||||
|
int setIndexed (
|
||||||
|
const char_t* idx,
|
||||||
|
size_t isz,
|
||||||
|
const char_t* str,
|
||||||
|
size_t len
|
||||||
|
);
|
||||||
|
|
||||||
|
int setIndexed (
|
||||||
|
Run* r,
|
||||||
|
const char_t* idx,
|
||||||
|
size_t isz,
|
||||||
|
const char_t* str,
|
||||||
|
size_t len
|
||||||
|
);
|
||||||
|
|
||||||
|
bool isIndexed () const;
|
||||||
|
|
||||||
|
int getIndexed (
|
||||||
|
const char_t* idx,
|
||||||
|
size_t isz,
|
||||||
|
Value& val
|
||||||
|
) const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
Run* run;
|
||||||
|
val_t* val;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents an argument to an intrinsic function
|
* Represents an argument to an intrinsic function
|
||||||
*/
|
*/
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: Awk.cpp 226 2009-07-09 12:46:14Z hyunghwan.chung $
|
* $Id: Awk.cpp 227 2009-07-10 14:05:51Z hyunghwan.chung $
|
||||||
*
|
*
|
||||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||||
|
|
||||||
@ -147,7 +147,7 @@ int Awk::Console::setFileName (const char_t* name)
|
|||||||
|
|
||||||
int Awk::Console::setFNR (long_t fnr)
|
int Awk::Console::setFNR (long_t fnr)
|
||||||
{
|
{
|
||||||
qse_awk_val_t* tmp;
|
val_t* tmp;
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
tmp = qse_awk_rtx_makeintval (this->run->rtx, fnr);
|
tmp = qse_awk_rtx_makeintval (this->run->rtx, fnr);
|
||||||
@ -165,6 +165,271 @@ Awk::Console::Mode Awk::Console::getMode () const
|
|||||||
return (Mode)riod->mode;
|
return (Mode)riod->mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////
|
||||||
|
// Awk::Value
|
||||||
|
//////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Awk::Value::Value (const Value& v): run (v.run), val (v.val)
|
||||||
|
{
|
||||||
|
if (run != QSE_NULL)
|
||||||
|
qse_awk_rtx_refupval (run->rtx, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
Awk::Value::~Value ()
|
||||||
|
{
|
||||||
|
if (run != QSE_NULL)
|
||||||
|
qse_awk_rtx_refdownval (run->rtx, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
Awk::Value& Awk::Value::operator= (const Value& v)
|
||||||
|
{
|
||||||
|
if (run != QSE_NULL)
|
||||||
|
qse_awk_rtx_refdownval (run->rtx, val);
|
||||||
|
|
||||||
|
run = v.run;
|
||||||
|
val = v.val;
|
||||||
|
|
||||||
|
if (run != QSE_NULL)
|
||||||
|
qse_awk_rtx_refupval (run->rtx, val);
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Awk::Value::clear ()
|
||||||
|
{
|
||||||
|
if (run != QSE_NULL)
|
||||||
|
{
|
||||||
|
qse_awk_rtx_refdownval (run->rtx, val);
|
||||||
|
|
||||||
|
run = QSE_NULL;
|
||||||
|
val = qse_awk_val_nil;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int Awk::Value::setValue (val_t* v)
|
||||||
|
{
|
||||||
|
if (run == QSE_NULL) return -1;
|
||||||
|
return setValue (run, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
int Awk::Value::setValue (Run* r, val_t* v)
|
||||||
|
{
|
||||||
|
if (run != QSE_NULL)
|
||||||
|
qse_awk_rtx_refdownval (run->rtx, val);
|
||||||
|
qse_awk_rtx_refupval (r->rtx, v);
|
||||||
|
|
||||||
|
run = r;
|
||||||
|
val = v;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Awk::Value::setInt (long_t v)
|
||||||
|
{
|
||||||
|
if (run == QSE_NULL) return -1;
|
||||||
|
return setInt (run, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
int Awk::Value::setInt (Run* r, long_t v)
|
||||||
|
{
|
||||||
|
val_t* tmp;
|
||||||
|
tmp = qse_awk_rtx_makeintval (r->rtx, v);
|
||||||
|
if (tmp == QSE_NULL) return -1;
|
||||||
|
|
||||||
|
int n = setValue (r, tmp);
|
||||||
|
QSE_ASSERT (n == 0);
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Awk::Value::setReal (real_t v)
|
||||||
|
{
|
||||||
|
if (run == QSE_NULL) return -1;
|
||||||
|
return setReal (run, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
int Awk::Value::setReal (Run* r, real_t v)
|
||||||
|
{
|
||||||
|
val_t* tmp;
|
||||||
|
tmp = qse_awk_rtx_makerealval (r->rtx, v);
|
||||||
|
if (tmp == QSE_NULL) return -1;
|
||||||
|
|
||||||
|
int n = setValue (r, tmp);
|
||||||
|
QSE_ASSERT (n == 0);
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Awk::Value::setStr (const char_t* str, size_t len)
|
||||||
|
{
|
||||||
|
if (run == QSE_NULL) return -1;
|
||||||
|
return setStr (run, str, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
int Awk::Value::setStr (Run* r, const char_t* str, size_t len)
|
||||||
|
{
|
||||||
|
val_t* tmp;
|
||||||
|
tmp = qse_awk_rtx_makestrval (r->rtx, str, len);
|
||||||
|
if (tmp == QSE_NULL) return -1;
|
||||||
|
|
||||||
|
int n = setValue (r, tmp);
|
||||||
|
QSE_ASSERT (n == 0);
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Awk::Value::setIndexed (const char_t* idx, size_t isz, val_t* v)
|
||||||
|
{
|
||||||
|
if (run == QSE_NULL) return -1;
|
||||||
|
return setIndexed (run, idx, isz, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
int Awk::Value::setIndexed (Run* r, const char_t* idx, size_t isz, val_t* v)
|
||||||
|
{
|
||||||
|
if (val->type != QSE_AWK_VAL_MAP)
|
||||||
|
{
|
||||||
|
/* the previous value is not a map.
|
||||||
|
* a new map value needs to be created first */
|
||||||
|
val_t* map = qse_awk_rtx_makemapval (run->rtx);
|
||||||
|
if (map == QSE_NULL) return -1;
|
||||||
|
|
||||||
|
qse_awk_rtx_refupval (r->rtx, map);
|
||||||
|
qse_awk_rtx_refupval (r->rtx, v);
|
||||||
|
|
||||||
|
/* update the map with a given value */
|
||||||
|
pair_t* pair = qse_map_upsert (
|
||||||
|
((qse_awk_val_map_t*)map)->map,
|
||||||
|
(char_t*)idx, isz, v, 0);
|
||||||
|
if (pair == QSE_NULL)
|
||||||
|
{
|
||||||
|
qse_awk_rtx_refdownval (r->rtx, v);
|
||||||
|
qse_awk_rtx_refdownval (r->rtx, map);
|
||||||
|
run->setError (ERR_NOMEM, 0, QSE_NULL, 0);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (run != QSE_NULL)
|
||||||
|
qse_awk_rtx_refdownval (run->rtx, val);
|
||||||
|
|
||||||
|
run = r;
|
||||||
|
val = map;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QSE_ASSERT (run != QSE_NULL);
|
||||||
|
|
||||||
|
// if the previous value is a map, things are a bit simpler
|
||||||
|
// however it needs to check if the runtime context matches
|
||||||
|
// with the previous one.
|
||||||
|
if (run != r)
|
||||||
|
{
|
||||||
|
// it can't span across multiple runtime contexts
|
||||||
|
run->setError (ERR_INVAL);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
qse_awk_rtx_refupval (r->rtx, v);
|
||||||
|
|
||||||
|
pair_t* pair = qse_map_upsert (
|
||||||
|
((qse_awk_val_map_t*)val)->map,
|
||||||
|
(char_t*)idx, isz, v, 0);
|
||||||
|
if (pair == QSE_NULL)
|
||||||
|
{
|
||||||
|
qse_awk_rtx_refdownval (r->rtx, v);
|
||||||
|
run->setError (ERR_NOMEM);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Awk::Value::setIndexed (const char_t* idx, size_t isz, long_t v)
|
||||||
|
{
|
||||||
|
if (run == QSE_NULL) return -1;
|
||||||
|
return setIndexed (run, idx, isz, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
int Awk::Value::setIndexed (Run* r, const char_t* idx, size_t isz, long_t v)
|
||||||
|
{
|
||||||
|
val_t* tmp;
|
||||||
|
tmp = qse_awk_rtx_makeintval (r->rtx, v);
|
||||||
|
if (tmp == QSE_NULL) return -1;
|
||||||
|
|
||||||
|
qse_awk_rtx_refupval (r->rtx, tmp);
|
||||||
|
int n = setIndexed (r, idx, isz, tmp);
|
||||||
|
qse_awk_rtx_refdownval (r->rtx, tmp);
|
||||||
|
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Awk::Value::setIndexed (const char_t* idx, size_t isz, real_t v)
|
||||||
|
{
|
||||||
|
if (run == QSE_NULL) return -1;
|
||||||
|
return setIndexed (run, idx, isz, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
int Awk::Value::setIndexed (Run* r, const char_t* idx, size_t isz, real_t v)
|
||||||
|
{
|
||||||
|
val_t* tmp;
|
||||||
|
tmp = qse_awk_rtx_makerealval (r->rtx, v);
|
||||||
|
if (tmp == QSE_NULL) return -1;
|
||||||
|
|
||||||
|
qse_awk_rtx_refupval (r->rtx, tmp);
|
||||||
|
int n = setIndexed (r, idx, isz, tmp);
|
||||||
|
qse_awk_rtx_refdownval (r->rtx, tmp);
|
||||||
|
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Awk::Value::setIndexed (const char_t* idx, size_t isz, const char_t* str, size_t len)
|
||||||
|
{
|
||||||
|
if (run == QSE_NULL) return -1;
|
||||||
|
return setIndexed (run, idx, isz, str, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
int Awk::Value::setIndexed (Run* r, const char_t* idx, size_t isz, const char_t* str, size_t len)
|
||||||
|
{
|
||||||
|
val_t* tmp;
|
||||||
|
tmp = qse_awk_rtx_makestrval (r->rtx, str, len);
|
||||||
|
if (tmp == QSE_NULL) return -1;
|
||||||
|
|
||||||
|
qse_awk_rtx_refupval (r->rtx, tmp);
|
||||||
|
int n = setIndexed (r, idx, isz, tmp);
|
||||||
|
qse_awk_rtx_refdownval (r->rtx, tmp);
|
||||||
|
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Awk::Value::isIndexed () const
|
||||||
|
{
|
||||||
|
QSE_ASSERT (val != QSE_NULL);
|
||||||
|
return val->type == QSE_AWK_VAL_MAP;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Awk::Value::getIndexed (const char_t* idx, size_t isz, Value& v) const
|
||||||
|
{
|
||||||
|
QSE_ASSERT (val != QSE_NULL);
|
||||||
|
|
||||||
|
// not a map. v is just nil. not an error
|
||||||
|
if (val->type != QSE_AWK_VAL_MAP)
|
||||||
|
{
|
||||||
|
v.clear ();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// get the value from the map.
|
||||||
|
qse_awk_val_map_t* m = (qse_awk_val_map_t*)val;
|
||||||
|
pair_t* pair = qse_map_search (m->map, idx, isz);
|
||||||
|
|
||||||
|
// the key is not found. it is not an error. v is just nil
|
||||||
|
if (pair == QSE_NULL)
|
||||||
|
{
|
||||||
|
v.clear ();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if v.set fails, it should return an error
|
||||||
|
return v.setValue (run, (val_t*)QSE_MAP_VPTR(pair));
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////
|
||||||
// Awk::Argument
|
// Awk::Argument
|
||||||
//////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////
|
||||||
@ -567,9 +832,9 @@ Awk::Return::operator Awk::val_t* () const
|
|||||||
|
|
||||||
int Awk::Return::set (long_t v)
|
int Awk::Return::set (long_t v)
|
||||||
{
|
{
|
||||||
QSE_ASSERT (this->run != QSE_NULL);
|
if (this->run == QSE_NULL) return -1;
|
||||||
|
|
||||||
qse_awk_val_t* x = qse_awk_rtx_makeintval (this->run->rtx, v);
|
val_t* x = qse_awk_rtx_makeintval (this->run->rtx, v);
|
||||||
if (x == QSE_NULL) return -1;
|
if (x == QSE_NULL) return -1;
|
||||||
|
|
||||||
qse_awk_rtx_refdownval (this->run->rtx, this->val);
|
qse_awk_rtx_refdownval (this->run->rtx, this->val);
|
||||||
@ -581,9 +846,9 @@ int Awk::Return::set (long_t v)
|
|||||||
|
|
||||||
int Awk::Return::set (real_t v)
|
int Awk::Return::set (real_t v)
|
||||||
{
|
{
|
||||||
QSE_ASSERT (this->run != QSE_NULL);
|
if (this->run == QSE_NULL) return -1;
|
||||||
|
|
||||||
qse_awk_val_t* x = qse_awk_rtx_makerealval (this->run->rtx, v);
|
val_t* x = qse_awk_rtx_makerealval (this->run->rtx, v);
|
||||||
if (x == QSE_NULL) return -1;
|
if (x == QSE_NULL) return -1;
|
||||||
|
|
||||||
qse_awk_rtx_refdownval (this->run->rtx, this->val);
|
qse_awk_rtx_refdownval (this->run->rtx, this->val);
|
||||||
@ -595,9 +860,9 @@ int Awk::Return::set (real_t v)
|
|||||||
|
|
||||||
int Awk::Return::set (const char_t* ptr, size_t len)
|
int Awk::Return::set (const char_t* ptr, size_t len)
|
||||||
{
|
{
|
||||||
QSE_ASSERT (this->run != QSE_NULL);
|
if (this->run == QSE_NULL) return -1;
|
||||||
|
|
||||||
qse_awk_val_t* x = qse_awk_rtx_makestrval (this->run->rtx, ptr, len);
|
val_t* x = qse_awk_rtx_makestrval (this->run->rtx, ptr, len);
|
||||||
if (x == QSE_NULL) return -1;
|
if (x == QSE_NULL) return -1;
|
||||||
|
|
||||||
qse_awk_rtx_refdownval (this->run->rtx, this->val);
|
qse_awk_rtx_refdownval (this->run->rtx, this->val);
|
||||||
@ -614,7 +879,7 @@ bool Awk::Return::isIndexed () const
|
|||||||
|
|
||||||
int Awk::Return::setIndexed (const char_t* idx, size_t iln, long_t v)
|
int Awk::Return::setIndexed (const char_t* idx, size_t iln, long_t v)
|
||||||
{
|
{
|
||||||
QSE_ASSERT (this->run != QSE_NULL);
|
if (this->run == QSE_NULL) return -1;
|
||||||
|
|
||||||
int opt = this->run->awk->getOption();
|
int opt = this->run->awk->getOption();
|
||||||
if ((opt & OPT_MAPTOVAR) == 0)
|
if ((opt & OPT_MAPTOVAR) == 0)
|
||||||
@ -626,12 +891,12 @@ int Awk::Return::setIndexed (const char_t* idx, size_t iln, long_t v)
|
|||||||
|
|
||||||
if (this->val->type != QSE_AWK_VAL_MAP)
|
if (this->val->type != QSE_AWK_VAL_MAP)
|
||||||
{
|
{
|
||||||
qse_awk_val_t* x = qse_awk_rtx_makemapval (this->run->rtx);
|
val_t* x = qse_awk_rtx_makemapval (this->run->rtx);
|
||||||
if (x == QSE_NULL) return -1;
|
if (x == QSE_NULL) return -1;
|
||||||
|
|
||||||
qse_awk_rtx_refupval (this->run->rtx, x);
|
qse_awk_rtx_refupval (this->run->rtx, x);
|
||||||
|
|
||||||
qse_awk_val_t* x2 = qse_awk_rtx_makeintval (this->run->rtx, v);
|
val_t* x2 = qse_awk_rtx_makeintval (this->run->rtx, v);
|
||||||
if (x2 == QSE_NULL)
|
if (x2 == QSE_NULL)
|
||||||
{
|
{
|
||||||
qse_awk_rtx_refdownval (this->run->rtx, x);
|
qse_awk_rtx_refdownval (this->run->rtx, x);
|
||||||
@ -656,7 +921,7 @@ int Awk::Return::setIndexed (const char_t* idx, size_t iln, long_t v)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
qse_awk_val_t* x2 = qse_awk_rtx_makeintval (this->run->rtx, v);
|
val_t* x2 = qse_awk_rtx_makeintval (this->run->rtx, v);
|
||||||
if (x2 == QSE_NULL) return -1;
|
if (x2 == QSE_NULL) return -1;
|
||||||
|
|
||||||
qse_awk_rtx_refupval (this->run->rtx, x2);
|
qse_awk_rtx_refupval (this->run->rtx, x2);
|
||||||
@ -677,7 +942,7 @@ int Awk::Return::setIndexed (const char_t* idx, size_t iln, long_t v)
|
|||||||
|
|
||||||
int Awk::Return::setIndexed (const char_t* idx, size_t iln, real_t v)
|
int Awk::Return::setIndexed (const char_t* idx, size_t iln, real_t v)
|
||||||
{
|
{
|
||||||
QSE_ASSERT (this->run != QSE_NULL);
|
if (this->run == QSE_NULL) return -1;
|
||||||
|
|
||||||
int opt = this->run->awk->getOption();
|
int opt = this->run->awk->getOption();
|
||||||
if ((opt & OPT_MAPTOVAR) == 0)
|
if ((opt & OPT_MAPTOVAR) == 0)
|
||||||
@ -689,12 +954,12 @@ int Awk::Return::setIndexed (const char_t* idx, size_t iln, real_t v)
|
|||||||
|
|
||||||
if (this->val->type != QSE_AWK_VAL_MAP)
|
if (this->val->type != QSE_AWK_VAL_MAP)
|
||||||
{
|
{
|
||||||
qse_awk_val_t* x = qse_awk_rtx_makemapval (this->run->rtx);
|
val_t* x = qse_awk_rtx_makemapval (this->run->rtx);
|
||||||
if (x == QSE_NULL) return -1;
|
if (x == QSE_NULL) return -1;
|
||||||
|
|
||||||
qse_awk_rtx_refupval (this->run->rtx, x);
|
qse_awk_rtx_refupval (this->run->rtx, x);
|
||||||
|
|
||||||
qse_awk_val_t* x2 = qse_awk_rtx_makerealval (this->run->rtx, v);
|
val_t* x2 = qse_awk_rtx_makerealval (this->run->rtx, v);
|
||||||
if (x2 == QSE_NULL)
|
if (x2 == QSE_NULL)
|
||||||
{
|
{
|
||||||
qse_awk_rtx_refdownval (this->run->rtx, x);
|
qse_awk_rtx_refdownval (this->run->rtx, x);
|
||||||
@ -719,7 +984,7 @@ int Awk::Return::setIndexed (const char_t* idx, size_t iln, real_t v)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
qse_awk_val_t* x2 = qse_awk_rtx_makerealval (this->run->rtx, v);
|
val_t* x2 = qse_awk_rtx_makerealval (this->run->rtx, v);
|
||||||
if (x2 == QSE_NULL) return -1;
|
if (x2 == QSE_NULL) return -1;
|
||||||
|
|
||||||
qse_awk_rtx_refupval (this->run->rtx, x2);
|
qse_awk_rtx_refupval (this->run->rtx, x2);
|
||||||
@ -740,7 +1005,7 @@ int Awk::Return::setIndexed (const char_t* idx, size_t iln, real_t v)
|
|||||||
|
|
||||||
int Awk::Return::setIndexed (const char_t* idx, size_t iln, const char_t* str, size_t sln)
|
int Awk::Return::setIndexed (const char_t* idx, size_t iln, const char_t* str, size_t sln)
|
||||||
{
|
{
|
||||||
QSE_ASSERT (this->run != QSE_NULL);
|
if (this->run == QSE_NULL) return -1;
|
||||||
|
|
||||||
int opt = this->run->awk->getOption();
|
int opt = this->run->awk->getOption();
|
||||||
if ((opt & OPT_MAPTOVAR) == 0)
|
if ((opt & OPT_MAPTOVAR) == 0)
|
||||||
@ -752,12 +1017,12 @@ int Awk::Return::setIndexed (const char_t* idx, size_t iln, const char_t* str, s
|
|||||||
|
|
||||||
if (this->val->type != QSE_AWK_VAL_MAP)
|
if (this->val->type != QSE_AWK_VAL_MAP)
|
||||||
{
|
{
|
||||||
qse_awk_val_t* x = qse_awk_rtx_makemapval (this->run->rtx);
|
val_t* x = qse_awk_rtx_makemapval (this->run->rtx);
|
||||||
if (x == QSE_NULL) return -1;
|
if (x == QSE_NULL) return -1;
|
||||||
|
|
||||||
qse_awk_rtx_refupval (this->run->rtx, x);
|
qse_awk_rtx_refupval (this->run->rtx, x);
|
||||||
|
|
||||||
qse_awk_val_t* x2 = qse_awk_rtx_makestrval (this->run->rtx, str, sln);
|
val_t* x2 = qse_awk_rtx_makestrval (this->run->rtx, str, sln);
|
||||||
if (x2 == QSE_NULL)
|
if (x2 == QSE_NULL)
|
||||||
{
|
{
|
||||||
qse_awk_rtx_refdownval (this->run->rtx, x);
|
qse_awk_rtx_refdownval (this->run->rtx, x);
|
||||||
@ -782,7 +1047,7 @@ int Awk::Return::setIndexed (const char_t* idx, size_t iln, const char_t* str, s
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
qse_awk_val_t* x2 = qse_awk_rtx_makestrval (this->run->rtx, str, sln);
|
val_t* x2 = qse_awk_rtx_makestrval (this->run->rtx, str, sln);
|
||||||
if (x2 == QSE_NULL) return -1;
|
if (x2 == QSE_NULL) return -1;
|
||||||
|
|
||||||
qse_awk_rtx_refupval (this->run->rtx, x2);
|
qse_awk_rtx_refupval (this->run->rtx, x2);
|
||||||
@ -803,6 +1068,8 @@ int Awk::Return::setIndexed (const char_t* idx, size_t iln, const char_t* str, s
|
|||||||
|
|
||||||
int Awk::Return::setIndexed (long_t idx, long_t v)
|
int Awk::Return::setIndexed (long_t idx, long_t v)
|
||||||
{
|
{
|
||||||
|
if (this->run == QSE_NULL) return -1;
|
||||||
|
|
||||||
char_t ri[128];
|
char_t ri[128];
|
||||||
|
|
||||||
int rl = Awk::sprintf (
|
int rl = Awk::sprintf (
|
||||||
@ -831,6 +1098,8 @@ int Awk::Return::setIndexed (long_t idx, long_t v)
|
|||||||
|
|
||||||
int Awk::Return::setIndexed (long_t idx, real_t v)
|
int Awk::Return::setIndexed (long_t idx, real_t v)
|
||||||
{
|
{
|
||||||
|
if (this->run == QSE_NULL) return -1;
|
||||||
|
|
||||||
char_t ri[128];
|
char_t ri[128];
|
||||||
|
|
||||||
int rl = Awk::sprintf (
|
int rl = Awk::sprintf (
|
||||||
@ -859,6 +1128,8 @@ int Awk::Return::setIndexed (long_t idx, real_t v)
|
|||||||
|
|
||||||
int Awk::Return::setIndexed (long_t idx, const char_t* str, size_t sln)
|
int Awk::Return::setIndexed (long_t idx, const char_t* str, size_t sln)
|
||||||
{
|
{
|
||||||
|
if (this->run == QSE_NULL) return -1;
|
||||||
|
|
||||||
char_t ri[128];
|
char_t ri[128];
|
||||||
|
|
||||||
int rl = Awk::sprintf (
|
int rl = Awk::sprintf (
|
||||||
@ -993,7 +1264,7 @@ int Awk::Run::setGlobal (int id, long_t v)
|
|||||||
{
|
{
|
||||||
QSE_ASSERT (this->rtx != QSE_NULL);
|
QSE_ASSERT (this->rtx != QSE_NULL);
|
||||||
|
|
||||||
qse_awk_val_t* tmp = qse_awk_rtx_makeintval (this->rtx, v);
|
val_t* tmp = qse_awk_rtx_makeintval (this->rtx, v);
|
||||||
if (tmp == QSE_NULL) return -1;
|
if (tmp == QSE_NULL) return -1;
|
||||||
|
|
||||||
qse_awk_rtx_refupval (this->rtx, tmp);
|
qse_awk_rtx_refupval (this->rtx, tmp);
|
||||||
@ -1006,7 +1277,7 @@ int Awk::Run::setGlobal (int id, real_t v)
|
|||||||
{
|
{
|
||||||
QSE_ASSERT (this->rtx != QSE_NULL);
|
QSE_ASSERT (this->rtx != QSE_NULL);
|
||||||
|
|
||||||
qse_awk_val_t* tmp = qse_awk_rtx_makerealval (this->rtx, v);
|
val_t* tmp = qse_awk_rtx_makerealval (this->rtx, v);
|
||||||
if (tmp == QSE_NULL) return -1;
|
if (tmp == QSE_NULL) return -1;
|
||||||
|
|
||||||
qse_awk_rtx_refupval (this->rtx, tmp);
|
qse_awk_rtx_refupval (this->rtx, tmp);
|
||||||
@ -1019,7 +1290,7 @@ int Awk::Run::setGlobal (int id, const char_t* ptr, size_t len)
|
|||||||
{
|
{
|
||||||
QSE_ASSERT (this->rtx != QSE_NULL);
|
QSE_ASSERT (this->rtx != QSE_NULL);
|
||||||
|
|
||||||
qse_awk_val_t* tmp = qse_awk_rtx_makestrval (this->rtx, ptr, len);
|
val_t* tmp = qse_awk_rtx_makestrval (this->rtx, ptr, len);
|
||||||
if (tmp == QSE_NULL) return -1;
|
if (tmp == QSE_NULL) return -1;
|
||||||
|
|
||||||
qse_awk_rtx_refupval (this->rtx, tmp);
|
qse_awk_rtx_refupval (this->rtx, tmp);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user