diff --git a/src/Expr.cc b/src/Expr.cc index 9f333c641e..cf4e52f3cf 100644 --- a/src/Expr.cc +++ b/src/Expr.cc @@ -2545,7 +2545,7 @@ ValPtr IndexExpr::Fold(Val* v1, Val* v2) const { case TYPE_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}); break; diff --git a/src/Val.cc b/src/Val.cc index 73bfd2dce7..d8bd8d1897 100644 --- a/src/Val.cc +++ b/src/Val.cc @@ -1440,7 +1440,7 @@ public: void Clear() { matcher.reset(); } - VectorValPtr Lookup(const StringVal* s); + VectorValPtr Lookup(const StringValPtr& s); private: void Build(); @@ -1463,7 +1463,7 @@ private: std::vector matcher_yields; }; -VectorValPtr detail::TablePatternMatcher::Lookup(const StringVal* s) { +VectorValPtr detail::TablePatternMatcher::Lookup(const StringValPtr& s) { auto results = make_intrusive(vtype); if ( ! matcher ) { @@ -2016,7 +2016,7 @@ TableValPtr TableVal::LookupSubnetValues(const SubNetVal* search) { return nt; } -VectorValPtr TableVal::LookupPattern(const StringVal* s) { +VectorValPtr TableVal::LookupPattern(const StringValPtr& s) { if ( ! pattern_matcher ) reporter->InternalError("LookupPattern called on wrong table type"); diff --git a/src/Val.h b/src/Val.h index 3b5176849b..9f201be1b2 100644 --- a/src/Val.h +++ b/src/Val.h @@ -867,7 +867,7 @@ public: // For a table[pattern], return a vector of all yields matching // the given string. // 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. // Returns false if index does not exist. diff --git a/src/script_opt/CPP/RuntimeOps.cc b/src/script_opt/CPP/RuntimeOps.cc index 273b77b315..ae2b9c7744 100644 --- a/src/script_opt/CPP/RuntimeOps.cc +++ b/src/script_opt/CPP/RuntimeOps.cc @@ -45,7 +45,7 @@ ValPtr index_table__CPP(const TableValPtr& t, vector indices) { } ValPtr index_patstr_table__CPP(const TableValPtr& t, vector indices) { - return t->LookupPattern(indices[0]->AsStringVal()); + return t->LookupPattern(cast_intrusive(indices[0])); } ValPtr index_vec__CPP(const VectorValPtr& vec, int index) { diff --git a/src/script_opt/ZAM/Ops.in b/src/script_opt/ZAM/Ops.in index 87b820177f..3ffbeb6462 100644 --- a/src/script_opt/ZAM/Ops.in +++ b/src/script_opt/ZAM/Ops.in @@ -1061,7 +1061,7 @@ internal-op When-PatStr-Index type VV eval auto args = z.aux->ToListVal(frame); 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 ) IndexExprWhen::results.emplace_back(v); AssignV1(BuildVal(v, z.t)) @@ -1081,12 +1081,12 @@ eval EvalTableIndex(z.c.ToVal(z.t)) internal-assignment-op Table-PatStr-Index1 type VVV 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 type VVC 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. internal-op Index-String