private ExpressionNode Visit(ExpressionNode node) { LLVMValueRef v = null; if (node.op == 6) { Visit(node.f); v = GetProperty(node.f).addr; } else if (node.op == 5) { throw new NotImplementedException(); } else { Visit(node.e1); Visit(node.e2); if (node.op == 1) { v = builder.BuildAdd(GetProperty(node.e1).addr, GetProperty(node.e2).addr); } else if (node.op == 2) { v = builder.BuildSub(GetProperty(node.e1).addr, GetProperty(node.e2).addr); } else if (node.op == 3) { v = builder.BuildMul((LLVMValueRef)GetProperty(node.e1).addr, (LLVMValueRef)GetProperty(node.e2).addr, "".AsSpan()); } else if (node.op == 4) { v = builder.BuildSDiv((LLVMValueRef)GetProperty(node.e1).addr, (LLVMValueRef)GetProperty(node.e2).addr, "".AsSpan()); } } GetProperty(node).addr = v; return(node); }