aboutsummaryrefslogtreecommitdiff
path: root/src/generator.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/generator.c')
-rw-r--r--src/generator.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/src/generator.c b/src/generator.c
index bf187e0..37581e0 100644
--- a/src/generator.c
+++ b/src/generator.c
@@ -97,7 +97,7 @@ Type gen_function_declaration(const char name[], int return_type, int nb_param)
97} 97}
98 98
99void gen_function_end_declaration() { 99void gen_function_end_declaration() {
100 fprintf(output, "mov rsp, rbp\npop rbp\nret\n"); 100 fprintf(output, "mov rax,-1\nmov rsp, rbp\npop rbp\nret\n");
101} 101}
102 102
103void gen_function_return(Type expect, Type actual) { 103void gen_function_return(Type expect, Type actual) {
@@ -105,9 +105,8 @@ void gen_function_return(Type expect, Type actual) {
105 fprintf(stderr, "Return type mismatch at line %d.", lineno); 105 fprintf(stderr, "Return type mismatch at line %d.", lineno);
106 exit(1); 106 exit(1);
107 } 107 }
108
109 if (actual != VOID_T) fprintf(output, "pop rax\n"); 108 if (actual != VOID_T) fprintf(output, "pop rax\n");
110 gen_function_end_declaration(); 109 fprintf(output, "mov rsp, rbp\npop rbp\nret\n");
111} 110}
112 111
113Type gen_function_call(const char name[], int nb_param) { 112Type gen_function_call(const char name[], int nb_param) {
@@ -183,7 +182,7 @@ void gen_print(int type) {
183 case CHAR: 182 case CHAR:
184 fprintf(output, "call printc\n"); 183 fprintf(output, "call printc\n");
185 break; 184 break;
186 default: fprintf(stderr, "Error print, supposed to have type CHAR or INT"); 185 default: fprintf(stderr, "Error print, supposed to have type CHAR or INT\n");
187 } 186 }
188 187
189} 188}