From 3eb78b27505b602c1ccfa952c4cc00f942ccb2b9 Mon Sep 17 00:00:00 2001 From: Spartan322 Date: Tue, 2 Jul 2024 03:51:59 -0400 Subject: Fix string interning pointer invalidity for AST Fix errorneous string intern compare Add symbol interning tests Optimize non-conversion identifier cases Add `File::size()` Add InstanceOf concept Remove `FlatValue::value(const symbol_interner_type&)` Add `AbstractSyntaxTree::intern/intern_cst(lexy::lexeme)` overload Add `DiagnosticLogger::intern/intern_cstr(lexy::lexeme)` overload Use pinned_vector to maintain string interning pointer validity for buffers Add vmcontainer submodule for pinned_vector pinned_vector reserves virtual memory at runtime using OS APIs to maintain pointer validity Remove Exception and RTTI requirement from range-v3 submodule --- src/openvic-dataloader/detail/InternalConcepts.hpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'src/openvic-dataloader/detail') diff --git a/src/openvic-dataloader/detail/InternalConcepts.hpp b/src/openvic-dataloader/detail/InternalConcepts.hpp index 0c7913d..06c03a1 100644 --- a/src/openvic-dataloader/detail/InternalConcepts.hpp +++ b/src/openvic-dataloader/detail/InternalConcepts.hpp @@ -6,10 +6,13 @@ #include #include #include +#include #include #include +#include + #include #include @@ -17,8 +20,9 @@ namespace ovdl::detail { template concept IsFile = - requires(T t, const typename T::node_type* node, NodeLocation location) { + requires(T t, const T ct, const typename T::node_type* node, NodeLocation location) { typename T::node_type; + { ct.size() } -> std::same_as; { t.set_location(node, location) } -> std::same_as; { t.location_of(node) } -> std::same_as; }; @@ -58,12 +62,12 @@ namespace ovdl::detail { { ct.errored() } -> std::same_as; { ct.warned() } -> std::same_as; { ct.get_errors() } -> std::same_as; - { t.intern(str, length) } -> std::same_as; - { t.intern(sv) } -> std::same_as; + { t.intern(str, length) } -> detail::InstanceOf; + { t.intern(sv) } -> detail::InstanceOf; { t.intern_cstr(str, length) } -> std::same_as; { t.intern_cstr(sv) } -> std::same_as; - { t.symbol_interner() } -> std::same_as; - { ct.symbol_interner() } -> std::same_as; + { t.symbol_interner() } -> detail::InstanceOf; + { ct.symbol_interner() } -> detail::InstanceOf; { t.error(std::declval>()) } -> std::same_as; { t.warning(std::declval>()) } -> std::same_as; { t.note(std::declval>()) } -> std::same_as; -- cgit v1.2.3-56-ga3b1