summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2017-08-31 13:59:25 +0200
committerAndreas Rumpf <rumpf_a@web.de>2017-08-31 13:59:25 +0200
commita08fb61da974e7384d63fd2e08f60c97594a01c6 (patch)
tree62d24a2bcc01e5753f364e50b2aa0cd0aa445c89
parent4846e4e4527968c03fab745d7baaf6fb9ee8db4d (diff)
downloadNim-a08fb61da974e7384d63fd2e08f60c97594a01c6.tar.gz
make tests green again
-rw-r--r--compiler/semexprs.nim6
-rw-r--r--lib/system.nim8
-rw-r--r--tests/concepts/t3330.nim8
3 files changed, 15 insertions, 7 deletions
diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim
index 63039b36d..65557658a 100644
--- a/compiler/semexprs.nim
+++ b/compiler/semexprs.nim
@@ -1085,9 +1085,11 @@ proc builtinFieldAccess(c: PContext, n: PNode, flags: TExprFlags): PNode =
       if ty.n != nil and ty.n.kind == nkRecList:
         let field = lookupInRecord(ty.n, i)
         if field != nil:
-          n.typ = newTypeWithSons(c, tyFieldAccessor, @[ty, field.typ])
-          n.typ.n = copyTree(n)
+          n.typ = makeTypeDesc(c, field.typ)
           return n
+          #n.typ = newTypeWithSons(c, tyFieldAccessor, @[ty, field.typ])
+          #n.typ.n = copyTree(n)
+          #return n
     else:
       tryReadingGenericParam(ty)
       return
diff --git a/lib/system.nim b/lib/system.nim
index f8896ed13..9efa850ed 100644
--- a/lib/system.nim
+++ b/lib/system.nim
@@ -261,12 +261,18 @@ proc high*[T: Ordinal](x: T): T {.magic: "High", noSideEffect.}
 proc high*[T: Ordinal](x: typeDesc[T]): T {.magic: "High", noSideEffect.}
 proc high*[T](x: openArray[T]): int {.magic: "High", noSideEffect.}
 proc high*[I, T](x: array[I, T]): I {.magic: "High", noSideEffect.}
+proc high*[I, T](x: typeDesc[array[I, T]]): I {.magic: "High", noSideEffect.}
+proc high*(x: cstring): int {.magic: "High", noSideEffect.}
+proc high*(x: string): int {.magic: "High", noSideEffect.}
 
 proc low*[T: Ordinal](x: typeDesc[T]): T {.magic: "Low", noSideEffect.}
 proc low*[T](x: openArray[T]): int {.magic: "Low", noSideEffect.}
 proc low*[I, T](x: array[I, T]): I {.magic: "Low", noSideEffect.}
 proc low*[T](x: T): T {.magic: "Low", noSideEffect.}
-  ## returns the lowest possible index of an array, a sequence, a string or
+proc low*[I, T](x: typeDesc[array[I, T]]): I {.magic: "Low", noSideEffect.}
+proc low*(x: cstring): int {.magic: "Low", noSideEffect.}
+proc low*(x: string): int {.magic: "Low", noSideEffect.}
+## returns the lowest possible index of an array, a sequence, a string or
   ## the lowest possible value of an ordinal value `x`. As a special
   ## semantic rule, `x` may also be a type identifier.
   ##
diff --git a/tests/concepts/t3330.nim b/tests/concepts/t3330.nim
index 04add2b6f..fcd5054ef 100644
--- a/tests/concepts/t3330.nim
+++ b/tests/concepts/t3330.nim
@@ -2,16 +2,16 @@ discard """
 errormsg: "type mismatch: got (Bar[system.int])"
 nimout: '''
 t3330.nim(40, 4) Error: type mismatch: got (Bar[system.int])
-but expected one of: 
+but expected one of:
 proc test(foo: Foo[int])
 t3330.nim(25, 8) Hint: Non-matching candidates for add(k, string, T)
-proc add[T](x: var seq[T]; y: T)
-proc add(result: var string; x: float)
 proc add(x: var string; y: string)
-proc add(x: var string; y: cstring)
 proc add(x: var string; y: char)
 proc add(result: var string; x: int64)
+proc add(x: var string; y: cstring)
+proc add(result: var string; x: float)
 proc add[T](x: var seq[T]; y: openArray[T])
+proc add[T](x: var seq[T]; y: T)
 
 t3330.nim(25, 8) template/generic instantiation from here
 t3330.nim(32, 6) Foo: 'bar.value' cannot be assigned to