public void Visit(AST.Assignment assignment) { LLVMValueRef left; if (assignment.Left is AST.Variable variable) { if (llvmVars.TryGetValue(variable, out var variableLLVM) == false) { variable.Type.Accept(this); var typeLLVM = types.Pop(); LLVM.PositionBuilderAtEnd(builder, varBlocks.Peek()); variableLLVM = LLVM.BuildAlloca(builder, typeLLVM, variable.Name); llvmVars[variable] = variableLLVM; } left = variableLLVM; } else { throw new InvalidOperationException(); } assignment.Right.Accept(this); var right = values.Pop(); LLVM.PositionBuilderAtEnd(builder, codeBlocks.Peek()); values.Push(LLVM.BuildStore(builder, right, left)); returns = false; }
virtual public void visit(AST.Assignment assignment) { assignment.left.accept(this); assignment.right.accept(this); }