diff options
| author | gingerBill <bill@gingerbill.org> | 2025-01-30 10:37:21 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2025-01-30 10:37:21 +0000 |
| commit | 5efa3510cfeebf498f78b35a213bab0c1014a85e (patch) | |
| tree | 8d0040882adf0bf2a6c5a5a8a91d99906b5664da /src/llvm_backend_expr.cpp | |
| parent | 998d6525b7e1cc046f9cf58577fa71ee88b7c9a0 (diff) | |
| parent | 2656ecd4e17d448f1d972270bde87f75bc096d0d (diff) | |
Merge branch 'master' into bill/sdl3
Diffstat (limited to 'src/llvm_backend_expr.cpp')
| -rw-r--r-- | src/llvm_backend_expr.cpp | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index df9dca801..871536927 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -4294,6 +4294,17 @@ gb_internal lbAddr lb_build_addr_index_expr(lbProcedure *p, Ast *expr) { gb_internal lbAddr lb_build_addr_slice_expr(lbProcedure *p, Ast *expr) { ast_node(se, SliceExpr, expr); + lbAddr addr = lb_build_addr(p, se->expr); + lbValue base = lb_addr_load(p, addr); + Type *type = base_type(base.type); + + if (is_type_pointer(type)) { + type = base_type(type_deref(type)); + addr = lb_addr(base); + base = lb_addr_load(p, addr); + } + + lbValue low = lb_const_int(p->module, t_int, 0); lbValue high = {}; @@ -4306,16 +4317,6 @@ gb_internal lbAddr lb_build_addr_slice_expr(lbProcedure *p, Ast *expr) { bool no_indices = se->low == nullptr && se->high == nullptr; - lbAddr addr = lb_build_addr(p, se->expr); - lbValue base = lb_addr_load(p, addr); - Type *type = base_type(base.type); - - if (is_type_pointer(type)) { - type = base_type(type_deref(type)); - addr = lb_addr(base); - base = lb_addr_load(p, addr); - } - switch (type->kind) { case Type_Slice: { Type *slice_type = type; |