scripting: Added tokenizer for integers
authorLukas Krickl <lukas@krickl.dev>
Wed, 11 Mar 2026 19:33:33 +0000 (20:33 +0100)
committerLukas Krickl <lukas@krickl.dev>
Wed, 11 Mar 2026 19:33:33 +0000 (20:33 +0100)
src/l_lsl.c
src/tests/lsl/intliteral.lsl

index 820ce6ac22561411519b72a7ef54ce539d96e53d..2ae40300da44cfb6627acd87ada19cb54febd4a3 100644 (file)
@@ -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);
 
index d00491fd7e5bb6fa28c517a0bb32b8b506539d4d..190a18037c64c43e6b11489df4bf0b9eb6d2c9bf 100644 (file)
@@ -1 +1 @@
-1
+123