diff --git a/lib/Hawk.cpp b/lib/Hawk.cpp index f8fd34ac..db80e31b 100644 --- a/lib/Hawk.cpp +++ b/lib/Hawk.cpp @@ -463,7 +463,7 @@ int Hawk::Value::getInt (hawk_int_t* v) const int n = hawk_rtx_valtoint(this->run->rtx, this->val, &lv); if (n <= -1) { - run->hawk->retrieveError (this->run); + run->hawk->retrieveError(this->run); return -1; } } @@ -483,7 +483,7 @@ int Hawk::Value::getFlt (hawk_flt_t* v) const int n = hawk_rtx_valtoflt(this->run->rtx, this->val, &rv); if (n <= -1) { - run->hawk->retrieveError (this->run); + run->hawk->retrieveError(this->run); return -1; } } @@ -501,7 +501,7 @@ int Hawk::Value::getNum (hawk_int_t* lv, hawk_flt_t* fv) const int n = hawk_rtx_valtonum(this->run->rtx, this->val, lv, fv); if (n <= -1) { - run->hawk->retrieveError (this->run); + run->hawk->retrieveError(this->run); return -1; } return n; @@ -533,7 +533,7 @@ int Hawk::Value::getStr (const hawk_ooch_t** str, hawk_oow_t* len) const out.type = HAWK_RTX_VALTOSTR_CPLDUP; if (hawk_rtx_valtostr(this->run->rtx, this->val, &out) <= -1) { - run->hawk->retrieveError (this->run); + run->hawk->retrieveError(this->run); return -1; } @@ -578,7 +578,7 @@ int Hawk::Value::getMbs (const hawk_bch_t** str, hawk_oow_t* len) const p = hawk_rtx_valtobcstrdup(this->run->rtx, this->val, &l); if (!p) { - run->hawk->retrieveError (this->run); + run->hawk->retrieveError(this->run); return -1; } @@ -656,7 +656,7 @@ int Hawk::Value::setInt (Run* r, hawk_int_t v) tmp = hawk_rtx_makeintval(r->rtx, v); if (tmp == HAWK_NULL) { - r->hawk->retrieveError (r); + r->hawk->retrieveError(r); return -1; } @@ -682,7 +682,7 @@ int Hawk::Value::setFlt (Run* r, hawk_flt_t v) tmp = hawk_rtx_makefltval(r->rtx, v); if (tmp == HAWK_NULL) { - r->hawk->retrieveError (r); + r->hawk->retrieveError(r); return -1; } @@ -712,7 +712,7 @@ int Hawk::Value::setStr (Run* r, const hawk_uch_t* str, hawk_oow_t len, bool num hawk_rtx_makestrvalwithuchars(r->rtx, str, len); if (tmp == HAWK_NULL) { - r->hawk->retrieveError (r); + r->hawk->retrieveError(r); return -1; } @@ -735,7 +735,7 @@ int Hawk::Value::setStr (Run* r, const hawk_uch_t* str, bool numeric) hawk_rtx_makestrvalwithucstr(r->rtx, str); if (tmp == HAWK_NULL) { - r->hawk->retrieveError (r); + r->hawk->retrieveError(r); return -1; } @@ -765,7 +765,7 @@ int Hawk::Value::setStr (Run* r, const hawk_bch_t* str, hawk_oow_t len, bool num hawk_rtx_makestrvalwithbchars(r->rtx, str, len); if (tmp == HAWK_NULL) { - r->hawk->retrieveError (r); + r->hawk->retrieveError(r); return -1; } @@ -788,7 +788,7 @@ int Hawk::Value::setStr (Run* r, const hawk_bch_t* str, bool numeric) hawk_rtx_makestrvalwithbcstr(r->rtx, str); if (tmp == HAWK_NULL) { - r->hawk->retrieveError (r); + r->hawk->retrieveError(r); return -1; } @@ -820,7 +820,7 @@ int Hawk::Value::setMbs (Run* r, const hawk_bch_t* str, hawk_oow_t len) tmp = hawk_rtx_makembsvalwithbcs(r->rtx, &oocs); if (!tmp) { - r->hawk->retrieveError (r); + r->hawk->retrieveError(r); return -1; } @@ -841,7 +841,7 @@ int Hawk::Value::setMbs (Run* r, const hawk_bch_t* str) tmp = hawk_rtx_makembsvalwithbchars(r->rtx, str, hawk_count_bcstr(str)); if (!tmp) { - r->hawk->retrieveError (r); + r->hawk->retrieveError(r); return -1; } @@ -868,7 +868,7 @@ int Hawk::Value::scaleArrayed (Run* r, hawk_ooi_t size) hawk_val_t* arr = hawk_rtx_makearrval(r->rtx, size); // TODO: can we change this to accept the initial value in the constructor if (arr == HAWK_NULL) { - r->hawk->retrieveError (r); + r->hawk->retrieveError(r); return -1; } @@ -895,7 +895,7 @@ int Hawk::Value::scaleArrayed (Run* r, hawk_ooi_t size) { // it can't span across multiple runtime contexts this->run->setError(HAWK_EINVAL); - this->run->hawk->retrieveError (run); + this->run->hawk->retrieveError(run); return -1; } @@ -903,7 +903,7 @@ int Hawk::Value::scaleArrayed (Run* r, hawk_ooi_t size) // update the arr with a given value if (hawk_rtx_setarrvalfld(r->rtx, val, idx, v) == HAWK_NULL) { - r->hawk->retrieveError (r); + r->hawk->retrieveError(r); return -1; } */ @@ -912,6 +912,19 @@ int Hawk::Value::scaleArrayed (Run* r, hawk_ooi_t size) return 0; } +hawk_ooi_t Hawk::Value::getArrayedLength () const +{ + if (HAWK_RTX_GETVALTYPE(r->rtx, this->val) != HAWK_VAL_ARR) return -1; + return (hawk_ooi_t)HAWK_ARR_TALLY(((hawk_val_arr_t*)this->val)->arr); +} + + +hawk_ooi_t Hawk::Value::getArrayedSize () const +{ + if (HAWK_RTX_GETVALTYPE(r->rtx, this->val) != HAWK_VAL_ARR) return -1; + return (hawk_ooi_t)HAWK_ARR_SIZE(((hawk_val_arr_t*)this->val)->arr); + +} int Hawk::Value::setArrayedVal (hawk_ooi_t idx, hawk_val_t* v) { @@ -930,7 +943,7 @@ int Hawk::Value::setArrayedVal (Run* r, hawk_ooi_t idx, hawk_val_t* v) hawk_val_t* arr = hawk_rtx_makearrval(r->rtx, -1); // TODO: can we change this to accept the initial value in the constructor if (arr == HAWK_NULL) { - r->hawk->retrieveError (r); + r->hawk->retrieveError(r); return -1; } @@ -940,7 +953,7 @@ int Hawk::Value::setArrayedVal (Run* r, hawk_ooi_t idx, hawk_val_t* v) if (hawk_rtx_setarrvalfld(r->rtx, arr, idx, v) == HAWK_NULL) { hawk_rtx_refdownval(r->rtx, arr); - r->hawk->retrieveError (r); + r->hawk->retrieveError(r); return -1; } @@ -965,14 +978,14 @@ int Hawk::Value::setArrayedVal (Run* r, hawk_ooi_t idx, hawk_val_t* v) { // it can't span across multiple runtime contexts this->run->setError(HAWK_EINVAL); - this->run->hawk->retrieveError (run); + this->run->hawk->retrieveError(run); return -1; } // update the arr with a given value if (hawk_rtx_setarrvalfld(r->rtx, val, idx, v) == HAWK_NULL) { - r->hawk->retrieveError (r); + r->hawk->retrieveError(r); return -1; } } @@ -1031,7 +1044,7 @@ int Hawk::Value::setIndexedVal (Run* r, const Index& idx, hawk_val_t* v) hawk_val_t* map = hawk_rtx_makemapval(r->rtx); if (map == HAWK_NULL) { - r->hawk->retrieveError (r); + r->hawk->retrieveError(r); return -1; } @@ -1041,7 +1054,7 @@ int Hawk::Value::setIndexedVal (Run* r, const Index& idx, hawk_val_t* v) if (hawk_rtx_setmapvalfld(r->rtx, map, idx.ptr, idx.len, v) == HAWK_NULL) { hawk_rtx_refdownval(r->rtx, map); - r->hawk->retrieveError (r); + r->hawk->retrieveError(r); return -1; } @@ -1066,14 +1079,14 @@ int Hawk::Value::setIndexedVal (Run* r, const Index& idx, hawk_val_t* v) { // it can't span across multiple runtime contexts this->run->setError(HAWK_EINVAL); - this->run->hawk->retrieveError (run); + this->run->hawk->retrieveError(run); return -1; } // update the map with a given value if (hawk_rtx_setmapvalfld(r->rtx, val, idx.ptr, idx.len, v) == HAWK_NULL) { - r->hawk->retrieveError (r); + r->hawk->retrieveError(r); return -1; } } @@ -1092,7 +1105,7 @@ int Hawk::Value::setIndexedInt (Run* r, const Index& idx, hawk_int_t v) hawk_val_t* tmp = hawk_rtx_makeintval (r->rtx, v); if (tmp == HAWK_NULL) { - r->hawk->retrieveError (r); + r->hawk->retrieveError(r); return -1; } @@ -1114,7 +1127,7 @@ int Hawk::Value::setIndexedFlt (Run* r, const Index& idx, hawk_flt_t v) hawk_val_t* tmp = hawk_rtx_makefltval(r->rtx, v); if (tmp == HAWK_NULL) { - r->hawk->retrieveError (r); + r->hawk->retrieveError(r); return -1; } @@ -1141,7 +1154,7 @@ int Hawk::Value::setIndexedStr (Run* r, const Index& idx, const hawk_uch_t* str, hawk_rtx_makestrvalwithuchars(r->rtx, str, len); if (HAWK_UNLIKELY(!tmp)) { - r->hawk->retrieveError (r); + r->hawk->retrieveError(r); return -1; } @@ -1165,7 +1178,7 @@ int Hawk::Value::setIndexedStr (Run* r, const Index& idx, const hawk_uch_t* str, hawk_rtx_makestrvalwithucstr(r->rtx, str); if (HAWK_UNLIKELY(!tmp)) { - r->hawk->retrieveError (r); + r->hawk->retrieveError(r); return -1; } @@ -1190,7 +1203,7 @@ int Hawk::Value::setIndexedStr (Run* r, const Index& idx, const hawk_bch_t* str, hawk_rtx_makestrvalwithbchars(r->rtx, str, len); if (HAWK_UNLIKELY(!tmp)) { - r->hawk->retrieveError (r); + r->hawk->retrieveError(r); return -1; } @@ -1215,7 +1228,7 @@ int Hawk::Value::setIndexedStr (Run* r, const Index& idx, const hawk_bch_t* str, hawk_rtx_makestrvalwithbcstr(r->rtx, str); if (HAWK_UNLIKELY(!tmp)) { - r->hawk->retrieveError (r); + r->hawk->retrieveError(r); return -1; } @@ -1245,7 +1258,7 @@ int Hawk::Value::setIndexedMbs (Run* r, const Index& idx, const hawk_bch_t* str, tmp = hawk_rtx_makembsvalwithbcs(r->rtx, &oocs); if (HAWK_UNLIKELY(!tmp)) { - r->hawk->retrieveError (r); + r->hawk->retrieveError(r); return -1; } @@ -1268,7 +1281,7 @@ int Hawk::Value::setIndexedMbs (Run* r, const Index& idx, const hawk_bch_t* str) tmp = hawk_rtx_makembsvalwithbchars(r->rtx, str, hawk_count_bcstr(str)); if (HAWK_UNLIKELY(!tmp)) { - r->hawk->retrieveError (r); + r->hawk->retrieveError(r); return -1; } @@ -1548,6 +1561,11 @@ Hawk::Hawk (Mmgr* mmgr): this->_cmgr = hawk_get_cmgr_by_id(HAWK_CMGR_UTF8); } +Hawk::~Hawk() +{ + this->close(); +} + const hawk_ooch_t* Hawk::getErrorString (hawk_errnum_t num) const { HAWK_ASSERT (this->hawk != HAWK_NULL); @@ -1636,7 +1654,7 @@ void Hawk::setError (hawk_errnum_t code, const hawk_loc_t* loc) if (this->hawk) { hawk_seterrnum (this->hawk, loc, code); - this->retrieveError (); + this->retrieveError(); } else { @@ -1655,7 +1673,7 @@ void Hawk::formatError (hawk_errnum_t code, const hawk_loc_t* loc, const hawk_bc va_start (ap, fmt); hawk_seterrbvfmt (this->hawk, loc, code, fmt, ap); va_end (ap); - this->retrieveError (); + this->retrieveError(); } else { @@ -1674,7 +1692,7 @@ void Hawk::formatError (hawk_errnum_t code, const hawk_loc_t* loc, const hawk_uc va_start (ap, fmt); hawk_seterruvfmt (this->hawk, loc, code, fmt, ap); va_end (ap); - this->retrieveError (); + this->retrieveError(); } else { @@ -1691,7 +1709,7 @@ void Hawk::clearError () errinf.num = HAWK_ENOERR; } -void Hawk::retrieveError () +void Hawk::retrieveError() { if (this->hawk == HAWK_NULL) { @@ -1703,7 +1721,7 @@ void Hawk::retrieveError () } } -void Hawk::retrieveError (Run* run) +void Hawk::retrieveError(Run* run) { HAWK_ASSERT (run != HAWK_NULL); if (run->rtx == HAWK_NULL) return; @@ -1800,26 +1818,26 @@ int Hawk::open () void Hawk::close () { - this->fini_runctx (); - this->clearArguments (); + this->fini_runctx(); + this->clearArguments(); #if defined(HAWK_USE_HTB_FOR_FUNCTION_MAP) if (this->functionMap) { - hawk_htb_close (this->functionMap); + hawk_htb_close(this->functionMap); this->functionMap = HAWK_NULL; } #else - this->functionMap.clear (); + this->functionMap.clear(); #endif if (this->hawk) { - hawk_close (this->hawk); + hawk_close(this->hawk); this->hawk = HAWK_NULL; } - this->clearError (); + this->clearError(); } hawk_cmgr_t* Hawk::getCmgr () const @@ -1853,7 +1871,7 @@ Hawk::Run* Hawk::parse (Source& in, Source& out) return HAWK_NULL; } - this->fini_runctx (); + this->fini_runctx(); source_reader = ∈ source_writer = (&out == &Source::NONE)? HAWK_NULL: &out; @@ -1865,7 +1883,7 @@ Hawk::Run* Hawk::parse (Source& in, Source& out) int n = hawk_parse(this->hawk, &sio); if (n <= -1) { - this->retrieveError (); + this->retrieveError(); return HAWK_NULL; } @@ -1877,7 +1895,7 @@ Hawk::Run* Hawk::resetRunContext () { if (this->runctx.rtx) { - this->fini_runctx (); + this->fini_runctx(); if (this->init_runctx() <= -1) return HAWK_NULL; return &this->runctx; } @@ -1892,7 +1910,7 @@ int Hawk::loop (Value* ret) hawk_val_t* rv = hawk_rtx_loop (this->runctx.rtx); if (rv == HAWK_NULL) { - this->retrieveError (&this->runctx); + this->retrieveError(&this->runctx); return -1; } @@ -1919,7 +1937,7 @@ int Hawk::call (const hawk_bch_t* name, Value* ret, const Value* args, hawk_oow_ if (ptr == HAWK_NULL) { this->runctx.setError (HAWK_ENOMEM); - this->retrieveError (&this->runctx); + this->retrieveError(&this->runctx); return -1; } } @@ -1933,7 +1951,7 @@ int Hawk::call (const hawk_bch_t* name, Value* ret, const Value* args, hawk_oow_ if (rv == HAWK_NULL) { - this->retrieveError (&this->runctx); + this->retrieveError(&this->runctx); return -1; } @@ -1960,7 +1978,7 @@ int Hawk::call (const hawk_uch_t* name, Value* ret, const Value* args, hawk_oow_ if (ptr == HAWK_NULL) { this->runctx.setError (HAWK_ENOMEM); - this->retrieveError (&this->runctx); + this->retrieveError(&this->runctx); return -1; } } @@ -1974,7 +1992,7 @@ int Hawk::call (const hawk_uch_t* name, Value* ret, const Value* args, hawk_oow_ if (rv == HAWK_NULL) { - this->retrieveError (&this->runctx); + this->retrieveError(&this->runctx); return -1; } @@ -2381,7 +2399,7 @@ int Hawk::addGlobal(const hawk_bch_t* name) { HAWK_ASSERT (this->hawk != HAWK_NULL); int n = hawk_addgblwithbcstr(this->hawk, name); - if (n <= -1) this->retrieveError (); + if (n <= -1) this->retrieveError(); return n; } @@ -2389,7 +2407,7 @@ int Hawk::addGlobal(const hawk_uch_t* name) { HAWK_ASSERT (this->hawk != HAWK_NULL); int n = hawk_addgblwithucstr(this->hawk, name); - if (n <= -1) this->retrieveError (); + if (n <= -1) this->retrieveError(); return n; } @@ -2397,7 +2415,7 @@ int Hawk::deleteGlobal (const hawk_bch_t* name) { HAWK_ASSERT (this->hawk != HAWK_NULL); int n = hawk_delgblwithbcstr(this->hawk, name); - if (n <= -1) this->retrieveError (); + if (n <= -1) this->retrieveError(); return n; } @@ -2405,7 +2423,7 @@ int Hawk::deleteGlobal (const hawk_uch_t* name) { HAWK_ASSERT (this->hawk != HAWK_NULL); int n = hawk_delgblwithucstr(this->hawk, name); - if (n <= -1) this->retrieveError (); + if (n <= -1) this->retrieveError(); return n; } @@ -2414,7 +2432,7 @@ int Hawk::findGlobal (const hawk_bch_t* name, bool inc_builtins) { HAWK_ASSERT (this->hawk != HAWK_NULL); int n = hawk_findgblwithbcstr(this->hawk, name, inc_builtins); - if (n <= -1) this->retrieveError (); + if (n <= -1) this->retrieveError(); return n; } @@ -2422,7 +2440,7 @@ int Hawk::findGlobal (const hawk_uch_t* name, bool inc_builtins) { HAWK_ASSERT (this->hawk != HAWK_NULL); int n = hawk_findgblwithucstr(this->hawk, name, inc_builtins); - if (n <= -1) this->retrieveError (); + if (n <= -1) this->retrieveError(); return n; } @@ -2438,7 +2456,7 @@ int Hawk::setGlobal (int id, const Value& v) } int n = this->runctx.setGlobal(id, v); - if (n <= -1) this->retrieveError (); + if (n <= -1) this->retrieveError(); return n; } @@ -2448,7 +2466,7 @@ int Hawk::getGlobal (int id, Value& v) HAWK_ASSERT (runctx.rtx != HAWK_NULL); int n = runctx.getGlobal (id, v); - if (n <= -1) this->retrieveError (); + if (n <= -1) this->retrieveError(); return n; } @@ -2470,7 +2488,7 @@ int Hawk::addFunction ( hawk_fnc_t* fnc = hawk_addfncwithbcstr(this->hawk, name, &spec); if (fnc == HAWK_NULL) { - this->retrieveError (); + this->retrieveError(); return -1; } @@ -2485,7 +2503,7 @@ int Hawk::addFunction ( if (!pair) { hawk_delfncwithbcstr (this->hawk, name); - this->retrieveError (); + this->retrieveError(); return -1; } #else @@ -2521,7 +2539,7 @@ int Hawk::addFunction ( hawk_fnc_t* fnc = hawk_addfncwithucstr(this->hawk, name, &spec); if (fnc == HAWK_NULL) { - this->retrieveError (); + this->retrieveError(); return -1; } @@ -2536,7 +2554,7 @@ int Hawk::addFunction ( if (!pair) { hawk_delfncwithucstr (this->hawk, name); - this->retrieveError (); + this->retrieveError(); return -1; } #else @@ -2567,7 +2585,7 @@ int Hawk::deleteFunction (const hawk_ooch_t* name) this->functionMap.remove (Cstr(name)); #endif } - else this->retrieveError (); + else this->retrieveError(); return n; } diff --git a/lib/Hawk.hpp b/lib/Hawk.hpp index 9d013488..fc2a1370 100644 --- a/lib/Hawk.hpp +++ b/lib/Hawk.hpp @@ -832,6 +832,33 @@ public: /// The Value class wraps around #hawk_val_t to provide a more /// comprehensive interface. /// + /// An instance of Value must not outlive the associated run-time + /// context and its owning hawk instance. If the close() method is + /// called explicity on the owning hawk instance, you must ensure + /// that the related values are also destroyed before the call to + /// close(). + /// + /// The following will end up in a segmentation fault or the like. + /// HAWK::HawkStd hawk; + /// hawk.open(); + /// HAWK::HawkStd::SourceString in("BEGIN{}"); + /// hawk.parse(in, HAWK::Hawk::Source::NONE); + /// HAWK::Hawk::Value v(rtx); + /// v.setMbs("hello", 5); + /// hawk.close(); + /// + /// You don't call hawk.close() and rely on the destructor or + /// enclose 'v' in another nested scope. + /// HAWK::HawkStd hawk; + /// hawk.open(); + /// HAWK::HawkStd::SourceString in("BEGIN{}"); + /// hawk.parse(in, HAWK::Hawk::Source::NONE); + /// { + /// HAWK::Hawk::Value v(rtx); + /// v.setMbs("hello", 5); + /// } + /// hawk.close(); + /// class HAWK_EXPORT Value { public: @@ -1082,6 +1109,9 @@ public: int scaleArrayed (hawk_ooi_t size); int scaleArrayed (Run* r, hawk_ooi_t size); + hawk_ooi_t getArrayedSize () const; // same value as hawk::size() for an array + hawk_ooi_t getArrayedLength () const; // same value as hawk::length() for an array + bool isArrayed () const; int getArrayed ( hawk_ooi_t idx, ///< array index @@ -1299,7 +1329,7 @@ public: /// The ~Hawk() function destroys an interpreter. Make sure to have /// called close() for finalization before the destructor is executed. - virtual ~Hawk () {} + virtual ~Hawk (); hawk_cmgr_t* getCmgr () const; void setCmgr (hawk_cmgr_t* cmgr); @@ -1933,6 +1963,8 @@ public: { } + ~HawkStd(); + int open (); void close (); diff --git a/lib/Std.cpp b/lib/Std.cpp index 047f04a6..48c0af40 100644 --- a/lib/Std.cpp +++ b/lib/Std.cpp @@ -131,6 +131,11 @@ static hawk_sio_t* open_sio_std (Hawk* hawk, HawkStd::Run* run, hawk_sio_std_t s return sio; } +HawkStd::~HawkStd () +{ + this->close(); +} + int HawkStd::open () { int n = Hawk::open(); @@ -182,7 +187,7 @@ void HawkStd::close () // // HawkStd called hawk_stdmodstartup() after Hawk::open(). - // It's logical to call hawk_stdmodshutdown() Hawk::close(). + // It's logical to call hawk_stdmodshutdown() in Hawk::close(). // but Hawk::close() still needs to call some module's fini and // unload functions. So it must be done in HawkStd::uponClosing() // which is called after modules have been unloaded but while diff --git a/lib/fnc.c b/lib/fnc.c index 196c8f1f..b794274d 100644 --- a/lib/fnc.c +++ b/lib/fnc.c @@ -61,6 +61,7 @@ static hawk_fnc_t sysfnctab[] = /* string functions */ { {HAWK_T("gsub"), 4}, 0, { {2, 3, HAWK_T("xvr")}, hawk_fnc_gsub, 0 }, HAWK_NULL}, +/* TODO: gensub */ { {HAWK_T("index"), 5}, 0, { {2, 3, HAWK_NULL}, hawk_fnc_index, 0 }, HAWK_NULL}, { {HAWK_T("length"), 6}, 1, { {0, 1, HAWK_NULL}, fnc_length, 0 }, HAWK_NULL}, { {HAWK_T("match"), 5}, 0, { {2, 3, HAWK_T("vxr")}, fnc_match, 0 }, HAWK_NULL}, @@ -704,36 +705,12 @@ int hawk_fnc_length (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi, int mode) case HAWK_VAL_MAP: /* map size */ len = HAWK_MAP_SIZE(((hawk_val_map_t*)v)->map); - switch (mode) - { - case 2: /* capacity */ - len = hawk_map_getcapa(((hawk_val_map_t*)v)->map); - break; - - case 1: /* size */ - case 0: /* length */ - default: - len = HAWK_MAP_SIZE(((hawk_val_map_t*)v)->map); - break; - } break; - case HAWK_VAL_ARR: /* returns the number of set items instead of the last index + 1 */ - switch (mode) - { - case 2: /* capacity */ - len = HAWK_ARR_SIZE(((hawk_val_arr_t*)v)->arr); - break; - - case 1: /* size */ - len = HAWK_ARR_SIZE(((hawk_val_arr_t*)v)->arr); - break; - - case 0: /* length */ - default: - len = HAWK_ARR_TALLY(((hawk_val_arr_t*)v)->arr); - break; - } + case HAWK_VAL_ARR: + /* mode 0 - returns the number of set items instead of the last index + 1 */ + /* mode 1 - returns the last index + 1 */ + len = (mode == 0)? HAWK_ARR_TALLY(((hawk_val_arr_t*)v)->arr): HAWK_ARR_SIZE(((hawk_val_arr_t*)v)->arr); break; case HAWK_VAL_BCHR: diff --git a/lib/mod-hawk.c b/lib/mod-hawk.c index 49f9b79a..e63225ad 100644 --- a/lib/mod-hawk.c +++ b/lib/mod-hawk.c @@ -339,12 +339,6 @@ static int fnc_gcrefs (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) /* -------------------------------------------------------------------------- */ -static int fnc_cap (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) -{ - /* capacity */ - return hawk_fnc_length (rtx, fi, 2); -} - static int fnc_size (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) { /* similar to length, but it returns the ubound + 1 for the array */ @@ -539,7 +533,6 @@ static hawk_mod_fnc_tab_t fnctab[] = /* keep this table sorted for binary search in query(). */ { HAWK_T("array"), { { 0, A_MAX, HAWK_NULL }, fnc_array, 0 } }, { HAWK_T("call"), { { 1, A_MAX, HAWK_T("vR") }, fnc_call, 0 } }, - { HAWK_T("cap"), { { 1, 1, HAWK_NULL }, fnc_cap, 0 } }, { HAWK_T("cmgr_exists"), { { 1, 1, HAWK_NULL }, fnc_cmgr_exists, 0 } }, { HAWK_T("function_exists"), { { 1, 1, HAWK_NULL }, fnc_function_exists, 0 } }, { HAWK_T("gc"), { { 0, 1, HAWK_NULL }, fnc_gc, 0 } }, diff --git a/lib/parse.c b/lib/parse.c index 613cde38..4bf3a336 100644 --- a/lib/parse.c +++ b/lib/parse.c @@ -529,13 +529,13 @@ static int get_char (hawk_t* hawk) static void unget_char (hawk_t* hawk, const hawk_sio_lxc_t* c) { /* Make sure that the unget buffer is large enough */ - HAWK_ASSERT (hawk->sio.nungots < HAWK_COUNTOF(hawk->sio.ungot)); + HAWK_ASSERT(hawk->sio.nungots < HAWK_COUNTOF(hawk->sio.ungot)); hawk->sio.ungot[hawk->sio.nungots++] = *c; } const hawk_ooch_t* hawk_getgblname (hawk_t* hawk, hawk_oow_t idx, hawk_oow_t* len) { - HAWK_ASSERT (idx < HAWK_ARR_SIZE(hawk->parse.gbls)); + HAWK_ASSERT(idx < HAWK_ARR_SIZE(hawk->parse.gbls)); *len = HAWK_ARR_DLEN(hawk->parse.gbls,idx); return HAWK_ARR_DPTR(hawk->parse.gbls,idx); @@ -551,7 +551,7 @@ static int parse (hawk_t* hawk) int ret = -1; hawk_ooi_t op; - HAWK_ASSERT (hawk->sio.inf != HAWK_NULL); + HAWK_ASSERT(hawk->sio.inf != HAWK_NULL); op = hawk->sio.inf(hawk, HAWK_SIO_CMD_OPEN, hawk->sio.inp, HAWK_NULL, 0); if (op <= -1) @@ -603,8 +603,8 @@ static int parse (hawk_t* hawk) } } - HAWK_ASSERT (hawk->tree.ngbls == HAWK_ARR_SIZE(hawk->parse.gbls)); - HAWK_ASSERT (hawk->sio.inp == &hawk->sio.arg); + HAWK_ASSERT(hawk->tree.ngbls == HAWK_ARR_SIZE(hawk->parse.gbls)); + HAWK_ASSERT(hawk->sio.inp == &hawk->sio.arg); ret = 0; oops: @@ -622,7 +622,7 @@ oops: prev = hawk->sio.inp->prev; - HAWK_ASSERT (hawk->sio.inp->name != HAWK_NULL); + HAWK_ASSERT(hawk->sio.inp->name != HAWK_NULL); hawk_freemem(hawk, hawk->sio.inp); hawk->sio.inp = prev; @@ -718,10 +718,10 @@ int hawk_parse (hawk_t* hawk, hawk_sio_cbs_t* sio) int n; /* the source code istream must be provided */ - HAWK_ASSERT (sio != HAWK_NULL); + HAWK_ASSERT(sio != HAWK_NULL); /* the source code input stream must be provided at least */ - HAWK_ASSERT (sio->in != HAWK_NULL); + HAWK_ASSERT(sio->in != HAWK_NULL); if (!sio || !sio->in) { @@ -729,11 +729,11 @@ int hawk_parse (hawk_t* hawk, hawk_sio_cbs_t* sio) return -1; } - HAWK_ASSERT (hawk->parse.depth.loop == 0); - HAWK_ASSERT (hawk->parse.depth.expr == 0); + HAWK_ASSERT(hawk->parse.depth.loop == 0); + HAWK_ASSERT(hawk->parse.depth.expr == 0); - hawk_clear (hawk); - hawk_clearsionames (hawk); + hawk_clear(hawk); + hawk_clearsionames(hawk); HAWK_MEMSET (&hawk->sio, 0, HAWK_SIZEOF(hawk->sio)); hawk->sio.inf = sio->in; @@ -750,8 +750,8 @@ int hawk_parse (hawk_t* hawk, hawk_sio_cbs_t* sio) n = parse(hawk); if (n == 0 && hawk->sio.outf != HAWK_NULL) n = deparse(hawk); - HAWK_ASSERT (hawk->parse.depth.loop == 0); - HAWK_ASSERT (hawk->parse.depth.expr == 0); + HAWK_ASSERT(hawk->parse.depth.loop == 0); + HAWK_ASSERT(hawk->parse.depth.expr == 0); return n; } @@ -777,7 +777,7 @@ static int end_include (hawk_t* hawk) cur = hawk->sio.inp; hawk->sio.inp = hawk->sio.inp->prev; - HAWK_ASSERT (cur->name != HAWK_NULL); + HAWK_ASSERT(cur->name != HAWK_NULL); /* restore the pragma values */ hawk->parse.pragma.trait = cur->pragma_trait; hawk_freemem(hawk, cur); @@ -928,7 +928,7 @@ static int parse_progunit (hawk_t* hawk) function name (parameter-list) { statement } */ - HAWK_ASSERT (hawk->parse.depth.loop == 0); + HAWK_ASSERT(hawk->parse.depth.loop == 0); if (MATCH(hawk, TOK_XGLOBAL)) { @@ -938,7 +938,7 @@ static int parse_progunit (hawk_t* hawk) if (get_token(hawk) <= -1) return -1; - HAWK_ASSERT (hawk->tree.ngbls == HAWK_ARR_SIZE(hawk->parse.gbls)); + HAWK_ASSERT(hawk->tree.ngbls == HAWK_ARR_SIZE(hawk->parse.gbls)); ngbls = hawk->tree.ngbls; if (collect_globals(hawk) == HAWK_NULL) { @@ -1229,7 +1229,7 @@ static int parse_progunit (hawk_t* hawk) ptn = parse_expr_withdc(hawk, &eloc); if (ptn == HAWK_NULL) return -1; - HAWK_ASSERT (ptn->next == HAWK_NULL); + HAWK_ASSERT(ptn->next == HAWK_NULL); if (MATCH(hawk,TOK_COMMA)) { @@ -1328,7 +1328,7 @@ static hawk_nde_t* parse_function (hawk_t* hawk) const hawk_ooch_t* redobj; /* eat up the keyword 'function' and get the next token */ - HAWK_ASSERT (MATCH(hawk,TOK_FUNCTION)); + HAWK_ASSERT(MATCH(hawk,TOK_FUNCTION)); if (get_token(hawk) <= -1) return HAWK_NULL; /* check if an identifier is in place */ @@ -1380,7 +1380,7 @@ static hawk_nde_t* parse_function (hawk_t* hawk) if (get_token(hawk) <= -1) goto oops; /* make sure that parameter table is empty */ - HAWK_ASSERT (HAWK_ARR_SIZE(hawk->parse.params) == 0); + HAWK_ASSERT(HAWK_ARR_SIZE(hawk->parse.params) == 0); /* read parameter list */ if (MATCH(hawk,TOK_RPAREN)) @@ -1586,7 +1586,7 @@ static hawk_nde_t* parse_begin (hawk_t* hawk) hawk_loc_t xloc; xloc = hawk->tok.loc; - HAWK_ASSERT (MATCH(hawk,TOK_LBRACE)); + HAWK_ASSERT(MATCH(hawk,TOK_LBRACE)); if (get_token(hawk) <= -1) return HAWK_NULL; nde = parse_block_dc(hawk, &xloc, 1); @@ -1612,7 +1612,7 @@ static hawk_nde_t* parse_end (hawk_t* hawk) hawk_loc_t xloc; xloc = hawk->tok.loc; - HAWK_ASSERT (MATCH(hawk,TOK_LBRACE)); + HAWK_ASSERT(MATCH(hawk,TOK_LBRACE)); if (get_token(hawk) <= -1) return HAWK_NULL; nde = parse_block_dc(hawk, &xloc, 1); @@ -1641,7 +1641,7 @@ static hawk_chain_t* parse_action_block (hawk_t* hawk, hawk_nde_t* ptn, int bloc if (blockless) nde = HAWK_NULL; else { - HAWK_ASSERT (MATCH(hawk,TOK_LBRACE)); + HAWK_ASSERT(MATCH(hawk,TOK_LBRACE)); if (get_token(hawk) <= -1) return HAWK_NULL; nde = parse_block_dc(hawk, &xloc, 1); if (HAWK_UNLIKELY(!nde)) return HAWK_NULL; @@ -1856,7 +1856,7 @@ static hawk_nde_t* parse_block (hawk_t* hawk, const hawk_loc_t* xloc, int flags) /* migrate all block-local variables to the outermost block */ if (flags & PARSE_BLOCK_FLAG_IS_TOP) { - HAWK_ASSERT (nlcls_outer == 0 && nlcls_max == 0); + HAWK_ASSERT(nlcls_outer == 0 && nlcls_max == 0); block->nlcls = hawk->parse.nlcls_max - nlcls_outer; hawk->parse.nlcls_max = nlcls_max; /* restore */ } @@ -1897,7 +1897,7 @@ int hawk_initgbls (hawk_t* hawk) /* hawk_initgbls is not generic-purpose. call this from * hawk_open only. */ - HAWK_ASSERT (hawk->tree.ngbls_base == 0 && hawk->tree.ngbls == 0); + HAWK_ASSERT(hawk->tree.ngbls_base == 0 && hawk->tree.ngbls == 0); hawk->tree.ngbls_base = 0; hawk->tree.ngbls = 0; @@ -1909,13 +1909,13 @@ int hawk_initgbls (hawk_t* hawk) g = hawk_arr_insert(hawk->parse.gbls, HAWK_ARR_SIZE(hawk->parse.gbls), (hawk_ooch_t*)gtab[id].name, gtab[id].namelen); if (g == HAWK_ARR_NIL) return -1; - HAWK_ASSERT ((int)g == id); + HAWK_ASSERT((int)g == id); hawk->tree.ngbls_base++; hawk->tree.ngbls++; } - HAWK_ASSERT (hawk->tree.ngbls_base == HAWK_MAX_GBL_ID-HAWK_MIN_GBL_ID+1); + HAWK_ASSERT(hawk->tree.ngbls_base == HAWK_MAX_GBL_ID-HAWK_MIN_GBL_ID+1); return 0; } @@ -1923,7 +1923,7 @@ static void adjust_static_globals (hawk_t* hawk) { int id; - HAWK_ASSERT (hawk->tree.ngbls_base >= HAWK_MAX_GBL_ID - HAWK_MAX_GBL_ID + 1); + HAWK_ASSERT(hawk->tree.ngbls_base >= HAWK_MAX_GBL_ID - HAWK_MAX_GBL_ID + 1); for (id = HAWK_MIN_GBL_ID; id <= HAWK_MAX_GBL_ID; id++) { @@ -2026,14 +2026,14 @@ static int add_global (hawk_t* hawk, const hawk_oocs_t* name, hawk_loc_t* xloc, return -1; } - HAWK_ASSERT (ngbls == HAWK_ARR_SIZE(hawk->parse.gbls) - 1); + HAWK_ASSERT(ngbls == HAWK_ARR_SIZE(hawk->parse.gbls) - 1); /* the disabled item is inserted normally but * the name length is reset to zero. */ if (disabled) HAWK_ARR_DLEN(hawk->parse.gbls,ngbls) = 0; hawk->tree.ngbls = HAWK_ARR_SIZE (hawk->parse.gbls); - HAWK_ASSERT (ngbls == hawk->tree.ngbls-1); + HAWK_ASSERT(ngbls == hawk->tree.ngbls-1); /* return the id which is the index to the gbl table. */ return (int)ngbls; @@ -2166,7 +2166,7 @@ int hawk_delgblwithbcstr (hawk_t* hawk, const hawk_bch_t* name) hawk->parse.gbls.buf[n].name.len = 0; */ n = hawk_arr_uplete(hawk->parse.gbls, n, 1); - HAWK_ASSERT (n == 1); + HAWK_ASSERT(n == 1); return 0; } @@ -2217,7 +2217,7 @@ int hawk_delgblwithucstr (hawk_t* hawk, const hawk_uch_t* name) hawk->parse.gbls.buf[n].name.len = 0; */ n = hawk_arr_uplete(hawk->parse.gbls, n, 1); - HAWK_ASSERT (n == 1); + HAWK_ASSERT(n == 1); return 0; } @@ -2942,7 +2942,7 @@ static hawk_nde_t* parse_dowhile (hawk_t* hawk, const hawk_loc_t* xloc) hawk_nde_while_t* nde; hawk_loc_t ploc; - HAWK_ASSERT (hawk->ptok.type == TOK_DO); + HAWK_ASSERT(hawk->ptok.type == TOK_DO); ploc = hawk->tok.loc; body = parse_statement(hawk, &ploc); @@ -2998,7 +2998,7 @@ static hawk_nde_t* parse_dowhile (hawk_t* hawk, const hawk_loc_t* xloc) oops: if (body) hawk_clrpt(hawk, body); if (test) hawk_clrpt(hawk, test); - HAWK_ASSERT (nde == HAWK_NULL); + HAWK_ASSERT(nde == HAWK_NULL); return HAWK_NULL; } @@ -3006,7 +3006,7 @@ static hawk_nde_t* parse_break (hawk_t* hawk, const hawk_loc_t* xloc) { hawk_nde_break_t* nde; - HAWK_ASSERT (hawk->ptok.type == TOK_BREAK); + HAWK_ASSERT(hawk->ptok.type == TOK_BREAK); if (hawk->parse.depth.loop <= 0 && hawk->parse.depth.swtch <= 0) { hawk_seterrnum(hawk, xloc, HAWK_EBREAK); @@ -3030,7 +3030,7 @@ static hawk_nde_t* parse_continue (hawk_t* hawk, const hawk_loc_t* xloc) { hawk_nde_continue_t* nde; - HAWK_ASSERT (hawk->ptok.type == TOK_CONTINUE); + HAWK_ASSERT(hawk->ptok.type == TOK_CONTINUE); if (hawk->parse.depth.loop <= 0) { hawk_seterrnum(hawk, xloc, HAWK_ECONTINUE); @@ -3055,7 +3055,7 @@ static hawk_nde_t* parse_return (hawk_t* hawk, const hawk_loc_t* xloc) hawk_nde_return_t* nde; hawk_nde_t* val; - HAWK_ASSERT (hawk->ptok.type == TOK_RETURN); + HAWK_ASSERT(hawk->ptok.type == TOK_RETURN); nde = (hawk_nde_return_t*)hawk_callocmem(hawk, HAWK_SIZEOF(*nde)); if (HAWK_UNLIKELY(!nde)) @@ -3094,7 +3094,7 @@ static hawk_nde_t* parse_exit (hawk_t* hawk, const hawk_loc_t* xloc) hawk_nde_exit_t* nde; hawk_nde_t* val; - HAWK_ASSERT (hawk->ptok.type == TOK_EXIT || hawk->ptok.type == TOK_XABORT); + HAWK_ASSERT(hawk->ptok.type == TOK_EXIT || hawk->ptok.type == TOK_XABORT); nde = (hawk_nde_exit_t*) hawk_callocmem(hawk, HAWK_SIZEOF(*nde)); if (nde == HAWK_NULL) @@ -3133,7 +3133,7 @@ static hawk_nde_t* parse_next (hawk_t* hawk, const hawk_loc_t* xloc) { hawk_nde_next_t* nde; - HAWK_ASSERT (hawk->ptok.type == TOK_NEXT); + HAWK_ASSERT(hawk->ptok.type == TOK_NEXT); if (hawk->parse.id.block == PARSE_BEGIN_BLOCK) { @@ -3195,7 +3195,7 @@ static hawk_nde_t* parse_delete (hawk_t* hawk, const hawk_loc_t* xloc) hawk_nde_type_t type; int inparen = 0; - HAWK_ASSERT (hawk->ptok.type == TOK_DELETE || hawk->ptok.type == TOK_XRESET); + HAWK_ASSERT(hawk->ptok.type == TOK_DELETE || hawk->ptok.type == TOK_XRESET); type = (hawk->ptok.type == TOK_DELETE)? HAWK_NDE_DELETE: HAWK_NDE_RESET; @@ -3260,7 +3260,7 @@ static hawk_nde_t* parse_print (hawk_t* hawk, const hawk_loc_t* xloc) hawk_nde_type_t type; hawk_loc_t eloc; - HAWK_ASSERT (hawk->ptok.type == TOK_PRINT || hawk->ptok.type == TOK_PRINTF); + HAWK_ASSERT(hawk->ptok.type == TOK_PRINT || hawk->ptok.type == TOK_PRINTF); type = (hawk->ptok.type == TOK_PRINT)? HAWK_NDE_PRINT: HAWK_NDE_PRINTF; @@ -3786,7 +3786,7 @@ static hawk_nde_t* parse_expr (hawk_t* hawk, const hawk_loc_t* xloc) return x; } - HAWK_ASSERT (x->next == HAWK_NULL); + HAWK_ASSERT(x->next == HAWK_NULL); if (!is_var(x) && x->type != HAWK_NDE_POS) { hawk_clrpt(hawk, x); @@ -4599,7 +4599,7 @@ static hawk_nde_t* parse_unary (hawk_t* hawk, const hawk_loc_t* xloc) } else { - HAWK_ASSERT (left->type == HAWK_NDE_FLT); + HAWK_ASSERT(left->type == HAWK_NDE_FLT); hawk_clrpt(hawk, left); return new_int_node(hawk, folded.l, xloc); } @@ -4612,7 +4612,7 @@ static hawk_nde_t* parse_unary (hawk_t* hawk, const hawk_loc_t* xloc) } else { - HAWK_ASSERT (left->type == HAWK_NDE_INT); + HAWK_ASSERT(left->type == HAWK_NDE_INT); hawk_clrpt(hawk, left); return new_flt_node(hawk, folded.r, xloc); } @@ -4749,7 +4749,7 @@ static hawk_nde_t* parse_increment (hawk_t* hawk, const hawk_loc_t* xloc) } else /*if (opcode2 != -1)*/ { - HAWK_ASSERT (opcode2 != -1); + HAWK_ASSERT(opcode2 != -1); /* postfix increment operator */ type = HAWK_NDE_EXP_INCPST; @@ -4833,7 +4833,7 @@ static HAWK_INLINE int isfunname (hawk_t* hawk, const hawk_oocs_t* name, hawk_fu if (fun) { *fun = (hawk_fun_t*)HAWK_HTB_VPTR(pair); - HAWK_ASSERT (*fun != HAWK_NULL); + HAWK_ASSERT(*fun != HAWK_NULL); } return FNTYPE_FUN; } @@ -4879,7 +4879,7 @@ static hawk_nde_t* parse_primary_char (hawk_t* hawk, const hawk_loc_t* xloc) return (hawk_nde_t*)nde; oops: - HAWK_ASSERT (nde != HAWK_NULL); + HAWK_ASSERT(nde != HAWK_NULL); hawk_freemem(hawk, nde); return HAWK_NULL; } @@ -4904,7 +4904,7 @@ static hawk_nde_t* parse_primary_bchr (hawk_t* hawk, const hawk_loc_t* xloc) return (hawk_nde_t*)nde; oops: - HAWK_ASSERT (nde != HAWK_NULL); + HAWK_ASSERT(nde != HAWK_NULL); hawk_freemem(hawk, nde); return HAWK_NULL; } @@ -4921,7 +4921,7 @@ static hawk_nde_t* parse_primary_int (hawk_t* hawk, const hawk_loc_t* xloc) ); if (HAWK_UNLIKELY(!nde)) return HAWK_NULL; - HAWK_ASSERT (HAWK_OOECS_LEN(hawk->tok.name) == hawk_count_oocstr(HAWK_OOECS_PTR(hawk->tok.name))); + HAWK_ASSERT(HAWK_OOECS_LEN(hawk->tok.name) == hawk_count_oocstr(HAWK_OOECS_PTR(hawk->tok.name))); /* remember the literal in the original form */ nde->len = HAWK_OOECS_LEN(hawk->tok.name); @@ -4931,7 +4931,7 @@ static hawk_nde_t* parse_primary_int (hawk_t* hawk, const hawk_loc_t* xloc) return (hawk_nde_t*)nde; oops: - HAWK_ASSERT (nde != HAWK_NULL); + HAWK_ASSERT(nde != HAWK_NULL); if (nde->str) hawk_freemem(hawk, nde->str); hawk_freemem(hawk, nde); return HAWK_NULL; @@ -4949,7 +4949,7 @@ static hawk_nde_t* parse_primary_flt (hawk_t* hawk, const hawk_loc_t* xloc) ); if (HAWK_UNLIKELY(!nde)) return HAWK_NULL; - HAWK_ASSERT ( + HAWK_ASSERT( HAWK_OOECS_LEN(hawk->tok.name) == hawk_count_oocstr(HAWK_OOECS_PTR(hawk->tok.name))); @@ -4961,7 +4961,7 @@ static hawk_nde_t* parse_primary_flt (hawk_t* hawk, const hawk_loc_t* xloc) return (hawk_nde_t*)nde; oops: - HAWK_ASSERT (nde != HAWK_NULL); + HAWK_ASSERT(nde != HAWK_NULL); if (nde->str) hawk_freemem(hawk, nde->str); hawk_freemem(hawk, nde); return HAWK_NULL; @@ -4987,7 +4987,7 @@ static hawk_nde_t* parse_primary_str (hawk_t* hawk, const hawk_loc_t* xloc) return (hawk_nde_t*)nde; oops: - HAWK_ASSERT (nde != HAWK_NULL); + HAWK_ASSERT(nde != HAWK_NULL); if (nde->ptr) hawk_freemem(hawk, nde->ptr); hawk_freemem(hawk, nde); return HAWK_NULL; @@ -5037,7 +5037,7 @@ static hawk_nde_t* parse_primary_mbs (hawk_t* hawk, const hawk_loc_t* xloc) return (hawk_nde_t*)nde; oops: - HAWK_ASSERT (nde != HAWK_NULL); + HAWK_ASSERT(nde != HAWK_NULL); if (nde->ptr) hawk_freemem(hawk, nde->ptr); hawk_freemem(hawk, nde); return HAWK_NULL; @@ -5062,7 +5062,7 @@ static hawk_nde_t* parse_primary_rex (hawk_t* hawk, const hawk_loc_t* xloc) SET_TOKEN_TYPE(hawk, &hawk->tok, TOK_REX); if (get_rexstr(hawk, &hawk->tok) <= -1) return HAWK_NULL; - HAWK_ASSERT (MATCH(hawk,TOK_REX)); + HAWK_ASSERT(MATCH(hawk,TOK_REX)); nde = (hawk_nde_rex_t*)hawk_callocmem(hawk, HAWK_SIZEOF(*nde)); if (nde == HAWK_NULL) @@ -5088,7 +5088,7 @@ static hawk_nde_t* parse_primary_rex (hawk_t* hawk, const hawk_loc_t* xloc) return (hawk_nde_t*)nde; oops: - HAWK_ASSERT (nde != HAWK_NULL); + HAWK_ASSERT(nde != HAWK_NULL); if (nde->code[0]) hawk_freerex(hawk, nde->code[0], nde->code[1]); if (nde->str.ptr) hawk_freemem(hawk, nde->str.ptr); hawk_freemem(hawk, nde); @@ -5146,7 +5146,7 @@ static hawk_nde_t* parse_primary_lparen (hawk_t* hawk, const hawk_loc_t* xloc) /* parse subsequent expressions separated by a comma, if any */ last = nde; - HAWK_ASSERT (last->next == HAWK_NULL); + HAWK_ASSERT(last->next == HAWK_NULL); while (MATCH(hawk,TOK_COMMA)) { @@ -5162,7 +5162,7 @@ static hawk_nde_t* parse_primary_lparen (hawk_t* hawk, const hawk_loc_t* xloc) tmp = parse_expr_withdc(hawk, &eloc); if (HAWK_UNLIKELY(!tmp)) goto oops; - HAWK_ASSERT (tmp->next == HAWK_NULL); + HAWK_ASSERT(tmp->next == HAWK_NULL); last->next = tmp; last = tmp; } @@ -5329,7 +5329,7 @@ static hawk_nde_t* parse_primary_xnil (hawk_t* hawk, const hawk_loc_t* xloc) return (hawk_nde_t*)nde; oops: - HAWK_ASSERT (nde != HAWK_NULL); + HAWK_ASSERT(nde != HAWK_NULL); hawk_freemem(hawk, nde); return HAWK_NULL; } @@ -5348,7 +5348,7 @@ static hawk_nde_t* parse_primary_xarg (hawk_t* hawk, const hawk_loc_t* xloc) * function but ARGC is the number of arguments including the program name so ARGC is greater * than @argc by 1. */ - HAWK_ASSERT (hawk->tok.type == TOK_XARGV || hawk->tok.type == TOK_XARGC); + HAWK_ASSERT(hawk->tok.type == TOK_XARGV || hawk->tok.type == TOK_XARGC); if (hawk->tok.type == TOK_XARGV) { @@ -5692,7 +5692,7 @@ static int dup_ident_and_get_next (hawk_t* hawk, const hawk_loc_t* xloc, hawk_oo { int nsegs = 0; - HAWK_ASSERT (MATCH(hawk,TOK_IDENT)); + HAWK_ASSERT(MATCH(hawk,TOK_IDENT)); do { @@ -5786,7 +5786,7 @@ static hawk_nde_t* parse_primary_ident_noseg (hawk_t* hawk, const hawk_loc_t* xl */ hawk_oocs_t segs[2]; - HAWK_ASSERT (fnc->spec.arg.spec != HAWK_NULL); + HAWK_ASSERT(fnc->spec.arg.spec != HAWK_NULL); segs[0].ptr = (hawk_ooch_t*)fnc->spec.arg.spec; segs[0].len = hawk_count_oocstr(fnc->spec.arg.spec); @@ -5834,12 +5834,12 @@ static hawk_nde_t* parse_primary_ident_noseg (hawk_t* hawk, const hawk_loc_t* xl if (fntype) { - HAWK_ASSERT (fntype == FNTYPE_FUN); + HAWK_ASSERT(fntype == FNTYPE_FUN); if (MATCH(hawk,TOK_LPAREN)) { /* must be a function name */ - HAWK_ASSERT (hawk_htb_search(hawk->parse.named, name->ptr, name->len) == HAWK_NULL); + HAWK_ASSERT(hawk_htb_search(hawk->parse.named, name->ptr, name->len) == HAWK_NULL); nde = parse_fncall(hawk, name, HAWK_NULL, xloc, 0); } else @@ -6024,7 +6024,7 @@ static hawk_nde_t* parse_primary_ident (hawk_t* hawk, const hawk_loc_t* xloc) hawk_oocs_t name[2]; /* TODO: support more than 2 segments??? */ int nsegs; - HAWK_ASSERT (MATCH(hawk,TOK_IDENT)); + HAWK_ASSERT(MATCH(hawk,TOK_IDENT)); nsegs = dup_ident_and_get_next(hawk, xloc, name, HAWK_COUNTOF(name)); if (nsegs <= -1) return HAWK_NULL; @@ -6108,7 +6108,7 @@ more_idx: if (!idx) { /* this is the first item */ - HAWK_ASSERT (last == HAWK_NULL); + HAWK_ASSERT(last == HAWK_NULL); idx = tmp; last = tmp; } @@ -6121,7 +6121,7 @@ more_idx: } while (MATCH(hawk,TOK_COMMA)); - HAWK_ASSERT (idx != HAWK_NULL); + HAWK_ASSERT(idx != HAWK_NULL); if (!MATCH(hawk,TOK_RBRACK)) { @@ -6150,8 +6150,8 @@ more_idx: } tmp->type = HAWK_NDE_NULL; - HAWK_ASSERT (idx != HAWK_NULL); - HAWK_ASSERT (last != HAWK_NULL); + HAWK_ASSERT(idx != HAWK_NULL); + HAWK_ASSERT(last != HAWK_NULL); last->next = tmp; last = tmp; @@ -6227,7 +6227,7 @@ more_idx: goto exit_func; } - HAWK_ASSERT (fnname == 0); + HAWK_ASSERT(fnname == 0); nde->type = HAWK_NDE_NAMEDIDX; nde->loc = *xloc; @@ -6373,7 +6373,7 @@ static int get_number (hawk_t* hawk, hawk_tok_t* tok) { hawk_ooci_t c; - HAWK_ASSERT (HAWK_OOECS_LEN(tok->name) == 0); + HAWK_ASSERT(HAWK_OOECS_LEN(tok->name) == 0); SET_TOKEN_TYPE(hawk, tok, TOK_INT); c = hawk->sio.last.c; @@ -7443,7 +7443,7 @@ static int deparse (hawk_t* hawk) hawk_ooi_t op; hawk_oocs_t kw; - HAWK_ASSERT (hawk->sio.outf != HAWK_NULL); + HAWK_ASSERT(hawk->sio.outf != HAWK_NULL); HAWK_MEMSET (&hawk->sio.arg, 0, HAWK_SIZEOF(hawk->sio.arg)); @@ -7466,7 +7466,7 @@ static int deparse (hawk_t* hawk) { hawk_oow_t i, len; - HAWK_ASSERT (hawk->tree.ngbls > 0); + HAWK_ASSERT(hawk->tree.ngbls > 0); hawk_getkwname(hawk, HAWK_KWID_XGLOBAL, &kw); if (hawk_putsrcoochars(hawk, kw.ptr, kw.len) <= -1 || hawk_putsrcoocstr(hawk, HAWK_T(" ")) <= -1) EXIT_DEPARSE (); @@ -7481,7 +7481,7 @@ static int deparse (hawk_t* hawk) else { len = hawk_int_to_oocstr((hawk_int_t)i, 10, HAWK_T("__g"), tmp, HAWK_COUNTOF(tmp)); - HAWK_ASSERT (len != (hawk_oow_t)-1); + HAWK_ASSERT(len != (hawk_oow_t)-1); if (hawk_putsrcoochars(hawk, tmp, len) <= -1) EXIT_DEPARSE (); } @@ -7496,7 +7496,7 @@ static int deparse (hawk_t* hawk) else { len = hawk_int_to_oocstr((hawk_int_t)i, 10, HAWK_T("__g"), tmp, HAWK_COUNTOF(tmp)); - HAWK_ASSERT (len != (hawk_oow_t)-1); + HAWK_ASSERT(len != (hawk_oow_t)-1); if (hawk_putsrcoochars(hawk, tmp, len) <= -1) EXIT_DEPARSE (); } @@ -7609,7 +7609,7 @@ static hawk_htb_walk_t deparse_func (hawk_htb_t* map, hawk_htb_pair_t* pair, voi hawk_oow_t i, n; hawk_oocs_t kw; - HAWK_ASSERT (hawk_comp_oochars(HAWK_HTB_KPTR(pair), HAWK_HTB_KLEN(pair), fun->name.ptr, fun->name.len, 0) == 0); + HAWK_ASSERT(hawk_comp_oochars(HAWK_HTB_KPTR(pair), HAWK_HTB_KLEN(pair), fun->name.ptr, fun->name.len, 0) == 0); #define PUT_C(x,c) \ if (put_char(x->hawk,c)==-1) { \ @@ -7637,7 +7637,7 @@ static hawk_htb_walk_t deparse_func (hawk_htb_t* map, hawk_htb_pair_t* pair, voi { if (fun->argspec && i < fun->argspeclen && fun->argspec[i] == 'r') PUT_S(df, HAWK_T("&")); n = hawk_int_to_oocstr(i++, 10, HAWK_T("__p"), df->tmp, df->tmp_len); - HAWK_ASSERT (n != (hawk_oow_t)-1); + HAWK_ASSERT(n != (hawk_oow_t)-1); PUT_SX (df, df->tmp, n); if (i >= fun->nargs) break; @@ -7791,7 +7791,7 @@ static hawk_mod_t* query_module (hawk_t* hawk, const hawk_oocs_t segs[], int nse hawk_mod_data_t* mdp; int n; - HAWK_ASSERT (nsegs == 2); + HAWK_ASSERT(nsegs == 2); pair = hawk_rbt_search(hawk->modtab, segs[0].ptr, segs[0].len); if (pair) diff --git a/t/Makefile.am b/t/Makefile.am index 9f0ec617..70bbc899 100644 --- a/t/Makefile.am +++ b/t/Makefile.am @@ -28,6 +28,10 @@ EXTRA_DIST = $(check_SCRIPTS) $(check_ERRORS) tap.inc err.sh \ check_PROGRAMS = t-001 t-002 t-003 t-004 t-005 t-006 t-007 t-008 t-009 +if ENABLE_CXX +check_PROGRAMS += t-101 +endif + t_001_SOURCES = t-001.c tap.h t_001_CPPFLAGS = $(CPPFLAGS_COMMON) @@ -79,6 +83,14 @@ t_009_CFLAGS = $(CFLAGS_COMMON) t_009_LDFLAGS = $(LDFLAGS_COMMON) t_009_LDADD = $(LIBADD_COMMON) +if ENABLE_CXX +t_101_SOURCES = t-101.cpp tap.h +t_101_CPPFLAGS = $(CPPFLAGS_COMMON) +t_101_CFLAGS = $(CFLAGS_COMMON) +t_101_LDFLAGS = $(LDFLAGS_COMMON) +t_101_LDADD = $(LIBADD_COMMON) +endif + LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) $(top_srcdir)/ac/tap-driver.sh TESTS = $(check_PROGRAMS) $(check_SCRIPTS) $(check_ERRORS) diff --git a/t/Makefile.in b/t/Makefile.in index 39a90855..20ff1d8f 100644 --- a/t/Makefile.in +++ b/t/Makefile.in @@ -92,7 +92,8 @@ host_triplet = @host@ @ENABLE_WIDE_CHAR_TRUE@am__append_1 = h-001.hawk h-002.hawk check_PROGRAMS = t-001$(EXEEXT) t-002$(EXEEXT) t-003$(EXEEXT) \ t-004$(EXEEXT) t-005$(EXEEXT) t-006$(EXEEXT) t-007$(EXEEXT) \ - t-008$(EXEEXT) t-009$(EXEEXT) + t-008$(EXEEXT) t-009$(EXEEXT) $(am__EXEEXT_1) +@ENABLE_CXX_TRUE@am__append_2 = t-101 subdir = t ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_sign.m4 \ @@ -111,6 +112,7 @@ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/lib/hawk-cfg.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = +@ENABLE_CXX_TRUE@am__EXEEXT_1 = t-101$(EXEEXT) am_t_001_OBJECTS = t_001-t-001.$(OBJEXT) t_001_OBJECTS = $(am_t_001_OBJECTS) t_001_LDADD = $(LDADD) @@ -168,6 +170,13 @@ t_009_DEPENDENCIES = $(am__DEPENDENCIES_2) t_009_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(t_009_CFLAGS) $(CFLAGS) \ $(t_009_LDFLAGS) $(LDFLAGS) -o $@ +am__t_101_SOURCES_DIST = t-101.cpp tap.h +@ENABLE_CXX_TRUE@am_t_101_OBJECTS = t_101-t-101.$(OBJEXT) +t_101_OBJECTS = $(am_t_101_OBJECTS) +@ENABLE_CXX_TRUE@t_101_DEPENDENCIES = $(am__DEPENDENCIES_2) +t_101_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(t_101_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false @@ -187,7 +196,8 @@ am__depfiles_remade = ./$(DEPDIR)/t_001-t-001.Po \ ./$(DEPDIR)/t_002-t-002.Po ./$(DEPDIR)/t_003-t-003.Po \ ./$(DEPDIR)/t_004-t-004.Po ./$(DEPDIR)/t_005-t-005.Po \ ./$(DEPDIR)/t_006-t-006.Po ./$(DEPDIR)/t_007-t-007.Po \ - ./$(DEPDIR)/t_008-t-008.Po ./$(DEPDIR)/t_009-t-009.Po + ./$(DEPDIR)/t_008-t-008.Po ./$(DEPDIR)/t_009-t-009.Po \ + ./$(DEPDIR)/t_101-t-101.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -207,12 +217,32 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) +AM_V_CXX = $(am__v_CXX_@AM_V@) +am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) +am__v_CXX_0 = @echo " CXX " $@; +am__v_CXX_1 = +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) +am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) +am__v_CXXLD_0 = @echo " CXXLD " $@; +am__v_CXXLD_1 = SOURCES = $(t_001_SOURCES) $(t_002_SOURCES) $(t_003_SOURCES) \ $(t_004_SOURCES) $(t_005_SOURCES) $(t_006_SOURCES) \ - $(t_007_SOURCES) $(t_008_SOURCES) $(t_009_SOURCES) + $(t_007_SOURCES) $(t_008_SOURCES) $(t_009_SOURCES) \ + $(t_101_SOURCES) DIST_SOURCES = $(t_001_SOURCES) $(t_002_SOURCES) $(t_003_SOURCES) \ $(t_004_SOURCES) $(t_005_SOURCES) $(t_006_SOURCES) \ - $(t_007_SOURCES) $(t_008_SOURCES) $(t_009_SOURCES) + $(t_007_SOURCES) $(t_008_SOURCES) $(t_009_SOURCES) \ + $(am__t_101_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ @@ -662,6 +692,11 @@ t_009_CPPFLAGS = $(CPPFLAGS_COMMON) t_009_CFLAGS = $(CFLAGS_COMMON) t_009_LDFLAGS = $(LDFLAGS_COMMON) t_009_LDADD = $(LIBADD_COMMON) +@ENABLE_CXX_TRUE@t_101_SOURCES = t-101.cpp tap.h +@ENABLE_CXX_TRUE@t_101_CPPFLAGS = $(CPPFLAGS_COMMON) +@ENABLE_CXX_TRUE@t_101_CFLAGS = $(CFLAGS_COMMON) +@ENABLE_CXX_TRUE@t_101_LDFLAGS = $(LDFLAGS_COMMON) +@ENABLE_CXX_TRUE@t_101_LDADD = $(LIBADD_COMMON) LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) $(top_srcdir)/ac/tap-driver.sh TESTS = $(check_PROGRAMS) $(check_SCRIPTS) $(check_ERRORS) TEST_EXTENSIONS = .hawk .err @@ -674,7 +709,7 @@ AM_ERR_LOG_FLAGS = all: all-am .SUFFIXES: -.SUFFIXES: .c .err .err$(EXEEXT) .hawk .hawk$(EXEEXT) .lo .log .o .obj .trs +.SUFFIXES: .c .cpp .err .err$(EXEEXT) .hawk .hawk$(EXEEXT) .lo .log .o .obj .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ @@ -745,6 +780,10 @@ t-009$(EXEEXT): $(t_009_OBJECTS) $(t_009_DEPENDENCIES) $(EXTRA_t_009_DEPENDENCIE @rm -f t-009$(EXEEXT) $(AM_V_CCLD)$(t_009_LINK) $(t_009_OBJECTS) $(t_009_LDADD) $(LIBS) +t-101$(EXEEXT): $(t_101_OBJECTS) $(t_101_DEPENDENCIES) $(EXTRA_t_101_DEPENDENCIES) + @rm -f t-101$(EXEEXT) + $(AM_V_CXXLD)$(t_101_LINK) $(t_101_OBJECTS) $(t_101_LDADD) $(LIBS) + mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -760,6 +799,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_007-t-007.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_008-t-008.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_009-t-009.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_101-t-101.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @@ -917,6 +957,44 @@ t_009-t-009.obj: t-009.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(t_009_CPPFLAGS) $(CPPFLAGS) $(t_009_CFLAGS) $(CFLAGS) -c -o t_009-t-009.obj `if test -f 't-009.c'; then $(CYGPATH_W) 't-009.c'; else $(CYGPATH_W) '$(srcdir)/t-009.c'; fi` +.cpp.o: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< + +t_101-t-101.o: t-101.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(t_101_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT t_101-t-101.o -MD -MP -MF $(DEPDIR)/t_101-t-101.Tpo -c -o t_101-t-101.o `test -f 't-101.cpp' || echo '$(srcdir)/'`t-101.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/t_101-t-101.Tpo $(DEPDIR)/t_101-t-101.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='t-101.cpp' object='t_101-t-101.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(t_101_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o t_101-t-101.o `test -f 't-101.cpp' || echo '$(srcdir)/'`t-101.cpp + +t_101-t-101.obj: t-101.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(t_101_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT t_101-t-101.obj -MD -MP -MF $(DEPDIR)/t_101-t-101.Tpo -c -o t_101-t-101.obj `if test -f 't-101.cpp'; then $(CYGPATH_W) 't-101.cpp'; else $(CYGPATH_W) '$(srcdir)/t-101.cpp'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/t_101-t-101.Tpo $(DEPDIR)/t_101-t-101.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='t-101.cpp' object='t_101-t-101.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(t_101_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o t_101-t-101.obj `if test -f 't-101.cpp'; then $(CYGPATH_W) 't-101.cpp'; else $(CYGPATH_W) '$(srcdir)/t-101.cpp'; fi` + mostlyclean-libtool: -rm -f *.lo @@ -1204,6 +1282,13 @@ t-009.log: t-009$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +t-101.log: t-101$(EXEEXT) + @p='t-101$(EXEEXT)'; \ + b='t-101'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) .hawk.log: @p='$<'; \ $(am__set_b); \ @@ -1319,6 +1404,7 @@ distclean: distclean-am -rm -f ./$(DEPDIR)/t_007-t-007.Po -rm -f ./$(DEPDIR)/t_008-t-008.Po -rm -f ./$(DEPDIR)/t_009-t-009.Po + -rm -f ./$(DEPDIR)/t_101-t-101.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -1373,6 +1459,7 @@ maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/t_007-t-007.Po -rm -f ./$(DEPDIR)/t_008-t-008.Po -rm -f ./$(DEPDIR)/t_009-t-009.Po + -rm -f ./$(DEPDIR)/t_101-t-101.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic diff --git a/t/t-101.cpp b/t/t-101.cpp new file mode 100644 index 00000000..559f890b --- /dev/null +++ b/t/t-101.cpp @@ -0,0 +1,46 @@ +#include +#include +#include "tap.h" + +#define OK_X(test) OK(test, #test) + +static void test1() +{ + HAWK::HawkStd hawk; + HAWK::Hawk::Run* rtx; + int n; + + n = hawk.open(); + OK_X(n == 0); + + HAWK::HawkStd::SourceString in("BEGIN{}"); + rtx = hawk.parse(in, HAWK::Hawk::Source::NONE); + OK_X(rtx != HAWK_NULL); + + HAWK::Hawk::Value v(rtx); + HAWK::Hawk::Value vi(rtx); + + vi.setInt(1010); + OK_X(vi.getType() == HAWK_VAL_INT); + + v.setMbs("hello", 5); + OK_X(v.getType() == HAWK_VAL_MBS); + + v.setArrayedVal(4, vi); + OK_X(v.getType() == HAWK_VAL_ARR); + OK_X(v.getArrayedSize() == 5); + OK_X(v.getArrayedLength() == 1); + + // i must not call hawk.close() to ensure that v is destroyed first. + //hawk.close(); +} + +int main() +{ + no_plan (); + + test1(); + + return exit_status(); +} +