Workshop: Compiling Let and Assign
Let statement
On let statements, variables are declared, as explained before. In this case we need to allocate space for it and save the
pointer value on the locals hashmap.
You will need to use the llvm dialect.
#![allow(unused)] fn main() { // src/codegen/let_stmt.rs // let x = 2; pub fn compile_let<'ctx: 'parent, 'parent>( ctx: &ModuleCtx<'ctx>, locals: &mut HashMap<String, Value<'ctx, 'parent>>, block: &'parent Block<'ctx>, stmt: &LetStmt, ) { todo!() } }
Assign statement
Assign is like let, but without creating the variable, only storing the updated value.
#![allow(unused)] fn main() { // src/codegen/let_stmt.rs // x = 2; pub fn compile_assign<'ctx: 'parent, 'parent>( ctx: &ModuleCtx<'ctx>, locals: &mut HashMap<String, Value<'ctx, 'parent>>, block: &'parent Block<'ctx>, stmt: &AssignStmt, ) { todo!("implement assign") } }