diff options
author | Buldram <buldram@proton.me> | 2024-07-24 02:13:55 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-24 08:13:55 +0200 |
commit | 925dc5c1319bce935593cc12380feec1538e2ce5 (patch) | |
tree | 3195c47235a02847a8e8828ed45f463510d201b9 /compiler | |
parent | 0db742df7cd20efd030d7b20fe1e523c06325efa (diff) | |
download | Nim-925dc5c1319bce935593cc12380feec1538e2ce5.tar.gz |
fixes #19171; have `openArray` converted from `ptr UncheckedArray` be mutable (#23882)
Makes `toOpenArray(x: ptr UncheckedArray)` always return a `var openArray` regardless of if `x` is mutable.
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/parampatterns.nim | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/compiler/parampatterns.nim b/compiler/parampatterns.nim index 84c2980c4..b9d84f7eb 100644 --- a/compiler/parampatterns.nim +++ b/compiler/parampatterns.nim @@ -283,8 +283,15 @@ proc isAssignable*(owner: PSym, n: PNode): TAssignableResult = of nkObjUpConv, nkObjDownConv, nkCheckedFieldExpr: result = isAssignable(owner, n[0]) of nkCallKinds: - # builtin slice keeps lvalue-ness: - if getMagic(n) in {mArrGet, mSlice}: + let m = getMagic(n) + if m == mSlice: + # builtin slice keeps l-value-ness + # except for pointers because slice dereferences + if n[1].typ.kind == tyPtr: + result = arLValue + else: + result = isAssignable(owner, n[1]) + elif m == mArrGet: result = isAssignable(owner, n[1]) elif n.typ != nil: case n.typ.kind |