Sfoglia il codice sorgente

AK: Return Optional<T&> from HashMap<..., T>::get()

This avoids a useless copy of the value, as most of the users (except
one) actually just need a reference to the value.
Ali Mohammad Pur 3 anni fa
parent
commit
33e27c545e

+ 2 - 2
AK/Traits.h

@@ -16,8 +16,8 @@ namespace AK {
 
 
 template<typename T>
 template<typename T>
 struct GenericTraits {
 struct GenericTraits {
-    using PeekType = T;
-    using ConstPeekType = T;
+    using PeekType = T&;
+    using ConstPeekType = T const&;
     static constexpr bool is_trivial() { return false; }
     static constexpr bool is_trivial() { return false; }
     static constexpr bool equals(const T& a, const T& b) { return a == b; }
     static constexpr bool equals(const T& a, const T& b) { return a == b; }
     template<Concepts::HashCompatible<T> U>
     template<Concepts::HashCompatible<T> U>

+ 2 - 2
Userland/Libraries/LibWeb/WebAssembly/WebAssemblyInstanceObject.cpp

@@ -34,7 +34,7 @@ void WebAssemblyInstanceObject::initialize(JS::GlobalObject& global_object)
     for (auto& export_ : instance.exports()) {
     for (auto& export_ : instance.exports()) {
         export_.value().visit(
         export_.value().visit(
             [&](Wasm::FunctionAddress const& address) {
             [&](Wasm::FunctionAddress const& address) {
-                auto object = cache.function_instances.get(address);
+                Optional<JS::FunctionObject*> object = cache.function_instances.get(address);
                 if (!object.has_value()) {
                 if (!object.has_value()) {
                     object = create_native_function(global_object, address, export_.name());
                     object = create_native_function(global_object, address, export_.name());
                     cache.function_instances.set(address, *object);
                     cache.function_instances.set(address, *object);
@@ -42,7 +42,7 @@ void WebAssemblyInstanceObject::initialize(JS::GlobalObject& global_object)
                 m_exports_object->define_direct_property(export_.name(), *object, JS::default_attributes);
                 m_exports_object->define_direct_property(export_.name(), *object, JS::default_attributes);
             },
             },
             [&](Wasm::MemoryAddress const& address) {
             [&](Wasm::MemoryAddress const& address) {
-                auto object = cache.memory_instances.get(address);
+                Optional<WebAssemblyMemoryObject*> object = cache.memory_instances.get(address);
                 if (!object.has_value()) {
                 if (!object.has_value()) {
                     object = heap().allocate<Web::Bindings::WebAssemblyMemoryObject>(global_object, global_object, address);
                     object = heap().allocate<Web::Bindings::WebAssemblyMemoryObject>(global_object, global_object, address);
                     cache.memory_instances.set(address, *object);
                     cache.memory_instances.set(address, *object);