From 94e9cf95f3ffe90708e41d0a93be700e0db1a5b9 Mon Sep 17 00:00:00 2001 From: Lukas Krickl Date: Wed, 11 Mar 2026 20:33:33 +0100 Subject: [PATCH] scripting: Added tokenizer for integers --- src/l_lsl.c | 19 +++++++++++++------ src/tests/lsl/intliteral.lsl | 2 +- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/l_lsl.c b/src/l_lsl.c index 820ce6a..2ae4030 100644 --- a/src/l_lsl.c +++ b/src/l_lsl.c @@ -27,7 +27,7 @@ lrts_bool l_lsl_isnum(char c) { return c >= '0' && c <= '9'; } -char *tokbuf[L_LSL_TOK_MAX]; +char tokbuf[L_LSL_TOK_MAX]; const char* l_lsl_next_token(struct l_lsl_vm *v, const char *code, u32 *token_len) { char c = 0; @@ -37,18 +37,27 @@ const char* l_lsl_next_token(struct l_lsl_vm *v, const char *code, c = code[v->lex_pos]; if (l_lsl_isnum(c)) { + /* decimal number */ + while (l_lsl_isnum(c)) { + tokbuf[*token_len] = c; + *token_len += 1; + c = code[++v->lex_pos]; + } } else { u_log(U_LOG_CRIT, "unknown char: %c\n", c); return LRTS_NULL; } - return LRTS_NULL; + tokbuf[*token_len] = '\0'; + + return tokbuf; } struct l_lsl_value l_lsl_compile_file(struct l_lsl_vm *v, const char *path) { struct l_lsl_value val = l_lsl_value_init(); const char *src = u_file_read(path); u32 token_len; + const char *token; u32 prev_lex_pos = v->lex_pos; const char *prev_file_name = v->path; @@ -61,11 +70,9 @@ struct l_lsl_value l_lsl_compile_file(struct l_lsl_vm *v, const char *path) { return val; } - u_printf("%s\n", src); - - l_lsl_next_token(v, src, &token_len); - + token = l_lsl_next_token(v, src, &token_len); + u_printf("%s\n", token); u_free((void*)src); diff --git a/src/tests/lsl/intliteral.lsl b/src/tests/lsl/intliteral.lsl index d00491f..190a180 100644 --- a/src/tests/lsl/intliteral.lsl +++ b/src/tests/lsl/intliteral.lsl @@ -1 +1 @@ -1 +123 -- 2.30.2