Skip to content

Commit 8213b33

Browse files
authored
Fix ProcessedRuleHasher (#737)
Signed-off-by: Juan Cruz Viotti <[email protected]>
1 parent 1f5971b commit 8213b33

1 file changed

Lines changed: 9 additions & 11 deletions

File tree

src/alterschema/transformer.cc

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,10 @@
1414
namespace {
1515

1616
struct ProcessedRuleHasher {
17-
auto
18-
operator()(const std::tuple<const sourcemeta::core::JSON *, std::string_view,
19-
std::uint64_t> &value) const noexcept
17+
auto operator()(const std::tuple<sourcemeta::core::Pointer, std::string_view,
18+
std::uint64_t> &value) const noexcept
2019
-> std::size_t {
21-
return std::hash<const void *>{}(std::get<0>(value)) ^
20+
return sourcemeta::core::Pointer::Hasher{}(std::get<0>(value)) ^
2221
(std::hash<std::string_view>{}(std::get<1>(value)) << 1) ^
2322
(std::hash<std::uint64_t>{}(std::get<2>(value)) << 2);
2423
}
@@ -198,9 +197,8 @@ auto SchemaTransformer::apply(core::JSON &schema,
198197
const core::JSON::String &exclude_keyword) const
199198
-> std::pair<bool, std::uint8_t> {
200199
assert(!this->rules.empty());
201-
std::unordered_set<
202-
std::tuple<const core::JSON *, std::string_view, std::uint64_t>,
203-
ProcessedRuleHasher>
200+
std::unordered_set<std::tuple<core::Pointer, std::string_view, std::uint64_t>,
201+
ProcessedRuleHasher>
204202
processed_rules;
205203

206204
core::SchemaFrame frame{core::SchemaFrame::Mode::References};
@@ -285,8 +283,8 @@ auto SchemaTransformer::apply(core::JSON &schema,
285283
analyse_frame(frame, schema, walker, resolver, default_dialect,
286284
default_id);
287285
} else if (current.is_boolean()) {
288-
std::tuple<const core::JSON *, std::string_view, std::uint64_t> mark{
289-
&current, rule->name(), current.fast_hash()};
286+
std::tuple<core::Pointer, std::string_view, std::uint64_t> mark{
287+
entry_pointer, rule->name(), current.fast_hash()};
290288
if (processed_rules.contains(mark)) {
291289
throw SchemaTransformRuleProcessedTwiceError(rule->name(),
292290
entry_pointer);
@@ -343,8 +341,8 @@ auto SchemaTransformer::apply(core::JSON &schema,
343341
references_fixed = true;
344342
}
345343

346-
std::tuple<const core::JSON *, std::string_view, std::uint64_t> mark{
347-
&current, rule->name(), current.fast_hash()};
344+
std::tuple<core::Pointer, std::string_view, std::uint64_t> mark{
345+
entry_pointer, rule->name(), current.fast_hash()};
348346
if (processed_rules.contains(mark)) {
349347
throw SchemaTransformRuleProcessedTwiceError(rule->name(),
350348
entry_pointer);

0 commit comments

Comments
 (0)