diff options
| author | bogwi <bogwi@rakumail.jp> | 2025-05-06 14:21:18 +0900 |
|---|---|---|
| committer | bogwi <bogwi@rakumail.jp> | 2025-05-06 14:21:18 +0900 |
| commit | 904a64a45e6b4286f84c438876f77352ebfcf016 (patch) | |
| tree | b40c492fdc50c783633529340b57476fbfed0425 /src | |
| parent | 8032db348411ae85397441de7f2ce9ebd1029112 (diff) | |
Add support for SoaPointer nil comparison in lb_emit_comp_against_nil
Diffstat (limited to 'src')
| -rw-r--r-- | src/llvm_backend_expr.cpp | 12 |
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: { |