21 integer->
digit = eDigitLong;
22 integer->
sign = eSignUnsigned;
27 integer->
digit = eDigitSize;
28 integer->
sign = eSignUnsigned;
33 integer->
digit = eDigitLong;
34 integer->
sign = eSignSigned;
39 integer->
digit = eDigitInt;
40 integer->
sign = eSignUnsigned;
44 integer->
digit = eDigitInt;
45 integer->
sign = eSignSigned;
51 int ret = mpz_init_set_str(integer->
value, copy, (
int)base);
58 msg_notify(logger, &kEvent_InvalidIntegerLiteral, node,
"failed to parse base %zu digit '%s'", base, str);
CT_BROKER_API void ctx_error(const where_t *where, const void *state, const scan_t *scan, const char *msg)
CT_BROKER_API logger_t * ctx_get_logger(const scan_t *scan)
CT_BROKER_API arena_t * ctx_get_arena(const scan_t *scan)
CT_NODISCARD CT_SCAN_API node_t * node_new(const scan_t *scan, where_t where)
create a new node on the heap
CT_NODISCARD CT_ARENA_API char * arena_strndup(STA_READS(len) const char *str, size_t len, arena_t *arena)
allocate a copy of a string with a maximum length from a custom allocator
CT_ARENA_API void arena_free(STA_RELEASE void *ptr, size_t size, arena_t *arena)
release memory from a custom allocator
CT_NOTIFY_API event_builder_t msg_notify(INOUT_NOTNULL logger_t *logs, const diagnostic_t *diagnostic, const node_t *node, STA_FORMAT_STRING const char *fmt,...)
notify the logger of a new message
CT_NODISCARD CT_PUREFN CT_STD_API bool str_endswithn(STA_READS(len) const char *str, size_t len, const char *suffix)
check if a string ends with a substring
void ctu_parse_digit(scan_t *scan, where_t where, ctu_integer_t *integer, const char *str, int len, size_t base)
void ctuerror(where_t *where, void *state, scan_t *scan, const char *msg)
a position in a source file
a location inside a scanner locations are inclusive and 0-based