summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/semmagic.nim3
-rw-r--r--lib/system/repr_v2.nim7
-rw-r--r--tests/metatype/tmetatype_various.nim1
3 files changed, 10 insertions, 1 deletions
diff --git a/compiler/semmagic.nim b/compiler/semmagic.nim
index d3e12670b..a6832de50 100644
--- a/compiler/semmagic.nim
+++ b/compiler/semmagic.nim
@@ -190,6 +190,9 @@ proc evalTypeTrait(c: PContext; traitCall: PNode, operand: PType, context: PSym)
       arg = arg.base.skipTypes(skippedTypes + {tyGenericInst})
       if not rec: break
     result = getTypeDescNode(c, arg, operand.owner, traitCall.info)
+  of "skipRanges":
+    var arg = operand.skipTypes({tyRange})
+    result = getTypeDescNode(c, arg, operand.owner, traitCall.info)
   else:
     localError(c.config, traitCall.info, "unknown trait: " & s)
     result = newNodeI(nkEmpty, traitCall.info)
diff --git a/lib/system/repr_v2.nim b/lib/system/repr_v2.nim
index 0e9bec0f3..d87e07b7e 100644
--- a/lib/system/repr_v2.nim
+++ b/lib/system/repr_v2.nim
@@ -9,6 +9,8 @@ proc isNamedTuple(T: typedesc): bool {.magic: "TypeTrait".}
 proc distinctBase(T: typedesc, recursive: static bool = true): typedesc {.magic: "TypeTrait".}
   ## imported from typetraits
 
+proc skipRanges(T: typedesc): typedesc {.magic: "TypeTrait".}
+
 proc repr*(x: NimNode): string {.magic: "Repr", noSideEffect.}
 
 proc repr*(x: int): string =
@@ -96,7 +98,10 @@ proc repr*(p: proc): string =
   repr(cast[ptr pointer](unsafeAddr p)[])
 
 template repr*(x: distinct): string =
-  repr(distinctBase(typeof(x))(x))
+  when x is range: # hacks for ranges with distinct sub types
+    repr(distinctBase(skipRanges(typeof(x)))(x))
+  else:
+    repr(distinctBase(typeof(x))(x))
 
 template repr*(t: typedesc): string = $t
 
diff --git a/tests/metatype/tmetatype_various.nim b/tests/metatype/tmetatype_various.nim
index 9faeeec4a..30169aa1e 100644
--- a/tests/metatype/tmetatype_various.nim
+++ b/tests/metatype/tmetatype_various.nim
@@ -1,4 +1,5 @@
 discard """
+  matrix: "--mm:refc; --mm:orc"
   output: '''[1, 0, 0, 0, 0, 0, 0, 0] CTBool[Ct[system.uint32]]'''
 """