This commit is contained in:
Araq 2015-09-23 15:04:43 +02:00
commit f937637a92
2 changed files with 26 additions and 2 deletions

View file

@ -1377,10 +1377,13 @@ proc genCheckedObjAccess(c: PCtx; n: PNode; dest: var TDest; flags: TGenFlags) =
genObjAccess(c, n.sons[0], dest, flags) genObjAccess(c, n.sons[0], dest, flags)
proc genArrAccess(c: PCtx; n: PNode; dest: var TDest; flags: TGenFlags) = proc genArrAccess(c: PCtx; n: PNode; dest: var TDest; flags: TGenFlags) =
if n.sons[0].typ.skipTypes(abstractVarRange-{tyTypeDesc}).kind in { let arrayType = n.sons[0].typ.skipTypes(abstractVarRange-{tyTypeDesc}).kind
tyString, tyCString}: if arrayType in {tyString, tyCString}:
genArrAccess2(c, n, dest, opcLdStrIdx, {}) genArrAccess2(c, n, dest, opcLdStrIdx, {})
elif arrayType == tyTypeDesc:
c.genTypeLit(n.typ, dest)
else: else:
echo renderTree(n)
genArrAccess2(c, n, dest, opcLdArr, flags) genArrAccess2(c, n, dest, opcLdArr, flags)
proc getNullValueAux(obj: PNode, result: PNode) = proc getNullValueAux(obj: PNode, result: PNode) =

21
tests/vm/tyaytypedesc.nim Normal file
View file

@ -0,0 +1,21 @@
discard """
output: "ntWhitespace"
"""
# bug #3357
type NodeType* = enum
ntWhitespace
type TokenType* = enum
ttWhitespace
proc enumTable*[A, B, C](a: openarray[tuple[key: A, val: B]], ret: typedesc[C]): C =
for item in a:
result[item.key] = item.val
const tokenTypeToNodeType = {
ttWhitespace: ntWhitespace,
}.enumTable(array[ttWhitespace..ttWhitespace, NodeType])
echo tokenTypeToNodeType[ttWhitespace]