diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2021-07-27 09:36:19 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-27 09:36:19 +0200 |
commit | fa0209609d3bedd3466f162aa350d261907851ce (patch) | |
tree | e3868ea46bf5082cb114e6b328a9b6c9e8f84d07 /compiler | |
parent | 9cb5ab0108c62bfda30b4f9b52b2957fdd364544 (diff) | |
download | Nim-fa0209609d3bedd3466f162aa350d261907851ce.tar.gz |
fixes #18565 (#18593)
* fixes #18565
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/semstmts.nim | 22 | ||||
-rw-r--r-- | compiler/sigmatch.nim | 4 |
2 files changed, 14 insertions, 12 deletions
diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim index bfce91849..75323a95e 100644 --- a/compiler/semstmts.nim +++ b/compiler/semstmts.nim @@ -2260,20 +2260,20 @@ proc semStmtList(c: PContext, n: PNode, flags: TExprFlags): PNode = # nkNilLit, nkEmpty}: # dec last for i in 0..<n.len: - var expr = semExpr(c, n[i], flags) - n[i] = expr - if c.matchedConcept != nil and expr.typ != nil and + var x = semExpr(c, n[i], flags) + n[i] = x + if c.matchedConcept != nil and x.typ != nil and (nfFromTemplate notin n.flags or i != last): - case expr.typ.kind + case x.typ.kind of tyBool: - if expr.kind == nkInfix and - expr[0].kind == nkSym and - expr[0].sym.name.s == "==": - if expr[1].typ.isUnresolvedStatic: - inferConceptStaticParam(c, expr[1], expr[2]) + if x.kind == nkInfix and + x[0].kind == nkSym and + x[0].sym.name.s == "==": + if x[1].typ.isUnresolvedStatic: + inferConceptStaticParam(c, x[1], x[2]) continue - elif expr[2].typ.isUnresolvedStatic: - inferConceptStaticParam(c, expr[2], expr[1]) + elif x[2].typ.isUnresolvedStatic: + inferConceptStaticParam(c, x[2], x[1]) continue let verdict = semConstExpr(c, n[i]) diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim index 73ab5e9a3..6bc641bd6 100644 --- a/compiler/sigmatch.nim +++ b/compiler/sigmatch.nim @@ -625,7 +625,7 @@ proc procTypeRel(c: var TCandidate, f, a: PType): TTypeRelation = return isNone elif a[0] != nil: return isNone - + result = getProcConvMismatch(c.c.config, f, a, result)[1] when useEffectSystem: @@ -2272,6 +2272,8 @@ proc prepareOperand(c: PContext; formal: PType; a: PNode): PNode = else: result = a considerGenSyms(c, result) + if result.kind != nkHiddenDeref and result.typ.kind in {tyVar, tyLent} and c.matchedConcept == nil: + result = newDeref(result) proc prepareOperand(c: PContext; a: PNode): PNode = if a.typ.isNil: |