added assign implementation
This commit is contained in:
parent
48110c85f2
commit
9eddfd75bc
|
@ -9,6 +9,26 @@
|
||||||
#include <sys/log.h>
|
#include <sys/log.h>
|
||||||
#include <llvm/func.h>
|
#include <llvm/func.h>
|
||||||
|
|
||||||
|
static LLVMValueRef get_parameter(const LLVMFuncScope* scope, const char* name) {
|
||||||
|
if (g_hash_table_contains(scope->params, name)) {
|
||||||
|
return g_hash_table_lookup(scope->params, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
LLVMValueRef get_variable(const LLVMLocalScope* scope, const char* name) {
|
||||||
|
if (g_hash_table_contains(scope->vars, name)) {
|
||||||
|
return g_hash_table_lookup(scope->vars, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (scope->parent_scope != NULL) {
|
||||||
|
return get_variable(scope->parent_scope, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
return get_parameter(scope->func_scope, name);
|
||||||
|
}
|
||||||
|
|
||||||
BackendError impl_param_type(LLVMBackendCompileUnit* unit,
|
BackendError impl_param_type(LLVMBackendCompileUnit* unit,
|
||||||
LLVMGlobalScope* scope, Paramer* param,
|
LLVMGlobalScope* scope, Paramer* param,
|
||||||
LLVMTypeRef* llvm_type) {
|
LLVMTypeRef* llvm_type) {
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
//
|
||||||
|
// Created by servostar on 5/28/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include <codegen/backend.h>
|
||||||
|
#include <llvm/func.h>
|
||||||
|
#include <llvm/parser.h>
|
||||||
|
#include <llvm/stmt.h>
|
||||||
|
|
||||||
|
BackendError impl_assign_stmt(LLVMBackendCompileUnit* unit,
|
||||||
|
LLVMBuilderRef builder, LLVMLocalScope* scope,
|
||||||
|
Assignment* assignment) {
|
||||||
|
// TODO: resolve expression to LLVMValueRef
|
||||||
|
const LLVMValueRef llvm_value = NULL;
|
||||||
|
|
||||||
|
switch (assignment->variable->kind) {
|
||||||
|
case VariableKindDeclaration:
|
||||||
|
case VariableKindDefinition:
|
||||||
|
const LLVMValueRef llvm_ptr =
|
||||||
|
get_variable(scope, assignment->variable->name);
|
||||||
|
LLVMBuildStore(builder, llvm_value, llvm_ptr);
|
||||||
|
break;
|
||||||
|
case VariableKindBoxMember:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BackendError impl_stmt(LLVMBackendCompileUnit* unit, Statement* stmt) {}
|
|
@ -0,0 +1,9 @@
|
||||||
|
//
|
||||||
|
// Created by servostar on 5/28/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef LLVM_BACKEND_STMT_H
|
||||||
|
#define LLVM_BACKEND_STMT_H
|
||||||
|
|
||||||
|
|
||||||
|
#endif // LLVM_BACKEND_STMT_H
|
Loading…
Reference in New Issue