Not really. See IsValueArray/IsValueMap, they are the same because ValueArray is compatible with ValueMap (they are convertible).
But hopefully it is now fixed this way (please check):
Value Compiler::ExeBracket::Eval(ExeContext& x) const
{
Value m = value->Eval(x);
Value q = index->Eval(x);
if(IsNumber(q) && m.Is<ValueArray>()) {
ValueArray va = m;
int i = q;
if(i >= 0 && i < va.GetCount())
return va[i];
}
if(IsValueMap(m)) {
ValueMap map = m;
return map[q];
}
return Value();
}