compiler-lightning/src/codegen.c
2024-07-21 02:04:32 +12:00

40 lines
No EOL
1.1 KiB
C

#include <codegen.h>
#include <slibs/slibs.h>
const char* codegen(ASTNode* node) {
if(node->type == AST_PROGRAM) {
sl_string code = sl_string("#include <runtime.h>\n\nint main() {\n");
for(sl_vec_it(n, node->body)) {
sl_append_c_str(&code, codegen(*n));
sl_append_c_str(&code, ";\n");
}
sl_append_c_str(&code, "}");
return sl_c_str(code);
}
if(node->type == AST_CALL_EXPRESSION) {
sl_string code = sl_string(node->name);
sl_append_c_str(&code, "(");
for(size_t i = 0; i < node->params.size; i++) {
sl_append_c_str(&code, codegen(node->params.data[i]));
if(i < node->params.size - 1) {
sl_append_c_str(&code, ", ");
}
}
sl_append_c_str(&code, ")");
return sl_c_str(code);
}
if(node->type == AST_NUMBER_LITERAL) {
return node->value;
}
if(node->type == AST_STRING_LITERAL) {
sl_string code = sl_string("\"");
sl_append_c_str(&code, node->value);
sl_append_c_str(&code, "\"");
return sl_c_str(code);
}
return "";
}