Ruby
3.4.0dev (2024-11-05 revision e440268d51fe02b303e3817a7a733a0dac1c5091)
|
A list of byte offsets of newlines in a string. More...
#include "prism/defines.h"
#include <assert.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdlib.h>
Go to the source code of this file.
Data Structures | |
struct | pm_newline_list_t |
A list of offsets of newlines in a string. More... | |
struct | pm_line_column_t |
A line and column in a string. More... | |
Functions | |
bool | pm_newline_list_init (pm_newline_list_t *list, const uint8_t *start, size_t capacity) |
Initialize a new newline list with the given capacity. More... | |
void | pm_newline_list_clear (pm_newline_list_t *list) |
Clear out the newlines that have been appended to the list. More... | |
bool | pm_newline_list_append (pm_newline_list_t *list, const uint8_t *cursor) |
Append a new offset to the newline list. More... | |
int32_t | pm_newline_list_line (const pm_newline_list_t *list, const uint8_t *cursor, int32_t start_line) |
Returns the line of the given offset. More... | |
pm_line_column_t | pm_newline_list_line_column (const pm_newline_list_t *list, const uint8_t *cursor, int32_t start_line) |
Returns the line and column of the given offset. More... | |
void | pm_newline_list_free (pm_newline_list_t *list) |
Free the internal memory allocated for the newline list. More... | |
A list of byte offsets of newlines in a string.
When compiling the syntax tree, it's necessary to know the line and column of many nodes. This is necessary to support things like error messages, tracepoints, etc.
It's possible that we could store the start line, start column, end line, and end column on every node in addition to the offsets that we already store, but that would be quite a lot of memory overhead.
Definition in file pm_newline_list.h.
bool pm_newline_list_append | ( | pm_newline_list_t * | list, |
const uint8_t * | cursor | ||
) |
Append a new offset to the newline list.
Returns true if the reallocation of the offsets succeeds (if one was necessary), otherwise returns false.
list | The list to append to. |
cursor | A pointer to the offset to append. |
Returns true if the reallocation of the offsets succeeds (if one was necessary), otherwise returns false.
Definition at line 35 of file pm_newline_list.c.
Referenced by pm_strspn_whitespace_newlines().
void pm_newline_list_clear | ( | pm_newline_list_t * | list | ) |
Clear out the newlines that have been appended to the list.
list | The list to clear. |
Definition at line 26 of file pm_newline_list.c.
void pm_newline_list_free | ( | pm_newline_list_t * | list | ) |
Free the internal memory allocated for the newline list.
list | The list to free. |
Definition at line 123 of file pm_newline_list.c.
Referenced by pm_parser_free().
bool pm_newline_list_init | ( | pm_newline_list_t * | list, |
const uint8_t * | start, | ||
size_t | capacity | ||
) |
Initialize a new newline list with the given capacity.
Returns true if the allocation of the offsets succeeds, otherwise returns false.
list | The list to initialize. |
start | A pointer to the start of the source string. |
capacity | The initial capacity of the list. |
Returns true if the allocation of the offsets succeeds, otherwise returns false.
Definition at line 8 of file pm_newline_list.c.
int32_t pm_newline_list_line | ( | const pm_newline_list_t * | list, |
const uint8_t * | cursor, | ||
int32_t | start_line | ||
) |
Returns the line of the given offset.
If the offset is not in the list, the line of the closest offset less than the given offset is returned.
list | The list to search. |
cursor | A pointer to the offset to search for. |
start_line | The line to start counting from. |
If the offset is not in the list, the line of the closest offset less than the given offset is returned.
Definition at line 62 of file pm_newline_list.c.
pm_line_column_t pm_newline_list_line_column | ( | const pm_newline_list_t * | list, |
const uint8_t * | cursor, | ||
int32_t | start_line | ||
) |
Returns the line and column of the given offset.
If the offset is not in the list, the line and column of the closest offset less than the given offset are returned.
list | The list to search. |
cursor | A pointer to the offset to search for. |
start_line | The line to start counting from. |
If the offset is not in the list, the line and column of the closest offset less than the given offset are returned.
Definition at line 92 of file pm_newline_list.c.