]> Kevux Git Server - fll/commitdiff
Progress: Fix some regressions and get tests working further.
authorKevin Day <Kevin@kevux.org>
Sun, 11 Oct 2026 21:12:50 +0000 (16:12 -0500)
committerKevin Day <Kevin@kevux.org>
Sun, 11 Oct 2026 21:12:50 +0000 (16:12 -0500)
The `F_okay_eos` and `F_okay_stop` must actually be returned after all.
Add additional comments in code as well as the documentation comments on the function to clarify.

Switch to `fll_flags` from `found_data` for managing flags within a function.

level_1/fl_fss/c/fss/basic.c
level_1/fl_fss/c/fss/basic_list.c
level_1/fl_fss/c/fss/basic_list.h
level_1/fl_fss/c/fss/embedded_list.c
level_1/fl_fss/c/fss/extended_list.c
level_1/fl_fss/c/private-fss-list.c
level_1/fl_fss/c/private-fss.c
level_2/fll_fss/c/fss/basic_list.c
level_2/fll_fss/c/fss/payload.c

index 4d1eec1780ff6a09686907460d6f9fa50af1e56b..10de929890b39ace104b11446c41a96379eed083 100644 (file)
@@ -48,6 +48,22 @@ extern "C" {
     }
 
     if (F_status_is_error_not(state->status)) {
+
+      // The EOS and stop cases only happen here when EOL is not found, so do not increment found.used.
+      if (range->start >= buffer.used) {
+        found->array[found->used].stop = buffer.used - 1;
+        state->status = F_okay_eos;
+
+        return;
+      }
+
+      if (range->start > range->stop) {
+        found->array[found->used].stop = range->stop;
+        state->status = F_okay_stop;
+
+        return;
+      }
+
       if (range->start > begin) {
         found->array[found->used].start = begin;
         found->array[found->used++].stop = range->start - 1;
@@ -58,11 +74,11 @@ extern "C" {
       }
 
       state->status = f_utf_buffer_increment(buffer, range, 1);
-    }
 
-    if (F_status_is_error(state->status)) return;
-
-    state->status = F_fss_found_content;
+      if (F_status_is_error_not(state->status)) {
+        state->status = F_fss_found_content;
+      }
+    }
   }
 #endif // _di_fl_fss_basic_content_read_
 
index 37eeb053a06a6e2f02967e05b25b26a10d182e13..6b71714031995f073f4b114b3b6729fbdf56dc99 100644 (file)
@@ -133,8 +133,7 @@ extern "C" {
           }
 
           if (state->status == F_data_not) return;
