diff options
Diffstat (limited to 'src/generator.c')
-rw-r--r-- | src/generator.c | 7 |
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 | ||
99 | void gen_function_end_declaration() { | 99 | void 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 | ||
103 | void gen_function_return(Type expect, Type actual) { | 103 | void 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 | ||
113 | Type gen_function_call(const char name[], int nb_param) { | 112 | Type 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 | } |