return val;
}
+lrts_bool l_lsl_isnum(char c) {
+ return c >= '0' && c <= '9';
+}
+
char *tokbuf[L_LSL_TOK_MAX];
-const char* l_lsl_next_token(const char *code, u32 len, u32 *token_len) {
- LRTS_UNUSED(code);
- LRTS_UNUSED(len);
+const char* l_lsl_next_token(struct l_lsl_vm *v, const char *code,
+ u32 *token_len) {
+ char c = 0;
*token_len = 0;
+
+ c = code[v->lex_pos];
+
+ if (l_lsl_isnum(c)) {
+ } else {
+ u_log(U_LOG_CRIT, "unknown char: %c\n", c);
+ return LRTS_NULL;
+ }
return LRTS_NULL;
}
struct l_lsl_value val = l_lsl_value_init();
const char *src = u_file_read(path);
u32 token_len;
- u32 src_len = 0;
+ u32 prev_lex_pos = v->lex_pos;
+ const char *prev_file_name = v->path;
+
+ v->lex_pos = 0;
+ v->path = path;
if (src == LRTS_NULL) {
u_log(U_LOG_CRIT, "%s: No such file or directory\n", path);
return val;
}
- src_len = u_strnlen(src, L_LSL_SOURCE_MAX);
-
u_printf("%s\n", src);
- l_lsl_next_token(src, src_len, &token_len);
+ l_lsl_next_token(v, src, &token_len);
u_free((void*)src);
+
+ v->lex_pos = prev_lex_pos;
+ v->path = prev_file_name;
return val;
}
enum l_lsl_error err;
enum l_lsl_flags flags;
+ const char *path;
+ u32 lex_pos;
+
u_malloc_fp malloc;
u_free_fp free;
u_realloc_fp realloc;
* the result token is placed into an internal string buffer and should not be modified
* or saved.
*/
-const char* l_lsl_next_token(const char *code, u32 len, u32 *token_len);
+const char* l_lsl_next_token(struct l_lsl_vm *v, const char *code, u32 *token_len);
/* compiles a program
* returns the resulting program's head as a list