-          if (F_status_is_error(state->status)) break;
-          if (range->start > range->stop || range->start >= buffer.used) break;
+          if (F_status_is_error(state->status) || range->start > range->stop || range->start >= buffer.used) break;
 
           if (state->status == F_okay_eol) {
             newline_last = line_start;
@@ -186,7 +185,9 @@ extern "C" {
         else if ((flag_fl & ___fl_flag_has_graph_first___) && buffer.string[range->start] == f_fss_comment_s.string[0]) {
           ++range->start;
 
-          if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
+          f_fss_skip_past_delimit(buffer, range, state);
+
+          if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
             flag_fl &= ~___fl_flag_has_graph_first_do_escape___;
             slash_count = 0;
 
@@ -227,7 +228,9 @@ extern "C" {
         // Found a valid object, set stop point to last newline.
         if (state->status == F_okay_eol) {
           if (newline_last == found->array[found->used].start) {
-            found->array[found->used++].stop = range->start++;
+            found->array[found->used].start = 1;
+            found->array[found->used++].stop = 0;
+            range->start = newline_last;
           }
           else {
             range->start = newline_last + 1;
@@ -245,7 +248,9 @@ extern "C" {
       if ((flag_fl & ___fl_flag_has_graph_first___) && buffer.string[range->start] == f_fss_comment_s.string[0]) {
         previous = range->start++;
 
-        if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
+        f_fss_skip_past_delimit(buffer, range, state);
+
+        if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
           flag_fl &= ~___fl_flag_has_graph_first_do_escape___;
           slash_count = 0;
 
@@ -304,24 +309,31 @@ extern "C" {
       return;
     }
 
+    // The EOS and stop cases only happen here when content is not found, so do not increment found.used.
+    if (range->start >= buffer.used) {
+      found->array[found->used].stop = buffer.used - 1;
+      state->status = F_okay_eos;
+
+      return;
+    }
+
+    if (range->start > range->stop) {
+      found->array[found->used].stop = range->stop;
+      state->status = F_okay_stop;
+
+      return;
+    }
+
+    state->status = F_fss_found_content;
+
     if (range->start > begin) {
-      if (range->start >= buffer.used) {
-        found->array[found->used++].stop = buffer.used - 1;
-      }
-      else if (range->start > range->stop) {
-        found->array[found->used++].stop = range->stop;
-      }
-      else {
-        found->array[found->used++].stop = range->start - 1;
-      }
+      found->array[found->used++].stop = range->start - 1;
     }
     else {
       found->array[found->used].start = 1;
       found->array[found->used++].stop = 0;
     }
 
-    state->status = F_fss_found_content;
-
     #undef ___fl_flag_do_escape___
     #undef ___fl_flag_has_graph_first___
     #undef ___fl_flag_has_delimit_comment___
@@ -576,14 +588,12 @@ extern "C" {
 
         f_fss_skip_past_delimit(content, range, state);
 
-        if (state->status == F_okay) {
-          if (f_fss_is_combining_joiner(content, *range, state)) {
-            if (state->status == F_combarudoo) {
-              flag_fl |= ___fl_flag_is_combining_graph___;
-            }
-            else if (state->status == F_bound) {
-              flag_fl |= ___fl_flag_is_joiner_graph___;
-            }
+        if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(content, *range, state) == F_true) {
+          if (state->status == F_combarudoo) {
+            flag_fl |= ___fl_flag_is_combining_graph___;
+          }
+          else if (state->status == F_bound) {
+            flag_fl |= ___fl_flag_is_joiner_graph___;
           }
         }
 
@@ -801,14 +811,12 @@ extern "C" {
 
         f_fss_skip_past_delimit(object, range, state);
 
-        if (state->status == F_okay) {
-          if (f_fss_is_combining_joiner(object, *range, state)) {
-            if (state->status == F_combarudoo) {
-              flag_fl |= ___fl_flag_is_combining_graph___;
-            }
-            else if (state->status == F_bound) {
-              flag_fl |= ___fl_flag_is_joiner_graph___;
-            }
+        if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(object, *range, state) == F_true) {
+          if (state->status == F_combarudoo) {
+            flag_fl |= ___fl_flag_is_combining_graph___;
+          }
+          else if (state->status == F_bound) {
+            flag_fl |= ___fl_flag_is_joiner_graph___;
           }
         }
 
index cbc1d9cdb9be0ea91a28260752aa7903732b410c..f29cac941b13baf2c3fbbac46a33ca7dea6bda5d 100644 (file)
@@ -36,6 +36,10 @@ extern "C" {
  *
  * Combining spaces at the start must be handled by the caller to avoid F_complete_not_utf_start errors relating to combining characters.
  *
+ * The content is still technically valid on F_okay_eos and F_okay_stop state.status values, but because this function cannot actually know it will not increment found.used.
+ * However, the start and stop values that are technically valid content are still stored.
+ * The caller should check for the F_okay_eos and F_okay_stop values and increment found.used as desired.
+ *
  * @param buffer
  *   The buffer to read from.
  * @param range
index ae211498129270c9eac5dcda38b84ea06b4d0378..2e403a7018121484a5e77d4093f05045a5202d57 100644 (file)
@@ -106,7 +106,9 @@ extern "C" {
       else if (buffer.string[range->start] == f_fss_slash_s.string[0] && (flag_fl & ___fl_flag_has_graph_first___)) {
         previous = range->start++;
 
-        if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
+        f_fss_skip_past_delimit(buffer, range, state);
+
+        if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
 
           // This cannot be a valid object close at this point, seek until EOL.
           f_fss_seek_to_eol(buffer, range, state);
@@ -132,7 +134,9 @@ extern "C" {
           if (buffer.string[previous] == f_fss_slash_s.string[0]) {
             ++range->start;
 
-            if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
+            f_fss_skip_past_delimit(buffer, range, state);
+
+            if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
               cache->slashes->array[depth] = 0;
               flag_fl |= ___fl_flag_has_joiner_combining___;
 
@@ -176,7 +180,9 @@ extern "C" {
         else if (buffer.string[range->start] == f_fss_embedded_list_open_s.string[0] || buffer.string[range->start] == f_fss_embedded_list_close_s.string[0]) {
           before_list_open = range->start++;
 
-          if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
+          f_fss_skip_past_delimit(buffer, range, state);
+
+          if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
 
             // This cannot be a valid object close at this point, seek until EOL.
             f_fss_seek_to_eol(buffer, range, state);
@@ -291,7 +297,9 @@ extern "C" {
         else if (buffer.string[range->start] == f_fss_comment_s.string[0] && (flag_fl & ___fl_flag_has_graph_first___)) {
           previous = range->start++;
 
-          if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
+          f_fss_skip_past_delimit(buffer, range, state);
+
+          if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
 
             // This cannot be a valid object close at this point, seek until EOL.
             f_fss_seek_to_eol(buffer, range, state);
@@ -480,7 +488,14 @@ extern "C" {
               return;
             }
 
-            state->status = F_fss_found_content;
+            if (range->start >= buffer.used) {
+              state->status = F_okay_eos;
+            } else if (range->start > range->stop) {
+              state->status = F_okay_stop;
+            }
+            else {
+              state->status = F_fss_found_content;
+            }
 
             return;
           }
@@ -495,7 +510,9 @@ extern "C" {
       else if (buffer.string[range->start] == f_fss_comment_s.string[0] && (flag_fl & ___fl_flag_has_graph_first___)) {
         previous = range->start++;
 
-        if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
+        f_fss_skip_past_delimit(buffer, range, state);
+
+        if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
 
           // This cannot be a valid object close at this point, seek until EOL.
           f_fss_seek_to_eol(buffer, range, state);
@@ -850,14 +867,12 @@ extern "C" {
 
         f_fss_skip_past_delimit(content, range, state);
 
-        if (state->status == F_okay) {
-          if (f_fss_is_combining_joiner(content, *range, state) == F_true) {
-            if (state->status == F_combarudoo) {
-              flag |= ___fl_flag_is_combining_graph___;
-            }
-            else if (state->status == F_bound) {
-              flag |= ___fl_flag_is_joiner_graph___;
-            }
+        if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(content, *range, state) == F_true) {
+          if (state->status == F_combarudoo) {
+            flag |= ___fl_flag_is_combining_graph___;
+          }
+          else if (state->status == F_bound) {
+            flag |= ___fl_flag_is_joiner_graph___;
           }
         }
 
@@ -1081,14 +1096,12 @@ extern "C" {
 
         f_fss_skip_past_delimit(object, range, state);
 
-        if (state->status == F_okay) {
-          if (f_fss_is_combining_joiner(object, *range, state) == F_true) {
-            if (state->status == F_combarudoo) {
-              flag |= ___fl_flag_is_combining_graph___;
-            }
-            else if (state->status == F_bound) {
-              flag |= ___fl_flag_is_joiner_graph___;
-            }
+        if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(object, *range, state) == F_true) {
+          if (state->status == F_combarudoo) {
+            flag |= ___fl_flag_is_combining_graph___;
+          }
+          else if (state->status == F_bound) {
+            flag |= ___fl_flag_is_joiner_graph___;
           }
         }
 
index b2b132af52623a6cc5fca7a1f1d3c281bb505def..bde48a57c3c56b86011b5f700b00b5243272cef2 100644 (file)
@@ -147,6 +147,9 @@ extern "C" {
         else if (buffer.string[range->start] == f_fss_comment_s.string[0]) {
           previous = ++range->start;
 
+          f_fss_skip_past_delimit(buffer, range, state);
+          if (F_status_is_error(state->status)) break;
+
           if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
             f_fss_skip_past_combining_joiner(buffer, range, state);
             if (F_status_is_error(state->status)) break;
@@ -214,7 +217,9 @@ extern "C" {
       if (buffer.string[range->start] == f_fss_comment_s.string[0]) {
         previous = ++range->start;
 
-        if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
+        f_fss_skip_past_delimit(buffer, range, state);
+
+        if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
           f_fss_skip_past_combining_joiner(buffer, range, state);
           if (F_status_is_error(state->status)) break;
 
@@ -541,14 +546,12 @@ extern "C" {
 
         f_fss_skip_past_delimit(content, range, state);
 
-        if (state->status == F_okay) {
-          if (f_fss_is_combining_joiner(content, *range, state)) {
-            if (state->status == F_combarudoo) {
-              flag |= ___fl_flag_is_combining_graph___;
-            }
-            else if (state->status == F_bound) {
-              flag |= ___fl_flag_is_joiner_graph___;
-            }
+        if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(content, *range, state) == F_true) {
+          if (state->status == F_combarudoo) {
+            flag |= ___fl_flag_is_combining_graph___;
+          }
+          else if (state->status == F_bound) {
+            flag |= ___fl_flag_is_joiner_graph___;
           }
         }
 
@@ -781,14 +784,12 @@ extern "C" {
 
         f_fss_skip_past_delimit(object, range, state);
 
-        if (state->status == F_okay) {
-          if (f_fss_is_combining_joiner(object, *range, state)) {
-            if (state->status == F_combarudoo) {
-              flag |= ___fl_flag_is_combining_graph___;
-            }
-            else if (state->status == F_bound) {
-              flag |= ___fl_flag_is_joiner_graph___;
-            }
+        if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(object, *range, state) == F_true) {
+          if (state->status == F_combarudoo) {
+            flag |= ___fl_flag_is_combining_graph___;
+          }
+          else if (state->status == F_bound) {
+            flag |= ___fl_flag_is_joiner_graph___;
           }
         }
 
index 9940293e594cb7fbcd0ae8d95d44909e8e9dc843..808ef138911b53a1ef058c87d03959a764a4887f 100644 (file)
@@ -74,8 +74,8 @@ extern "C" {
     f_number_unsigned_t location = 0;
     f_number_unsigned_t slash_first = 0;
     f_number_unsigned_t slash_count = 0;
-    f_number_unsigned_t start = 1;
-    f_number_unsigned_t stop = 0;
+    f_number_unsigned_t line_start = 1;
+    f_number_unsigned_t line_stop = 0;
 
     uint8_t flag_fl = ___fl_flag_has_graph_first___;
 
@@ -97,12 +97,10 @@ extern "C" {
         f_fss_skip_past_delimit(buffer, range, state);
 
         // If first slash has a combining/joiner following it, then there is no escaping at all but this is not a valid escaping slash.
-        if (F_status_is_error_not(state->status)) {
-          if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
-            flag_fl &= ~___fl_flag_do_escape___;
+        if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
+          flag_fl &= ~___fl_flag_do_escape___;
 
-            f_fss_skip_past_combining_joiner(buffer, range, state);
-          }
+          f_fss_skip_past_combining_joiner(buffer, range, state);
         }
 
         if (flag_fl & ___fl_flag_do_escape___) {
@@ -161,19 +159,17 @@ extern "C" {
 
         if (buffer.string[range->start] == list_open.string[0]) {
           flag_fl &= ~___fl_flag_has_graph_first___;
-          stop = range->start++;
+          line_stop = range->start++;
 
           f_fss_skip_past_delimit(buffer, range, state);
 
-          if (F_status_is_error_not(state->status)) {
-            if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
-              flag_fl &= ~___fl_flag_do_escape___;
-              slash_count = 0;
+          if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
+            flag_fl &= ~___fl_flag_do_escape___;
+            slash_count = 0;
 
-              f_fss_skip_past_combining_joiner(buffer, range, state);
+            f_fss_skip_past_combining_joiner(buffer, range, state);
 
-              continue;
-            }
+            continue;
           }
 
           if (F_status_is_error_not(state->status)) {
@@ -234,8 +230,8 @@ extern "C" {
               } // while
 
               range->start = found->stop + 1;
-              found->start = stop;
-              found->stop = stop;
+              found->start = line_stop;
+              found->stop = line_stop;
 
               state->status = f_utf_buffer_decrement(buffer, found, 1);
 
@@ -247,7 +243,7 @@ extern "C" {
               }
 
               found->stop = found->start;
-              found->start = start;
+              found->start = line_start;
               state->status = F_fss_found_object;
             }
             else {
@@ -260,20 +256,18 @@ extern "C" {
         }
         else if ((flag_fl & ___fl_flag_has_graph_first___) && buffer.string[range->start] == f_fss_comment_s.string[0]) {
           flag_fl &= ~___fl_flag_has_graph_first___;
-          start = slash_first;
+          line_start = slash_first;
           location = range->start++;
 
           f_fss_skip_past_delimit(buffer, range, state);
 
-          if (F_status_is_error_not(state->status)) {
-            if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
-              flag_fl &= ~___fl_flag_do_escape___;
-              slash_count = 0;
+          if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
+            flag_fl &= ~___fl_flag_do_escape___;
+            slash_count = 0;
 
-              f_fss_skip_past_combining_joiner(buffer, range, state);
+            f_fss_skip_past_combining_joiner(buffer, range, state);
 
-              continue;
-            }
+            continue;
           }
 
           if (F_status_is_error(state->status)) break;
@@ -291,11 +285,11 @@ extern "C" {
           }
 
           delimits->array[delimits->used++] = slash_first;
-          stop = range->start++;
+          line_stop = range->start++;
         }
         else {
           flag_fl &= ~___fl_flag_has_graph_first___;
-          stop = range->start;
+          line_stop = range->start;
         }
 
         continue;
@@ -339,8 +333,8 @@ extern "C" {
         }
 
         if (state->status == F_okay_eol) {
-          found->start = start;
-          found->stop = stop + macro_f_utf_byte_width(buffer.string[stop]) - 1;
+          found->start = line_start;
+          found->stop = line_stop + macro_f_utf_byte_width(buffer.string[line_stop]) - 1;
           ++range->start;
           state->status = F_fss_found_object;
 
@@ -349,30 +343,28 @@ extern "C" {
 
         if (flag_fl & ___fl_flag_has_graph_first___) {
           flag_fl &= ~___fl_flag_has_graph_first___;
-          start = 1;
-          stop = 0;
+          line_start = 1;
+          line_stop = 0;
         }
         else {
-          stop = range->start;
+          line_stop = range->start;
         }
 
         continue;
       }
 
       if (f_fss_is_space(buffer, *range, state) == F_false) {
-        if (F_status_is_error_not(state->status)) {
-          if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
-            f_fss_skip_past_combining_joiner(buffer, range, state);
-          }
+        if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
+          f_fss_skip_past_combining_joiner(buffer, range, state);
         }
 
         if (F_status_is_error_not(state->status)) {
           if (flag_fl & ___fl_flag_has_graph_first___) {
             flag_fl &= ~___fl_flag_has_graph_first___;
-            start = range->start;
+            line_start = range->start;
           }
 
-          stop = range->start;
+          line_stop = range->start;
         }
       }
 
index c6b37e5c0c9be01bafc793b21c02432c52300e25..3b6930801a640faa80bc9a09fbcfbce1384ccb20 100644 (file)
@@ -96,12 +96,10 @@ extern "C" {
       }
 
       // If first slash has a combining/joiner following it, then there is no escaping at all so slash_first is the start of an object and is not considered an escaping character.
-      if (F_status_is_error_not(state->status)) {
-        if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
-          flag_fl &= ~___fl_flag_do_escape___;
+      if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
+        flag_fl &= ~___fl_flag_do_escape___;
 
-          f_fss_skip_past_combining_joiner(buffer, range, state);
-        }
+        f_fss_skip_past_combining_joiner(buffer, range, state);
       }
 
       if (F_status_is_error(state->status)) return;
@@ -194,6 +192,9 @@ extern "C" {
     else if (!(flag & 0x2) && (buffer.string[range->start] == f_fss_quote_single_s.string[0] || buffer.string[range->start] == f_fss_quote_double_s.string[0] || buffer.string[range->start] == f_fss_quote_grave_s.string[0])) {
       previous = range->start++;
 
+      f_fss_skip_past_delimit(buffer, range, state);
+      if (F_status_is_error(state->status)) return;
+
       if (range->start <= range->stop && range->start < buffer.used) {
         if (f_fss_is_combining_joiner(buffer, *range, state) == F_false) {
           if (F_status_is_error(state->status)) return;
@@ -332,9 +333,12 @@ extern "C" {
                       flag_fl &= ~___fl_flag_has_joiner_combining___;
 
                       state->status = f_utf_buffer_increment(buffer, range, 1);
-                      if (F_status_is_error(state->status)) return;
 
-                      if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
+                      if (F_status_is_error_not(state->status)) {
+                        f_fss_skip_past_delimit(buffer, range, state);
+                      }
+
+                      if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
                         flag_fl |= ___fl_flag_has_joiner_combining___;
                       }
                       else {
@@ -513,7 +517,9 @@ extern "C" {
               state->status = f_utf_buffer_increment(buffer, range, 1);
               if (F_status_is_error(state->status)) return;
 
-              if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
+              f_fss_skip_past_delimit(buffer, range, state);
+
+              if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
                 flag_fl |= ___fl_flag_has_joiner_combining___;
               }
               else {
@@ -724,9 +730,8 @@ extern "C" {
         }
 
         f_fss_skip_past_delimit(buffer, range, state);
-        if (F_status_is_error(state->status)) return;
 
-        if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
+        if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
           f_fss_skip_past_combining_joiner(buffer, range, state);
           if (F_status_is_error_not(state->status)) continue;
         }
@@ -749,9 +754,8 @@ extern "C" {
           }
 
           f_fss_skip_past_delimit(buffer, range, state);
-          if (F_status_is_error(state->status)) return;
 
-          if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
+          if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
             f_fss_skip_past_combining_joiner(buffer, range, state);
             if (F_status_is_error_not(state->status)) continue;
           }
index 40097009b6613a7c835b73ae06592233caa983f3..606a4ee147b066441b19be7d569c1a23d593e6a0 100644 (file)
@@ -67,6 +67,8 @@ extern "C" {
 
       } while (state->status == F_fss_found_object_not);
 
+      // The fl_fss_basic_list_content_read() returns F_okay_eos and F_okay_stop but doesn't increment found.used given that it has no way of knowing.
+      // This function will treat these states as known and declare that this is found content (and therefore found an object).
       if (state->status == F_okay_eos || state->status == F_okay_stop) {
         ++contents->array[contents->used++].used;
         ++objects->used;
index c2ce667717e8b48ac5cfded33ddbdfd1d27b64a3..864a6ce46e58f5d3d840fc83f35187fcaa15ec4e 100644 (file)
@@ -25,8 +25,10 @@ extern "C" {
     f_status_t status = F_okay;
     f_number_unsigned_t initial_used = objects->used;
 
-    // 0x1 = found data, 0x2 = found payload object.
-    uint8_t found_data = 0;
+    #define ___fll_flag_has_data___    0x1
+    #define ___fll_flag_has_payload___ 0x2
+
+    uint8_t fll_flag = 0x0;
 
     do {
       state->status = f_memory_array_increase(state->step_small, sizeof(f_range_t), (void **) &objects->array, &objects->used, &objects->size);
@@ -42,7 +44,7 @@ extern "C" {
         if (F_status_is_error(state->status)) return;
 
         if (f_compare_dynamic_partial_string(f_fss_payload_s.string, buffer, f_fss_payload_s.used, objects->array[objects->used]) == F_equal_to) {
-          found_data |= 0x2;
+          fll_flag |= ___fll_flag_has_payload___;
         }
 
         if (range->start >= range->stop || range->start >= buffer.used) {
@@ -52,7 +54,7 @@ extern "C" {
             break;
           }
 
-          if (found_data & 0x1) {
+          if (fll_flag & ___fll_flag_has_data___) {
             state->status = F_status_set_error((range->start >= buffer.used) ? F_okay_eos : F_okay_stop);
           }
           else {
@@ -63,7 +65,7 @@ extern "C" {
         }
 
         if (state->status == F_fss_found_object) {
-          found_data |= 0x1;
+          fll_flag |= ___fll_flag_has_data___;
           contents->array[contents->used].used = 0;
 
           if (f_compare_dynamic_partial_string(f_fss_payload_s.string, buffer, f_fss_payload_s.used, objects->array[objects->used]) == F_equal_to) {
@@ -102,19 +104,21 @@ extern "C" {
         }
 
         if (state->status == F_fss_found_object_content_not) {
-          found_data |= 0x1;
+          fll_flag |= ___fll_flag_has_data___;
 
           break;
         }
       } while (state->status == F_fss_found_object_not);
 
+      // The fl_fss_basic_list_content_read() returns F_okay_eos and F_okay_stop but doesn't increment found.used given that it has no way of knowing.
+      // This function will treat these states as known and declare that this is found content (and therefore found an object).
       if (state->status == F_okay_eos || state->status == F_okay_stop) {
         ++contents->array[contents->used].used;
         ++objects->used;
         ++contents->used;
 
         // Returning without a "payload" is an error.
-        if (!(found_data & 0x2)) {
+        if (!(fll_flag & ___fll_flag_has_payload___)) {
           state->status = F_status_set_error(state->status);
         }
 
@@ -127,7 +131,7 @@ extern "C" {
         if (objects->used > initial_used) {
 
           // Returning without a "payload" is an error.
-          if (found_data & 0x2) {
+          if (fll_flag & ___fll_flag_has_payload___) {
             state->status = (state->status == F_data_not_eos) ? F_okay_eos : F_okay_stop;
           }
           else {
@@ -146,7 +150,7 @@ extern "C" {
       }
 
       if (state->status == F_fss_found_object_content_not) {
-        found_data |= 0x1;
+        fll_flag |= ___fll_flag_has_data___;
 
         status = f_memory_array_increase(state->step_small, sizeof(f_range_t), (void **) &contents->array[contents->used].array, &contents->array[contents->used].used, &contents->array[contents->used].size);
 
@@ -168,7 +172,7 @@ extern "C" {
         }
 
         // Returning without a "payload" is an error.
-        if (found_data & 0x2) {
+        if (fll_flag & ___fll_flag_has_payload___) {
           state->status = (range->start >= buffer.used) ? F_okay_eos : F_okay_stop;
         }
         else {
@@ -183,6 +187,9 @@ extern "C" {
 
     } while (range->start < F_string_t_size_d);
 
+    #undef ___fll_flag_has_data___
+    #undef ___fll_flag_has_payload___
+
     state->status = F_status_is_error(F_number_overflow);
   }
 #endif // _di_fll_fss_payload_read_