diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim index 1e32cfcf23..123e11c681 100644 --- a/compiler/sigmatch.nim +++ b/compiler/sigmatch.nim @@ -1859,22 +1859,22 @@ proc paramTypesMatchAux(m: var TCandidate, f, a: PType, var r = typeRel(m, f, a) - when false: - # This special typing rule for macros and templates is not documented - # anywhere and breaks symmetry. - if r != isNone and m.calleeSym != nil and - m.calleeSym.kind in {skMacro, skTemplate}: - # XXX: duplicating this is ugly, but we cannot (!) move this - # directly into typeRel using return-like templates - incMatches(m, r) - if f.kind == tyStmt: - return arg - elif f.kind == tyTypeDesc: - return arg - elif f.kind == tyStatic: - return arg.typ.n - else: - return argSemantized # argOrig + # This special typing rule for macros and templates is not documented + # anywhere and breaks symmetry. It's hard to get rid of though, my + # custom seqs example fails to compile without this: + if r != isNone and m.calleeSym != nil and + m.calleeSym.kind in {skMacro, skTemplate}: + # XXX: duplicating this is ugly, but we cannot (!) move this + # directly into typeRel using return-like templates + incMatches(m, r) + if f.kind == tyStmt: + return arg + elif f.kind == tyTypeDesc: + return arg + elif f.kind == tyStatic: + return arg.typ.n + else: + return argSemantized # argOrig # If r == isBothMetaConvertible then we rerun typeRel. # bothMetaCounter is for safety to avoid any infinite loop, diff --git a/tests/macros/tgettypeinst.nim b/tests/macros/tgettypeinst.nim index d54b99d776..2f1abe193c 100644 --- a/tests/macros/tgettypeinst.nim +++ b/tests/macros/tgettypeinst.nim @@ -1,10 +1,6 @@ discard """ - disabled: "true" """ -# disabled: relied on undocumented overloading rules. Too much work -# to make this sane. - import macros, strUtils proc symToIdent(x: NimNode): NimNode =