From 8a6b416c28d635365b2718021e0c4b34e9ec8a00 Mon Sep 17 00:00:00 2001 From: Jasper Jenkins Date: Wed, 1 May 2019 22:18:45 -0700 Subject: const named tuple unpacking --- compiler/semfold.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'compiler') diff --git a/compiler/semfold.nim b/compiler/semfold.nim index 5fb2fcd65..3034ef9cc 100644 --- a/compiler/semfold.nim +++ b/compiler/semfold.nim @@ -701,7 +701,7 @@ proc getConstExpr(m: PSym, n: PNode; g: ModuleGraph): PNode = for i in countup(0, sonsLen(n) - 1): var a = getConstExpr(m, n.sons[i].sons[1], g) if a == nil: return nil - result.sons[i].sons[1] = a + result.sons[i] = a else: for i in countup(0, sonsLen(n) - 1): var a = getConstExpr(m, n.sons[i], g) -- cgit 1.4.1-2-gfad0 From ec099fc13ff188cb696af6f3524c75a8648d0391 Mon Sep 17 00:00:00 2001 From: Jasper Jenkins Date: Sun, 5 May 2019 01:15:31 -0700 Subject: handle separately in backends --- compiler/ccgexprs.nim | 2 +- compiler/jsgen.nim | 1 + compiler/semfold.nim | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) (limited to 'compiler') diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index e03c4b1c1..4baa6795d 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -2850,7 +2850,7 @@ proc genConstSeqV2(p: BProc, n: PNode, t: PType): Rope = proc genConstExpr(p: BProc, n: PNode): Rope = case n.kind - of nkHiddenStdConv, nkHiddenSubConv: + of nkHiddenStdConv, nkHiddenSubConv, nkExprColonExpr: result = genConstExpr(p, n.sons[1]) of nkCurly: var cs: TBitSet diff --git a/compiler/jsgen.nim b/compiler/jsgen.nim index cd13aab78..dc81b4e37 100644 --- a/compiler/jsgen.nim +++ b/compiler/jsgen.nim @@ -2503,6 +2503,7 @@ proc gen(p: PProc, n: PNode, r: var TCompRes) = of nkPragmaBlock: gen(p, n.lastSon, r) of nkComesFrom: discard "XXX to implement for better stack traces" + of nkExprColonExpr: gen(p, n.sons[1], r) else: internalError(p.config, n.info, "gen: unknown node type: " & $n.kind) proc newModule(g: ModuleGraph; module: PSym): BModule = diff --git a/compiler/semfold.nim b/compiler/semfold.nim index 3034ef9cc..5fb2fcd65 100644 --- a/compiler/semfold.nim +++ b/compiler/semfold.nim @@ -701,7 +701,7 @@ proc getConstExpr(m: PSym, n: PNode; g: ModuleGraph): PNode = for i in countup(0, sonsLen(n) - 1): var a = getConstExpr(m, n.sons[i].sons[1], g) if a == nil: return nil - result.sons[i] = a + result.sons[i].sons[1] = a else: for i in countup(0, sonsLen(n) - 1): var a = getConstExpr(m, n.sons[i], g) -- cgit 1.4.1-2-gfad0 From d4167c3f8c813cbea7f6e4634cc577b4be14d253 Mon Sep 17 00:00:00 2001 From: Jasper Jenkins Date: Sun, 5 May 2019 03:46:02 -0700 Subject: make work again --- compiler/ccgexprs.nim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'compiler') diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index 4baa6795d..be966671b 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -2708,6 +2708,7 @@ proc expr(p: BProc, n: PNode, d: var TLoc) = inc p.splitDecls genGotoState(p, n) of nkBreakState: genBreakState(p, n, d) + of nkExprColonExpr: expr(p, n.sons[1], d) else: internalError(p.config, n.info, "expr(" & $n.kind & "); unknown node kind") proc genNamedConstExpr(p: BProc, n: PNode): Rope = @@ -2850,7 +2851,7 @@ proc genConstSeqV2(p: BProc, n: PNode, t: PType): Rope = proc genConstExpr(p: BProc, n: PNode): Rope = case n.kind - of nkHiddenStdConv, nkHiddenSubConv, nkExprColonExpr: + of nkHiddenStdConv, nkHiddenSubConv: result = genConstExpr(p, n.sons[1]) of nkCurly: var cs: TBitSet -- cgit 1.4.1-2-gfad0 From 1f207df7aef7dd469a998a4522891b25eab4c9df Mon Sep 17 00:00:00 2001 From: Jasper Jenkins Date: Sun, 5 May 2019 11:45:53 -0700 Subject: handle in semConst --- compiler/ccgexprs.nim | 1 - compiler/jsgen.nim | 1 - compiler/semstmts.nim | 3 ++- 3 files changed, 2 insertions(+), 3 deletions(-) (limited to 'compiler') diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index be966671b..e03c4b1c1 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -2708,7 +2708,6 @@ proc expr(p: BProc, n: PNode, d: var TLoc) = inc p.splitDecls genGotoState(p, n) of nkBreakState: genBreakState(p, n, d) - of nkExprColonExpr: expr(p, n.sons[1], d) else: internalError(p.config, n.info, "expr(" & $n.kind & "); unknown node kind") proc genNamedConstExpr(p: BProc, n: PNode): Rope = diff --git a/compiler/jsgen.nim b/compiler/jsgen.nim index dc81b4e37..cd13aab78 100644 --- a/compiler/jsgen.nim +++ b/compiler/jsgen.nim @@ -2503,7 +2503,6 @@ proc gen(p: PProc, n: PNode, r: var TCompRes) = of nkPragmaBlock: gen(p, n.lastSon, r) of nkComesFrom: discard "XXX to implement for better stack traces" - of nkExprColonExpr: gen(p, n.sons[1], r) else: internalError(p.config, n.info, "gen: unknown node type: " & $n.kind) proc newModule(g: ModuleGraph; module: PSym): BModule = diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim index b8f35408f..a0a1caf7f 100644 --- a/compiler/semstmts.nim +++ b/compiler/semstmts.nim @@ -641,7 +641,8 @@ proc semConst(c: PContext, n: PNode): PNode = addSon(b, copyTree(def)) else: setVarType(c, v, typ.sons[j]) - v.ast = def[j] + v.ast = if def[j].kind != nkExprColonExpr: def[j] + else: def[j].sons[1] b.sons[j] = newSymNode(v) addSon(result,b) dec c.inStaticContext -- cgit 1.4.1-2-gfad0