aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend_expr.cpp
diff options
context:
space:
mode:
authorbogwi <bogwi@rakumail.jp>2025-05-06 14:21:18 +0900
committerbogwi <bogwi@rakumail.jp>2025-05-06 14:21:18 +0900
commit904a64a45e6b4286f84c438876f77352ebfcf016 (patch)
treeb40c492fdc50c783633529340b57476fbfed0425 /src/llvm_backend_expr.cpp
parent8032db348411ae85397441de7f2ce9ebd1029112 (diff)
Add support for SoaPointer nil comparison in lb_emit_comp_against_nil
Diffstat (limited to 'src/llvm_backend_expr.cpp')
-rw-r--r--src/llvm_backend_expr.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp
index d313d65a3..da0de10c4 100644
--- a/src/llvm_backend_expr.cpp
+++ b/src/llvm_backend_expr.cpp
@@ -3146,6 +3146,18 @@ gb_internal lbValue lb_emit_comp_against_nil(lbProcedure *p, TokenKind op_kind,
}
}
break;
+
+ case Type_SoaPointer:
+ {
+ // NOTE(bill): An SoaPointer is essentially just a pointer for nil comparison
+ lbValue ptr = lb_emit_struct_ev(p, x, 0); // Extract the base pointer component (field 0)
+ if (op_kind == Token_CmpEq) {
+ res.value = LLVMBuildIsNull(p->builder, ptr.value, "");
+ } else if (op_kind == Token_NotEq) {
+ res.value = LLVMBuildIsNotNull(p->builder, ptr.value, "");
+ }
+ return res;
+ }
case Type_Union:
{