From 232085584a89f00908bc3905ef78bdb95e9fb79c Mon Sep 17 00:00:00 2001 From: Vasilii Rogin Date: Thu, 27 Apr 2023 20:41:33 +0300 Subject: [PATCH] Do not spoil arrays map if array is not found --- src/sfall_arrays.cc | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/sfall_arrays.cc b/src/sfall_arrays.cc index 717aebf..462e34d 100644 --- a/src/sfall_arrays.cc +++ b/src/sfall_arrays.cc @@ -283,9 +283,20 @@ ArrayId CreateTempArray(int len, uint32_t flags) return array_id; } +std::unique_ptr& get_array_by_id(ArrayId array_id) +{ + static auto not_found = std::unique_ptr(nullptr); + auto it = arrays.find(array_id); + if (it == arrays.end()) { + return not_found; + } else { + return it->second; + } +} + ProgramValue GetArrayKey(ArrayId array_id, int index) { - auto& arr = arrays[array_id]; + auto& arr = get_array_by_id(array_id); if (!arr) { return ProgramValue(0); }; @@ -294,7 +305,7 @@ ProgramValue GetArrayKey(ArrayId array_id, int index) int LenArray(ArrayId array_id) { - auto& arr = arrays[array_id]; + auto& arr = get_array_by_id(array_id); if (!arr) { return -1; }; @@ -304,7 +315,7 @@ int LenArray(ArrayId array_id) ProgramValue GetArray(ArrayId array_id, const ProgramValue& key) { - auto& arr = arrays[array_id]; + auto& arr = get_array_by_id(array_id); if (!arr) { return ProgramValue(0); @@ -315,7 +326,7 @@ ProgramValue GetArray(ArrayId array_id, const ProgramValue& key) void SetArray(ArrayId array_id, const ProgramValue& key, const ProgramValue& val, bool allowUnset) { - auto& arr = arrays[array_id]; + auto& arr = get_array_by_id(array_id); if (!arr) { return; } @@ -352,7 +363,7 @@ void sfallArraysReset() void ResizeArray(ArrayId array_id, int newLen) { - auto& arr = arrays[array_id]; + auto& arr = get_array_by_id(array_id); if (!arr) { return; };