diff --git a/boot-lib.h b/boot-lib.h index c3b7777..4ed452f 100644 --- a/boot-lib.h +++ b/boot-lib.h @@ -1,12 +1,9 @@ #include #include -#include // std int printf(const char* format, ...); int getchar(); -int putchar(int ch); -int strcmp(const char* s1, const char* s2); void exit(int status); // ext diff --git a/boot.c b/boot.c index 9bce0e8..33ff623 100644 --- a/boot.c +++ b/boot.c @@ -103,6 +103,13 @@ int get_escaped_char() { return ch; } +int streq(const char* s1, const char* s2) { + while (*s1 && *s2 && *s1 == *s2) { + s1++; + s2++; + } + return *s1 == *s2; +} char string_table[65536]; int string_offset; @@ -148,7 +155,7 @@ void dedup_id() { char* latest = &id_table[id_lut[id_lut_size - 1]]; for (int i = 0; i < id_lut_size - 1; i++) { char* candidate = &id_table[id_lut[i]]; - if (!strcmp(candidate, latest)) { + if (streq(candidate, latest)) { rewind_id(i); return; } @@ -159,27 +166,27 @@ void parse_id_like(int ch) { token_type = TOKEN_ID; token_data = parse_id(ch); char* id = &id_table[id_lut[token_data]]; - if (!strcmp(id, "int")) { + if (streq(id, "int")) { token_type = TOKEN_INT; - } else if (!strcmp(id, "if")) { + } else if (streq(id, "if")) { token_type = TOKEN_IF; - } else if (!strcmp(id, "else")) { + } else if (streq(id, "else")) { token_type = TOKEN_ELSE; - } else if (!strcmp(id, "while")) { + } else if (streq(id, "while")) { token_type = TOKEN_WHILE; - } else if (!strcmp(id, "break")) { + } else if (streq(id, "break")) { token_type = TOKEN_BREAK; - } else if (!strcmp(id, "continue")) { + } else if (streq(id, "continue")) { token_type = TOKEN_CONTINUE; - } else if (!strcmp(id, "return")) { + } else if (streq(id, "return")) { token_type = TOKEN_RETURN; - } else if (!strcmp(id, "void")) { + } else if (streq(id, "void")) { token_type = TOKEN_VOID; - } else if (!strcmp(id, "const")) { + } else if (streq(id, "const")) { token_type = TOKEN_CONST; - } else if (!strcmp(id, "char")) { + } else if (streq(id, "char")) { token_type = TOKEN_CHAR; - } else if (!strcmp(id, "for")) { + } else if (streq(id, "for")) { token_type = TOKEN_FOR; } if (token_type != TOKEN_ID) { @@ -1295,7 +1302,7 @@ void dump_string_table() { } else if (ch == '\"') { printf("\\\""); } else { - putchar(ch); + printf("%c", ch); } offset++; }