diff options
author | Araq <rumpf_a@web.de> | 2018-04-06 13:10:22 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2018-04-06 13:10:22 +0200 |
commit | aa6353e4fa2115010f6217c99dfd140a3421dde0 (patch) | |
tree | 449343a6df0aad6abb0b7f4217b0a85504c9abc5 | |
parent | 824092be312ff16445f137c4322d0cd3cc95fb2e (diff) | |
download | Nim-aa6353e4fa2115010f6217c99dfd140a3421dde0.tar.gz |
fixes #6843
-rw-r--r-- | compiler/ccgexprs.nim | 2 | ||||
-rw-r--r-- | tests/statictypes/tstackmatrix.nim | 29 |
2 files changed, 30 insertions, 1 deletions
diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index 6ee7d698e..b0065c7fe 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -271,7 +271,7 @@ proc genAssignment(p: BProc, dest, src: TLoc, flags: TAssignmentFlags) = # little HACK to support the new 'var T' as return type: linefmt(p, cpsStmts, "$1 = $2;$n", rdLoc(dest), rdLoc(src)) return - let ty = skipTypes(dest.t, abstractRange + tyUserTypeClasses) + let ty = skipTypes(dest.t, abstractRange + tyUserTypeClasses + {tyStatic}) case ty.kind of tyRef: genRefAssign(p, dest, src, flags) diff --git a/tests/statictypes/tstackmatrix.nim b/tests/statictypes/tstackmatrix.nim new file mode 100644 index 000000000..2509d21f8 --- /dev/null +++ b/tests/statictypes/tstackmatrix.nim @@ -0,0 +1,29 @@ +discard """ + output: "(M: 3, N: 3, fp: ...)" +""" + +# bug #6843 + +type + OrderType = enum colMajor, rowMajor + Matrix[A] = object + M, N: int + fp: ptr A # float pointer + DoubleArray64[M, N: static[int]] = array[M, array[N, float64]] + + +proc stackMatrix[M, N: static[int]](a: var DoubleArray64[M, N], order = colMajor): Matrix[float64] = + Matrix[float64]( + fp: addr a[0][0], + M: (if order == colMajor: N else: M), + N: (if order == colMajor: M else: N) + ) + +var + data = [ + [1'f64, 2, 3], + [4'f64, 5, 6], + [7'f64, 8, 9] + ] + m = stackMatrix(data) +echo m \ No newline at end of file |