From 32fa7e2871f7e23a0b7ca056e8bb7f7f0e6cc6d1 Mon Sep 17 00:00:00 2001 From: ringabout <43030857+ringabout@users.noreply.github.com> Date: Wed, 3 Apr 2024 00:09:10 +0800 Subject: [PATCH] fixes #9550; Concept related crash only when compiling to JS (#23470) fixes #9550 --- compiler/jsgen.nim | 2 +- tests/concepts/tusertypeclasses2.nim | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/compiler/jsgen.nim b/compiler/jsgen.nim index 37db6f74f7..25871b8d3e 100644 --- a/compiler/jsgen.nim +++ b/compiler/jsgen.nim @@ -1552,7 +1552,7 @@ proc genAddr(p: PProc, n: PNode, r: var TCompRes) = if ty.kind in MappedToObject: gen(p, n[0], r) else: - let kindOfIndexedExpr = skipTypes(n[0][0].typ, abstractVarRange).kind + let kindOfIndexedExpr = skipTypes(n[0][0].typ, abstractVarRange+tyUserTypeClasses).kind case kindOfIndexedExpr of tyArray, tyOpenArray, tySequence, tyString, tyCstring, tyVarargs: genArrayAddr(p, n[0], r) diff --git a/tests/concepts/tusertypeclasses2.nim b/tests/concepts/tusertypeclasses2.nim index c9978f6ef7..2d46882651 100644 --- a/tests/concepts/tusertypeclasses2.nim +++ b/tests/concepts/tusertypeclasses2.nim @@ -1,3 +1,7 @@ +discard """ + target: "c js" +""" + block: type hasFieldX = concept z @@ -42,3 +46,10 @@ block: foo2(x) foo3(x) foo4(x) + +block: # bug #9550 + type Foo = concept c + for v in c: (v is char) + + func foo(c: Foo) = (for v in c: discard) + foo @['a', 'b' ,'c']