TablePatternMatcher: Use const StringValPtr& instead of const StringVal*

This commit is contained in:
Arne Welzel 2023-11-01 15:23:57 +01:00
parent c426304c27
commit 501b582bc7
5 changed files with 9 additions and 9 deletions

View file

@ -2545,7 +2545,7 @@ ValPtr IndexExpr::Fold(Val* v1, Val* v2) const {
case TYPE_TABLE: case TYPE_TABLE:
if ( is_pattern_table ) if ( is_pattern_table )
return v1->AsTableVal()->LookupPattern(v2->AsListVal()->Idx(0)->AsStringVal()); return v1->AsTableVal()->LookupPattern({NewRef{}, v2->AsListVal()->Idx(0)->AsStringVal()});
v = v1->AsTableVal()->FindOrDefault({NewRef{}, v2}); v = v1->AsTableVal()->FindOrDefault({NewRef{}, v2});
break; break;

View file

@ -1440,7 +1440,7 @@ public:
void Clear() { matcher.reset(); } void Clear() { matcher.reset(); }
VectorValPtr Lookup(const StringVal* s); VectorValPtr Lookup(const StringValPtr& s);
private: private:
void Build(); void Build();
@ -1463,7 +1463,7 @@ private:
std::vector<ValPtr> matcher_yields; std::vector<ValPtr> matcher_yields;
}; };
VectorValPtr detail::TablePatternMatcher::Lookup(const StringVal* s) { VectorValPtr detail::TablePatternMatcher::Lookup(const StringValPtr& s) {
auto results = make_intrusive<VectorVal>(vtype); auto results = make_intrusive<VectorVal>(vtype);
if ( ! matcher ) { if ( ! matcher ) {
@ -2016,7 +2016,7 @@ TableValPtr TableVal::LookupSubnetValues(const SubNetVal* search) {
return nt; return nt;
} }
VectorValPtr TableVal::LookupPattern(const StringVal* s) { VectorValPtr TableVal::LookupPattern(const StringValPtr& s) {
if ( ! pattern_matcher ) if ( ! pattern_matcher )
reporter->InternalError("LookupPattern called on wrong table type"); reporter->InternalError("LookupPattern called on wrong table type");

View file

@ -867,7 +867,7 @@ public:
// For a table[pattern], return a vector of all yields matching // For a table[pattern], return a vector of all yields matching
// the given string. // the given string.
// Causes an internal error if called for any other kind of table. // Causes an internal error if called for any other kind of table.
VectorValPtr LookupPattern(const StringVal* s); VectorValPtr LookupPattern(const StringValPtr& s);
// Sets the timestamp for the given index to network time. // Sets the timestamp for the given index to network time.
// Returns false if index does not exist. // Returns false if index does not exist.

View file

@ -45,7 +45,7 @@ ValPtr index_table__CPP(const TableValPtr& t, vector<ValPtr> indices) {
} }
ValPtr index_patstr_table__CPP(const TableValPtr& t, vector<ValPtr> indices) { ValPtr index_patstr_table__CPP(const TableValPtr& t, vector<ValPtr> indices) {
return t->LookupPattern(indices[0]->AsStringVal()); return t->LookupPattern(cast_intrusive<StringVal>(indices[0]));
} }
ValPtr index_vec__CPP(const VectorValPtr& vec, int index) { ValPtr index_vec__CPP(const VectorValPtr& vec, int index) {

View file

@ -1061,7 +1061,7 @@ internal-op When-PatStr-Index
type VV type VV
eval auto args = z.aux->ToListVal(frame); eval auto args = z.aux->ToListVal(frame);
auto arg0 = args->Idx(0); auto arg0 = args->Idx(0);
auto v = frame[z.v2].table_val->LookupPattern(arg0->AsStringVal()); auto v = frame[z.v2].table_val->LookupPattern({NewRef{}, arg0->AsStringVal()});
if ( IndexExprWhen::evaluating > 0 ) if ( IndexExprWhen::evaluating > 0 )
IndexExprWhen::results.emplace_back(v); IndexExprWhen::results.emplace_back(v);
AssignV1(BuildVal(v, z.t)) AssignV1(BuildVal(v, z.t))
@ -1081,12 +1081,12 @@ eval EvalTableIndex(z.c.ToVal(z.t))
internal-assignment-op Table-PatStr-Index1 internal-assignment-op Table-PatStr-Index1
type VVV type VVV
assign-val v assign-val v
eval auto v = frame[z.v2].table_val->LookupPattern(frame[z.v3].AsString()); eval auto v = frame[z.v2].table_val->LookupPattern({NewRef{}, frame[z.v3].AsString()});
internal-assignment-op Table-PatStr-Index1 internal-assignment-op Table-PatStr-Index1
type VVC type VVC
assign-val v assign-val v
eval auto v = frame[z.v2].table_val->LookupPattern(z.c.AsString()); eval auto v = frame[z.v2].table_val->LookupPattern({NewRef{}, z.c.AsString()});
# This version is for a variable v3. # This version is for a variable v3.
internal-op Index-String internal-op Index-String