diff options
author | LemonBoy <thatlemon@gmail.com> | 2018-09-23 18:17:00 +0200 |
---|---|---|
committer | LemonBoy <thatlemon@gmail.com> | 2018-09-23 18:17:00 +0200 |
commit | fb54f394e8c9a8ca07b8eb952b8f9eaa1ce66005 (patch) | |
tree | 109f128bc98f3bb9e4ee25d64a4130dee55bdb8c | |
parent | a2587aad0d327f91600fee22399c2e53e9a923cf (diff) | |
download | Nim-fb54f394e8c9a8ca07b8eb952b8f9eaa1ce66005.tar.gz |
Fix for VM codegen with static[T] types
Fixes #9043
-rw-r--r-- | compiler/vmgen.nim | 6 | ||||
-rw-r--r-- | tests/vm/t9043.nim | 10 |
2 files changed, 13 insertions, 3 deletions
diff --git a/compiler/vmgen.nim b/compiler/vmgen.nim index b6b5bf4f2..e612d7a2a 100644 --- a/compiler/vmgen.nim +++ b/compiler/vmgen.nim @@ -1529,7 +1529,7 @@ proc genRdVar(c: PCtx; n: PNode; dest: var TDest; flags: TGenFlags) = template needsRegLoad(): untyped = {gfNode, gfNodeAddr} * flags == {} and - fitsRegister(n.typ.skipTypes({tyVar, tyLent})) + fitsRegister(n.typ.skipTypes({tyVar, tyLent, tyStatic})) proc genArrAccess2(c: PCtx; n: PNode; dest: var TDest; opc: TOpcode; flags: TGenFlags) = @@ -1590,7 +1590,7 @@ proc getNullValueAux(obj: PNode, result: PNode; conf: ConfigRef) = else: globalError(conf, result.info, "cannot create null element for: " & $obj) proc getNullValue(typ: PType, info: TLineInfo; conf: ConfigRef): PNode = - var t = skipTypes(typ, abstractRange-{tyTypeDesc}) + var t = skipTypes(typ, abstractRange+{tyStatic}-{tyTypeDesc}) case t.kind of tyBool, tyEnum, tyChar, tyInt..tyInt64: result = newNodeIT(nkIntLit, info, t) @@ -1602,7 +1602,7 @@ proc getNullValue(typ: PType, info: TLineInfo; conf: ConfigRef): PNode = result = newNodeIT(nkStrLit, info, t) result.strVal = "" of tyVar, tyLent, tyPointer, tyPtr, tyExpr, - tyStmt, tyTypeDesc, tyStatic, tyRef, tyNil: + tyStmt, tyTypeDesc, tyRef, tyNil: result = newNodeIT(nkNilLit, info, t) of tyProc: if t.callConv != ccClosure: diff --git a/tests/vm/t9043.nim b/tests/vm/t9043.nim new file mode 100644 index 000000000..1ae2e383c --- /dev/null +++ b/tests/vm/t9043.nim @@ -0,0 +1,10 @@ +discard """ + nimout: "(Field0: 2, Field1: 2, Field2: 2, Field3: 2)" +""" + +proc foo[N: static[int]](dims: array[N, int])= + const N1 = N + const N2 = dims.len + static: echo (N, dims.len, N1, N2) + +foo([1, 2]) |