URI: 
       Make error messages for buffer_get_line more useful - ledit - Text editor (WIP)
  HTML git clone git://lumidify.org/ledit.git (fast, but not encrypted)
  HTML git clone https://lumidify.org/ledit.git (encrypted, but very slow)
  HTML git clone git://4kcetb7mo7hj6grozzybxtotsub5bempzo4lirzc3437amof2c2impyd.onion/ledit.git (over tor)
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 625a8fad5969b39a1ba8484a68935c27ba4a05a7
   DIR parent 79d3040398e884808312473b32e65a02a04feeef
  HTML Author: lumidify <nobody@lumidify.org>
       Date:   Fri,  6 Sep 2024 08:30:59 +0200
       
       Make error messages for buffer_get_line more useful
       
       Diffstat:
         M assert.h                            |       2 ++
         M buffer.c                            |       4 ++--
         M buffer.h                            |       6 +++++-
         M view.c                              |       6 ++----
         M view.h                              |      13 +++++--------
       
       5 files changed, 16 insertions(+), 15 deletions(-)
       ---
   DIR diff --git a/assert.h b/assert.h
       @@ -4,5 +4,7 @@
        /* based on the assert found in OpenBSD */
        void ledit_assert_impl(const char *file, int line, const char *func, const char *failedexpr);
        #define ledit_assert(e) ((e) ? (void)0 : ledit_assert_impl(__FILE__, __LINE__, __func__, #e))
       +/* used by some functions like buffer_get_line */
       +#define ledit_assert_manual(e, file, line, func) ((e) ? (void)0 : ledit_assert_impl(file, line, func, #e))
        
        #endif
   DIR diff --git a/buffer.c b/buffer.c
       @@ -688,8 +688,8 @@ buffer_delete_line_entries_base(ledit_buffer *buffer, size_t index1, size_t inde
        }
        
        ledit_line *
       -buffer_get_line(ledit_buffer *buffer, size_t index) {
       -        ledit_assert(index < buffer->lines_num);
       +buffer_get_line_impl(ledit_buffer *buffer, size_t index, const char *file, int line, const char *func) {
       +        ledit_assert_manual(index < buffer->lines_num, file, line, func);
                return index < buffer->lines_gap ?
                       &buffer->lines[index] :
                       &buffer->lines[index + buffer->lines_cap - buffer->lines_num];
   DIR diff --git a/buffer.h b/buffer.h
       @@ -142,8 +142,12 @@ void buffer_normalize_line(ledit_line *line);
         * Get the line at logical index 'index'.
         * The returned line is only valid until the next
         * action that appends or deletes line entries.
       + * The macro is used in order to give better debug
       + * information when there is an error since so many
       + * functions call this one.
         */
       -ledit_line *buffer_get_line(ledit_buffer *buffer, size_t index);
       +ledit_line *buffer_get_line_impl(ledit_buffer *buffer, size_t index, const char *file, int line, const char *func);
       +#define buffer_get_line(buffer, index) (buffer_get_line_impl((buffer), (index), __FILE__, __LINE__, __func__))
        
        /*
         * Tell views to recalculate the height of line 'line' and
   DIR diff --git a/view.c b/view.c
       @@ -162,15 +162,13 @@ view_unlock(ledit_view *view) {
                view->lock_text = NULL;
        }
        
       -#if 0
        ledit_view_line *
       -view_get_line(ledit_view *view, size_t index) {
       -        ledit_assert(index < view->lines_num);
       +view_get_line_impl(ledit_view *view, size_t index, const char *file, int line, const char *func) {
       +        ledit_assert_manual(index < view->lines_num, file, line, func);
                return index < view->lines_gap ?
                       &view->lines[index] :
                       &view->lines[index + view->lines_cap - view->lines_num];
        }
       -#endif
        
        static void
        move_line_gap(ledit_view *view, size_t index) {
   DIR diff --git a/view.h b/view.h
       @@ -112,15 +112,12 @@ void view_unlock(ledit_view *view);
         * Get the view line at the given index.
         * The returned line is only valid until the next
         * action that appends or deletes line entries.
       + * The macro is used in order to give better debug
       + * information when there is an error since so many
       + * functions call this one.
         */
       -/* ledit_view_line *view_get_line(ledit_view *view, size_t index); */
       -
       -/* This is very hacky - it's so the actual function calling view_get_line is returned in the assertion message.
       - * There probably is a better way to do this.
       - * FIXME: couldn't this just use the same trick that assert does?
       - * WARNING: Since this is now a macro, the arguments are not allowed to have side effects!
       - */
       -#define view_get_line(view, index) (ledit_assert((index) < (view)->lines_num), (index) < (view)->lines_gap ? &(view)->lines[index] : &(view)->lines[(index) + (view)->lines_cap - (view)->lines_num])
       +ledit_view_line *view_get_line_impl(ledit_view *view, size_t index, const char *file, int line, const char *func);
       +#define view_get_line(view, index) (view_get_line_impl((view), (index), __FILE__, __LINE__, __func__))
        
        /*
         * These notification functions are called by the buffer when text