mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +00:00
ZAM support for negative vector indices
This commit is contained in:
parent
5165a04ae0
commit
d474317958
1 changed files with 8 additions and 4 deletions
|
@ -960,8 +960,10 @@ eval EvalIndexVec(frame[z.v3].uint_val)
|
||||||
macro EvalIndexVec(index)
|
macro EvalIndexVec(index)
|
||||||
auto vv = frame[z.v2].vector_val->RawVec();
|
auto vv = frame[z.v2].vector_val->RawVec();
|
||||||
const auto& vec = *vv;
|
const auto& vec = *vv;
|
||||||
zeek_uint_t ind = index;
|
zeek_int_t ind = index;
|
||||||
if ( ind >= vv->size() )
|
if ( ind < 0 )
|
||||||
|
ind += vv->size();
|
||||||
|
if ( ind < 0 || ind >= vv->size() )
|
||||||
ZAM_run_time_error(z.loc, "no such index");
|
ZAM_run_time_error(z.loc, "no such index");
|
||||||
AssignV1(CopyVal(*vec[ind]))
|
AssignV1(CopyVal(*vec[ind]))
|
||||||
|
|
||||||
|
@ -975,8 +977,10 @@ eval EvalIndexAnyVec(frame[z.v3].uint_val)
|
||||||
|
|
||||||
macro EvalIndexAnyVec(index)
|
macro EvalIndexAnyVec(index)
|
||||||
auto vv = frame[z.v2].vector_val;
|
auto vv = frame[z.v2].vector_val;
|
||||||
zeek_uint_t ind = index;
|
zeek_int_t ind = index;
|
||||||
if ( ind >= vv->Size() )
|
if ( ind < 0 )
|
||||||
|
ind += vv->Size();
|
||||||
|
if ( ind < 0 || ind >= vv->Size() )
|
||||||
ZAM_run_time_error(z.loc, "no such index");
|
ZAM_run_time_error(z.loc, "no such index");
|
||||||
AssignV1(ZVal(vv->ValAt(ind).release()))
|
AssignV1(ZVal(vv->ValAt(ind).release()))
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue