Skip to content

Commit

Permalink
feat: Allow multiline macros
Browse files Browse the repository at this point in the history
  • Loading branch information
keyvank committed Nov 29, 2024
1 parent 59f43dc commit 90a575a
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 202 deletions.
22 changes: 21 additions & 1 deletion lexer.c
Original file line number Diff line number Diff line change
Expand Up @@ -158,11 +158,31 @@ typed_token *next_op(char **inp_ptr, int is_newline)
}
if (is_newline && *inp == '#')
{
char *line = (char *)malloc(256);
char *line = (char *)malloc(512);
int sz = 0;
inp++;
while (*inp)
{
if (*inp == '\\')
{
inp++;
while (*inp)
{
if (*inp == ' ')
inp++;
else if (*inp == '\n')
{
inp++;
break;
}
else
{
fprintf(stderr, "Invalid character '%c' coming after '\\'!\n", *inp);
exit(1);
}
}
continue;
}
if (*inp == '\n' || *inp == '\0')
{
line[sz] = '\0';
Expand Down
61 changes: 1 addition & 60 deletions tests/output/inp_preprocess.c_asm_output.asm
Original file line number Diff line number Diff line change
@@ -1,71 +1,12 @@
section .data
__printf_size: equ 16
__function_size: equ 16
__function2_size: equ 16
__temp_str_3 db `function(): %d\n`, 0
__temp_str_4 db `function2(): %d\n`, 0
__main_size: equ 96
__main_size: equ 16
section .text
extern printf
global function
function:
push rbp
mov rbp, rsp
sub rsp, __function_size
mov rax, 69
mov rsp, rbp
pop rbp
ret
mov rsp, rbp
pop rbp
ret
global function2
function2:
push rbp
mov rbp, rsp
sub rsp, __function2_size
mov rax, 99
mov rsp, rbp
pop rbp
ret
mov rsp, rbp
pop rbp
ret
global main
main:
push rbp
mov rbp, rsp
sub rsp, __main_size
mov rax, __temp_str_3
mov [rsp+0], rax
mov rax, rsp
add rax, 0
mov [rsp+8], rax
call function
mov [rsp+16], rax
mov rax, [rsp+16]
mov [rsp+24], rax
mov rdi, [rsp+0]
mov rsi, [rsp+24]
mov rax, rsp
add rax, 0
mov [rsp+32], rax
call printf
mov rax, __temp_str_4
mov [rsp+40], rax
mov rax, rsp
add rax, 0
mov [rsp+48], rax
call function2
mov [rsp+56], rax
mov rax, [rsp+56]
mov [rsp+64], rax
mov rdi, [rsp+40]
mov rsi, [rsp+64]
mov rax, rsp
add rax, 0
mov [rsp+72], rax
call printf
mov rax, 0
mov rsp, rbp
pop rbp
Expand Down
66 changes: 5 additions & 61 deletions tests/output/inp_preprocess.c_lex_output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,81 +10,25 @@ TKN_SEMICOLON
TKN_DIRECTIVE:
TKN_ID(define)
TKN_ID(DEBUG)
TKN_LIT_INT(1)
TKN_EOF
TKN_DIRECTIVE:
TKN_ID(ifdef)
TKN_ID(DEBUG)
TKN_EOF
TKN_INT
TKN_ID(function)
TKN_L_PAREN
TKN_R_PAREN
TKN_L_BRACE
TKN_RETURN
TKN_LIT_INT(69)
TKN_SEMICOLON
TKN_R_BRACE
TKN_DIRECTIVE:
TKN_ID(endif)
TKN_EOF
TKN_DIRECTIVE:
TKN_ID(ifdef)
TKN_ID(RELEASE)
TKN_EOF
TKN_INT
TKN_ID(function)
TKN_ID(main)
TKN_L_PAREN
TKN_R_PAREN
TKN_L_BRACE
TKN_RETURN
TKN_LIT_INT(13)
TKN_SEMICOLON
TKN_R_BRACE
TKN_DIRECTIVE:
TKN_ID(endif)
TKN_EOF
TKN_DIRECTIVE:
TKN_ID(ifndef)
TKN_ID(RELEASE)
TKN_ID(DEBUG)
TKN_EOF
TKN_INT
TKN_ID(function2)
TKN_ID(printf)
TKN_L_PAREN
TKN_LIT_STR(Debug disabled!
)
TKN_R_PAREN
TKN_L_BRACE
TKN_RETURN
TKN_LIT_INT(99)
TKN_SEMICOLON
TKN_R_BRACE
TKN_DIRECTIVE:
TKN_ID(endif)
TKN_EOF
TKN_INT
TKN_ID(main)
TKN_L_PAREN
TKN_R_PAREN
TKN_L_BRACE
TKN_ID(printf)
TKN_L_PAREN
TKN_LIT_STR(function(): %d
)
TKN_COMMA
TKN_ID(function)
TKN_L_PAREN
TKN_R_PAREN
TKN_R_PAREN
TKN_SEMICOLON
TKN_ID(printf)
TKN_L_PAREN
TKN_LIT_STR(function2(): %d
)
TKN_COMMA
TKN_ID(function2)
TKN_L_PAREN
TKN_R_PAREN
TKN_R_PAREN
TKN_SEMICOLON
TKN_RETURN
TKN_LIT_INT(0)
TKN_SEMICOLON
Expand Down
38 changes: 0 additions & 38 deletions tests/output/inp_preprocess.c_prep_output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,48 +8,10 @@ TKN_DOTS
TKN_R_PAREN
TKN_SEMICOLON
TKN_INT
TKN_ID(function)
TKN_L_PAREN
TKN_R_PAREN
TKN_L_BRACE
TKN_RETURN
TKN_LIT_INT(69)
TKN_SEMICOLON
TKN_R_BRACE
TKN_INT
TKN_ID(function2)
TKN_L_PAREN
TKN_R_PAREN
TKN_L_BRACE
TKN_RETURN
TKN_LIT_INT(99)
TKN_SEMICOLON
TKN_R_BRACE
TKN_INT
TKN_ID(main)
TKN_L_PAREN
TKN_R_PAREN
TKN_L_BRACE
TKN_ID(printf)
TKN_L_PAREN
TKN_LIT_STR(function(): %d
)
TKN_COMMA
TKN_ID(function)
TKN_L_PAREN
TKN_R_PAREN
TKN_R_PAREN
TKN_SEMICOLON
TKN_ID(printf)
TKN_L_PAREN
TKN_LIT_STR(function2(): %d
)
TKN_COMMA
TKN_ID(function2)
TKN_L_PAREN
TKN_R_PAREN
TKN_R_PAREN
TKN_SEMICOLON
TKN_RETURN
TKN_LIT_INT(0)
TKN_SEMICOLON
Expand Down
42 changes: 0 additions & 42 deletions tests/output/inp_preprocess.c_tree_output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,28 +10,6 @@ Program(
Pointer of:
TKN_CHAR
)
Function(
Name:
function
Returns:
Type(Name: (null)):
TKN_INT
Params:
Statements:
Return:
Literal(Type: 34, Value: 69)
)
Function(
Name:
function2
Returns:
Type(Name: (null)):
TKN_INT
Params:
Statements:
Return:
Literal(Type: 34, Value: 99)
)
Function(
Name:
main
Expand All @@ -40,26 +18,6 @@ Program(
TKN_INT
Params:
Statements:
FunctionCall:
Function:
Variable(printf)
Args:
Literal(Type: 33, Value: function(): %d
)
FunctionCall:
Function:
Variable(function)
Args:
FunctionCall:
Function:
Variable(printf)
Args:
Literal(Type: 33, Value: function2(): %d
)
FunctionCall:
Function:
Variable(function2)
Args:
Return:
Literal(Type: 34, Value: 0)
)
Expand Down

0 comments on commit 90a575a

Please sign in to comment.