diff --git a/engine/slc.h b/engine/slc.h index fb07871..b75bc20 100644 --- a/engine/slc.h +++ b/engine/slc.h @@ -5,11 +5,16 @@ #include // memcpy, strlen.. #include // NULL -// Session offset type - defaults to 64 bit, but you can override +/* Session offset type - defaults to 64 bit because of union types enable storage for it often, but you can override */ #ifndef SLOFFS_T #define SLOFFS_T uint64_t #endif +/* Maximum length of words - defaults but you can override */ +#ifndef SL_MAX_WORD_NAME +#define SL_MAX_WORD_NAME 255 +#endif + union word_body { SLOFFS_T offset; void *ptr; @@ -234,9 +239,9 @@ typedef union iores iores; typedef iores (*ioconn)(SLC_IO_OP op, const char *param); /** - * Function-abstraction for reading the source code byte-by-byte. + * Function-abstraction for reading the source code char-by-char. */ -typedef uint8_t (*coderead)(); +typedef char (*coderead)(); enum slc_state : uint32_t { /** Before things */ @@ -283,7 +288,8 @@ static inline slc_state slc_def_name_statechange( static inline slc_state slc_word_name_statechange( slc_state current_state, char c, - const char *prefix) { + int *wordname_i, + const char *wordname) { // FIXME: Implement return current_state; } @@ -354,8 +360,10 @@ static inline void slc( int comment_i = 0; int multiline_i = 0; int prefix_i = 0; + int wordname_i = 0; + char wordname[SL_MAX_WORD_NAME]; - uint8_t c = 0; + char c = 0; while(((c = code_src()) != 0)) { process_char: switch(state) { @@ -381,12 +389,12 @@ static inline void slc( } else goto process_char; /* new state might need 'c' too */ /* state -> word_name */ - /* XXX: You can't START words with ':', parts of prefix or comment prefix - that makes my life simpler here */ - if((state == SLC_START) && (comment_i == 0) && (multiline_i == 0) && (prefix_i == 0)) { + if(state == SLC_START) { state = slc_word_name_statechange( state, c, - prefix); + &wordname_i, + wordname); if(state != SLC_START) goto process_char; /* new state might need 'c' too */ } else goto process_char; /* new state might need 'c' too */