diff --git a/compiler/renderer.nim b/compiler/renderer.nim index d9d4a9bc90787..6ce7ac804e723 100644 --- a/compiler/renderer.nim +++ b/compiler/renderer.nim @@ -437,7 +437,7 @@ proc lsub(g: TSrcGen; n: PNode): int = of nkTableConstr: result = if n.len > 0: lcomma(g, n) + 2 else: len("{:}") of nkClosedSymChoice, nkOpenSymChoice: - result = lsons(g, n) + len("()") + n.len - 1 + if n.len > 0: result += lsub(g, n[0]) of nkTupleTy: result = lcomma(g, n) + len("tuple[]") of nkTupleClassTy: result = len("tuple") of nkDotExpr: result = lsons(g, n) + 1 @@ -529,10 +529,12 @@ proc lsub(g: TSrcGen; n: PNode): int = if n[0].kind != nkEmpty: result = result + lsub(g, n[0]) + 2 of nkExceptBranch: result = lcomma(g, n, 0, -2) + lsub(g, lastSon(n)) + len("except_:_") + of nkObjectTy: + result = len("object_") else: result = MaxLineLen + 1 proc fits(g: TSrcGen, x: int): bool = - result = x + g.lineLen <= MaxLineLen + result = g.indent + x <= MaxLineLen type TSubFlag = enum @@ -1142,7 +1144,8 @@ proc gsub(g: var TSrcGen, n: PNode, c: TContext) = infixArgument(g, n, 1) put(g, tkSpaces, Space) gsub(g, n, 0) # binary operator - if n.len == 3 and not fits(g, lsub(g, n[2]) + lsub(g, n[0]) + 1): + # will overfit for larger operators than "+", eg "<=" + if n.len == 3 and not fits(g, lsub(g, n[1]) + lsub(g, n[2]) + len(" + ")): optNL(g, g.indent + longIndentWid) else: put(g, tkSpaces, Space) diff --git a/tests/errmsgs/t8434.nim b/tests/errmsgs/t8434.nim index ada38e9c017cd..c8bc1193bcc9e 100644 --- a/tests/errmsgs/t8434.nim +++ b/tests/errmsgs/t8434.nim @@ -1,8 +1,7 @@ discard """ errormsg: "type mismatch: got " nimout: '''but expected one of: -proc fun0[T1: int | float | - object | array | seq](a1: T1; a2: int) +proc fun0[T1: int | float | object | array | seq](a1: T1; a2: int) first type mismatch at position: 1 required type for a1: T1: int or float or object or array or seq[T] but expression 'byte(1)' is of type: byte diff --git a/tests/errmsgs/tgcsafety.nim b/tests/errmsgs/tgcsafety.nim index e6a62204ec1ec..da8e4927b61f2 100644 --- a/tests/errmsgs/tgcsafety.nim +++ b/tests/errmsgs/tgcsafety.nim @@ -4,9 +4,7 @@ errormsg: "type mismatch: got .}> but expected one of: -proc serve(server: AsyncHttpServer; port: Port; - callback: proc (request: Request): Future[void] {.closure, gcsafe.}; - address = ""): owned(Future[void]) +proc serve(server: AsyncHttpServer; port: Port; callback: proc (request: Request): Future[void] {.closure, gcsafe.}; address = ""): owned(Future[void]) first type mismatch at position: 3 required type for callback: proc (request: Request): Future[system.void]{.closure, gcsafe.} but expression 'cb' is of type: proc (req: Request): Future[system.void]{.locks: .} diff --git a/tests/macros/tdumpast.nim b/tests/macros/tdumpast.nim index 3a26ffd2f1e08..979b6849f8344 100644 --- a/tests/macros/tdumpast.nim +++ b/tests/macros/tdumpast.nim @@ -31,3 +31,20 @@ dumpAST: proc sub(x, y: int): int = return x - y +macro fun() = + let n = quote do: + 1+1 == 2 + doAssert n.repr == "1 + 1 == 2", n.repr +fun() + +macro fun2(): untyped = + let n = quote do: + 1 + 2 * 3 == 1 + 6 + doAssert n.repr == "1 + 2 * 3 == 1 + 6", n.repr +fun2() + +macro fun3(): untyped = + let n = quote do: + int | array | seq | object | ptr | pointer | ref + doAssert n.repr == "int | array | seq | object | ptr | pointer | ref", n.repr +fun3() diff --git a/tests/stdlib/tunittesttemplate.nim b/tests/stdlib/tunittesttemplate.nim index 5ac323a3699ff..2ca50a18b3d50 100644 --- a/tests/stdlib/tunittesttemplate.nim +++ b/tests/stdlib/tunittesttemplate.nim @@ -1,13 +1,13 @@ discard """ exitcode: 1 outputsub: ''' - tunittesttemplate.nim(20, 12): Check failed: a.b == - 2 + tunittesttemplate.nim(20, 12): Check failed: a.b == 2 a.b was 0 [FAILED] 1 ''' """ + # bug #6736 import unittest