Skip to content

Commit 332afc8

Browse files
authored
[k2] prevent copying of array in some cases (#1431)
1 parent 59334f6 commit 332afc8

5 files changed

Lines changed: 9 additions & 8 deletions

File tree

runtime-light/state/component-state.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ void set_reference_counter_recursive(mixed obj, ExtraRefCnt rc) noexcept {
2727
switch (obj.get_type()) {
2828
case mixed::type::ARRAY:
2929
obj.set_reference_counter_to(rc);
30-
for (const auto& it : obj.as_array()) {
30+
for (const auto& it : std::as_const(obj.as_array())) {
3131
set_reference_counter_recursive(it.get_key(), rc);
3232
set_reference_counter_recursive(it.get_value(), rc);
3333
}

runtime-light/stdlib/fork/fork-functions.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ inline kphp::coro::task<bool> f$wait_concurrently(const mixed& fork_id) noexcept
142142
template<typename T>
143143
kphp::coro::task<T> f$wait_multi(array<int64_t> fork_ids) noexcept {
144144
T res{};
145-
for (const auto& it : fork_ids) {
145+
for (const auto& it : std::as_const(fork_ids)) {
146146
res.set_value(it.get_key(), co_await f$wait<typename T::value_type>(it.get_value()));
147147
}
148148
co_return std::move(res);

runtime-light/stdlib/rpc/rpc-api.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ inline kphp::coro::task<array<int64_t>> f$rpc_send_requests(string actor, array<
238238
array<kphp::rpc::request_extra_info> req_extra_info_arr{tl_objects.size()};
239239
auto opt_timeout{timeout.has_value() ? std::optional<double>{timeout.val()} : std::optional<double>{}};
240240

241-
for (const auto& it : tl_objects) {
241+
for (const auto& it : std::as_const(tl_objects)) {
242242
const auto query_info{co_await kphp::forks::id_managed(
243243
kphp::rpc::detail::rpc_tl_query_one_impl({actor.c_str(), actor.size()}, it.get_value(), opt_timeout, collect_resp_extra_info, ignore_answer))};
244244
query_ids.set_value(it.get_key(), query_info.id);
@@ -253,7 +253,7 @@ inline kphp::coro::task<array<int64_t>> f$rpc_send_requests(string actor, array<
253253

254254
inline kphp::coro::task<array<array<mixed>>> f$rpc_fetch_responses(array<int64_t> query_ids) noexcept {
255255
array<array<mixed>> res{query_ids.size()};
256-
for (const auto& it : query_ids) {
256+
for (const auto& it : std::as_const(query_ids)) {
257257
res.set_value(it.get_key(), co_await kphp::forks::id_managed(kphp::rpc::detail::rpc_tl_query_result_one_impl(it.get_value())));
258258
}
259259
co_return std::move(res);
@@ -288,7 +288,7 @@ kphp::coro::task<array<int64_t>> f$rpc_send_typed_query_requests(string actor, a
288288
array<kphp::rpc::request_extra_info> req_extra_info_arr{query_functions.size()};
289289
auto opt_timeout{timeout.has_value() ? std::optional<double>{timeout.val()} : std::optional<double>{}};
290290

291-
for (const auto& it : query_functions) {
291+
for (const auto& it : std::as_const(query_functions)) {
292292
const auto query_info{co_await kphp::forks::id_managed(kphp::rpc::detail::typed_rpc_tl_query_one_impl(
293293
{actor.c_str(), actor.size()}, rpc_request_t{it.get_value()}, opt_timeout, collect_resp_extra_info, ignore_answer))};
294294
query_ids.set_value(it.get_key(), query_info.id);
@@ -305,7 +305,7 @@ template<std::same_as<int64_t> query_id_t = int64_t, std::same_as<RpcResponseErr
305305
requires std::default_initializable<error_factory_t>
306306
kphp::coro::task<array<class_instance<C$VK$TL$RpcResponse>>> f$rpc_fetch_typed_responses(array<query_id_t> query_ids) noexcept {
307307
array<class_instance<C$VK$TL$RpcResponse>> res{query_ids.size()};
308-
for (const auto& it : query_ids) {
308+
for (const auto& it : std::as_const(query_ids)) {
309309
res.set_value(it.get_key(), co_await kphp::forks::id_managed(kphp::rpc::detail::typed_rpc_tl_query_result_one_impl(it.get_value(), error_factory_t{})));
310310
}
311311
co_return std::move(res);

runtime-light/stdlib/string/regex-functions.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <optional>
1616
#include <string_view>
1717
#include <type_traits>
18+
#include <utility>
1819
#include <variant>
1920

2021
#include "common/containers/final_action.h"
@@ -406,7 +407,7 @@ PCRE2_SIZE set_all_matches(const RegexInfo& regex_info, int64_t flags, std::opti
406407

407408
mixed& all_matches{(*opt_all_matches).get()};
408409
if (pattern_order) [[likely]] {
409-
for (auto& it : matches) {
410+
for (auto& it : std::as_const(matches)) {
410411
all_matches[it.get_key()].push_back(it.get_value());
411412
}
412413
} else {

runtime-light/stdlib/string/regex-functions.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ kphp::coro::task<Optional<string>> f$preg_replace_callback(string pattern, F cal
106106
}
107107

108108
matches = array<string>{mixed_matches.as_array().size()};
109-
for (auto& elem : mixed_matches.as_array()) {
109+
for (auto& elem : std::as_const(mixed_matches.as_array())) {
110110
matches.set_value(elem.get_key(), std::move(elem.get_value().as_string()));
111111
}
112112
}

0 commit comments

Comments
 (0)