From adf4e3857898b877b9109d06dbb81ef4f829b99c Mon Sep 17 00:00:00 2001 From: Max Wash Date: Tue, 19 Nov 2024 22:09:32 +0000 Subject: [PATCH] frontend: implement function for printing assembly lex tokens --- frontend/debug.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++ frontend/debug.h | 2 ++ 2 files changed, 63 insertions(+) diff --git a/frontend/debug.c b/frontend/debug.c index 9aafa57..f8fa36e 100644 --- a/frontend/debug.c +++ b/frontend/debug.c @@ -1,5 +1,6 @@ #include #include +#include #include extern void print_lex_token(struct ivy_token *tok) @@ -67,3 +68,63 @@ extern void print_lex_token(struct ivy_token *tok) b_fputs("[reset]\n", stdout); } + +extern void print_asm_lex_token(struct ivy_asm_token *tok) +{ + switch (tok->t_type) { + case IVY_ASM_TOK_KEYWORD: + b_fputs("[magenta]", stdout); + break; + case IVY_ASM_TOK_SYMBOL: + b_fputs("[blue]", stdout); + break; + case IVY_ASM_TOK_INT: + case IVY_ASM_TOK_DOUBLE: + b_fputs("[yellow]", stdout); + break; + case IVY_ASM_TOK_LABEL: + b_fputs("[red]", stdout); + break; + case IVY_ASM_TOK_IDENT: + b_fputs("[cyan]", stdout); + break; + case IVY_ASM_TOK_STRING: + b_fputs("[green]", stdout); + break; + case IVY_ASM_TOK_LINEFEED: + b_fputs("[bright,black]", stdout); + break; + default: + break; + } + + printf("%s", ivy_asm_token_type_to_string(tok->t_type)); + + switch (tok->t_type) { + case IVY_ASM_TOK_IDENT: + case IVY_ASM_TOK_LABEL: + case IVY_ASM_TOK_STRING: + printf("(%s)", tok->t_str); + break; + case IVY_ASM_TOK_SYMBOL: + printf("(%s)", ivy_asm_symbol_to_string(tok->t_symbol)); + break; + case IVY_ASM_TOK_KEYWORD: + printf("(%s)", ivy_asm_keyword_to_string(tok->t_keyword)); + break; + case IVY_ASM_TOK_INT: + if (tok->t_int.sign) { + printf("(%lld)", tok->t_int.v); + } else { + printf("(%llu)", tok->t_int.uv); + } + break; + case IVY_ASM_TOK_DOUBLE: + printf("(%lf)", tok->t_double); + break; + default: + break; + } + + b_fputs("[reset]\n", stdout); +} diff --git a/frontend/debug.h b/frontend/debug.h index 9f48c9e..a08271c 100644 --- a/frontend/debug.h +++ b/frontend/debug.h @@ -2,7 +2,9 @@ #define DEBUG_H_ struct ivy_token; +struct ivy_asm_token; extern void print_lex_token(struct ivy_token *tok); +extern void print_asm_lex_token(struct ivy_asm_token *tok); #endif