diff --git a/frontend/cmd/compile.c b/frontend/cmd/compile.c index dc4ccff..fd1210c 100644 --- a/frontend/cmd/compile.c +++ b/frontend/cmd/compile.c @@ -1,3 +1,4 @@ +#include "../debug.h" #include "cmd.h" #include @@ -46,64 +47,7 @@ static int compile_file(const char *path) break; } - switch (tok->t_type) { - case IVY_TOK_KEYWORD: - b_fputs("[magenta]", stdout); - break; - case IVY_TOK_SYMBOL: - b_fputs("[blue]", stdout); - break; - case IVY_TOK_ATOM: - b_fputs("[yellow]", stdout); - break; - case IVY_TOK_NUMBER: - b_fputs("[yellow]", stdout); - break; - case IVY_TOK_LABEL: - b_fputs("[red]", stdout); - break; - case IVY_TOK_IDENT: - b_fputs("[cyan]", stdout); - break; - case IVY_TOK_STRING: - b_fputs("[green]", stdout); - break; - case IVY_TOK_STR_START: - b_fputs("[green]", stdout); - break; - case IVY_TOK_STR_END: - b_fputs("[green]", stdout); - break; - case IVY_TOK_LINEFEED: - b_fputs("[bright,black]", stdout); - break; - default: - break; - } - - printf("%s", ivy_lex_token_type_to_string(tok->t_type)); - - switch (tok->t_type) { - case IVY_TOK_IDENT: - case IVY_TOK_LABEL: - case IVY_TOK_STRING: - case IVY_TOK_ATOM: - printf("(%s)", tok->t_str); - break; - case IVY_TOK_SYMBOL: - printf("(%s)", ivy_symbol_to_string(tok->t_symbol)); - break; - case IVY_TOK_KEYWORD: - printf("(%s)", ivy_keyword_to_string(tok->t_keyword)); - break; - case IVY_TOK_NUMBER: - printf("(%llu)", tok->t_number); - break; - default: - break; - } - - b_fputs("[reset]\n", stdout); + print_lex_token(tok); } int r = (status == IVY_OK || status == IVY_ERR_EOF) ? 0 : -1; diff --git a/frontend/debug.c b/frontend/debug.c new file mode 100644 index 0000000..62bc86d --- /dev/null +++ b/frontend/debug.c @@ -0,0 +1,65 @@ +#include +#include +#include + +extern void print_lex_token(struct ivy_token *tok) +{ + switch (tok->t_type) { + case IVY_TOK_KEYWORD: + b_fputs("[magenta]", stdout); + break; + case IVY_TOK_SYMBOL: + b_fputs("[blue]", stdout); + break; + case IVY_TOK_ATOM: + b_fputs("[yellow]", stdout); + break; + case IVY_TOK_NUMBER: + b_fputs("[yellow]", stdout); + break; + case IVY_TOK_LABEL: + b_fputs("[red]", stdout); + break; + case IVY_TOK_IDENT: + b_fputs("[cyan]", stdout); + break; + case IVY_TOK_STRING: + b_fputs("[green]", stdout); + break; + case IVY_TOK_STR_START: + b_fputs("[green]", stdout); + break; + case IVY_TOK_STR_END: + b_fputs("[green]", stdout); + break; + case IVY_TOK_LINEFEED: + b_fputs("[bright,black]", stdout); + break; + default: + break; + } + + printf("%s", ivy_lex_token_type_to_string(tok->t_type)); + + switch (tok->t_type) { + case IVY_TOK_IDENT: + case IVY_TOK_LABEL: + case IVY_TOK_STRING: + case IVY_TOK_ATOM: + printf("(%s)", tok->t_str); + break; + case IVY_TOK_SYMBOL: + printf("(%s)", ivy_symbol_to_string(tok->t_symbol)); + break; + case IVY_TOK_KEYWORD: + printf("(%s)", ivy_keyword_to_string(tok->t_keyword)); + break; + case IVY_TOK_NUMBER: + printf("(%llu)", tok->t_number); + break; + default: + break; + } + + b_fputs("[reset]\n", stdout); +} diff --git a/frontend/debug.h b/frontend/debug.h new file mode 100644 index 0000000..9f48c9e --- /dev/null +++ b/frontend/debug.h @@ -0,0 +1,8 @@ +#ifndef DEBUG_H_ +#define DEBUG_H_ + +struct ivy_token; + +extern void print_lex_token(struct ivy_token *tok); + +#endif