diff options
author | Spartan322 <Megacake1234@gmail.com> | 2024-07-02 09:51:59 +0200 |
---|---|---|
committer | Spartan322 <Megacake1234@gmail.com> | 2024-07-05 19:17:25 +0200 |
commit | 3eb78b27505b602c1ccfa952c4cc00f942ccb2b9 (patch) | |
tree | 457b7fbda6d4470465c05d59b0ca51ed30628640 /src/openvic-dataloader/detail/InternalConcepts.hpp | |
parent | deed8ec0ae23651529a58125012c1b4aab015d02 (diff) |
Fix string interning pointer invalidity for ASTsimplify-string-interning
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
Diffstat (limited to 'src/openvic-dataloader/detail/InternalConcepts.hpp')
-rw-r--r-- | src/openvic-dataloader/detail/InternalConcepts.hpp | 14 |
1 files changed, 9 insertions, 5 deletions
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 <openvic-dataloader/NodeLocation.hpp> #include <openvic-dataloader/detail/Encoding.hpp> #include <openvic-dataloader/detail/SymbolIntern.hpp> +#include <openvic-dataloader/detail/Utility.hpp> #include <lexy/encoding.hpp> #include <lexy/input/buffer.hpp> +#include <dryad/symbol.hpp> + #include <fmt/core.h> #include <lexy_ext/report_error.hpp> @@ -17,8 +20,9 @@ namespace ovdl::detail { template<typename T> 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<size_t>; { t.set_location(node, location) } -> std::same_as<void>; { t.location_of(node) } -> std::same_as<NodeLocation>; }; @@ -58,12 +62,12 @@ namespace ovdl::detail { { ct.errored() } -> std::same_as<bool>; { ct.warned() } -> std::same_as<bool>; { ct.get_errors() } -> std::same_as<typename T::error_range>; - { t.intern(str, length) } -> std::same_as<ovdl::SymbolIntern::symbol_type>; - { t.intern(sv) } -> std::same_as<ovdl::SymbolIntern::symbol_type>; + { t.intern(str, length) } -> detail::InstanceOf<dryad::symbol>; + { t.intern(sv) } -> detail::InstanceOf<dryad::symbol>; { t.intern_cstr(str, length) } -> std::same_as<const char*>; { t.intern_cstr(sv) } -> std::same_as<const char*>; - { t.symbol_interner() } -> std::same_as<SymbolIntern::symbol_interner_type&>; - { ct.symbol_interner() } -> std::same_as<const SymbolIntern::symbol_interner_type&>; + { t.symbol_interner() } -> detail::InstanceOf<dryad::symbol_interner>; + { ct.symbol_interner() } -> detail::InstanceOf<dryad::symbol_interner>; { t.error(std::declval<typename T::template format_str<>>()) } -> std::same_as<typename T::Writer>; { t.warning(std::declval<typename T::template format_str<>>()) } -> std::same_as<typename T::Writer>; { t.note(std::declval<typename T::template format_str<>>()) } -> std::same_as<typename T::Writer>; |