diff options
author | mrb0nk500 <b0nk@b0nk.xyz> | 2020-08-30 12:44:21 -0400 |
---|---|---|
committer | mrb0nk500 <b0nk@b0nk.xyz> | 2020-08-30 12:44:21 -0400 |
commit | 4ed07ca38b99abdca750c6612c512f30965f1714 (patch) | |
tree | c093a404b40f9e2c8d02a8d41eed99087483ced3 /lexer.c | |
parent | d31aed21b27fbda68abe088d657ba18455607cc4 (diff) |
- Did some more work on SuBAsm's lexer.
- Optimized the memory read, and write functions.
- Made the emulator faster, and cleaner in general.
Diffstat (limited to 'lexer.c')
-rw-r--r-- | lexer.c | 33 |
1 files changed, 18 insertions, 15 deletions
@@ -198,7 +198,8 @@ uint64_t lex(char *str, uint64_t address, uint16_t bline, uint8_t dbg) { lex_type = 0xFF; uint8_t k = 0; - uint8_t ch = 0; + union reg ch; + ch.u64 =0; uint8_t rs = 0; uint8_t of = 0; uint8_t base = 0; @@ -395,23 +396,25 @@ uint64_t lex(char *str, uint64_t address, uint16_t bline, uint8_t dbg) { } isesc = 0; lexeme[j] = '\0'; - switch (lexeme[k]) { - case '\\': - switch (lexeme[++k]) { - case 'n' : ch = '\n'; break; - case 'r' : ch = '\r'; break; - case 't' : ch = '\t'; break; - case 'b' : ch = '\b'; break; - case '\'': ch = '\''; break; - case '\"': ch = '\"'; break; - case '\\': ch = '\\'; break; - } - break; - default: ch = lexeme[k]; + for (j = 0; lexeme[k] != '\0' && j < 7; k++) { + switch (lexeme[k]) { + case '\\': + switch (lexeme[++k]) { + case 'n' : ch.u8[j++] = '\n'; break; + case 'r' : ch.u8[j++] = '\r'; break; + case 't' : ch.u8[j++] = '\t'; break; + case 'b' : ch.u8[j++] = '\b'; break; + case '\'': ch.u8[j++] = '\''; break; + case '\"': ch.u8[j++] = '\"'; break; + case '\\': ch.u8[j++] = '\\'; break; + } + break; + default: ch.u8[j++] = lexeme[k]; + } } lex_type = TOK_CHAR; l->count++; - t = make_token(lex_type, 0, space, tab, ch, "", NULL); + t = make_token(lex_type, 0, space, tab, ch.u64, "", NULL); break; case PTOK_LBRACK: case PTOK_HASH : |