summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/astalgo.nim2
-rw-r--r--compiler/extccomp.nim2
-rw-r--r--compiler/idgen.nim22
-rw-r--r--compiler/msgs.nim12
-rw-r--r--compiler/nimfix/nimfix.nim2
-rw-r--r--compiler/options.nim2
-rw-r--r--compiler/rodread.nim402
-rw-r--r--compiler/sigmatch.nim12
-rw-r--r--doc/astspec.txt4
-rw-r--r--doc/manual/generics.txt2
-rw-r--r--doc/manual/procs.txt2
-rw-r--r--doc/manual/templates.txt30
-rw-r--r--doc/manual/trmacros.txt2
-rw-r--r--doc/tut2.txt26
-rw-r--r--examples/cgi/example.nim2
-rw-r--r--examples/cgiex.nim6
-rw-r--r--lib/impure/re.nim2
-rw-r--r--lib/packages/docutils/rst.nim2
-rw-r--r--lib/pure/cgi.nim6
-rw-r--r--lib/pure/logging.nim6
-rw-r--r--lib/pure/nimprof.nim6
-rw-r--r--lib/pure/parsesql.nim2
-rw-r--r--lib/pure/pegs.nim2
-rw-r--r--lib/pure/streams.nim7
-rw-r--r--lib/pure/strutils.nim12
-rw-r--r--lib/pure/terminal.nim6
-rw-r--r--lib/system.nim10
-rw-r--r--lib/system/endb.nim6
-rw-r--r--lib/system/sysio.nim7
-rw-r--r--tests/ambsym/tambsym2.nim4
-rw-r--r--tests/ambsym/tambsym3.nim2
-rw-r--r--tests/assign/tassign.nim10
-rw-r--r--tests/assign/tcopy.nim4
-rw-r--r--tests/effects/teffects1.nim2
-rw-r--r--tests/effects/teffects2.nim2
-rw-r--r--tests/effects/teffects3.nim2
-rw-r--r--tests/effects/teffects4.nim2
-rw-r--r--tests/gc/gctest.nim28
-rw-r--r--tests/generics/tbintre2.nim2
-rw-r--r--tests/generics/tbintree.nim2
-rw-r--r--tests/generics/tgeneric3.nim60
-rw-r--r--tests/lexer/tlexer.nim4
-rw-r--r--tests/macros/tdebugstmt.nim2
-rw-r--r--tests/misc/tcmdline.nim6
-rw-r--r--tests/misc/tendian.nim2
-rw-r--r--tests/misc/thallo.nim6
-rw-r--r--tests/misc/tlastmod.nim4
-rw-r--r--tests/misc/tmandelbrot.nim4
-rw-r--r--tests/misc/tnewuns.nim2
-rw-r--r--tests/misc/tvarnums.nim272
-rw-r--r--tests/objects/tobject2.nim2
-rw-r--r--tests/objects/toop1.nim24
-rw-r--r--tests/overflw/toverflw.nim30
-rw-r--r--tests/sets/tsets.nim2
-rw-r--r--tests/stdlib/tio.nim2
-rw-r--r--tests/stdlib/tparsopt.nim16
-rw-r--r--tests/stdlib/tpegs.nim346
-rw-r--r--tests/stdlib/tposix.nim8
-rw-r--r--tests/stdlib/trepr.nim2
-rw-r--r--tests/stdlib/trepr2.nim8
-rw-r--r--tests/stdlib/tstrtabs.nim8
-rw-r--r--tests/stdlib/twalker.nim4
-rw-r--r--tests/template/tstempl.nim4
-rw-r--r--tests/template/ttempl3.nim4
-rw-r--r--tests/testament/caasdriver.nim8
-rw-r--r--tests/testament/htmlgen.nim12
-rw-r--r--tests/trmacros/targlist.nim4
-rw-r--r--tests/trmacros/tstmtlist.nim4
-rw-r--r--tools/cmerge.nim4
-rw-r--r--tools/nimgrep.nim90
-rw-r--r--tools/nimweb.nim6
71 files changed, 814 insertions, 800 deletions
diff --git a/compiler/astalgo.nim b/compiler/astalgo.nim
index 5980edb27..3ba43b4c5 100644
--- a/compiler/astalgo.nim
+++ b/compiler/astalgo.nim
@@ -452,7 +452,7 @@ proc debug(n: PSym) =
   elif n.kind == skUnknown:
     msgWriteln("skUnknown")
   else:
-    #writeln(stdout, $symToYaml(n, 0, 1))
+    #writeLine(stdout, $symToYaml(n, 0, 1))
     msgWriteln("$1_$2: $3, $4, $5, $6" % [
       n.name.s, $n.id, $flagsToStr(n.flags), $flagsToStr(n.loc.flags),
       $lineInfoToStr(n.info), $n.kind])
diff --git a/compiler/extccomp.nim b/compiler/extccomp.nim
index 38427b367..2c6e5294f 100644
--- a/compiler/extccomp.nim
+++ b/compiler/extccomp.nim
@@ -596,7 +596,7 @@ proc externalFileChanged(filename: string): bool =
     result = true
   if result:
     if open(f, crcFile, fmWrite):
-      f.writeln($currentCrc)
+      f.writeLine($currentCrc)
       close(f)
 
 proc addExternalFileToCompile*(filename: string) =
diff --git a/compiler/idgen.nim b/compiler/idgen.nim
index 3c5669b54..c07782fb2 100644
--- a/compiler/idgen.nim
+++ b/compiler/idgen.nim
@@ -18,26 +18,26 @@ const
 
 when debugIds:
   import intsets
-  
+
   var usedIds = initIntSet()
 
-proc registerID*(id: PIdObj) = 
-  when debugIds: 
-    if id.id == -1 or containsOrIncl(usedIds, id.id): 
+proc registerID*(id: PIdObj) =
+  when debugIds:
+    if id.id == -1 or containsOrIncl(usedIds, id.id):
       internalError("ID already used: " & $id.id)
 
-proc getID*(): int {.inline.} = 
+proc getID*(): int {.inline.} =
   result = gFrontEndId
   inc(gFrontEndId)
 
-proc backendId*(): int {.inline.} = 
+proc backendId*(): int {.inline.} =
   result = gBackendId
   inc(gBackendId)
 
-proc setId*(id: int) {.inline.} = 
+proc setId*(id: int) {.inline.} =
   gFrontEndId = max(gFrontEndId, id + 1)
 
-proc idSynchronizationPoint*(idRange: int) = 
+proc idSynchronizationPoint*(idRange: int) =
   gFrontEndId = (gFrontEndId div idRange + 1) * idRange + 1
 
 proc toGid(f: string): string =
@@ -48,10 +48,10 @@ proc toGid(f: string): string =
 
 proc saveMaxIds*(project: string) =
   var f = open(project.toGid, fmWrite)
-  f.writeln($gFrontEndId)
-  f.writeln($gBackendId)
+  f.writeLine($gFrontEndId)
+  f.writeLine($gBackendId)
   f.close()
-  
+
 proc loadMaxIds*(project: string) =
   var f: File
   if open(f, project.toGid, fmRead):
diff --git a/compiler/msgs.nim b/compiler/msgs.nim
index 6b71b7159..3d5edaf40 100644
--- a/compiler/msgs.nim
+++ b/compiler/msgs.nim
@@ -593,7 +593,7 @@ var
 
 proc suggestWriteln*(s: string) =
   if eStdOut in errorOutputs:
-    if isNil(writelnHook): writeln(stdout, s)
+    if isNil(writelnHook): writeLine(stdout, s)
     else: writelnHook(s)
 
 proc msgQuit*(x: int8) = quit x
@@ -688,7 +688,7 @@ var gTrackPos*: TLineInfo
 
 proc outWriteln*(s: string) =
   ## Writes to stdout. Always.
-  if eStdOut in errorOutputs: writeln(stdout, s)
+  if eStdOut in errorOutputs: writeLine(stdout, s)
 
 proc msgWriteln*(s: string) =
   ## Writes to stdout. If --stdout option is given, writes to stderr instead.
@@ -698,9 +698,9 @@ proc msgWriteln*(s: string) =
   if not isNil(writelnHook):
     writelnHook(s)
   elif optStdout in gGlobalOptions:
-    if eStdErr in errorOutputs: writeln(stderr, s)
+    if eStdErr in errorOutputs: writeLine(stderr, s)
   else:
-    if eStdOut in errorOutputs: writeln(stdout, s)
+    if eStdOut in errorOutputs: writeLine(stdout, s)
 
 macro callIgnoringStyle(theProc: typed, first: typed,
                         args: varargs[expr]): stmt =
@@ -735,13 +735,13 @@ template styledMsgWriteln*(args: varargs[expr]) =
   if not isNil(writelnHook):
     callIgnoringStyle(callWritelnHook, nil, args)
   elif optStdout in gGlobalOptions:
-    if eStdErr in errorOutputs: callIgnoringStyle(writeln, stderr, args)
+    if eStdErr in errorOutputs: callIgnoringStyle(writeLine, stderr, args)
   else:
     if eStdOut in errorOutputs:
       if optUseColors in gGlobalOptions:
         callStyledEcho(args)
       else:
-        callIgnoringStyle(writeln, stdout, args)
+        callIgnoringStyle(writeLine, stdout, args)
 
 proc coordToStr(coord: int): string =
   if coord == -1: result = "???"
diff --git a/compiler/nimfix/nimfix.nim b/compiler/nimfix/nimfix.nim
index 3641aec36..39436702f 100644
--- a/compiler/nimfix/nimfix.nim
+++ b/compiler/nimfix/nimfix.nim
@@ -82,7 +82,7 @@ proc processCmdLine*(pass: TCmdLinePass, cmd: string) =
 
 proc handleCmdLine() =
   if paramCount() == 0:
-    stdout.writeln(Usage)
+    stdout.writeLine(Usage)
   else:
     processCmdLine(passCmd1, "")
     if gProjectName != "":
diff --git a/compiler/options.nim b/compiler/options.nim
index f3277f855..398d3171d 100644
--- a/compiler/options.nim
+++ b/compiler/options.nim
@@ -304,7 +304,7 @@ proc completeGeneratedFilePath*(f: string, createSubDir: bool = true): string =
       when noTimeMachine:
        excludeDirFromTimeMachine(subdir)
     except OSError:
-      writeln(stdout, "cannot create directory: " & subdir)
+      writeLine(stdout, "cannot create directory: " & subdir)
       quit(1)
   result = joinPath(subdir, tail)
   #echo "completeGeneratedFilePath(", f, ") = ", result
diff --git a/compiler/rodread.nim b/compiler/rodread.nim
index dad7d111e..c1c27aedb 100644
--- a/compiler/rodread.nim
+++ b/compiler/rodread.nim
@@ -12,7 +12,7 @@
 # Reading and writing binary files are really hard to debug. Therefore we use
 # a "creative" text/binary hybrid format. ROD-files are more efficient
 # to process because symbols can be loaded on demand.
-# 
+#
 # A ROD file consists of:
 #
 #  - a header:
@@ -44,7 +44,7 @@
 #    )
 #  - a compiler proc section:
 #    COMPILERPROCS(
-#    identifier1 id\n # id is the symbol's id    
+#    identifier1 id\n # id is the symbol's id
 #    )
 #  - an index consisting of (ID, linenumber)-pairs:
 #    INDEX(
@@ -52,7 +52,7 @@
 #    id-diff idx-diff\n
 #    )
 #
-#    Since the whole index has to be read in advance, we compress it by 
+#    Since the whole index has to be read in advance, we compress it by
 #    storing the integer differences to the last entry instead of using the
 #    real numbers.
 #
@@ -88,11 +88,11 @@
 #    by using a mem'mapped file.
 #
 
-import 
-  os, options, strutils, nversion, ast, astalgo, msgs, platform, condsyms, 
+import
+  os, options, strutils, nversion, ast, astalgo, msgs, platform, condsyms,
   ropes, idents, securehash, idgen, types, rodutils, memfiles
 
-type 
+type
   TReasonForRecompile* = enum ## all the reasons that can trigger recompilation
     rrEmpty,                  # dependencies not yet computed
     rrNone,                   # no need to recompile
@@ -104,14 +104,14 @@ type
     rrInclDeps,               # an include has changed
     rrModDeps                 # a module this module depends on has been changed
 
-const 
-  reasonToFrmt*: array[TReasonForRecompile, string] = ["", 
-    "no need to recompile: $1", "symbol file for $1 does not exist", 
-    "symbol file for $1 has the wrong version", 
-    "file edited since last compilation: $1", 
-    "list of conditional symbols changed for: $1", 
-    "list of options changed for: $1", 
-    "an include file edited: $1", 
+const
+  reasonToFrmt*: array[TReasonForRecompile, string] = ["",
+    "no need to recompile: $1", "symbol file for $1 does not exist",
+    "symbol file for $1 has the wrong version",
+    "file edited since last compilation: $1",
+    "list of conditional symbols changed for: $1",
+    "list of options changed for: $1",
+    "an include file edited: $1",
     "a module $1 depends on has changed"]
 
 type
@@ -120,7 +120,7 @@ type
     tab*: TIITable
     r*: string                # writers use this
     offset*: int              # readers use this
-  
+
   TRodReader* = object of RootObj
     pos: int                 # position; used for parsing
     s: cstring               # mmap'ed file contents
@@ -142,7 +142,7 @@ type
     methods*: TSymSeq
     origFile: string
     inViewMode: bool
-  
+
   PRodReader* = ref TRodReader
 
 var rodCompilerprocs*: TStrTable
@@ -161,16 +161,16 @@ proc rrGetSym(r: PRodReader, id: int, info: TLineInfo): PSym
   # `info` is only used for debugging purposes
 proc rrGetType(r: PRodReader, id: int, info: TLineInfo): PType
 
-proc decodeLineInfo(r: PRodReader, info: var TLineInfo) = 
-  if r.s[r.pos] == '?': 
+proc decodeLineInfo(r: PRodReader, info: var TLineInfo) =
+  if r.s[r.pos] == '?':
     inc(r.pos)
     if r.s[r.pos] == ',': info.col = -1'i16
     else: info.col = int16(decodeVInt(r.s, r.pos))
-    if r.s[r.pos] == ',': 
+    if r.s[r.pos] == ',':
       inc(r.pos)
       if r.s[r.pos] == ',': info.line = -1'i16
       else: info.line = int16(decodeVInt(r.s, r.pos))
-      if r.s[r.pos] == ',': 
+      if r.s[r.pos] == ',':
         inc(r.pos)
         info = newLineInfo(r.files[decodeVInt(r.s, r.pos)], info.line, info.col)
 
@@ -188,56 +188,56 @@ proc skipNode(r: PRodReader) =
     inc pos
   r.pos = pos+1 # skip ')'
 
-proc decodeNodeLazyBody(r: PRodReader, fInfo: TLineInfo, 
-                        belongsTo: PSym): PNode = 
+proc decodeNodeLazyBody(r: PRodReader, fInfo: TLineInfo,
+                        belongsTo: PSym): PNode =
   result = nil
-  if r.s[r.pos] == '(': 
+  if r.s[r.pos] == '(':
     inc(r.pos)
-    if r.s[r.pos] == ')': 
+    if r.s[r.pos] == ')':
       inc(r.pos)
       return                  # nil node
     result = newNodeI(TNodeKind(decodeVInt(r.s, r.pos)), fInfo)
     decodeLineInfo(r, result.info)
-    if r.s[r.pos] == '$': 
+    if r.s[r.pos] == '$':
       inc(r.pos)
       result.flags = cast[TNodeFlags](int32(decodeVInt(r.s, r.pos)))
-    if r.s[r.pos] == '^': 
+    if r.s[r.pos] == '^':
       inc(r.pos)
       var id = decodeVInt(r.s, r.pos)
       result.typ = rrGetType(r, id, result.info)
     case result.kind
-    of nkCharLit..nkInt64Lit: 
-      if r.s[r.pos] == '!': 
+    of nkCharLit..nkInt64Lit:
+      if r.s[r.pos] == '!':
         inc(r.pos)
         result.intVal = decodeVBiggestInt(r.s, r.pos)
-    of nkFloatLit..nkFloat64Lit: 
-      if r.s[r.pos] == '!': 
+    of nkFloatLit..nkFloat64Lit:
+      if r.s[r.pos] == '!':
         inc(r.pos)
         var fl = decodeStr(r.s, r.pos)
         result.floatVal = parseFloat(fl)
-    of nkStrLit..nkTripleStrLit: 
-      if r.s[r.pos] == '!': 
+    of nkStrLit..nkTripleStrLit:
+      if r.s[r.pos] == '!':
         inc(r.pos)
         result.strVal = decodeStr(r.s, r.pos)
-      else: 
+      else:
         result.strVal = ""    # BUGFIX
-    of nkIdent: 
-      if r.s[r.pos] == '!': 
+    of nkIdent:
+      if r.s[r.pos] == '!':
         inc(r.pos)
         var fl = decodeStr(r.s, r.pos)
         result.ident = getIdent(fl)
-      else: 
+      else:
         internalError(result.info, "decodeNode: nkIdent")
-    of nkSym: 
-      if r.s[r.pos] == '!': 
+    of nkSym:
+      if r.s[r.pos] == '!':
         inc(r.pos)
         var id = decodeVInt(r.s, r.pos)
         result.sym = rrGetSym(r, id, result.info)
-      else: 
+      else:
         internalError(result.info, "decodeNode: nkSym")
     else:
       var i = 0
-      while r.s[r.pos] != ')': 
+      while r.s[r.pos] != ')':
         if belongsTo != nil and i == bodyPos:
           addSonNilAllowed(result, nil)
           belongsTo.offset = r.pos
@@ -252,93 +252,93 @@ proc decodeNodeLazyBody(r: PRodReader, fInfo: TLineInfo,
 
 proc decodeNode(r: PRodReader, fInfo: TLineInfo): PNode =
   result = decodeNodeLazyBody(r, fInfo, nil)
-  
-proc decodeLoc(r: PRodReader, loc: var TLoc, info: TLineInfo) = 
-  if r.s[r.pos] == '<': 
+
+proc decodeLoc(r: PRodReader, loc: var TLoc, info: TLineInfo) =
+  if r.s[r.pos] == '<':
     inc(r.pos)
-    if r.s[r.pos] in {'0'..'9', 'a'..'z', 'A'..'Z'}: 
+    if r.s[r.pos] in {'0'..'9', 'a'..'z', 'A'..'Z'}:
       loc.k = TLocKind(decodeVInt(r.s, r.pos))
-    else: 
+    else:
       loc.k = low(loc.k)
-    if r.s[r.pos] == '*': 
+    if r.s[r.pos] == '*':
       inc(r.pos)
       loc.s = TStorageLoc(decodeVInt(r.s, r.pos))
-    else: 
+    else:
       loc.s = low(loc.s)
-    if r.s[r.pos] == '$': 
+    if r.s[r.pos] == '$':
       inc(r.pos)
       loc.flags = cast[TLocFlags](int32(decodeVInt(r.s, r.pos)))
-    else: 
+    else:
       loc.flags = {}
-    if r.s[r.pos] == '^': 
+    if r.s[r.pos] == '^':
       inc(r.pos)
       loc.t = rrGetType(r, decodeVInt(r.s, r.pos), info)
-    else: 
+    else:
       loc.t = nil
-    if r.s[r.pos] == '!': 
+    if r.s[r.pos] == '!':
       inc(r.pos)
       loc.r = rope(decodeStr(r.s, r.pos))
-    else: 
+    else:
       loc.r = nil
     if r.s[r.pos] == '>': inc(r.pos)
     else: internalError(info, "decodeLoc " & r.s[r.pos])
-  
-proc decodeType(r: PRodReader, info: TLineInfo): PType = 
+
+proc decodeType(r: PRodReader, info: TLineInfo): PType =
   result = nil
-  if r.s[r.pos] == '[': 
+  if r.s[r.pos] == '[':
     inc(r.pos)
-    if r.s[r.pos] == ']': 
+    if r.s[r.pos] == ']':
       inc(r.pos)
       return                  # nil type
   new(result)
   result.kind = TTypeKind(decodeVInt(r.s, r.pos))
-  if r.s[r.pos] == '+': 
+  if r.s[r.pos] == '+':
     inc(r.pos)
     result.id = decodeVInt(r.s, r.pos)
     setId(result.id)
     if debugIds: registerID(result)
-  else: 
+  else:
     internalError(info, "decodeType: no id")
   # here this also avoids endless recursion for recursive type
-  idTablePut(gTypeTable, result, result) 
+  idTablePut(gTypeTable, result, result)
   if r.s[r.pos] == '(': result.n = decodeNode(r, unknownLineInfo())
-  if r.s[r.pos] == '$': 
+  if r.s[r.pos] == '$':
     inc(r.pos)
     result.flags = cast[TTypeFlags](int32(decodeVInt(r.s, r.pos)))
-  if r.s[r.pos] == '?': 
+  if r.s[r.pos] == '?':
     inc(r.pos)
     result.callConv = TCallingConvention(decodeVInt(r.s, r.pos))
-  if r.s[r.pos] == '*': 
+  if r.s[r.pos] == '*':
     inc(r.pos)
     result.owner = rrGetSym(r, decodeVInt(r.s, r.pos), info)
-  if r.s[r.pos] == '&': 
+  if r.s[r.pos] == '&':
     inc(r.pos)
     result.sym = rrGetSym(r, decodeVInt(r.s, r.pos), info)
-  if r.s[r.pos] == '/': 
+  if r.s[r.pos] == '/':
     inc(r.pos)
     result.size = decodeVInt(r.s, r.pos)
-  else: 
+  else:
     result.size = - 1
-  if r.s[r.pos] == '=': 
+  if r.s[r.pos] == '=':
     inc(r.pos)
     result.align = decodeVInt(r.s, r.pos).int16
-  else: 
+  else:
     result.align = 2
   decodeLoc(r, result.loc, info)
-  while r.s[r.pos] == '^': 
+  while r.s[r.pos] == '^':
     inc(r.pos)
-    if r.s[r.pos] == '(': 
+    if r.s[r.pos] == '(':
       inc(r.pos)
       if r.s[r.pos] == ')': inc(r.pos)
       else: internalError(info, "decodeType ^(" & r.s[r.pos])
       rawAddSon(result, nil)
-    else: 
+    else:
       var d = decodeVInt(r.s, r.pos)
       rawAddSon(result, rrGetType(r, d, info))
 
-proc decodeLib(r: PRodReader, info: TLineInfo): PLib = 
+proc decodeLib(r: PRodReader, info: TLineInfo): PLib =
   result = nil
-  if r.s[r.pos] == '|': 
+  if r.s[r.pos] == '|':
     new(result)
     inc(r.pos)
     result.kind = TLibKind(decodeVInt(r.s, r.pos))
@@ -349,31 +349,31 @@ proc decodeLib(r: PRodReader, info: TLineInfo): PLib =
     inc(r.pos)
     result.path = decodeNode(r, info)
 
-proc decodeSym(r: PRodReader, info: TLineInfo): PSym = 
-  var 
+proc decodeSym(r: PRodReader, info: TLineInfo): PSym =
+  var
     id: int
     ident: PIdent
   result = nil
-  if r.s[r.pos] == '{': 
+  if r.s[r.pos] == '{':
     inc(r.pos)
-    if r.s[r.pos] == '}': 
+    if r.s[r.pos] == '}':
       inc(r.pos)
       return                  # nil sym
   var k = TSymKind(decodeVInt(r.s, r.pos))
-  if r.s[r.pos] == '+': 
+  if r.s[r.pos] == '+':
     inc(r.pos)
     id = decodeVInt(r.s, r.pos)
     setId(id)
   else:
     internalError(info, "decodeSym: no id")
-  if r.s[r.pos] == '&': 
+  if r.s[r.pos] == '&':
     inc(r.pos)
     ident = getIdent(decodeStr(r.s, r.pos))
   else:
     internalError(info, "decodeSym: no ident")
   #echo "decoding: {", ident.s
   result = PSym(idTableGet(r.syms, id))
-  if result == nil: 
+  if result == nil:
     new(result)
     result.id = id
     idTablePut(r.syms, result, result)
@@ -388,35 +388,35 @@ proc decodeSym(r: PRodReader, info: TLineInfo): PSym =
     result.id = id
   result.kind = k
   result.name = ident         # read the rest of the symbol description:
-  if r.s[r.pos] == '^': 
+  if r.s[r.pos] == '^':
     inc(r.pos)
     result.typ = rrGetType(r, decodeVInt(r.s, r.pos), info)
   decodeLineInfo(r, result.info)
-  if r.s[r.pos] == '*': 
+  if r.s[r.pos] == '*':
     inc(r.pos)
     result.owner = rrGetSym(r, decodeVInt(r.s, r.pos), result.info)
-  if r.s[r.pos] == '$': 
+  if r.s[r.pos] == '$':
     inc(r.pos)
     result.flags = cast[TSymFlags](int32(decodeVInt(r.s, r.pos)))
-  if r.s[r.pos] == '@': 
+  if r.s[r.pos] == '@':
     inc(r.pos)
     result.magic = TMagic(decodeVInt(r.s, r.pos))
-  if r.s[r.pos] == '!': 
+  if r.s[r.pos] == '!':
     inc(r.pos)
     result.options = cast[TOptions](int32(decodeVInt(r.s, r.pos)))
-  else: 
+  else:
     result.options = r.options
-  if r.s[r.pos] == '%': 
+  if r.s[r.pos] == '%':
     inc(r.pos)
     result.position = decodeVInt(r.s, r.pos)
   elif result.kind notin routineKinds + {skModule}:
     result.position = 0
     # this may have been misused as reader index! But we still
     # need it for routines as the body is loaded lazily.
-  if r.s[r.pos] == '`': 
+  if r.s[r.pos] == '`':
     inc(r.pos)
     result.offset = decodeVInt(r.s, r.pos)
-  else: 
+  else:
     result.offset = - 1
   decodeLoc(r, result.loc, result.info)
   result.annex = decodeLib(r, info)
@@ -433,35 +433,35 @@ proc decodeSym(r: PRodReader, info: TLineInfo): PSym =
       result.ast = decodeNode(r, result.info)
   #echo "decoded: ", ident.s, "}"
 
-proc skipSection(r: PRodReader) = 
-  if r.s[r.pos] == ':': 
+proc skipSection(r: PRodReader) =
+  if r.s[r.pos] == ':':
     while r.s[r.pos] > '\x0A': inc(r.pos)
-  elif r.s[r.pos] == '(': 
+  elif r.s[r.pos] == '(':
     var c = 0                 # count () pairs
     inc(r.pos)
-    while true: 
+    while true:
       case r.s[r.pos]
       of '\x0A': inc(r.line)
       of '(': inc(c)
-      of ')': 
-        if c == 0: 
+      of ')':
+        if c == 0:
           inc(r.pos)
-          break 
-        elif c > 0: 
+          break
+        elif c > 0:
           dec(c)
       of '\0': break          # end of file
       else: discard
       inc(r.pos)
-  else: 
+  else:
     internalError("skipSection " & $r.line)
-  
-proc rdWord(r: PRodReader): string = 
+
+proc rdWord(r: PRodReader): string =
   result = ""
-  while r.s[r.pos] in {'A'..'Z', '_', 'a'..'z', '0'..'9'}: 
+  while r.s[r.pos] in {'A'..'Z', '_', 'a'..'z', '0'..'9'}:
     add(result, r.s[r.pos])
     inc(r.pos)
 
-proc newStub(r: PRodReader, name: string, id: int): PSym = 
+proc newStub(r: PRodReader, name: string, id: int): PSym =
   new(result)
   result.kind = skStub
   result.id = id
@@ -469,11 +469,11 @@ proc newStub(r: PRodReader, name: string, id: int): PSym =
   result.position = r.readerIndex
   setId(id)                   #MessageOut(result.name.s);
   if debugIds: registerID(result)
-  
-proc processInterf(r: PRodReader, module: PSym) = 
+
+proc processInterf(r: PRodReader, module: PSym) =
   if r.interfIdx == 0: internalError("processInterf")
   r.pos = r.interfIdx
-  while (r.s[r.pos] > '\x0A') and (r.s[r.pos] != ')'): 
+  while (r.s[r.pos] > '\x0A') and (r.s[r.pos] != ')'):
     var w = decodeStr(r.s, r.pos)
     inc(r.pos)
     var key = decodeVInt(r.s, r.pos)
@@ -483,28 +483,28 @@ proc processInterf(r: PRodReader, module: PSym) =
     strTableAdd(module.tab, s)
     idTablePut(r.syms, s, s)
 
-proc processCompilerProcs(r: PRodReader, module: PSym) = 
+proc processCompilerProcs(r: PRodReader, module: PSym) =
   if r.compilerProcsIdx == 0: internalError("processCompilerProcs")
   r.pos = r.compilerProcsIdx
-  while (r.s[r.pos] > '\x0A') and (r.s[r.pos] != ')'): 
+  while (r.s[r.pos] > '\x0A') and (r.s[r.pos] != ')'):
     var w = decodeStr(r.s, r.pos)
     inc(r.pos)
     var key = decodeVInt(r.s, r.pos)
     inc(r.pos)                # #10
     var s = PSym(idTableGet(r.syms, key))
-    if s == nil: 
+    if s == nil:
       s = newStub(r, w, key)
       s.owner = module
       idTablePut(r.syms, s, s)
     strTableAdd(rodCompilerprocs, s)
 
-proc processIndex(r: PRodReader; idx: var TIndex; outf: File = nil) = 
+proc processIndex(r: PRodReader; idx: var TIndex; outf: File = nil) =
   var key, val, tmp: int
   inc(r.pos, 2)               # skip "(\10"
   inc(r.line)
-  while (r.s[r.pos] > '\x0A') and (r.s[r.pos] != ')'): 
+  while (r.s[r.pos] > '\x0A') and (r.s[r.pos] != ')'):
     tmp = decodeVInt(r.s, r.pos)
-    if r.s[r.pos] == ' ': 
+    if r.s[r.pos] == ' ':
       inc(r.pos)
       key = idx.lastIdxKey + tmp
       val = decodeVInt(r.s, r.pos) + idx.lastIdxVal
@@ -516,11 +516,11 @@ proc processIndex(r: PRodReader; idx: var TIndex; outf: File = nil) =
     idx.lastIdxKey = key
     idx.lastIdxVal = val
     setId(key)                # ensure that this id will not be used
-    if r.s[r.pos] == '\x0A': 
+    if r.s[r.pos] == '\x0A':
       inc(r.pos)
       inc(r.line)
   if r.s[r.pos] == ')': inc(r.pos)
-  
+
 proc cmdChangeTriggersRecompilation(old, new: TCommands): bool =
   if old == new: return false
   # we use a 'case' statement without 'else' so that addition of a
@@ -532,34 +532,34 @@ proc cmdChangeTriggersRecompilation(old, new: TCommands): bool =
                cmdInteractive}:
       return false
   of cmdNone, cmdDoc, cmdInterpret, cmdPretty, cmdGenDepend, cmdDump,
-      cmdCheck, cmdParse, cmdScan, cmdIdeTools, cmdDef, 
+      cmdCheck, cmdParse, cmdScan, cmdIdeTools, cmdDef,
       cmdRst2html, cmdRst2tex, cmdInteractive, cmdRun:
     discard
   # else: trigger recompilation:
   result = true
-  
-proc processRodFile(r: PRodReader, crc: SecureHash) = 
-  var 
+
+proc processRodFile(r: PRodReader, crc: SecureHash) =
+  var
     w: string
     d: int
   var inclCrc: SecureHash
-  while r.s[r.pos] != '\0': 
+  while r.s[r.pos] != '\0':
     var section = rdWord(r)
-    if r.reason != rrNone: 
+    if r.reason != rrNone:
       break                   # no need to process this file further
-    case section 
-    of "CRC": 
+    case section
+    of "CRC":
       inc(r.pos)              # skip ':'
       if crc != parseSecureHash(decodeStr(r.s, r.pos)):
         r.reason = rrCrcChange
-    of "ID": 
+    of "ID":
       inc(r.pos)              # skip ':'
       r.moduleID = decodeVInt(r.s, r.pos)
       setId(r.moduleID)
     of "ORIGFILE":
       inc(r.pos)
       r.origFile = decodeStr(r.s, r.pos)
-    of "OPTIONS": 
+    of "OPTIONS":
       inc(r.pos)              # skip ':'
       r.options = cast[TOptions](int32(decodeVInt(r.s, r.pos)))
       if options.gOptions != r.options: r.reason = rrOptions
@@ -574,14 +574,14 @@ proc processRodFile(r: PRodReader, crc: SecureHash) =
     of "DEFINES":
       inc(r.pos)              # skip ':'
       d = 0
-      while r.s[r.pos] > '\x0A': 
+      while r.s[r.pos] > '\x0A':
         w = decodeStr(r.s, r.pos)
         inc(d)
-        if not condsyms.isDefined(getIdent(w)): 
+        if not condsyms.isDefined(getIdent(w)):
           r.reason = rrDefines #MessageOut('not defined, but should: ' + w);
         if r.s[r.pos] == ' ': inc(r.pos)
       if (d != countDefinedSymbols()): r.reason = rrDefines
-    of "FILES": 
+    of "FILES":
       inc(r.pos, 2)           # skip "(\10"
       inc(r.line)
       while r.s[r.pos] != ')':
@@ -592,17 +592,17 @@ proc processRodFile(r: PRodReader, crc: SecureHash) =
         inc(r.pos)            # skip #10
         inc(r.line)
       if r.s[r.pos] == ')': inc(r.pos)
-    of "INCLUDES": 
+    of "INCLUDES":
       inc(r.pos, 2)           # skip "(\10"
       inc(r.line)
-      while r.s[r.pos] != ')': 
+      while r.s[r.pos] != ')':
         w = r.files[decodeVInt(r.s, r.pos)].toFullPath
         inc(r.pos)            # skip ' '
         inclCrc = parseSecureHash(decodeStr(r.s, r.pos))
-        if r.reason == rrNone: 
-          if not existsFile(w) or (inclCrc != secureHashFile(w)): 
+        if r.reason == rrNone:
+          if not existsFile(w) or (inclCrc != secureHashFile(w)):
             r.reason = rrInclDeps
-        if r.s[r.pos] == '\x0A': 
+        if r.s[r.pos] == '\x0A':
           inc(r.pos)
           inc(r.line)
       if r.s[r.pos] == ')': inc(r.pos)
@@ -611,28 +611,28 @@ proc processRodFile(r: PRodReader, crc: SecureHash) =
       while r.s[r.pos] > '\x0A':
         r.modDeps.add(r.files[int32(decodeVInt(r.s, r.pos))])
         if r.s[r.pos] == ' ': inc(r.pos)
-    of "INTERF": 
+    of "INTERF":
       r.interfIdx = r.pos + 2
       skipSection(r)
-    of "COMPILERPROCS": 
+    of "COMPILERPROCS":
       r.compilerProcsIdx = r.pos + 2
       skipSection(r)
-    of "INDEX": 
+    of "INDEX":
       processIndex(r, r.index)
-    of "IMPORTS": 
+    of "IMPORTS":
       processIndex(r, r.imports)
-    of "CONVERTERS": 
+    of "CONVERTERS":
       r.convertersIdx = r.pos + 1
       skipSection(r)
     of "METHODS":
       r.methodsIdx = r.pos + 1
       skipSection(r)
-    of "DATA": 
+    of "DATA":
       r.dataIdx = r.pos + 2 # "(\10"
       # We do not read the DATA section here! We read the needed objects on
       # demand. And the DATA section comes last in the file, so we stop here:
       break
-    of "INIT": 
+    of "INIT":
       r.initIdx = r.pos + 2   # "(\10"
       skipSection(r)
     else:
@@ -641,7 +641,7 @@ proc processRodFile(r: PRodReader, crc: SecureHash) =
       #MsgWriteln("skipping section: " & section &
       #           " at " & $r.line & " in " & r.filename)
       skipSection(r)
-    if r.s[r.pos] == '\x0A': 
+    if r.s[r.pos] == '\x0A':
       inc(r.pos)
       inc(r.line)
 
@@ -652,7 +652,7 @@ proc startsWith(buf: cstring, token: string, pos = 0): bool =
   result = s == token.len
 
 proc newRodReader(modfilename: string, crc: SecureHash,
-                  readerIndex: int): PRodReader = 
+                  readerIndex: int): PRodReader =
   new(result)
   try:
     result.memfile = memfiles.open(modfilename)
@@ -671,7 +671,7 @@ proc newRodReader(modfilename: string, crc: SecureHash,
   # we terminate the file explicitly with ``\0``, so the cast to `cstring`
   # is safe:
   r.s = cast[cstring](r.memfile.mem)
-  if startsWith(r.s, "NIM:"): 
+  if startsWith(r.s, "NIM:"):
     initIiTable(r.index.tab)
     initIiTable(r.imports.tab) # looks like a ROD file
     inc(r.pos, 4)
@@ -680,16 +680,16 @@ proc newRodReader(modfilename: string, crc: SecureHash,
       add(version, r.s[r.pos])
       inc(r.pos)
     if r.s[r.pos] == '\x0A': inc(r.pos)
-    if version != RodFileVersion: 
+    if version != RodFileVersion:
       # since ROD files are only for caching, no backwards compatibility is
       # needed
       result = nil
   else:
     result = nil
-  
-proc rrGetType(r: PRodReader, id: int, info: TLineInfo): PType = 
+
+proc rrGetType(r: PRodReader, id: int, info: TLineInfo): PType =
   result = PType(idTableGet(gTypeTable, id))
-  if result == nil: 
+  if result == nil:
     # load the type:
     var oldPos = r.pos
     var d = iiTableGet(r.index.tab, id)
@@ -698,8 +698,8 @@ proc rrGetType(r: PRodReader, id: int, info: TLineInfo): PType =
     result = decodeType(r, info)
     r.pos = oldPos
 
-type 
-  TFileModuleRec{.final.} = object 
+type
+  TFileModuleRec{.final.} = object
     filename*: string
     reason*: TReasonForRecompile
     rd*: PRodReader
@@ -710,7 +710,7 @@ type
 
 var gMods*: TFileModuleMap = @[]
 
-proc decodeSymSafePos(rd: PRodReader, offset: int, info: TLineInfo): PSym = 
+proc decodeSymSafePos(rd: PRodReader, offset: int, info: TLineInfo): PSym =
   # all compiled modules
   if rd.dataIdx == 0: internalError(info, "dataIdx == 0")
   var oldPos = rd.pos
@@ -719,9 +719,9 @@ proc decodeSymSafePos(rd: PRodReader, offset: int, info: TLineInfo): PSym =
   rd.pos = oldPos
 
 proc findSomeWhere(id: int) =
-  for i in countup(0, high(gMods)): 
+  for i in countup(0, high(gMods)):
     var rd = gMods[i].rd
-    if rd != nil: 
+    if rd != nil:
       var d = iiTableGet(rd.index.tab, id)
       if d != InvalidKey:
         echo "found id ", id, " in ", gMods[i].filename
@@ -736,12 +736,12 @@ proc getReader(moduleId: int): PRodReader =
     if result != nil and result.moduleID == moduleId: return result
   return nil
 
-proc rrGetSym(r: PRodReader, id: int, info: TLineInfo): PSym = 
+proc rrGetSym(r: PRodReader, id: int, info: TLineInfo): PSym =
   result = PSym(idTableGet(r.syms, id))
-  if result == nil: 
+  if result == nil:
     # load the symbol:
     var d = iiTableGet(r.index.tab, id)
-    if d == InvalidKey: 
+    if d == InvalidKey:
       # import from other module:
       var moduleID = iiTableGet(r.imports.tab, id)
       if moduleID < 0:
@@ -750,24 +750,24 @@ proc rrGetSym(r: PRodReader, id: int, info: TLineInfo): PSym =
         internalError(info, "missing from both indexes: +" & x)
       var rd = getReader(moduleID)
       d = iiTableGet(rd.index.tab, id)
-      if d != InvalidKey: 
+      if d != InvalidKey:
         result = decodeSymSafePos(rd, d, info)
       else:
         var x = ""
         encodeVInt(id, x)
         when false: findSomeWhere(id)
         internalError(info, "rrGetSym: no reader found: +" & x)
-    else: 
+    else:
       # own symbol:
       result = decodeSymSafePos(r, d, info)
   if result != nil and result.kind == skStub: rawLoadStub(result)
-  
-proc loadInitSection(r: PRodReader): PNode = 
+
+proc loadInitSection(r: PRodReader): PNode =
   if r.initIdx == 0 or r.dataIdx == 0: internalError("loadInitSection")
   var oldPos = r.pos
   r.pos = r.initIdx
   result = newNode(nkStmtList)
-  while r.s[r.pos] > '\x0A' and r.s[r.pos] != ')': 
+  while r.s[r.pos] > '\x0A' and r.s[r.pos] != ')':
     var d = decodeVInt(r.s, r.pos)
     inc(r.pos)                # #10
     var p = r.pos
@@ -776,13 +776,13 @@ proc loadInitSection(r: PRodReader): PNode =
     r.pos = p
   r.pos = oldPos
 
-proc loadConverters(r: PRodReader) = 
+proc loadConverters(r: PRodReader) =
   # We have to ensure that no exported converter is a stub anymore, and the
   # import mechanism takes care of the rest.
-  if r.convertersIdx == 0 or r.dataIdx == 0: 
+  if r.convertersIdx == 0 or r.dataIdx == 0:
     internalError("importConverters")
   r.pos = r.convertersIdx
-  while r.s[r.pos] > '\x0A': 
+  while r.s[r.pos] > '\x0A':
     var d = decodeVInt(r.s, r.pos)
     discard rrGetSym(r, d, unknownLineInfo())
     if r.s[r.pos] == ' ': inc(r.pos)
@@ -801,7 +801,7 @@ proc getCRC*(fileIdx: int32): SecureHash =
 
   if gMods[fileIdx].crcDone:
     return gMods[fileIdx].crc
-  
+
   result = secureHashFile(fileIdx.toFilename)
   gMods[fileIdx].crc = result
 
@@ -811,7 +811,7 @@ template growCache*(cache, pos) =
 proc checkDep(fileIdx: int32): TReasonForRecompile =
   assert fileIdx != InvalidFileIDX
   growCache gMods, fileIdx
-  if gMods[fileIdx].reason != rrEmpty: 
+  if gMods[fileIdx].reason != rrEmpty:
     # reason has already been computed for this module:
     return gMods[fileIdx].reason
   let filename = fileIdx.toFilename
@@ -821,12 +821,12 @@ proc checkDep(fileIdx: int32): TReasonForRecompile =
   var r: PRodReader = nil
   var rodfile = toGeneratedFile(filename.withPackageName, RodExt)
   r = newRodReader(rodfile, crc, fileIdx)
-  if r == nil: 
+  if r == nil:
     result = (if existsFile(rodfile): rrRodInvalid else: rrRodDoesNotExist)
   else:
     processRodFile(r, crc)
     result = r.reason
-    if result == rrNone: 
+    if result == rrNone:
       # check modules it depends on
       # NOTE: we need to process the entire module graph so that no ID will
       # be used twice! However, compilation speed does not suffer much from
@@ -846,10 +846,10 @@ proc checkDep(fileIdx: int32): TReasonForRecompile =
     r = nil
   gMods[fileIdx].rd = r
   gMods[fileIdx].reason = result  # now we know better
-  
-proc handleSymbolFile(module: PSym): PRodReader = 
+
+proc handleSymbolFile(module: PSym): PRodReader =
   let fileIdx = module.fileIdx
-  if optSymbolFiles notin gGlobalOptions: 
+  if optSymbolFiles notin gGlobalOptions:
     module.id = getID()
     return nil
   idgen.loadMaxIds(options.gProjectPath / options.gProjectName)
@@ -857,7 +857,7 @@ proc handleSymbolFile(module: PSym): PRodReader =
   discard checkDep(fileIdx)
   if gMods[fileIdx].reason == rrEmpty: internalError("handleSymbolFile")
   result = gMods[fileIdx].rd
-  if result != nil: 
+  if result != nil:
     module.id = result.moduleID
     idTablePut(result.syms, module, module)
     processInterf(result, module)
@@ -878,13 +878,13 @@ proc rawLoadStub(s: PSym) =
     #echo "rs: ", toHex(cast[int](rs.position), int.sizeof * 2),
     #     "\ns:  ", toHex(cast[int](s.position), int.sizeof * 2)
     internalError(rs.info, "loadStub: wrong symbol")
-  elif rs.id != theId: 
-    internalError(rs.info, "loadStub: wrong ID") 
+  elif rs.id != theId:
+    internalError(rs.info, "loadStub: wrong ID")
   #MessageOut('loaded stub: ' + s.name.s);
-  
+
 proc loadStub*(s: PSym) =
   ## loads the stub symbol `s`.
-  
+
   # deactivate the GC here because we do a deep recursion and generate no
   # garbage when restoring parts of the object graph anyway.
   # Since we die with internal errors if this fails, no try-finally is
@@ -892,7 +892,7 @@ proc loadStub*(s: PSym) =
   GC_disable()
   rawLoadStub(s)
   GC_enable()
-  
+
 proc getBody*(s: PSym): PNode =
   ## retrieves the AST's body of `s`. If `s` has been loaded from a rod-file
   ## it may perform an expensive reload operation. Otherwise it's a simple
@@ -908,7 +908,7 @@ proc getBody*(s: PSym): PNode =
     r.pos = oldPos
     s.ast.sons[bodyPos] = result
     s.offset = 0
-  
+
 initIdTable(gTypeTable)
 initStrTable(rodCompilerprocs)
 
@@ -921,16 +921,16 @@ proc writeNode(f: File; n: PNode) =
       f.write('^')
       f.write(n.typ.id)
     case n.kind
-    of nkCharLit..nkInt64Lit: 
+    of nkCharLit..nkInt64Lit:
       if n.intVal != 0:
         f.write('!')
         f.write(n.intVal)
-    of nkFloatLit..nkFloat64Lit: 
-      if n.floatVal != 0.0: 
+    of nkFloatLit..nkFloat64Lit:
+      if n.floatVal != 0.0:
         f.write('!')
         f.write($n.floatVal)
     of nkStrLit..nkTripleStrLit:
-      if n.strVal != "": 
+      if n.strVal != "":
         f.write('!')
         f.write(n.strVal.escape)
     of nkIdent:
@@ -940,7 +940,7 @@ proc writeNode(f: File; n: PNode) =
       f.write('!')
       f.write(n.sym.id)
     else:
-      for i in countup(0, sonsLen(n) - 1): 
+      for i in countup(0, sonsLen(n) - 1):
         writeNode(f, n.sons[i])
   f.write(")")
 
@@ -966,10 +966,10 @@ proc writeSym(f: File; s: PSym) =
   if s.magic != mNone:
     f.write('@')
     f.write($s.magic)
-  if s.options != gOptions: 
+  if s.options != gOptions:
     f.write('!')
     f.write($s.options)
-  if s.position != 0: 
+  if s.position != 0:
     f.write('%')
     f.write($s.position)
   if s.offset != -1:
@@ -990,12 +990,12 @@ proc writeType(f: File; t: PType) =
   f.write($t.kind)
   f.write('+')
   f.write($t.id)
-  if t.n != nil: 
+  if t.n != nil:
     f.writeNode(t.n)
   if t.flags != {}:
     f.write('$')
     f.write($t.flags)
-  if t.callConv != low(t.callConv): 
+  if t.callConv != low(t.callConv):
     f.write('?')
     f.write($t.callConv)
   if t.owner != nil:
@@ -1010,11 +1010,11 @@ proc writeType(f: File; t: PType) =
   if t.align != 2:
     f.write('=')
     f.write($t.align)
-  for i in countup(0, sonsLen(t) - 1): 
-    if t.sons[i] == nil: 
+  for i in countup(0, sonsLen(t) - 1):
+    if t.sons[i] == nil:
       f.write("^()")
     else:
-      f.write('^') 
+      f.write('^')
       f.write($t.sons[i].id)
   f.write("]\n")
 
@@ -1031,28 +1031,28 @@ proc viewFile(rodfile: string) =
     case section
     of "CRC":
       inc(r.pos)              # skip ':'
-      outf.writeln("CRC:", $decodeVInt(r.s, r.pos))
-    of "ID": 
+      outf.writeLine("CRC:", $decodeVInt(r.s, r.pos))
+    of "ID":
       inc(r.pos)              # skip ':'
       r.moduleID = decodeVInt(r.s, r.pos)
       setId(r.moduleID)
-      outf.writeln("ID:", $r.moduleID)
+      outf.writeLine("ID:", $r.moduleID)
     of "ORIGFILE":
       inc(r.pos)
       r.origFile = decodeStr(r.s, r.pos)
-      outf.writeln("ORIGFILE:", r.origFile)
+      outf.writeLine("ORIGFILE:", r.origFile)
     of "OPTIONS":
       inc(r.pos)              # skip ':'
       r.options = cast[TOptions](int32(decodeVInt(r.s, r.pos)))
-      outf.writeln("OPTIONS:", $r.options)
+      outf.writeLine("OPTIONS:", $r.options)
     of "GOPTIONS":
       inc(r.pos)              # skip ':'
       let dep = cast[TGlobalOptions](int32(decodeVInt(r.s, r.pos)))
-      outf.writeln("GOPTIONS:", $dep)
+      outf.writeLine("GOPTIONS:", $dep)
     of "CMD":
       inc(r.pos)              # skip ':'
       let dep = cast[TCommands](int32(decodeVInt(r.s, r.pos)))
-      outf.writeln("CMD:", $dep)
+      outf.writeLine("CMD:", $dep)
     of "DEFINES":
       inc(r.pos)              # skip ':'
       var d = 0
@@ -1074,18 +1074,18 @@ proc viewFile(rodfile: string) =
         r.files.add(finalPath.fileInfoIdx)
         inc(r.pos)            # skip #10
         inc(r.line)
-        outf.writeln finalPath
+        outf.writeLine finalPath
       if r.s[r.pos] == ')': inc(r.pos)
       outf.write(")\n")
-    of "INCLUDES": 
+    of "INCLUDES":
       inc(r.pos, 2)           # skip "(\10"
       inc(r.line)
       outf.write("INCLUDES(\n")
-      while r.s[r.pos] != ')': 
+      while r.s[r.pos] != ')':
         let w = r.files[decodeVInt(r.s, r.pos)]
         inc(r.pos)            # skip ' '
         let inclCrc = decodeVInt(r.s, r.pos)
-        if r.s[r.pos] == '\x0A': 
+        if r.s[r.pos] == '\x0A':
           inc(r.pos)
           inc(r.line)
         outf.write(w, " ", inclCrc, "\n")
@@ -1094,7 +1094,7 @@ proc viewFile(rodfile: string) =
     of "DEPS":
       inc(r.pos)              # skip ':'
       outf.write("DEPS:")
-      while r.s[r.pos] > '\x0A': 
+      while r.s[r.pos] > '\x0A':
         let v = int32(decodeVInt(r.s, r.pos))
         r.modDeps.add(r.files[v])
         if r.s[r.pos] == ' ': inc(r.pos)
@@ -1126,7 +1126,7 @@ proc viewFile(rodfile: string) =
       if section == "METHODS": r.methodsIdx = r.pos
       else: r.convertersIdx = r.pos
       outf.write(section, ":")
-      while r.s[r.pos] > '\x0A': 
+      while r.s[r.pos] > '\x0A':
         let d = decodeVInt(r.s, r.pos)
         outf.write(" ", $d)
         if r.s[r.pos] == ' ': inc(r.pos)
@@ -1152,7 +1152,7 @@ proc viewFile(rodfile: string) =
       outf.write("INIT(\n")
       inc r.pos, 2
       r.initIdx = r.pos
-      while r.s[r.pos] > '\x0A' and r.s[r.pos] != ')': 
+      while r.s[r.pos] > '\x0A' and r.s[r.pos] != ')':
         let d = decodeVInt(r.s, r.pos)
         inc(r.pos)                # #10
         #let p = r.pos
diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim
index f506e3ff5..cd6e1ff9a 100644
--- a/compiler/sigmatch.nim
+++ b/compiler/sigmatch.nim
@@ -218,12 +218,12 @@ proc cmpCandidates*(a, b: TCandidate): int =
   result = complexDisambiguation(a.callee, b.callee)
 
 proc writeMatches*(c: TCandidate) =
-  writeln(stdout, "exact matches: " & $c.exactMatches)
-  writeln(stdout, "generic matches: " & $c.genericMatches)
-  writeln(stdout, "subtype matches: " & $c.subtypeMatches)
-  writeln(stdout, "intconv matches: " & $c.intConvMatches)
-  writeln(stdout, "conv matches: " & $c.convMatches)
-  writeln(stdout, "inheritance: " & $c.inheritancePenalty)
+  writeLine(stdout, "exact matches: " & $c.exactMatches)
+  writeLine(stdout, "generic matches: " & $c.genericMatches)
+  writeLine(stdout, "subtype matches: " & $c.subtypeMatches)
+  writeLine(stdout, "intconv matches: " & $c.intConvMatches)
+  writeLine(stdout, "conv matches: " & $c.convMatches)
+  writeLine(stdout, "inheritance: " & $c.inheritancePenalty)
 
 proc argTypeToString(arg: PNode; prefer: TPreferedDesc): string =
   if arg.kind in nkSymChoices:
diff --git a/doc/astspec.txt b/doc/astspec.txt
index d3ca7755e..9bedb00fc 100644
--- a/doc/astspec.txt
+++ b/doc/astspec.txt
@@ -222,13 +222,13 @@ Call with named arguments
 Concrete syntax:
 
 .. code-block:: nim
-  writeln(file=stdout, "hallo")
+  writeLine(file=stdout, "hallo")
 
 AST:
 
 .. code-block:: nim
   nnkCall(
-    nnkIdent(!"writeln"),
+    nnkIdent(!"writeLine"),
     nnkExprEqExpr(
       nnkIdent(!"file"),
       nnkIdent(!"stdout")
diff --git a/doc/manual/generics.txt b/doc/manual/generics.txt
index f82cad531..839e005a1 100644
--- a/doc/manual/generics.txt
+++ b/doc/manual/generics.txt
@@ -53,7 +53,7 @@ The following example shows a generic binary tree can be modelled:
   add(root, newNode("hallo")) # instantiates generic procs ``newNode`` and
   add(root, newNode("world")) # ``add``
   for str in inorder(root):
-    writeln(stdout, str)
+    writeLine(stdout, str)
 
 
 Is operator
diff --git a/doc/manual/procs.txt b/doc/manual/procs.txt
index 23b5e4d1e..df633072d 100644
--- a/doc/manual/procs.txt
+++ b/doc/manual/procs.txt
@@ -132,7 +132,7 @@ to supply any type of first argument for procedures:
   echo("abc".len) # is the same as echo(len("abc"))
   echo("abc".toUpper())
   echo({'a', 'b', 'c'}.card)
-  stdout.writeln("Hallo") # the same as writeln(stdout, "Hallo")
+  stdout.writeLine("Hallo") # the same as writeLine(stdout, "Hallo")
 
 Another way to look at the method call syntax is that it provides the missing
 postfix notation.
diff --git a/doc/manual/templates.txt b/doc/manual/templates.txt
index eeb907ce0..950d2fab7 100644
--- a/doc/manual/templates.txt
+++ b/doc/manual/templates.txt
@@ -77,10 +77,10 @@ special ``:`` syntax:
       quit("cannot open: " & fn)
       
   withFile(txt, "ttempl3.txt", fmWrite):
-    txt.writeln("line 1")
-    txt.writeln("line 2")
+    txt.writeLine("line 1")
+    txt.writeLine("line 2")
   
-In the example the two ``writeln`` statements are bound to the ``actions``
+In the example the two ``writeLine`` statements are bound to the ``actions``
 parameter.
 
 
@@ -206,8 +206,8 @@ template parameter, it is an inject'ed symbol:
       ...
       
   withFile(txt, "ttempl3.txt", fmWrite):
-    txt.writeln("line 1")
-    txt.writeln("line 2")
+    txt.writeLine("line 1")
+    txt.writeLine("line 2")
 
 
 The ``inject`` and ``gensym`` pragmas are second class annotations; they have
@@ -299,7 +299,7 @@ variable number of arguments:
       # add a call to the statement list that writes ": "
       add(result, newCall("write", newIdentNode("stdout"), newStrLitNode(": ")))
       # add a call to the statement list that writes the expressions value:
-      add(result, newCall("writeln", newIdentNode("stdout"), n[i]))
+      add(result, newCall("writeLine", newIdentNode("stdout"), n[i]))
 
   var
     a: array [0..10, int]
@@ -314,15 +314,15 @@ The macro call expands to:
 .. code-block:: nim
   write(stdout, "a[0]")
   write(stdout, ": ")
-  writeln(stdout, a[0])
+  writeLine(stdout, a[0])
 
   write(stdout, "a[1]")
   write(stdout, ": ")
-  writeln(stdout, a[1])
+  writeLine(stdout, a[1])
 
   write(stdout, "x")
   write(stdout, ": ")
-  writeln(stdout, x)
+  writeLine(stdout, x)
 
 
 Arguments that are passed to a ``varargs`` parameter are wrapped in an array
@@ -333,7 +333,7 @@ children.
 BindSym
 -------
 
-The above ``debug`` macro relies on the fact that ``write``, ``writeln`` and
+The above ``debug`` macro relies on the fact that ``write``, ``writeLine`` and
 ``stdout`` are declared in the system module and thus visible in the 
 instantiating context. There is a way to use bound identifiers
 (aka `symbols`:idx:) instead of using unbound identifiers. The ``bindSym`` 
@@ -348,7 +348,7 @@ builtin can be used for that:
       # we can bind symbols in scope via 'bindSym':
       add(result, newCall(bindSym"write", bindSym"stdout", toStrLit(n[i])))
       add(result, newCall(bindSym"write", bindSym"stdout", newStrLitNode(": ")))
-      add(result, newCall(bindSym"writeln", bindSym"stdout", n[i]))
+      add(result, newCall(bindSym"writeLine", bindSym"stdout", n[i]))
 
   var
     a: array [0..10, int]
@@ -363,17 +363,17 @@ The macro call expands to:
 .. code-block:: nim
   write(stdout, "a[0]")
   write(stdout, ": ")
-  writeln(stdout, a[0])
+  writeLine(stdout, a[0])
 
   write(stdout, "a[1]")
   write(stdout, ": ")
-  writeln(stdout, a[1])
+  writeLine(stdout, a[1])
 
   write(stdout, "x")
   write(stdout, ": ")
-  writeln(stdout, x)
+  writeLine(stdout, x)
 
-However, the symbols ``write``, ``writeln`` and ``stdout`` are already bound
+However, the symbols ``write``, ``writeLine`` and ``stdout`` are already bound
 and are not looked up again. As the example shows, ``bindSym`` does work with
 overloaded symbols implicitly.
 
diff --git a/doc/manual/trmacros.txt b/doc/manual/trmacros.txt
index 5ff24a36a..453e5f451 100644
--- a/doc/manual/trmacros.txt
+++ b/doc/manual/trmacros.txt
@@ -272,7 +272,7 @@ parameter is of the type ``varargs`` it is treated specially and it can match
 .. code-block:: nim
   template optWrite{
     write(f, x)
-    ((write|writeln){w})(f, y)
+    ((write|writeLine){w})(f, y)
   }(x, y: varargs[expr], f: File, w: expr) =
     w(f, x, y)
   
diff --git a/doc/tut2.txt b/doc/tut2.txt
index 966423844..83ea9ad33 100644
--- a/doc/tut2.txt
+++ b/doc/tut2.txt
@@ -207,7 +207,7 @@ for any type:
   echo("abc".len) # is the same as echo(len("abc"))
   echo("abc".toUpper())
   echo({'a', 'b', 'c'}.card)
-  stdout.writeln("Hallo") # the same as writeln(stdout, "Hallo")
+  stdout.writeLine("Hallo") # the same as writeLine(stdout, "Hallo")
 
 (Another way to look at the method call syntax is that it provides the missing
 postfix notation.)
@@ -217,9 +217,9 @@ So "pure object oriented" code is easy to write:
 .. code-block:: nim
   import strutils
 
-  stdout.writeln("Give a list of numbers (separated by spaces): ")
+  stdout.writeLine("Give a list of numbers (separated by spaces): ")
   stdout.write(stdin.readLine.split.map(parseInt).max.`$`)
-  stdout.writeln(" is the maximum!")
+  stdout.writeLine(" is the maximum!")
 
 
 Properties
@@ -535,7 +535,7 @@ containers:
   add(root, newNode("hello")) # instantiates ``newNode`` and ``add``
   add(root, "world")          # instantiates the second ``add`` proc
   for str in preorder(root):
-    stdout.writeln(str)
+    stdout.writeLine(str)
 
 The example shows a generic binary tree. Depending on context, the brackets are
 used either to introduce type parameters or to instantiate a generic proc,
@@ -580,7 +580,7 @@ simple proc for logging:
     debug = true
 
   proc log(msg: string) {.inline.} =
-    if debug: stdout.writeln(msg)
+    if debug: stdout.writeLine(msg)
 
   var
     x = 4
@@ -597,7 +597,7 @@ Turning the ``log`` proc into a template solves this problem:
     debug = true
 
   template log(msg: string) =
-    if debug: stdout.writeln(msg)
+    if debug: stdout.writeLine(msg)
 
   var
     x = 4
@@ -627,10 +627,10 @@ via a special ``:`` syntax:
       quit("cannot open: " & fn)
 
   withFile(txt, "ttempl3.txt", fmWrite):
-    txt.writeln("line 1")
-    txt.writeln("line 2")
+    txt.writeLine("line 1")
+    txt.writeLine("line 2")
 
-In the example the two ``writeln`` statements are bound to the ``body``
+In the example the two ``writeLine`` statements are bound to the ``body``
 parameter. The ``withFile`` template contains boilerplate code and helps to
 avoid a common bug: to forget to close the file. Note how the
 ``let fn = filename`` statement ensures that ``filename`` is evaluated only
@@ -684,7 +684,7 @@ variable number of arguments:
       # add a call to the statement list that writes ": "
       result.add(newCall("write", newIdentNode("stdout"), newStrLitNode(": ")))
       # add a call to the statement list that writes the expressions value:
-      result.add(newCall("writeln", newIdentNode("stdout"), n[i]))
+      result.add(newCall("writeLine", newIdentNode("stdout"), n[i]))
 
   var
     a: array[0..10, int]
@@ -699,15 +699,15 @@ The macro call expands to:
 .. code-block:: nim
   write(stdout, "a[0]")
   write(stdout, ": ")
-  writeln(stdout, a[0])
+  writeLine(stdout, a[0])
 
   write(stdout, "a[1]")
   write(stdout, ": ")
-  writeln(stdout, a[1])
+  writeLine(stdout, a[1])
 
   write(stdout, "x")
   write(stdout, ": ")
-  writeln(stdout, x)
+  writeLine(stdout, x)
 
 
 
diff --git a/examples/cgi/example.nim b/examples/cgi/example.nim
index 17629982a..761197cdb 100644
--- a/examples/cgi/example.nim
+++ b/examples/cgi/example.nim
@@ -4,4 +4,4 @@ write(stdout, "Content-type: text/html\n\n")
 write(stdout, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n")
 write(stdout, "<html><head><title>Test</title></head><body>\n")
 write(stdout, "Hello!")
-writeln(stdout, "</body></html>")
+writeLine(stdout, "</body></html>")
diff --git a/examples/cgiex.nim b/examples/cgiex.nim
index 7e3292f35..fb55a731a 100644
--- a/examples/cgiex.nim
+++ b/examples/cgiex.nim
@@ -7,6 +7,6 @@ writeContentType()
 
 write(stdout, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n")
 write(stdout, "<html><head><title>Test</title></head><body>\n")
-writeln(stdout, "name: " & myData["name"])
-writeln(stdout, "password: " & myData["password"])
-writeln(stdout, "</body></html>")
+writeLine(stdout, "name: " & myData["name"])
+writeLine(stdout, "password: " & myData["password"])
+writeLine(stdout, "</body></html>")
diff --git a/lib/impure/re.nim b/lib/impure/re.nim
index 5f9371f28..0df8d4a9c 100644
--- a/lib/impure/re.nim
+++ b/lib/impure/re.nim
@@ -369,7 +369,7 @@ iterator split*(s: string, sep: Regex): string =
   ##
   ## .. code-block:: nim
   ##   for word in split("00232this02939is39an22example111", re"\d+"):
-  ##     writeln(stdout, word)
+  ##     writeLine(stdout, word)
   ##
   ## Results in:
   ##
diff --git a/lib/packages/docutils/rst.nim b/lib/packages/docutils/rst.nim
index ae3ed8feb..2fbde632e 100644
--- a/lib/packages/docutils/rst.nim
+++ b/lib/packages/docutils/rst.nim
@@ -307,7 +307,7 @@ proc defaultMsgHandler*(filename: string, line, col: int, msgkind: MsgKind,
   let a = messages[msgkind] % arg
   let message = "$1($2, $3) $4: $5" % [filename, $line, $col, $mc, a]
   if mc == mcError: raise newException(EParseError, message)
-  else: writeln(stdout, message)
+  else: writeLine(stdout, message)
 
 proc defaultFindFile*(filename: string): string {.procvar.} =
   if existsFile(filename): result = filename
diff --git a/lib/pure/cgi.nim b/lib/pure/cgi.nim
index e8977b80b..cfd768f91 100644
--- a/lib/pure/cgi.nim
+++ b/lib/pure/cgi.nim
@@ -25,9 +25,9 @@
 ##    # generate content:
 ##    write(stdout, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n")
 ##    write(stdout, "<html><head><title>Test</title></head><body>\n")
-##    writeln(stdout, "your name: " & myData["name"])
-##    writeln(stdout, "your password: " & myData["password"])
-##    writeln(stdout, "</body></html>")
+##    writeLine(stdout, "your name: " & myData["name"])
+##    writeLine(stdout, "your password: " & myData["password"])
+##    writeLine(stdout, "</body></html>")
 
 import strutils, os, strtabs, cookies
 
diff --git a/lib/pure/logging.nim b/lib/pure/logging.nim
index b28298dfa..7a900daae 100644
--- a/lib/pure/logging.nim
+++ b/lib/pure/logging.nim
@@ -132,12 +132,12 @@ method log*(logger: Logger, level: Level, args: varargs[string, `$`]) {.
 method log*(logger: ConsoleLogger, level: Level, args: varargs[string, `$`]) =
   ## Logs to the console using ``logger`` only.
   if level >= logger.levelThreshold:
-    writeln(stdout, substituteLog(logger.fmtStr, level, args))
+    writeLine(stdout, substituteLog(logger.fmtStr, level, args))
 
 method log*(logger: FileLogger, level: Level, args: varargs[string, `$`]) =
   ## Logs to a file using ``logger`` only.
   if level >= logger.levelThreshold:
-    writeln(logger.f, substituteLog(logger.fmtStr, level, args))
+    writeLine(logger.f, substituteLog(logger.fmtStr, level, args))
 
 proc defaultFilename*(): string =
   ## Returns the default filename for a logger.
@@ -228,7 +228,7 @@ method log*(logger: RollingFileLogger, level: Level, args: varargs[string, `$`])
       logger.curLine = 0
       logger.f = open(logger.baseName, logger.baseMode, bufSize = logger.bufSize)
 
-    writeln(logger.f, substituteLog(logger.fmtStr, level, args))
+    writeLine(logger.f, substituteLog(logger.fmtStr, level, args))
     logger.curLine.inc
 
 # --------
diff --git a/lib/pure/nimprof.nim b/lib/pure/nimprof.nim
index 765d1e341..cfe6bc40d 100644
--- a/lib/pure/nimprof.nim
+++ b/lib/pure/nimprof.nim
@@ -155,7 +155,7 @@ proc writeProfile() {.noconv.} =
   var f: File
   if open(f, filename, fmWrite):
     sort(profileData, cmpEntries)
-    writeln(f, "total executions of each stack trace:")
+    writeLine(f, "total executions of each stack trace:")
     var entries = 0
     for i in 0..high(profileData):
       if profileData[i] != nil: inc entries
@@ -175,13 +175,13 @@ proc writeProfile() {.noconv.} =
     for i in 0..min(100, entries-1):
       if profileData[i].total > 1:
         inc sum, profileData[i].total
-        writeln(f, "Entry: ", i+1, "/", entries, " Calls: ",
+        writeLine(f, "Entry: ", i+1, "/", entries, " Calls: ",
           profileData[i].total // totalCalls, " [sum: ", sum, "; ",
           sum // totalCalls, "]")
         for ii in 0..high(StackTrace):
           let procname = profileData[i].st[ii]
           if isNil(procname): break
-          writeln(f, "  ", procname, " ", perProc[$procname] // totalCalls)
+          writeLine(f, "  ", procname, " ", perProc[$procname] // totalCalls)
     close(f)
     echo "... done"
   else:
diff --git a/lib/pure/parsesql.nim b/lib/pure/parsesql.nim
index 91917b1c5..cfa60094d 100644
--- a/lib/pure/parsesql.nim
+++ b/lib/pure/parsesql.nim
@@ -1323,7 +1323,7 @@ proc ra(n: SqlNode, s: var string, indent: int) =
 #  where: x.name == y.name
 #db.select(fromm = [t1, t2], where = t1.name == t2.name):
 #for x, y, z in db.select(fromm = a, b where = a.name == b.name): 
-#  writeln x, y, z
+#  writeLine x, y, z
 
 proc renderSQL*(n: SqlNode): string =
   ## Converts an SQL abstract syntax tree to its string representation.
diff --git a/lib/pure/pegs.nim b/lib/pure/pegs.nim
index e165d7dca..28f6a17e6 100644
--- a/lib/pure/pegs.nim
+++ b/lib/pure/pegs.nim
@@ -979,7 +979,7 @@ iterator split*(s: string, sep: Peg): string =
   ##
   ## .. code-block:: nim
   ##   for word in split("00232this02939is39an22example111", peg"\d+"):
-  ##     writeln(stdout, word)
+  ##     writeLine(stdout, word)
   ##
   ## Results in:
   ##
diff --git a/lib/pure/streams.nim b/lib/pure/streams.nim
index 50b5c219a..8aa8d35d8 100644
--- a/lib/pure/streams.nim
+++ b/lib/pure/streams.nim
@@ -117,7 +117,12 @@ proc write*(s: Stream, x: string) =
   ## terminating zero is written.
   writeData(s, cstring(x), x.len)
 
-proc writeln*(s: Stream, args: varargs[string, `$`]) =
+proc writeLn*(s: Stream, args: varargs[string, `$`]) {.deprecated.} =
+  ## **Deprecated since version 0.11.4:** Use **writeLine** instead.
+  for str in args: write(s, str)
+  write(s, "\n")
+
+proc writeLine*(s: Stream, args: varargs[string, `$`]) =
   ## writes one or more strings to the the stream `s` followed
   ## by a new line. No length field or terminating zero is written.
   for str in args: write(s, str)
diff --git a/lib/pure/strutils.nim b/lib/pure/strutils.nim
index 317da9a0a..93fcf4d3d 100644
--- a/lib/pure/strutils.nim
+++ b/lib/pure/strutils.nim
@@ -206,7 +206,7 @@ iterator split*(s: string, seps: set[char] = Whitespace): string =
   ##
   ## .. code-block:: nim
   ##   for word in split("  this is an  example  "):
-  ##     writeln(stdout, word)
+  ##     writeLine(stdout, word)
   ##
   ## ...generates this output:
   ##
@@ -220,7 +220,7 @@ iterator split*(s: string, seps: set[char] = Whitespace): string =
   ##
   ## .. code-block:: nim
   ##   for word in split(";;this;is;an;;example;;;", {';'}):
-  ##     writeln(stdout, word)
+  ##     writeLine(stdout, word)
   ##
   ## ...produces the same output as the first example. The code:
   ##
@@ -228,7 +228,7 @@ iterator split*(s: string, seps: set[char] = Whitespace): string =
   ##   let date = "2012-11-20T22:08:08.398990"
   ##   let separators = {' ', '-', ':', 'T'}
   ##   for number in split(date, separators):
-  ##     writeln(stdout, number)
+  ##     writeLine(stdout, number)
   ##
   ## ...results in:
   ##
@@ -259,7 +259,7 @@ iterator split*(s: string, sep: char): string =
   ##
   ## .. code-block:: nim
   ##   for word in split(";;this;is;an;;example;;;", ';'):
-  ##     writeln(stdout, word)
+  ##     writeLine(stdout, word)
   ##
   ## Results in:
   ##
@@ -309,7 +309,7 @@ iterator splitLines*(s: string): string =
   ##
   ## .. code-block:: nim
   ##   for line in splitLines("\nthis\nis\nan\n\nexample\n"):
-  ##     writeln(stdout, line)
+  ##     writeLine(stdout, line)
   ##
   ## Results in:
   ##
@@ -571,7 +571,7 @@ iterator tokenize*(s: string, seps: set[char] = Whitespace): tuple[
   ##
   ## .. code-block:: nim
   ##   for word in tokenize("  this is an  example  "):
-  ##     writeln(stdout, word)
+  ##     writeLine(stdout, word)
   ##
   ## Results in:
   ##
diff --git a/lib/pure/terminal.nim b/lib/pure/terminal.nim
index 2efdf72d5..b6d99e429 100644
--- a/lib/pure/terminal.nim
+++ b/lib/pure/terminal.nim
@@ -430,8 +430,8 @@ macro styledEcho*(m: varargs[expr]): stmt =
     case item.kind
     of nnkStrLit..nnkTripleStrLit:
       if i == m.len - 1:
-        # optimize if string literal is last, just call writeln
-        result.add(newCall(bindSym"writeln", bindSym"stdout", item))
+        # optimize if string literal is last, just call writeLine
+        result.add(newCall(bindSym"writeLine", bindSym"stdout", item))
         if reset: result.add(newCall(bindSym"resetAttributes"))
         return
       else:
@@ -470,7 +470,7 @@ when not defined(testing) and isMainModule:
   writeStyled("styled text ", {styleBright, styleBlink, styleUnderscore})
   setBackGroundColor(bgCyan, true)
   setForeGroundColor(fgBlue)
-  writeln(stdout, "ordinary text")
+  writeLine(stdout, "ordinary text")
 
   styledEcho("styled text ", {styleBright, styleBlink, styleUnderscore})
 
diff --git a/lib/system.nim b/lib/system.nim
index 2beb5b88d..34531eb46 100644
--- a/lib/system.nim
+++ b/lib/system.nim
@@ -898,7 +898,7 @@ proc contains*[T](x: set[T], y: T): bool {.magic: "InSet", noSideEffect.}
   ##
   ## .. code-block:: Nim
   ##   var s: set[range['a'..'z']] = {'a'..'c'}
-  ##   writeln(stdout, 'b' in s)
+  ##   writeLine(stdout, 'b' in s)
   ##
   ## If ``in`` had been declared as ``[T](elem: T, s: set[T])`` then ``T`` would
   ## have been bound to ``char``. But ``s`` is not compatible to type
@@ -2269,7 +2269,7 @@ proc echo*(x: varargs[expr, `$`]) {.magic: "Echo", tags: [WriteIOEffect],
   ## Special built-in that takes a variable number of arguments. Each argument
   ## is converted to a string via ``$``, so it works for user-defined
   ## types that have an overloaded ``$`` operator.
-  ## It is roughly equivalent to ``writeln(stdout, x); flushFile(stdout)``, but
+  ## It is roughly equivalent to ``writeLine(stdout, x); flushFile(stdout)``, but
   ## available for the JavaScript target too.
   ##
   ## Unlike other IO operations this is guaranteed to be thread-safe as
@@ -2526,7 +2526,11 @@ when not defined(JS): #and not defined(NimrodVM):
       ## Returns ``false`` if the end of the file has been reached, ``true``
       ## otherwise. If ``false`` is returned `line` contains no new data.
 
-    proc writeln*[Ty](f: File, x: varargs[Ty, `$`]) {.inline,
+    proc writeLn*[Ty](f: File, x: varargs[Ty, `$`]) {.inline,
+                             tags: [WriteIOEffect], benign, deprecated.}
+      ## **Deprecated since version 0.11.4:** Use **writeLine** instead.
+
+    proc writeLine*[Ty](f: File, x: varargs[Ty, `$`]) {.inline,
                              tags: [WriteIOEffect], benign.}
       ## writes the values `x` to `f` and then writes "\n".
       ## May throw an IO exception.
diff --git a/lib/system/endb.nim b/lib/system/endb.nim
index ef2664796..cba11ac5e 100644
--- a/lib/system/endb.nim
+++ b/lib/system/endb.nim
@@ -117,7 +117,7 @@ proc dbgRepr(p: pointer, typ: PNimType): string =
 proc writeVariable(stream: File, slot: VarSlot) =
   write(stream, slot.name)
   write(stream, " = ")
-  writeln(stream, dbgRepr(slot.address, slot.typ))
+  writeLine(stream, dbgRepr(slot.address, slot.typ))
 
 proc listFrame(stream: File, f: PFrame) =
   write(stream, EndbBeg)
@@ -125,7 +125,7 @@ proc listFrame(stream: File, f: PFrame) =
   write(stream, f.len)
   write(stream, " slots):\n")
   for i in 0 .. f.len-1:
-    writeln(stream, getLocal(f, i).name)
+    writeLine(stream, getLocal(f, i).name)
   write(stream, EndbEnd)
 
 proc listLocals(stream: File, f: PFrame) =
@@ -141,7 +141,7 @@ proc listGlobals(stream: File) =
   write(stream, EndbBeg)
   write(stream, "| Globals:\n")
   for i in 0 .. getGlobalLen()-1:
-    writeln(stream, getGlobal(i).name)
+    writeLine(stream, getGlobal(i).name)
   write(stream, EndbEnd)
 
 proc debugOut(msg: cstring) =
diff --git a/lib/system/sysio.nim b/lib/system/sysio.nim
index 3f860655e..5464ee126 100644
--- a/lib/system/sysio.nim
+++ b/lib/system/sysio.nim
@@ -208,10 +208,15 @@ proc endOfFile(f: File): bool =
   ungetc(c, f)
   return c < 0'i32
 
-proc writeln[Ty](f: File, x: varargs[Ty, `$`]) =
+proc writeLn[Ty](f: File, x: varargs[Ty, `$`]) =
   for i in items(x): write(f, i)
   write(f, "\n")
 
+proc writeLine[Ty](f: File, x: varargs[Ty, `$`]) =
+  for i in items(x): write(f, i)
+  write(f, "\n")
+
+
 proc rawEcho(x: string) {.inline, compilerproc.} = write(stdout, x)
 proc rawEchoNL() {.inline, compilerproc.} = write(stdout, "\n")
 
diff --git a/tests/ambsym/tambsym2.nim b/tests/ambsym/tambsym2.nim
index 745427c54..c3b997549 100644
--- a/tests/ambsym/tambsym2.nim
+++ b/tests/ambsym/tambsym2.nim
@@ -11,8 +11,8 @@ type
     
 proc len(x: TMyType): int {.inline.} = return x.len
 
-proc x(s: TMyType, len: int) = 
-  writeln(stdout, len(s))
+proc x(s: TMyType, len: int) =
+  writeLine(stdout, len(s))
   
 var
   m: TMyType
diff --git a/tests/ambsym/tambsym3.nim b/tests/ambsym/tambsym3.nim
index 0155f258c..ed8a3058a 100644
--- a/tests/ambsym/tambsym3.nim
+++ b/tests/ambsym/tambsym3.nim
@@ -10,6 +10,6 @@ import mambsym1, times
 var

   v = mDec #ERROR_MSG ambiguous identifier

 

-writeln(stdout, ord(v))

+writeLine(stdout, ord(v))

 
 
diff --git a/tests/assign/tassign.nim b/tests/assign/tassign.nim
index f51c20783..9a4c1543b 100644
--- a/tests/assign/tassign.nim
+++ b/tests/assign/tassign.nim
@@ -22,10 +22,10 @@ proc test() =
 

   b = a # perform a deep copy here!

   b.seq = @["xyz", "huch", "was", "soll"]

-  writeln(stdout, len(a.seq))

-  writeln(stdout, a.seq[3])

-  writeln(stdout, len(b.seq))

-  writeln(stdout, b.seq[3])

-  writeln(stdout, b.y)

+  writeLine(stdout, len(a.seq))

+  writeLine(stdout, a.seq[3])

+  writeLine(stdout, len(b.seq))

+  writeLine(stdout, b.seq[3])

+  writeLine(stdout, b.y)

 

 test()

diff --git a/tests/assign/tcopy.nim b/tests/assign/tcopy.nim
index 5feb0d6b3..1e5bc3cba 100644
--- a/tests/assign/tcopy.nim
+++ b/tests/assign/tcopy.nim
@@ -16,8 +16,8 @@ proc main() =
   p = find(example, "=")
   a = substr(example, 0, p-1)
   b = substr(example, p+1)
-  writeln(stdout, a & '=' & b)
-  #writeln(stdout, b)
+  writeLine(stdout, a & '=' & b)
+  #writeLine(stdout, b)
 
 main()
 #OUT TEMP=C:\Programs\xyz\bin
diff --git a/tests/effects/teffects1.nim b/tests/effects/teffects1.nim
index ea1ea7b21..fad26a8d6 100644
--- a/tests/effects/teffects1.nim
+++ b/tests/effects/teffects1.nim
@@ -13,7 +13,7 @@ type
 proc forw: int {. .}
   
 proc lier(): int {.raises: [IO2Error].} =
-  writeln stdout, "arg"
+  writeLine stdout, "arg"
 
 proc forw: int =
   raise newException(IOError, "arg")
diff --git a/tests/effects/teffects2.nim b/tests/effects/teffects2.nim
index 89ad16edc..a97eacca6 100644
--- a/tests/effects/teffects2.nim
+++ b/tests/effects/teffects2.nim
@@ -13,7 +13,7 @@ type
 proc forw: int {.raises: [].}
 
 proc lier(): int {.raises: [IOError].} =
-  writeln stdout, "arg"
+  writeLine stdout, "arg"
 
 proc forw: int =
   raise newException(IOError, "arg")
diff --git a/tests/effects/teffects3.nim b/tests/effects/teffects3.nim
index 78543a929..3d597560f 100644
--- a/tests/effects/teffects3.nim
+++ b/tests/effects/teffects3.nim
@@ -12,7 +12,7 @@ type
   EIO2 = ref object of EIO
   
 proc raiser(): int {.tags: [TObj, FWriteIO].} =
-  writeln stdout, "arg"
+  writeLine stdout, "arg"
 
 var o: TObjB
 o.fn = raiser
diff --git a/tests/effects/teffects4.nim b/tests/effects/teffects4.nim
index 4584e6dc8..e2aa440a9 100644
--- a/tests/effects/teffects4.nim
+++ b/tests/effects/teffects4.nim
@@ -15,7 +15,7 @@ proc q() {.tags: [FIO].} =
   nil
   
 proc raiser(): int =
-  writeln stdout, "arg"
+  writeLine stdout, "arg"
   if true:
     q()
 
diff --git a/tests/gc/gctest.nim b/tests/gc/gctest.nim
index 2213a83ac..a634a47f2 100644
--- a/tests/gc/gctest.nim
+++ b/tests/gc/gctest.nim
@@ -63,12 +63,12 @@ proc caseTree(lvl: int = 0): PCaseNode =
   if lvl == 3: result = newCaseNode("data item")
   else: result = newCaseNode(caseTree(lvl+1), caseTree(lvl+1))
 
-proc finalizeBNode(n: TBNode) = writeln(stdout, n.data)
+proc finalizeBNode(n: TBNode) = writeLine(stdout, n.data)
 proc finalizeNode(n: PNode) =
   assert(n != nil)
   write(stdout, "finalizing: ")
-  if isNil(n.data): writeln(stdout, "nil!")
-  else: writeln(stdout, n.data)
+  if isNil(n.data): writeLine(stdout, "nil!")
+  else: writeLine(stdout, n.data)
 
 var
   id: int = 1
@@ -82,7 +82,7 @@ proc buildTree(depth = 1): PNode =
   inc(id)
 
 proc returnTree(): PNode =
-  writeln(stdout, "creating id: " & $id)
+  writeLine(stdout, "creating id: " & $id)
   new(result, finalizeNode)
   result.data = $id
   new(result.le, finalizeNode)
@@ -92,26 +92,26 @@ proc returnTree(): PNode =
   inc(id)
 
   # now create a cycle:
-  writeln(stdout, "creating id (cyclic): " & $id)
+  writeLine(stdout, "creating id (cyclic): " & $id)
   var cycle: PNode
   new(cycle, finalizeNode)
   cycle.data = $id
   cycle.le = cycle
   cycle.ri = cycle
   inc(id)
-  #writeln(stdout, "refcount: " & $refcount(cycle))
-  #writeln(stdout, "refcount le: " & $refcount(cycle.le))
-  #writeln(stdout, "refcount ri: " & $refcount(cycle.ri))
+  #writeLine(stdout, "refcount: " & $refcount(cycle))
+  #writeLine(stdout, "refcount le: " & $refcount(cycle.le))
+  #writeLine(stdout, "refcount ri: " & $refcount(cycle.ri))
 
 proc printTree(t: PNode) =
   if t == nil: return
-  writeln(stdout, "printing")
-  writeln(stdout, t.data)
+  writeLine(stdout, "printing")
+  writeLine(stdout, t.data)
   printTree(t.le)
   printTree(t.ri)
 
 proc unsureNew(result: var PNode) =
-  writeln(stdout, "creating unsure id: " & $id)
+  writeLine(stdout, "creating unsure id: " & $id)
   new(result, finalizeNode)
   result.data = $id
   new(result.le, finalizeNode)
@@ -176,7 +176,7 @@ proc main() =
   var s: seq[string] = @[]
   for i in 1..100:
     add s, "hohoho" # test reallocation
-  writeln(stdout, s[89])
+  writeLine(stdout, s[89])
   write(stdout, "done!\n")
 
 var
@@ -184,7 +184,7 @@ var
     s: string
 s = ""
 s = ""
-writeln(stdout, repr(caseTree()))
+writeLine(stdout, repr(caseTree()))
 father.t.data = @["ha", "lets", "stress", "it"]
 father.t.data = @["ha", "lets", "stress", "it"]
 var t = buildTree()
@@ -199,5 +199,5 @@ GC_fullCollect()
 # the M&S GC fails with this call and it's unclear why. Definitely something
 # we need to fix!
 GC_fullCollect()
-writeln(stdout, GC_getStatistics())
+writeLine(stdout, GC_getStatistics())
 write(stdout, "finished\n")
diff --git a/tests/generics/tbintre2.nim b/tests/generics/tbintre2.nim
index 2a7225411..eb46b5157 100644
--- a/tests/generics/tbintre2.nim
+++ b/tests/generics/tbintre2.nim
@@ -15,7 +15,7 @@ if find(root, "world"):
   for str in items(root):
     stdout.write(str)
 else:
-  stdout.writeln("BUG")
+  stdout.writeLine("BUG")
 
 var
   r2: PBinaryTree[int]
diff --git a/tests/generics/tbintree.nim b/tests/generics/tbintree.nim
index 8cc8acb82..13163f764 100644
--- a/tests/generics/tbintree.nim
+++ b/tests/generics/tbintree.nim
@@ -92,7 +92,7 @@ when isMainModule:
     for str in items(root):
       stdout.write(str)
   else:
-    stdout.writeln("BUG")
+    stdout.writeLine("BUG")
 
   var
     r2: PBinaryTree[int]
diff --git a/tests/generics/tgeneric3.nim b/tests/generics/tgeneric3.nim
index 289bf1fd5..d4dac9385 100644
--- a/tests/generics/tgeneric3.nim
+++ b/tests/generics/tgeneric3.nim
@@ -37,25 +37,25 @@ proc clean[T: SomeOrdinal|SomeNumber](o: var T) {.inline.} = discard
 proc clean[T: string|seq](o: var T) {.inline.} =
   o = nil
 
-proc clean[T,D] (o: ref TItem[T,D]) {.inline.} = 
+proc clean[T,D] (o: ref TItem[T,D]) {.inline.} =
   when (D is string) :
     o.value = nil
   else :
     o.val_set = false
 
-proc isClean[T,D] (it: ref TItem[T,D]): bool {.inline.} = 
+proc isClean[T,D] (it: ref TItem[T,D]): bool {.inline.} =
   when (D is string) :
     return it.value == nil
   else :
     return not it.val_set
 
-proc isClean[T,D](n: PNode[T,D], x: int): bool {.inline.} = 
+proc isClean[T,D](n: PNode[T,D], x: int): bool {.inline.} =
   when (D is string):
     return n.slots[x].value == nil
   else:
     return not n.slots[x].val_set
 
-proc setItem[T,D](Akey: T, Avalue: D, ANode: PNode[T,D]): ref TItem[T,D] {.inline.} = 
+proc setItem[T,D](Akey: T, Avalue: D, ANode: PNode[T,D]): ref TItem[T,D] {.inline.} =
   new(result)
   result.key = Akey
   result.value = Avalue
@@ -72,8 +72,8 @@ template binSearchImpl *(docmp: expr) {.immediate.} =
   var H = haystack.len -1
   while result <= H :
     var I {.inject.} = (result + H) shr 1
-    var SW = docmp 
-    if SW < 0: result = I + 1 
+    var SW = docmp
+    if SW < 0: result = I + 1
     else:
       H = I - 1
       if SW == 0 : bFound = true
@@ -85,14 +85,14 @@ proc bSearch[T,D] (haystack: PNode[T,D], needle:T): int {.inline.} =
 
 proc DeleteItem[T,D] (n: PNode[T,D], x: int): PNode[T,D] {.inline.} =
   var w = n.slots[x]
-  if w.node != nil : 
+  if w.node != nil :
     clean(w)
     return n
   dec(n.count)
   if n.count > 0 :
     for i in countup(x, n.count -1) : n.slots[i] = n.slots[i + 1]
     n.slots[n.count] = nil
-    case n.count 
+    case n.count
     of cLen1 : setLen(n.slots, cLen1)
     of cLen2 : setLen(n.slots, cLen2)
     of cLen3 : setLen(n.slots, cLen3)
@@ -106,7 +106,7 @@ proc DeleteItem[T,D] (n: PNode[T,D], x: int): PNode[T,D] {.inline.} =
     n.slots = nil
     n.left = nil
 
-proc internalDelete[T,D] (ANode: PNode[T,D], key: T, Avalue: var D): PNode[T,D] = 
+proc internalDelete[T,D] (ANode: PNode[T,D], key: T, Avalue: var D): PNode[T,D] =
   var Path: array[0..20, RPath[T,D]]
   var n = ANode
   result = n
@@ -126,20 +126,20 @@ proc internalDelete[T,D] (ANode: PNode[T,D], key: T, Avalue: var D): PNode[T,D]
           n = n.slots[x].node
         else :
           n = nil
-    else : 
+    else :
       dec(x)
       if isClean(n, x) : return
       Avalue = n.slots[x].value
       var n2 = DeleteItem(n, x)
       dec(h)
       while (n2 != n) and (h >=0) :
-        n = n2 
+        n = n2
         var w = addr Path[h]
         x  = w.Xi -1
         if x >= 0 :
           if (n == nil) and isClean(w.Nd, x) :
             n = w.Nd
-            n.slots[x].node = nil 
+            n.slots[x].node = nil
             n2 = DeleteItem(n, x)
           else :
             w.Nd.slots[x].node = n
@@ -161,7 +161,7 @@ proc internalFind[T,D] (n: PNode[T,D], key: T): ref TItem[T,D] {.inline.} =
         wn = wn.left
       else :
         x = (-x) -1
-        if x < wn.count : 
+        if x < wn.count :
           wn = wn.slots[x].node
         else :
           return nil
@@ -171,7 +171,7 @@ proc internalFind[T,D] (n: PNode[T,D], key: T): ref TItem[T,D] {.inline.} =
   return nil
 
 proc traceTree[T,D](root: PNode[T,D]) =
-  proc traceX(x: int) = 
+  proc traceX(x: int) =
     write stdout, "("
     write stdout, x
     write stdout, ") "
@@ -184,7 +184,7 @@ proc traceTree[T,D](root: PNode[T,D]) =
 
 
   proc traceln(space: string) =
-    writeln stdout, ""
+    writeLine stdout, ""
     write stdout, space
 
   proc doTrace(n: PNode[T,D], level: int) =
@@ -192,7 +192,7 @@ proc traceTree[T,D](root: PNode[T,D]) =
     traceln(space)
     write stdout, "node: "
     if n == nil:
-      writeln stdout, "is empty"
+      writeLine stdout, "is empty"
       return
     write stdout, n.count
     write stdout, " elements: "
@@ -204,7 +204,7 @@ proc traceTree[T,D](root: PNode[T,D]) =
       if el != nil and not isClean(el):
         traceln(space)
         traceX(i)
-        if i >= n.count: 
+        if i >= n.count:
           write stdout, "error "
         else:
           traceEl(el)
@@ -219,14 +219,14 @@ proc traceTree[T,D](root: PNode[T,D]) =
         else : write stdout, el.key
         if el.node != nil: doTrace(el.node, level +1)
         else : write stdout, " empty "
-    writeln stdout,""
+    writeLine stdout,""
 
   doTrace(root, 0)
 
 proc InsertItem[T,D](APath: RPath[T,D], ANode:PNode[T,D], Akey: T, Avalue: D) =
   var x = - APath.Xi
   inc(APath.Nd.count)
-  case APath.Nd.count 
+  case APath.Nd.count
   of cLen1: setLen(APath.Nd.slots, cLen2)
   of cLen2: setLen(APath.Nd.slots, cLen3)
   of cLen3: setLen(APath.Nd.slots, cLenCenter)
@@ -286,7 +286,7 @@ proc internalPut[T,D](ANode: ref TNode[T,D], Akey: T, Avalue: D, Oldvalue: var D
     if x <= 0 :
       Path[h].Nd = n
       Path[h].Xi = x
-      inc(h) 
+      inc(h)
       if x == 0 :
         n = n.left
       else :
@@ -337,40 +337,40 @@ proc CleanTree[T,D](n: PNode[T,D]): PNode[T,D] =
 proc VisitAllNodes[T,D](n: PNode[T,D], visit: proc(n: PNode[T,D]): PNode[T,D] {.closure.} ): PNode[T,D] =
   if n != nil :
     if n.left != nil :
-      n.left = VisitAllNodes(n.left, visit)    
+      n.left = VisitAllNodes(n.left, visit)
     for i in 0 .. n.count - 1 :
       var w = n.slots[i]
       if w.node != nil :
-        w.node = VisitAllNodes(w.node, visit)    
+        w.node = VisitAllNodes(w.node, visit)
     return visit(n)
   return nil
 
 proc VisitAllNodes[T,D](n: PNode[T,D], visit: proc(n: PNode[T,D]) {.closure.} ) =
   if n != nil:
     if n.left != nil :
-      VisitAllNodes(n.left, visit)    
+      VisitAllNodes(n.left, visit)
     for i in 0 .. n.count - 1 :
       var w = n.slots[i]
       if w.node != nil :
-        VisitAllNodes(w.node, visit)    
+        VisitAllNodes(w.node, visit)
     visit(n)
 
 proc VisitAll[T,D](n: PNode[T,D], visit: proc(Akey: T, Avalue: D) {.closure.} ) =
   if n != nil:
     if n.left != nil :
-      VisitAll(n.left, visit) 
+      VisitAll(n.left, visit)
     for i in 0 .. n.count - 1 :
       var w = n.slots[i]
       if not w.isClean :
-        visit(w.key, w.value)   
+        visit(w.key, w.value)
       if w.node != nil :
-        VisitAll(w.node, visit)    
+        VisitAll(w.node, visit)
 
 proc VisitAll[T,D](n: PNode[T,D], visit: proc(Akey: T, Avalue: var D):bool {.closure.} ): PNode[T,D] =
   if n != nil:
     var n1 = n.left
     if n1 != nil :
-      var n2 = VisitAll(n1, visit) 
+      var n2 = VisitAll(n1, visit)
       if n1 != n2 :
         n.left = n2
     var i = 0
@@ -395,7 +395,7 @@ iterator keys* [T,D] (n: PNode[T,D]): T =
     var level = 0
     var nd = n
     var i = -1
-    while true : 
+    while true :
       if i < nd.count :
         Path[level].Nd = nd
         Path[level].Xi = i
@@ -471,4 +471,4 @@ when isMainModule:
 
 
 
-  test()  
\ No newline at end of file
+  test()
diff --git a/tests/lexer/tlexer.nim b/tests/lexer/tlexer.nim
index 10a8ab51d..1dca6d9d0 100644
--- a/tests/lexer/tlexer.nim
+++ b/tests/lexer/tlexer.nim
@@ -50,8 +50,8 @@ proc main*(infile: string, a, b: int, someverylongnamewithtype = 0,
   # this should be an error!

   if initBaseLexer(L, infile, 30): nil

   else:

-    writeln(stdout, "could not open: " & infile)

-  writeln(stdout, "Success!")

+    writeLine(stdout, "could not open: " & infile)

+  writeLine(stdout, "Success!")

   call(3, # we use 3

        12, # we use 12

        43) # we use 43

diff --git a/tests/macros/tdebugstmt.nim b/tests/macros/tdebugstmt.nim
index 00c55ccd8..421f8fd14 100644
--- a/tests/macros/tdebugstmt.nim
+++ b/tests/macros/tdebugstmt.nim
@@ -18,7 +18,7 @@ macro debug(n: varargs[expr]): stmt =
     # add a call to the statement list that writes ": "
     add(result, newCall("write", newIdentNode("stdout"), newStrLitNode(": ")))
     # add a call to the statement list that writes the expressions value:
-    add(result, newCall("writeln", newIdentNode("stdout"), n[i]))
+    add(result, newCall("writeLine", newIdentNode("stdout"), n[i]))
 
 var
   a: array [0..10, int]
diff --git a/tests/misc/tcmdline.nim b/tests/misc/tcmdline.nim
index f4ee20d31..cb8cb402c 100644
--- a/tests/misc/tcmdline.nim
+++ b/tests/misc/tcmdline.nim
@@ -7,8 +7,8 @@ var
   i: int
   params = paramCount()
 i = 0
-writeln(stdout, "This exe: " & getAppFilename())
-writeln(stdout, "Number of parameters: " & $params)
+writeLine(stdout, "This exe: " & getAppFilename())
+writeLine(stdout, "Number of parameters: " & $params)
 while i <= params:
-  writeln(stdout, paramStr(i))
+  writeLine(stdout, paramStr(i))
   i = i + 1
diff --git a/tests/misc/tendian.nim b/tests/misc/tendian.nim
index 256e2653c..91044f4d5 100644
--- a/tests/misc/tendian.nim
+++ b/tests/misc/tendian.nim
@@ -1,3 +1,3 @@
 # test the new endian magic
 
-writeln(stdout, repr(system.cpuEndian))
+writeLine(stdout, repr(system.cpuEndian))
diff --git a/tests/misc/thallo.nim b/tests/misc/thallo.nim
index cbeb45b97..17e955f03 100644
--- a/tests/misc/thallo.nim
+++ b/tests/misc/thallo.nim
@@ -22,7 +22,7 @@ macro macrotest(n: expr): stmt {.immediate.} =
   result = newNimNode(nnkStmtList, n)
   for i in 2..n.len-1:
     result.add(newCall("write", n[1], n[i]))
-  result.add(newCall("writeln", n[1], newStrLitNode("")))
+  result.add(newCall("writeLine", n[1], newStrLitNode("")))
 
 macro debug(n: expr): stmt {.immediate.} =
   let n = callsite()
@@ -30,7 +30,7 @@ macro debug(n: expr): stmt {.immediate.} =
   for i in 1..n.len-1:
     result.add(newCall("write", newIdentNode("stdout"), toStrLit(n[i])))
     result.add(newCall("write", newIdentNode("stdout"), newStrLitNode(": ")))
-    result.add(newCall("writeln", newIdentNode("stdout"), n[i]))
+    result.add(newCall("writeLine", newIdentNode("stdout"), n[i]))
 
 macrotest(stdout, "finally", 4, 5, "variable", "argument lists")
 macrotest(stdout)
@@ -38,7 +38,7 @@ macrotest(stdout)
 #GC_disable()
 
 echo("This was compiled by Nim version " & system.NimVersion)
-writeln(stdout, "Hello", " World", "!")
+writeLine(stdout, "Hello", " World", "!")
 
 echo(["a", "b", "c", "d"].len)
 for x in items(["What's", "your", "name", "?", ]):
diff --git a/tests/misc/tlastmod.nim b/tests/misc/tlastmod.nim
index 92ac922f7..857164022 100644
--- a/tests/misc/tlastmod.nim
+++ b/tests/misc/tlastmod.nim
@@ -8,8 +8,8 @@ proc main() =
     a, b: TTime

   a = getLastModificationTime(paramStr(1))

   b = getLastModificationTime(paramStr(2))

-  writeln(stdout, $a)

-  writeln(stdout, $b)

+  writeLine(stdout, $a)

+  writeLine(stdout, $b)

   if a < b:

     write(stdout, "$2 is newer than $1\n" % [paramStr(1), paramStr(2)])

   else:

diff --git a/tests/misc/tmandelbrot.nim b/tests/misc/tmandelbrot.nim
index 4228b0416..e9b7a3e5a 100644
--- a/tests/misc/tmandelbrot.nim
+++ b/tests/misc/tmandelbrot.nim
@@ -24,10 +24,10 @@ var size    = parseInt (paramStr (1))
 var bit     = 128
 var byteAcc = 0
 
-stdout.writeln ("P4")
+stdout.writeLine ("P4")
 stdout.write ($size)
 stdout.write (" ")
-stdout.writeln ($size)
+stdout.writeLine ($size)
 
 var fsize = float (size)
 for y in 0 .. size-1:
diff --git a/tests/misc/tnewuns.nim b/tests/misc/tnewuns.nim
index 5181e467c..267c73f5b 100644
--- a/tests/misc/tnewuns.nim
+++ b/tests/misc/tnewuns.nim
@@ -9,4 +9,4 @@ var
 x = 1

 y = high(int)

 

-writeln(stdout, $ ( x +% y ) )

+writeLine(stdout, $ ( x +% y ) )

diff --git a/tests/misc/tvarnums.nim b/tests/misc/tvarnums.nim
index b880cf006..04a1ef53b 100644
--- a/tests/misc/tvarnums.nim
+++ b/tests/misc/tvarnums.nim
@@ -2,141 +2,141 @@ discard """
   file: "tvarnums.nim"
   output: "Success!"
 """
-# Test variable length binary integers

-

-import

-  strutils

-

-type

-  TBuffer = array [0..10, int8]

-

-proc toVarNum(x: int32, b: var TBuffer) =

-  # encoding: first bit indicates end of number (0 if at end)

-  # second bit of the first byte denotes the sign (1 --> negative)

-  var a = x

-  if x != low(x):

-    # low(int) is a special case,

-    # because abs() does not work here!

-    # we leave x as it is and use the check >% instead of >

-    # for low(int) this is needed and positive numbers are not affected

-    # anyway

-    a = abs(x)

-  # first 6 bits:

-  b[0] = toU8(ord(a >% 63'i32) shl 7 or (ord(x < 0'i32) shl 6) or (int(a) and 63))

-  a = a shr 6'i32 # skip first 6 bits

-  var i = 1

-  while a != 0'i32:

-    b[i] = toU8(ord(a >% 127'i32) shl 7 or (int(a) and 127))

-    inc(i)

-    a = a shr 7'i32

-

-proc toVarNum64(x: int64, b: var TBuffer) =

-  # encoding: first bit indicates end of number (0 if at end)

-  # second bit of the first byte denotes the sign (1 --> negative)

-  var a = x

-  if x != low(x):

-    # low(int) is a special case,

-    # because abs() does not work here!

-    # we leave x as it is and use the check >% instead of >

-    # for low(int) this is needed and positive numbers are not affected

-    # anyway

-    a = abs(x)

-  # first 6 bits:

-  b[0] = toU8(ord(a >% 63'i64) shl 7 or (ord(x < 0'i64) shl 6) or int(a and 63))

-  a = a shr 6 # skip first 6 bits

-  var i = 1

-  while a != 0'i64:

-    b[i] = toU8(ord(a >% 127'i64) shl 7 or int(a and 127))

-    inc(i)

-    a = a shr 7

-

-proc toNum64(b: TBuffer): int64 =

-  # treat first byte different:

-  result = ze64(b[0]) and 63

-  var

-    i = 0

-    Shift = 6'i64

-  while (ze(b[i]) and 128) != 0:

-    inc(i)

-    result = result or ((ze64(b[i]) and 127) shl Shift)

-    inc(Shift, 7)

-  if (ze(b[0]) and 64) != 0: # sign bit set?

-    result = not result +% 1

-    # this is the same as ``- result``

-    # but gives no overflow error for low(int)

-

-proc toNum(b: TBuffer): int32 =

-  # treat first byte different:

-  result = ze(b[0]) and 63

-  var

-    i = 0

-    Shift = 6'i32

-  while (ze(b[i]) and 128) != 0:

-    inc(i)

-    result = result or ((int32(ze(b[i])) and 127'i32) shl Shift)

-    Shift = Shift + 7'i32

-  if (ze(b[0]) and (1 shl 6)) != 0: # sign bit set?

-    result = (not result) +% 1'i32

-    # this is the same as ``- result``

-    # but gives no overflow error for low(int)

-

-proc toBinary(x: int64): string =

-  result = newString(64)

-  for i in 0..63:

-    result[63-i] = chr((int(x shr i) and 1) + ord('0'))

-

-proc t64(i: int64) =

-  var

-    b: TBuffer

-  toVarNum64(i, b)

-  var x = toNum64(b)

-  if x != i:

-    writeln(stdout, $i)

-    writeln(stdout, toBinary(i))

-    writeln(stdout, toBinary(x))

-

-proc t32(i: int32) =

-  var

-    b: TBuffer

-  toVarNum(i, b)

-  var x = toNum(b)

-  if x != i:

-    writeln(stdout, toBinary(i))

-    writeln(stdout, toBinary(x))

-

-proc tm(i: int32) =

-  var

-    b: TBuffer

-  toVarNum64(i, b)

-  var x = toNum(b)

-  if x != i:

-    writeln(stdout, toBinary(i))

-    writeln(stdout, toBinary(x))

-

-t32(0)

-t32(1)

-t32(-1)

-t32(-100_000)

-t32(100_000)

-t32(low(int32))

-t32(high(int32))

-

-t64(low(int64))

-t64(high(int64))

-t64(0)

-t64(-1)

-t64(1)

-t64(1000_000)

-t64(-1000_000)

-

-tm(0)

-tm(1)

-tm(-1)

-tm(-100_000)

-tm(100_000)

-tm(low(int32))

-tm(high(int32))

-

-writeln(stdout, "Success!") #OUT Success!

+# Test variable length binary integers
+
+import
+  strutils
+
+type
+  TBuffer = array [0..10, int8]
+
+proc toVarNum(x: int32, b: var TBuffer) =
+  # encoding: first bit indicates end of number (0 if at end)
+  # second bit of the first byte denotes the sign (1 --> negative)
+  var a = x
+  if x != low(x):
+    # low(int) is a special case,
+    # because abs() does not work here!
+    # we leave x as it is and use the check >% instead of >
+    # for low(int) this is needed and positive numbers are not affected
+    # anyway
+    a = abs(x)
+  # first 6 bits:
+  b[0] = toU8(ord(a >% 63'i32) shl 7 or (ord(x < 0'i32) shl 6) or (int(a) and 63))
+  a = a shr 6'i32 # skip first 6 bits
+  var i = 1
+  while a != 0'i32:
+    b[i] = toU8(ord(a >% 127'i32) shl 7 or (int(a) and 127))
+    inc(i)
+    a = a shr 7'i32
+
+proc toVarNum64(x: int64, b: var TBuffer) =
+  # encoding: first bit indicates end of number (0 if at end)
+  # second bit of the first byte denotes the sign (1 --> negative)
+  var a = x
+  if x != low(x):
+    # low(int) is a special case,
+    # because abs() does not work here!
+    # we leave x as it is and use the check >% instead of >
+    # for low(int) this is needed and positive numbers are not affected
+    # anyway
+    a = abs(x)
+  # first 6 bits:
+  b[0] = toU8(ord(a >% 63'i64) shl 7 or (ord(x < 0'i64) shl 6) or int(a and 63))
+  a = a shr 6 # skip first 6 bits
+  var i = 1
+  while a != 0'i64:
+    b[i] = toU8(ord(a >% 127'i64) shl 7 or int(a and 127))
+    inc(i)
+    a = a shr 7
+
+proc toNum64(b: TBuffer): int64 =
+  # treat first byte different:
+  result = ze64(b[0]) and 63
+  var
+    i = 0
+    Shift = 6'i64
+  while (ze(b[i]) and 128) != 0:
+    inc(i)
+    result = result or ((ze64(b[i]) and 127) shl Shift)
+    inc(Shift, 7)
+  if (ze(b[0]) and 64) != 0: # sign bit set?
+    result = not result +% 1
+    # this is the same as ``- result``
+    # but gives no overflow error for low(int)
+
+proc toNum(b: TBuffer): int32 =
+  # treat first byte different:
+  result = ze(b[0]) and 63
+  var
+    i = 0
+    Shift = 6'i32
+  while (ze(b[i]) and 128) != 0:
+    inc(i)
+    result = result or ((int32(ze(b[i])) and 127'i32) shl Shift)
+    Shift = Shift + 7'i32
+  if (ze(b[0]) and (1 shl 6)) != 0: # sign bit set?
+    result = (not result) +% 1'i32
+    # this is the same as ``- result``
+    # but gives no overflow error for low(int)
+
+proc toBinary(x: int64): string =
+  result = newString(64)
+  for i in 0..63:
+    result[63-i] = chr((int(x shr i) and 1) + ord('0'))
+
+proc t64(i: int64) =
+  var
+    b: TBuffer
+  toVarNum64(i, b)
+  var x = toNum64(b)
+  if x != i:
+    writeLine(stdout, $i)
+    writeLine(stdout, toBinary(i))
+    writeLine(stdout, toBinary(x))
+
+proc t32(i: int32) =
+  var
+    b: TBuffer
+  toVarNum(i, b)
+  var x = toNum(b)
+  if x != i:
+    writeLine(stdout, toBinary(i))
+    writeLine(stdout, toBinary(x))
+
+proc tm(i: int32) =
+  var
+    b: TBuffer
+  toVarNum64(i, b)
+  var x = toNum(b)
+  if x != i:
+    writeLine(stdout, toBinary(i))
+    writeLine(stdout, toBinary(x))
+
+t32(0)
+t32(1)
+t32(-1)
+t32(-100_000)
+t32(100_000)
+t32(low(int32))
+t32(high(int32))
+
+t64(low(int64))
+t64(high(int64))
+t64(0)
+t64(-1)
+t64(1)
+t64(1000_000)
+t64(-1000_000)
+
+tm(0)
+tm(1)
+tm(-1)
+tm(-100_000)
+tm(100_000)
+tm(low(int32))
+tm(high(int32))
+
+writeLine(stdout, "Success!") #OUT Success!
 
 
diff --git a/tests/objects/tobject2.nim b/tests/objects/tobject2.nim
index 0f1869695..a49296843 100644
--- a/tests/objects/tobject2.nim
+++ b/tests/objects/tobject2.nim
@@ -9,7 +9,7 @@ type
 
 proc getPoint( p: var TPoint2d) =
   {.breakpoint.}
-  writeln(stdout, p.x)
+  writeLine(stdout, p.x)
 
 var
   p: TPoint3d
diff --git a/tests/objects/toop1.nim b/tests/objects/toop1.nim
index 0d8ba124b..4727d146d 100644
--- a/tests/objects/toop1.nim
+++ b/tests/objects/toop1.nim
@@ -8,17 +8,17 @@ import macros
 type
   TFigure = object of RootObj    # abstract base class:
     draw: proc (my: var TFigure) {.nimcall.} # concrete classes implement this
-  
-proc init(f: var TFigure) = 
+
+proc init(f: var TFigure) =
   f.draw = nil
 
 type
   TCircle = object of TFigure
     radius: int
-  
-proc drawCircle(my: var TCircle) = stdout.writeln("o " & $my.radius)
 
-proc init(my: var TCircle) = 
+proc drawCircle(my: var TCircle) = stdout.writeLine("o " & $my.radius)
+
+proc init(my: var TCircle) =
   init(TFigure(my)) # call base constructor
   my.radius = 5
   my.draw = cast[proc (my: var TFigure) {.nimcall.}](drawCircle)
@@ -29,13 +29,13 @@ type
 
 proc drawRectangle(my: var TRectangle) = stdout.write("[]")
 
-proc init(my: var TRectangle) = 
+proc init(my: var TRectangle) =
   init(TFigure(my)) # call base constructor
   my.width = 5
   my.height = 10
   my.draw = cast[proc (my: var TFigure) {.nimcall.}](drawRectangle)
 
-macro `!` (n: expr): stmt {.immediate.} = 
+macro `!` (n: expr): stmt {.immediate.} =
   let n = callsite()
   result = newNimNode(nnkCall, n)
   var dot = newNimNode(nnkDotExpr, n)
@@ -60,16 +60,16 @@ type
     FHost: int # cannot be accessed from the outside of the module
                # the `F` prefix is a convention to avoid clashes since
                # the accessors are named `host`
-               
-proc `host=`*(s: var TSocket, value: int) {.inline.} = 
+
+proc `host=`*(s: var TSocket, value: int) {.inline.} =
   ## setter of hostAddr
   s.FHost = value
 
 proc host*(s: TSocket): int {.inline.} =
   ## getter of hostAddr
   return s.FHost
-  
-var 
+
+var
   s: TSocket
 s.host = 34  # same as `host=`(s, 34)
 stdout.write(s.host)
@@ -81,6 +81,6 @@ var
 init(r)
 init(c)
 r!draw
-c!draw() 
+c!draw()
 
 #OUT 34[]o 5
diff --git a/tests/overflw/toverflw.nim b/tests/overflw/toverflw.nim
index fbe0d0a38..771a43303 100644
--- a/tests/overflw/toverflw.nim
+++ b/tests/overflw/toverflw.nim
@@ -2,20 +2,20 @@ discard """
   file: "toverflw.nim"
   output: "the computation overflowed"
 """
-# Tests nim's ability to detect overflows

-

-{.push overflowChecks: on.}

-

-var

-  a, b: int

-a = high(int)

-b = -2

-try:

-  writeln(stdout, b - a)

-except OverflowError:

-  writeln(stdout, "the computation overflowed")

-

-{.pop.} # overflow check

-#OUT the computation overflowed

+# Tests nim's ability to detect overflows
+
+{.push overflowChecks: on.}
+
+var
+  a, b: int
+a = high(int)
+b = -2
+try:
+  writeLine(stdout, b - a)
+except OverflowError:
+  writeLine(stdout, "the computation overflowed")
+
+{.pop.} # overflow check
+#OUT the computation overflowed
 
 
diff --git a/tests/sets/tsets.nim b/tests/sets/tsets.nim
index 646175329..2d37e893d 100644
--- a/tests/sets/tsets.nim
+++ b/tests/sets/tsets.nim
@@ -58,7 +58,7 @@ for x in low(TAZ) .. high(TAZ):
 for x in low(TTokTypeRange) .. high(TTokTypeRange):

   if x in tokTypes:

     discard

-    #writeln(stdout, "the token '$1' is in the set" % repr(x))

+    #writeLine(stdout, "the token '$1' is in the set" % repr(x))

 

 #OUT Ha ein F ist in s!

 

diff --git a/tests/stdlib/tio.nim b/tests/stdlib/tio.nim
index 5ae119f77..dcb6bd54f 100644
--- a/tests/stdlib/tio.nim
+++ b/tests/stdlib/tio.nim
@@ -2,6 +2,6 @@
 

 proc main() =

   for line in lines("thello.nim"):

-    writeln(stdout, line)

+    writeLine(stdout, line)

 

 main()

diff --git a/tests/stdlib/tparsopt.nim b/tests/stdlib/tparsopt.nim
index 2b2da7e51..848fba2da 100644
--- a/tests/stdlib/tparsopt.nim
+++ b/tests/stdlib/tparsopt.nim
@@ -3,24 +3,24 @@
 import
   parseopt
 
-proc writeHelp() = 
-  writeln(stdout, "Usage: tparsopt [options] filename [options]")
+proc writeHelp() =
+  writeLine(stdout, "Usage: tparsopt [options] filename [options]")
+
+proc writeVersion() =
+  writeLine(stdout, "Version: 1.0.0")
 
-proc writeVersion() = 
-  writeln(stdout, "Version: 1.0.0")
-  
 var
   filename = ""
 for kind, key, val in getopt():
   case kind
-  of cmdArgument: 
+  of cmdArgument:
     filename = key
   of cmdLongOption, cmdShortOption:
     case key
     of "help", "h": writeHelp()
     of "version", "v": writeVersion()
-    else: 
-      writeln(stdout, "Unknown command line option: ", key, ": ", val)
+    else:
+      writeLine(stdout, "Unknown command line option: ", key, ": ", val)
   of cmdEnd: assert(false) # cannot happen
 if filename == "":
   # no filename has been given, so we show the help:
diff --git a/tests/stdlib/tpegs.nim b/tests/stdlib/tpegs.nim
index cceea1693..3fe964d82 100644
--- a/tests/stdlib/tpegs.nim
+++ b/tests/stdlib/tpegs.nim
@@ -24,7 +24,7 @@ when useUnicode:
 const
   InlineThreshold = 5  ## number of leaves; -1 to disable inlining
   MaxSubpatterns* = 10 ## defines the maximum number of subpatterns that
-                       ## can be captured. More subpatterns cannot be captured! 
+                       ## can be captured. More subpatterns cannot be captured!
 
 type
   TPegKind = enum
@@ -80,12 +80,12 @@ type
     of pkBackRef..pkBackRefIgnoreStyle: index: range[0..MaxSubpatterns]
     else: sons: seq[TNode]
   PNonTerminal* = ref TNonTerminal
-  
+
   TPeg* = TNode ## type that represents a PEG
 
 proc term*(t: string): TPeg {.rtl, extern: "npegs$1Str".} =
   ## constructs a PEG from a terminal string
-  if t.len != 1:  
+  if t.len != 1:
     result.kind = pkTerminal
     result.term = t
   else:
@@ -109,7 +109,7 @@ proc term*(t: char): TPeg {.rtl, extern: "npegs$1Char".} =
   assert t != '\0'
   result.kind = pkChar
   result.ch = t
-  
+
 proc charSet*(s: set[char]): TPeg {.rtl, extern: "npegs$1".} =
   ## constructs a PEG from a character set `s`
   assert '\0' notin s
@@ -120,31 +120,31 @@ proc charSet*(s: set[char]): TPeg {.rtl, extern: "npegs$1".} =
 proc len(a: TPeg): int {.inline.} = return a.sons.len
 proc add(d: var TPeg, s: TPeg) {.inline.} = add(d.sons, s)
 
-proc copyPeg(a: TPeg): TPeg = 
+proc copyPeg(a: TPeg): TPeg =
   result.kind = a.kind
   case a.kind
   of pkEmpty..pkWhitespace: discard
-  of pkTerminal, pkTerminalIgnoreCase, pkTerminalIgnoreStyle: 
+  of pkTerminal, pkTerminalIgnoreCase, pkTerminalIgnoreStyle:
     result.term = a.term
-  of pkChar, pkGreedyRepChar: 
+  of pkChar, pkGreedyRepChar:
     result.ch = a.ch
-  of pkCharChoice, pkGreedyRepSet: 
+  of pkCharChoice, pkGreedyRepSet:
     new(result.charChoice)
     result.charChoice[] = a.charChoice[]
   of pkNonTerminal: result.nt = a.nt
-  of pkBackRef..pkBackRefIgnoreStyle: 
+  of pkBackRef..pkBackRefIgnoreStyle:
     result.index = a.index
-  else: 
+  else:
     result.sons = a.sons
 
 proc addChoice(dest: var TPeg, elem: TPeg) =
   var L = dest.len-1
-  if L >= 0 and dest.sons[L].kind == pkCharChoice: 
+  if L >= 0 and dest.sons[L].kind == pkCharChoice:
     # caution! Do not introduce false aliasing here!
     case elem.kind
     of pkCharChoice:
       dest.sons[L] = charSet(dest.sons[L].charChoice[] + elem.charChoice[])
-    of pkChar: 
+    of pkChar:
       dest.sons[L] = charSet(dest.sons[L].charChoice[] + {elem.ch})
     else: add(dest, elem)
   else: add(dest, elem)
@@ -168,12 +168,12 @@ proc `/`*(a: varargs[TPeg]): TPeg {.
 
 proc addSequence(dest: var TPeg, elem: TPeg) =
   var L = dest.len-1
-  if L >= 0 and dest.sons[L].kind == pkTerminal: 
+  if L >= 0 and dest.sons[L].kind == pkTerminal:
     # caution! Do not introduce false aliasing here!
     case elem.kind
-    of pkTerminal: 
+    of pkTerminal:
       dest.sons[L] = term(dest.sons[L].term & elem.term)
-    of pkChar: 
+    of pkChar:
       dest.sons[L] = term(dest.sons[L].term & elem.ch)
     else: add(dest, elem)
   else: add(dest, elem)
@@ -182,7 +182,7 @@ proc sequence*(a: varargs[TPeg]): TPeg {.
   rtl, extern: "npegs$1".} =
   ## constructs a sequence with all the PEGs from `a`
   multipleOp(pkSequence, addSequence)
- 
+
 proc `?`*(a: TPeg): TPeg {.rtl, extern: "npegsOptional".} =
   ## constructs an optional for the PEG `a`
   if a.kind in {pkOption, pkGreedyRep, pkGreedyAny, pkGreedyRepChar,
@@ -217,12 +217,12 @@ proc `!*`*(a: TPeg): TPeg {.rtl, extern: "npegsSearch".} =
   result.kind = pkSearch
   result.sons = @[a]
 
-proc `!*\`*(a: TPeg): TPeg {.rtl, 
+proc `!*\`*(a: TPeg): TPeg {.rtl,
                              extern: "npgegsCapturedSearch".} =
   ## constructs a "captured search" for the PEG `a`
   result.kind = pkCapturedSearch
   result.sons = @[a]
-  
+
 when false:
   proc contains(a: TPeg, k: TPegKind): bool =
     if a.kind == k: return true
@@ -238,7 +238,7 @@ when false:
 proc `+`*(a: TPeg): TPeg {.rtl, extern: "npegsGreedyPosRep".} =
   ## constructs a "greedy positive repetition" with the PEG `a`
   return sequence(a, *a)
-  
+
 proc `&`*(a: TPeg): TPeg {.rtl, extern: "npegsAndPredicate".} =
   ## constructs an "and predicate" with the PEG `a`
   result.kind = pkAndPredicate
@@ -261,33 +261,33 @@ proc newLine*: TPeg {.inline.} =
   ## constructs the PEG `newline`:idx: (``\n``)
   result.kind = pkNewline
 
-proc UnicodeLetter*: TPeg {.inline.} = 
+proc UnicodeLetter*: TPeg {.inline.} =
   ## constructs the PEG ``\letter`` which matches any Unicode letter.
   result.kind = pkLetter
-  
-proc UnicodeLower*: TPeg {.inline.} = 
+
+proc UnicodeLower*: TPeg {.inline.} =
   ## constructs the PEG ``\lower`` which matches any Unicode lowercase letter.
-  result.kind = pkLower 
+  result.kind = pkLower
 
-proc UnicodeUpper*: TPeg {.inline.} = 
+proc UnicodeUpper*: TPeg {.inline.} =
   ## constructs the PEG ``\upper`` which matches any Unicode lowercase letter.
-  result.kind = pkUpper 
-  
-proc UnicodeTitle*: TPeg {.inline.} = 
+  result.kind = pkUpper
+
+proc UnicodeTitle*: TPeg {.inline.} =
   ## constructs the PEG ``\title`` which matches any Unicode title letter.
   result.kind = pkTitle
 
-proc UnicodeWhitespace*: TPeg {.inline.} = 
-  ## constructs the PEG ``\white`` which matches any Unicode 
+proc UnicodeWhitespace*: TPeg {.inline.} =
+  ## constructs the PEG ``\white`` which matches any Unicode
   ## whitespace character.
   result.kind = pkWhitespace
 
-proc startAnchor*: TPeg {.inline.} = 
-  ## constructs the PEG ``^`` which matches the start of the input.  
+proc startAnchor*: TPeg {.inline.} =
+  ## constructs the PEG ``^`` which matches the start of the input.
   result.kind = pkStartAnchor
 
-proc endAnchor*: TPeg {.inline.} = 
-  ## constructs the PEG ``$`` which matches the end of the input.  
+proc endAnchor*: TPeg {.inline.} =
+  ## constructs the PEG ``$`` which matches the end of the input.
   result = !any()
 
 proc capture*(a: TPeg): TPeg {.rtl, extern: "npegsCapture".} =
@@ -296,21 +296,21 @@ proc capture*(a: TPeg): TPeg {.rtl, extern: "npegsCapture".} =
   result.sons = @[a]
 
 proc backref*(index: range[1..MaxSubPatterns]): TPeg {.
-  rtl, extern: "npegs$1".} = 
+  rtl, extern: "npegs$1".} =
   ## constructs a back reference of the given `index`. `index` starts counting
   ## from 1.
   result.kind = pkBackRef
   result.index = index-1
 
 proc backrefIgnoreCase*(index: range[1..MaxSubPatterns]): TPeg {.
-  rtl, extern: "npegs$1".} = 
+  rtl, extern: "npegs$1".} =
   ## constructs a back reference of the given `index`. `index` starts counting
   ## from 1. Ignores case for matching.
   result.kind = pkBackRefIgnoreCase
   result.index = index-1
 
 proc backrefIgnoreStyle*(index: range[1..MaxSubPatterns]): TPeg {.
-  rtl, extern: "npegs$1".}= 
+  rtl, extern: "npegs$1".}=
   ## constructs a back reference of the given `index`. `index` starts counting
   ## from 1. Ignores style for matching.
   result.kind = pkBackRefIgnoreStyle
@@ -320,7 +320,7 @@ proc spaceCost(n: TPeg): int =
   case n.kind
   of pkEmpty: discard
   of pkTerminal, pkTerminalIgnoreCase, pkTerminalIgnoreStyle, pkChar,
-     pkGreedyRepChar, pkCharChoice, pkGreedyRepSet, 
+     pkGreedyRepChar, pkCharChoice, pkGreedyRepSet,
      pkAny..pkWhitespace, pkGreedyAny:
     result = 1
   of pkNonTerminal:
@@ -332,7 +332,7 @@ proc spaceCost(n: TPeg): int =
       if result >= InlineThreshold: break
 
 proc nonterminal*(n: PNonTerminal): TPeg {.
-  rtl, extern: "npegs$1".} = 
+  rtl, extern: "npegs$1".} =
   ## constructs a PEG that consists of the nonterminal symbol
   assert n != nil
   if ntDeclared in n.flags and spaceCost(n.rule) < InlineThreshold:
@@ -353,7 +353,7 @@ proc newNonTerminal*(name: string, line, column: int): PNonTerminal {.
 template letters*: expr =
   ## expands to ``charset({'A'..'Z', 'a'..'z'})``
   charset({'A'..'Z', 'a'..'z'})
-  
+
 template digits*: expr =
   ## expands to ``charset({'0'..'9'})``
   charset({'0'..'9'})
@@ -361,11 +361,11 @@ template digits*: expr =
 template whitespace*: expr =
   ## expands to ``charset({' ', '\9'..'\13'})``
   charset({' ', '\9'..'\13'})
-  
+
 template identChars*: expr =
   ## expands to ``charset({'a'..'z', 'A'..'Z', '0'..'9', '_'})``
   charset({'a'..'z', 'A'..'Z', '0'..'9', '_'})
-  
+
 template identStartChars*: expr =
   ## expands to ``charset({'A'..'Z', 'a'..'z', '_'})``
   charset({'a'..'z', 'A'..'Z', '_'})
@@ -374,14 +374,14 @@ template ident*: expr =
   ## same as ``[a-zA-Z_][a-zA-z_0-9]*``; standard identifier
   sequence(charset({'a'..'z', 'A'..'Z', '_'}),
            *charset({'a'..'z', 'A'..'Z', '0'..'9', '_'}))
-  
+
 template natural*: expr =
   ## same as ``\d+``
   +digits
 
 # ------------------------- debugging -----------------------------------------
 
-proc esc(c: char, reserved = {'\0'..'\255'}): string = 
+proc esc(c: char, reserved = {'\0'..'\255'}): string =
   case c
   of '\b': result = "\\b"
   of '\t': result = "\\t"
@@ -396,38 +396,38 @@ proc esc(c: char, reserved = {'\0'..'\255'}): string =
   elif c < ' ' or c >= '\128': result = '\\' & $ord(c)
   elif c in reserved: result = '\\' & c
   else: result = $c
-  
+
 proc singleQuoteEsc(c: char): string = return "'" & esc(c, {'\''}) & "'"
 
-proc singleQuoteEsc(str: string): string = 
+proc singleQuoteEsc(str: string): string =
   result = "'"
   for c in items(str): add result, esc(c, {'\''})
   add result, '\''
-  
-proc charSetEscAux(cc: set[char]): string = 
+
+proc charSetEscAux(cc: set[char]): string =
   const reserved = {'^', '-', ']'}
   result = ""
   var c1 = 0
-  while c1 <= 0xff: 
-    if chr(c1) in cc: 
+  while c1 <= 0xff:
+    if chr(c1) in cc:
       var c2 = c1
       while c2 < 0xff and chr(succ(c2)) in cc: inc(c2)
-      if c1 == c2: 
+      if c1 == c2:
         add result, esc(chr(c1), reserved)
-      elif c2 == succ(c1): 
+      elif c2 == succ(c1):
         add result, esc(chr(c1), reserved) & esc(chr(c2), reserved)
-      else: 
+      else:
         add result, esc(chr(c1), reserved) & '-' & esc(chr(c2), reserved)
       c1 = c2
     inc(c1)
-  
+
 proc charSetEsc(cc: set[char]): string =
-  if card(cc) >= 128+64: 
+  if card(cc) >= 128+64:
     result = "[^" & charSetEscAux({'\1'..'\xFF'} - cc) & ']'
-  else: 
+  else:
     result = '[' & charSetEscAux(cc) & ']'
-  
-proc toStrAux(r: TPeg, res: var string) = 
+
+proc toStrAux(r: TPeg, res: var string) =
   case r.kind
   of pkEmpty: add(res, "()")
   of pkAny: add(res, '.')
@@ -491,25 +491,25 @@ proc toStrAux(r: TPeg, res: var string) =
     toStrAux(r.sons[0], res)
   of pkCapture:
     add(res, '{')
-    toStrAux(r.sons[0], res)    
+    toStrAux(r.sons[0], res)
     add(res, '}')
-  of pkBackRef: 
+  of pkBackRef:
     add(res, '$')
     add(res, $r.index)
-  of pkBackRefIgnoreCase: 
+  of pkBackRefIgnoreCase:
     add(res, "i$")
     add(res, $r.index)
-  of pkBackRefIgnoreStyle: 
+  of pkBackRefIgnoreStyle:
     add(res, "y$")
     add(res, $r.index)
   of pkRule:
-    toStrAux(r.sons[0], res)    
+    toStrAux(r.sons[0], res)
     add(res, " <- ")
     toStrAux(r.sons[1], res)
   of pkList:
     for i in 0 .. high(r.sons):
       toStrAux(r.sons[i], res)
-      add(res, "\n")  
+      add(res, "\n")
   of pkStartAnchor:
     add(res, '^')
 
@@ -526,8 +526,8 @@ type
     ml: int
     origStart: int
 
-proc bounds*(c: TCaptures, 
-             i: range[0..MaxSubpatterns-1]): tuple[first, last: int] = 
+proc bounds*(c: TCaptures,
+             i: range[0..MaxSubpatterns-1]): tuple[first, last: int] =
   ## returns the bounds ``[first..last]`` of the `i`'th capture.
   result = c.matches[i]
 
@@ -547,7 +547,7 @@ when not useUnicode:
 
 proc rawMatch*(s: string, p: TPeg, start: int, c: var TCaptures): int {.
                rtl, extern: "npegs$1".} =
-  ## low-level matching proc that implements the PEG interpreter. Use this 
+  ## low-level matching proc that implements the PEG interpreter. Use this
   ## for maximum efficiency (every other PEG operation ends up calling this
   ## proc).
   ## Returns -1 if it does not match, else the length of the match
@@ -561,7 +561,7 @@ proc rawMatch*(s: string, p: TPeg, start: int, c: var TCaptures): int {.
       result = runeLenAt(s, start)
     else:
       result = -1
-  of pkLetter: 
+  of pkLetter:
     if s[start] != '\0':
       var a: Rune
       result = start
@@ -570,7 +570,7 @@ proc rawMatch*(s: string, p: TPeg, start: int, c: var TCaptures): int {.
       else: result = -1
     else:
       result = -1
-  of pkLower: 
+  of pkLower:
     if s[start] != '\0':
       var a: Rune
       result = start
@@ -579,7 +579,7 @@ proc rawMatch*(s: string, p: TPeg, start: int, c: var TCaptures): int {.
       else: result = -1
     else:
       result = -1
-  of pkUpper: 
+  of pkUpper:
     if s[start] != '\0':
       var a: Rune
       result = start
@@ -588,16 +588,16 @@ proc rawMatch*(s: string, p: TPeg, start: int, c: var TCaptures): int {.
       else: result = -1
     else:
       result = -1
-  of pkTitle: 
+  of pkTitle:
     if s[start] != '\0':
       var a: Rune
       result = start
       fastRuneAt(s, result, a)
-      if isTitle(a): dec(result, start) 
+      if isTitle(a): dec(result, start)
       else: result = -1
     else:
       result = -1
-  of pkWhitespace: 
+  of pkWhitespace:
     if s[start] != '\0':
       var a: Rune
       result = start
@@ -661,7 +661,7 @@ proc rawMatch*(s: string, p: TPeg, start: int, c: var TCaptures): int {.
     when false: echo "leave: ", p.nt.name
     if result < 0: c.ml = oldMl
   of pkSequence:
-    var oldMl = c.ml  
+    var oldMl = c.ml
     result = 0
     assert(not isNil(p.sons))
     for i in 0..high(p.sons):
@@ -744,11 +744,11 @@ proc rawMatch*(s: string, p: TPeg, start: int, c: var TCaptures): int {.
       #else: silently ignore the capture
     else:
       c.ml = idx
-  of pkBackRef..pkBackRefIgnoreStyle: 
+  of pkBackRef..pkBackRefIgnoreStyle:
     if p.index >= c.ml: return -1
     var (a, b) = c.matches[p.index]
     var n: TPeg
-    n.kind = succ(pkTerminal, ord(p.kind)-ord(pkBackRef)) 
+    n.kind = succ(pkTerminal, ord(p.kind)-ord(pkBackRef))
     n.term = s.substr(a, b)
     result = rawMatch(s, n, start, c)
   of pkStartAnchor:
@@ -769,7 +769,7 @@ proc match*(s: string, pattern: TPeg, matches: var openarray[string],
     for i in 0..c.ml-1:
       matches[i] = substr(s, c.matches[i][0], c.matches[i][1])
 
-proc match*(s: string, pattern: TPeg, 
+proc match*(s: string, pattern: TPeg,
             start = 0): bool {.rtl, extern: "npegs$1".} =
   ## returns ``true`` if ``s`` matches the ``pattern`` beginning from ``start``.
   var c: TCaptures
@@ -789,7 +789,7 @@ proc matchLen*(s: string, pattern: TPeg, matches: var openarray[string],
     for i in 0..c.ml-1:
       matches[i] = substr(s, c.matches[i][0], c.matches[i][1])
 
-proc matchLen*(s: string, pattern: TPeg, 
+proc matchLen*(s: string, pattern: TPeg,
                start = 0): int {.rtl, extern: "npegs$1".} =
   ## the same as ``match``, but it returns the length of the match,
   ## if there is no match, -1 is returned. Note that a match length
@@ -808,11 +808,11 @@ proc find*(s: string, pattern: TPeg, matches: var openarray[string],
     if matchLen(s, pattern, matches, i) >= 0: return i
   return -1
   # could also use the pattern here: (!P .)* P
-  
+
 proc findBounds*(s: string, pattern: TPeg, matches: var openarray[string],
                  start = 0): tuple[first, last: int] {.
                  rtl, extern: "npegs$1Capture".} =
-  ## returns the starting position and end position of ``pattern`` in ``s`` 
+  ## returns the starting position and end position of ``pattern`` in ``s``
   ## and the captured
   ## substrings in the array ``matches``. If it does not match, nothing
   ## is written into ``matches`` and (-1,0) is returned.
@@ -820,40 +820,40 @@ proc findBounds*(s: string, pattern: TPeg, matches: var openarray[string],
     var L = matchLen(s, pattern, matches, i)
     if L >= 0: return (i, i+L-1)
   return (-1, 0)
-  
-proc find*(s: string, pattern: TPeg, 
+
+proc find*(s: string, pattern: TPeg,
            start = 0): int {.rtl, extern: "npegs$1".} =
   ## returns the starting position of ``pattern`` in ``s``. If it does not
   ## match, -1 is returned.
   for i in start .. s.len-1:
     if matchLen(s, pattern, i) >= 0: return i
   return -1
-  
-iterator findAll*(s: string, pattern: TPeg, start = 0): string = 
+
+iterator findAll*(s: string, pattern: TPeg, start = 0): string =
   ## yields all matching captures of pattern in `s`.
   var matches: array[0..MaxSubpatterns-1, string]
   var i = start
   while i < s.len:
     var L = matchLen(s, pattern, matches, i)
     if L < 0: break
-    for k in 0..MaxSubPatterns-1: 
+    for k in 0..MaxSubPatterns-1:
       if isNil(matches[k]): break
       yield matches[k]
     inc(i, L)
-    
+
 proc findAll*(s: string, pattern: TPeg, start = 0): seq[string] {.
-  rtl, extern: "npegs$1".} = 
+  rtl, extern: "npegs$1".} =
   ## returns all matching captures of pattern in `s`.
   ## If it does not match, @[] is returned.
   accumulateResult(findAll(s, pattern, start))
-  
+
 template `=~`*(s: string, pattern: TPeg): expr =
-  ## This calls ``match`` with an implicit declared ``matches`` array that 
-  ## can be used in the scope of the ``=~`` call: 
-  ## 
+  ## This calls ``match`` with an implicit declared ``matches`` array that
+  ## can be used in the scope of the ``=~`` call:
+  ##
   ## .. code-block:: nim
   ##
-  ##   if line =~ peg"\s* {\w+} \s* '=' \s* {\w+}": 
+  ##   if line =~ peg"\s* {\w+} \s* '=' \s* {\w+}":
   ##     # matches a key=value pair:
   ##     echo("Key: ", matches[0])
   ##     echo("Value: ", matches[1])
@@ -864,7 +864,7 @@ template `=~`*(s: string, pattern: TPeg): expr =
   ##     echo("comment: ", matches[0])
   ##   else:
   ##     echo("syntax error")
-  ##  
+  ##
   when not declaredInScope(matches):
     var matches {.inject.}: array[0..MaxSubpatterns-1, string]
   match(s, pattern, matches)
@@ -934,10 +934,10 @@ proc replace*(s: string, sub: TPeg, by = ""): string {.
       addf(result, by, caps)
       inc(i, x)
   add(result, substr(s, i))
-  
+
 proc parallelReplace*(s: string, subs: varargs[
                       tuple[pattern: TPeg, repl: string]]): string {.
-                      rtl, extern: "npegs$1".} = 
+                      rtl, extern: "npegs$1".} =
   ## Returns a modified copy of `s` with the substitutions in `subs`
   ## applied in parallel.
   result = ""
@@ -954,8 +954,8 @@ proc parallelReplace*(s: string, subs: varargs[
       add(result, s[i])
       inc(i)
   # copy the rest:
-  add(result, substr(s, i))  
-  
+  add(result, substr(s, i))
+
 proc transformFile*(infile, outfile: string,
                     subs: varargs[tuple[pattern: TPeg, repl: string]]) {.
                     rtl, extern: "npegs$1".} =
@@ -972,7 +972,7 @@ proc transformFile*(infile, outfile: string,
       quit("cannot open for writing: " & outfile)
   else:
     quit("cannot open for reading: " & infile)
-  
+
 iterator split*(s: string, sep: TPeg): string =
   ## Splits the string `s` into substrings.
   ##
@@ -981,7 +981,7 @@ iterator split*(s: string, sep: TPeg): string =
   ##
   ## .. code-block:: nim
   ##   for word in split("00232this02939is39an22example111", peg"\d+"):
-  ##     writeln(stdout, word)
+  ##     writeLine(stdout, word)
   ##
   ## Results in:
   ##
@@ -1044,14 +1044,14 @@ type
     tkBackref,          ## '$'
     tkDollar,           ## '$'
     tkHat               ## '^'
-  
+
   TToken {.final.} = object  ## a token
     kind: TTokKind           ## the type of the token
     modifier: TModifier
     literal: string          ## the parsed (string) literal
     charset: set[char]       ## if kind == tkCharSet
     index: int               ## if kind == tkBackref
-  
+
   TPegLexer {.inheritable.} = object          ## the lexer object.
     bufpos: int               ## the current position within the buffer
     buf: cstring              ## the buffer itself
@@ -1081,7 +1081,7 @@ proc HandleLF(L: var TPegLexer, pos: int): int =
   result = pos+1
   L.lineStart = result
 
-proc init(L: var TPegLexer, input, filename: string, line = 1, col = 0) = 
+proc init(L: var TPegLexer, input, filename: string, line = 1, col = 0) =
   L.buf = input
   L.bufpos = 0
   L.lineNumber = line
@@ -1089,69 +1089,69 @@ proc init(L: var TPegLexer, input, filename: string, line = 1, col = 0) =
   L.lineStart = 0
   L.filename = filename
 
-proc getColumn(L: TPegLexer): int {.inline.} = 
+proc getColumn(L: TPegLexer): int {.inline.} =
   result = abs(L.bufpos - L.lineStart) + L.colOffset
 
-proc getLine(L: TPegLexer): int {.inline.} = 
+proc getLine(L: TPegLexer): int {.inline.} =
   result = L.linenumber
-  
+
 proc errorStr(L: TPegLexer, msg: string, line = -1, col = -1): string =
   var line = if line < 0: getLine(L) else: line
   var col = if col < 0: getColumn(L) else: col
   result = "$1($2, $3) Error: $4" % [L.filename, $line, $col, msg]
 
-proc handleHexChar(c: var TPegLexer, xi: var int) = 
+proc handleHexChar(c: var TPegLexer, xi: var int) =
   case c.buf[c.bufpos]
-  of '0'..'9': 
+  of '0'..'9':
     xi = (xi shl 4) or (ord(c.buf[c.bufpos]) - ord('0'))
     inc(c.bufpos)
-  of 'a'..'f': 
+  of 'a'..'f':
     xi = (xi shl 4) or (ord(c.buf[c.bufpos]) - ord('a') + 10)
     inc(c.bufpos)
-  of 'A'..'F': 
+  of 'A'..'F':
     xi = (xi shl 4) or (ord(c.buf[c.bufpos]) - ord('A') + 10)
     inc(c.bufpos)
   else: discard
 
-proc getEscapedChar(c: var TPegLexer, tok: var TToken) = 
+proc getEscapedChar(c: var TPegLexer, tok: var TToken) =
   inc(c.bufpos)
   case c.buf[c.bufpos]
-  of 'r', 'R', 'c', 'C': 
+  of 'r', 'R', 'c', 'C':
     add(tok.literal, '\c')
     inc(c.bufpos)
-  of 'l', 'L': 
+  of 'l', 'L':
     add(tok.literal, '\L')
     inc(c.bufpos)
-  of 'f', 'F': 
+  of 'f', 'F':
     add(tok.literal, '\f')
     inc(c.bufpos)
-  of 'e', 'E': 
+  of 'e', 'E':
     add(tok.literal, '\e')
     inc(c.bufpos)
-  of 'a', 'A': 
+  of 'a', 'A':
     add(tok.literal, '\a')
     inc(c.bufpos)
-  of 'b', 'B': 
+  of 'b', 'B':
     add(tok.literal, '\b')
     inc(c.bufpos)
-  of 'v', 'V': 
+  of 'v', 'V':
     add(tok.literal, '\v')
     inc(c.bufpos)
-  of 't', 'T': 
+  of 't', 'T':
     add(tok.literal, '\t')
     inc(c.bufpos)
-  of 'x', 'X': 
+  of 'x', 'X':
     inc(c.bufpos)
     var xi = 0
     handleHexChar(c, xi)
     handleHexChar(c, xi)
     if xi == 0: tok.kind = tkInvalid
     else: add(tok.literal, chr(xi))
-  of '0'..'9': 
+  of '0'..'9':
     var val = ord(c.buf[c.bufpos]) - ord('0')
     inc(c.bufpos)
     var i = 1
-    while (i <= 3) and (c.buf[c.bufpos] in {'0'..'9'}): 
+    while (i <= 3) and (c.buf[c.bufpos] in {'0'..'9'}):
       val = val * 10 + ord(c.buf[c.bufpos]) - ord('0')
       inc(c.bufpos)
       inc(i)
@@ -1164,32 +1164,32 @@ proc getEscapedChar(c: var TPegLexer, tok: var TToken) =
   else:
     add(tok.literal, c.buf[c.bufpos])
     inc(c.bufpos)
-  
-proc skip(c: var TPegLexer) = 
+
+proc skip(c: var TPegLexer) =
   var pos = c.bufpos
   var buf = c.buf
-  while true: 
+  while true:
     case buf[pos]
-    of ' ', '\t': 
+    of ' ', '\t':
       inc(pos)
     of '#':
       while not (buf[pos] in {'\c', '\L', '\0'}): inc(pos)
     of '\c':
       pos = HandleCR(c, pos)
       buf = c.buf
-    of '\L': 
+    of '\L':
       pos = HandleLF(c, pos)
       buf = c.buf
-    else: 
+    else:
       break                   # EndOfFile also leaves the loop
   c.bufpos = pos
-  
-proc getString(c: var TPegLexer, tok: var TToken) = 
+
+proc getString(c: var TPegLexer, tok: var TToken) =
   tok.kind = tkStringLit
   var pos = c.bufPos + 1
   var buf = c.buf
   var quote = buf[pos-1]
-  while true: 
+  while true:
     case buf[pos]
     of '\\':
       c.bufpos = pos
@@ -1200,13 +1200,13 @@ proc getString(c: var TPegLexer, tok: var TToken) =
       break
     elif buf[pos] == quote:
       inc(pos)
-      break      
+      break
     else:
       add(tok.literal, buf[pos])
       inc(pos)
   c.bufpos = pos
-  
-proc getDollar(c: var TPegLexer, tok: var TToken) = 
+
+proc getDollar(c: var TPegLexer, tok: var TToken) =
   var pos = c.bufPos + 1
   var buf = c.buf
   if buf[pos] in {'0'..'9'}:
@@ -1218,8 +1218,8 @@ proc getDollar(c: var TPegLexer, tok: var TToken) =
   else:
     tok.kind = tkDollar
   c.bufpos = pos
-  
-proc getCharSet(c: var TPegLexer, tok: var TToken) = 
+
+proc getCharSet(c: var TPegLexer, tok: var TToken) =
   tok.kind = tkCharSet
   tok.charset = {}
   var pos = c.bufPos + 1
@@ -1242,7 +1242,7 @@ proc getCharSet(c: var TPegLexer, tok: var TToken) =
     of '\C', '\L', '\0':
       tok.kind = tkInvalid
       break
-    else: 
+    else:
       ch = buf[pos]
       inc(pos)
     incl(tok.charset, ch)
@@ -1262,18 +1262,18 @@ proc getCharSet(c: var TPegLexer, tok: var TToken) =
         of '\C', '\L', '\0':
           tok.kind = tkInvalid
           break
-        else: 
+        else:
           ch2 = buf[pos]
           inc(pos)
         for i in ord(ch)+1 .. ord(ch2):
           incl(tok.charset, chr(i))
   c.bufpos = pos
   if caret: tok.charset = {'\1'..'\xFF'} - tok.charset
-  
-proc getSymbol(c: var TPegLexer, tok: var TToken) = 
+
+proc getSymbol(c: var TPegLexer, tok: var TToken) =
   var pos = c.bufpos
   var buf = c.buf
-  while true: 
+  while true:
     add(tok.literal, buf[pos])
     inc(pos)
     if buf[pos] notin strutils.IdentChars: break
@@ -1289,7 +1289,7 @@ proc getBuiltin(c: var TPegLexer, tok: var TToken) =
     tok.kind = tkEscaped
     getEscapedChar(c, tok) # may set tok.kind to tkInvalid
 
-proc getTok(c: var TPegLexer, tok: var TToken) = 
+proc getTok(c: var TPegLexer, tok: var TToken) =
   tok.kind = tkInvalid
   tok.modifier = modNone
   setlen(tok.literal, 0)
@@ -1304,11 +1304,11 @@ proc getTok(c: var TPegLexer, tok: var TToken) =
     else:
       tok.kind = tkCurlyLe
       add(tok.literal, '{')
-  of '}': 
+  of '}':
     tok.kind = tkCurlyRi
     inc(c.bufpos)
     add(tok.literal, '}')
-  of '[': 
+  of '[':
     getCharset(c, tok)
   of '(':
     tok.kind = tkParLe
@@ -1318,7 +1318,7 @@ proc getTok(c: var TPegLexer, tok: var TToken) =
     tok.kind = tkParRi
     inc(c.bufpos)
     add(tok.literal, ')')
-  of '.': 
+  of '.':
     tok.kind = tkAny
     inc(c.bufpos)
     add(tok.literal, '.')
@@ -1326,16 +1326,16 @@ proc getTok(c: var TPegLexer, tok: var TToken) =
     tok.kind = tkAnyRune
     inc(c.bufpos)
     add(tok.literal, '_')
-  of '\\': 
+  of '\\':
     getBuiltin(c, tok)
   of '\'', '"': getString(c, tok)
   of '$': getDollar(c, tok)
-  of '\0': 
+  of '\0':
     tok.kind = tkEof
     tok.literal = "[EOF]"
   of 'a'..'z', 'A'..'Z', '\128'..'\255':
     getSymbol(c, tok)
-    if c.buf[c.bufpos] in {'\'', '"'} or 
+    if c.buf[c.bufpos] in {'\'', '"'} or
         c.buf[c.bufpos] == '$' and c.buf[c.bufpos+1] in {'0'..'9'}:
       case tok.literal
       of "i": tok.modifier = modIgnoreCase
@@ -1383,7 +1383,7 @@ proc getTok(c: var TPegLexer, tok: var TToken) =
     tok.kind = tkAt
     inc(c.bufpos)
     add(tok.literal, '@')
-    if c.buf[c.bufpos] == '@': 
+    if c.buf[c.bufpos] == '@':
       tok.kind = tkCurlyAt
       inc(c.bufpos)
       add(tok.literal, '@')
@@ -1402,7 +1402,7 @@ proc arrowIsNextTok(c: TPegLexer): bool =
   result = c.buf[pos] == '<' and c.buf[pos+1] == '-'
 
 # ----------------------------- parser ----------------------------------------
-    
+
 type
   EInvalidPeg* = object of ValueError ## raised if an invalid
                                       ## PEG has been detected
@@ -1420,7 +1420,7 @@ proc pegError(p: TPegParser, msg: string, line = -1, col = -1) =
   e.msg = errorStr(p, msg, line, col)
   raise e
 
-proc getTok(p: var TPegParser) = 
+proc getTok(p: var TPegParser) =
   getTok(p, p.tok)
   if p.tok.kind == tkInvalid: pegError(p, "invalid token")
 
@@ -1470,7 +1470,7 @@ proc builtin(p: var TPegParser): TPeg =
   of "white": result = UnicodeWhitespace()
   else: pegError(p, "unknown built-in: " & p.tok.literal)
 
-proc token(terminal: TPeg, p: TPegParser): TPeg = 
+proc token(terminal: TPeg, p: TPegParser): TPeg =
   if p.skip.kind == pkEmpty: result = terminal
   else: result = sequence(p.skip, terminal)
 
@@ -1491,7 +1491,7 @@ proc primary(p: var TPegParser): TPeg =
   else: discard
   case p.tok.kind
   of tkIdentifier:
-    if p.identIsVerbatim: 
+    if p.identIsVerbatim:
       var m = p.tok.modifier
       if m == modNone: m = p.modifier
       result = modifiedTerm(p.tok.literal, m).token(p)
@@ -1534,17 +1534,17 @@ proc primary(p: var TPegParser): TPeg =
   of tkEscaped:
     result = term(p.tok.literal[0]).token(p)
     getTok(p)
-  of tkDollar: 
+  of tkDollar:
     result = endAnchor()
     getTok(p)
-  of tkHat: 
+  of tkHat:
     result = startAnchor()
     getTok(p)
   of tkBackref:
     var m = p.tok.modifier
     if m == modNone: m = p.modifier
     result = modifiedBackRef(p.tok.index, m).token(p)
-    if p.tok.index < 0 or p.tok.index > p.captures: 
+    if p.tok.index < 0 or p.tok.index > p.captures:
       pegError(p, "invalid back reference index: " & $p.tok.index)
     getTok(p)
   else:
@@ -1568,7 +1568,7 @@ proc seqExpr(p: var TPegParser): TPeg =
   while true:
     case p.tok.kind
     of tkAmp, tkNot, tkAt, tkStringLit, tkCharset, tkParLe, tkCurlyLe,
-       tkAny, tkAnyRune, tkBuiltin, tkEscaped, tkDollar, tkBackref, 
+       tkAny, tkAnyRune, tkBuiltin, tkEscaped, tkDollar, tkBackref,
        tkHat, tkCurlyAt:
       result = sequence(result, primary(p))
     of tkIdentifier:
@@ -1582,7 +1582,7 @@ proc parseExpr(p: var TPegParser): TPeg =
   while p.tok.kind == tkBar:
     getTok(p)
     result = result / seqExpr(p)
-  
+
 proc parseRule(p: var TPegParser): PNonTerminal =
   if p.tok.kind == tkIdentifier and arrowIsNextTok(p):
     result = getNonTerminal(p, p.tok.literal)
@@ -1596,7 +1596,7 @@ proc parseRule(p: var TPegParser): PNonTerminal =
     incl(result.flags, ntDeclared) # NOW inlining may be attempted
   else:
     pegError(p, "rule expected, but found: " & p.tok.literal)
-  
+
 proc rawParse(p: var TPegParser): TPeg =
   ## parses a rule or a PEG expression
   while p.tok.kind == tkBuiltin:
@@ -1649,20 +1649,20 @@ proc peg*(pattern: string): TPeg =
   ##   peg"{\ident} \s* '=' \s* {.*}"
   result = parsePeg(pattern, "pattern")
 
-proc escapePeg*(s: string): string = 
+proc escapePeg*(s: string): string =
   ## escapes `s` so that it is matched verbatim when used as a peg.
   result = ""
   var inQuote = false
-  for c in items(s):  
+  for c in items(s):
     case c
-    of '\0'..'\31', '\'', '"', '\\': 
-      if inQuote: 
+    of '\0'..'\31', '\'', '"', '\\':
+      if inQuote:
         result.add('\'')
         inQuote = false
       result.add("\\x")
       result.add(toHex(ord(c), 2))
     else:
-      if not inQuote: 
+      if not inQuote:
         result.add('\'')
         inQuote = true
       result.add(c)
@@ -1675,27 +1675,27 @@ when isMainModule:
   doAssert(not match("W_HI_L", peg"\y 'while'"))
   doAssert(not match("W_HI_Le", peg"\y v'while'"))
   doAssert match("W_HI_Le", peg"y'while'")
-  
+
   doAssert($ +digits == $peg"\d+")
   doAssert "0158787".match(peg"\d+")
   doAssert "ABC 0232".match(peg"\w+\s+\d+")
   doAssert "ABC".match(peg"\d+ / \w+")
 
   for word in split("00232this02939is39an22example111", peg"\d+"):
-    writeln(stdout, word)
+    writeLine(stdout, word)
 
   doAssert matchLen("key", ident) == 3
 
   var pattern = sequence(ident, *whitespace, term('='), *whitespace, ident)
   doAssert matchLen("key1=  cal9", pattern) == 11
-  
+
   var ws = newNonTerminal("ws", 1, 1)
   ws.rule = *whitespace
-  
+
   var expr = newNonTerminal("expr", 1, 1)
   expr.rule = sequence(capture(ident), *sequence(
                 nonterminal(ws), term('+'), nonterminal(ws), nonterminal(expr)))
-  
+
   var c: TCaptures
   var s = "a+b +  c +d+e+f"
   doAssert rawMatch(s, expr.rule, 0, c) == len(s)
@@ -1716,7 +1716,7 @@ when isMainModule:
     doAssert matches[0] == "abc"
   else:
     doAssert false
-  
+
   var g2 = peg"""S <- A B / C D
                  A <- 'a'+
                  B <- 'b'+
@@ -1733,10 +1733,10 @@ when isMainModule:
     doAssert matches[0] == "a"
   else:
     doAssert false
-  
+
   block:
     var matches: array[0..2, string]
-    if match("abcdefg", peg"c {d} ef {g}", matches, 2): 
+    if match("abcdefg", peg"c {d} ef {g}", matches, 2):
       doAssert matches[0] == "d"
       doAssert matches[1] == "g"
     else:
@@ -1744,13 +1744,13 @@ when isMainModule:
 
   for x in findAll("abcdef", peg"{.}", 3):
     echo x
-    
+
   if "f(a, b)" =~ peg"{[0-9]+} / ({\ident} '(' {@} ')')":
     doAssert matches[0] == "f"
     doAssert matches[1] == "a, b"
   else:
     doAssert false
-  
+
   doAssert match("eine übersicht und außerdem", peg"(\letter \white*)+")
   # ß is not a lower cased letter?!
   doAssert match("eine übersicht und auerdem", peg"(\lower \white*)+")
@@ -1762,7 +1762,7 @@ when isMainModule:
          "var1<-keykey;var2<-key2key2")
 
   doAssert match("prefix/start", peg"^start$", 7)
-  
+
   # tricky test to check for false aliasing:
   block:
     var a = term"key"
diff --git a/tests/stdlib/tposix.nim b/tests/stdlib/tposix.nim
index bf0b49586..229035d22 100644
--- a/tests/stdlib/tposix.nim
+++ b/tests/stdlib/tposix.nim
@@ -9,8 +9,8 @@ when not defined(windows):
 
   discard uname(u)
 
-  writeln(stdout, u.sysname)
-  writeln(stdout, u.nodename)
-  writeln(stdout, u.release)
-  writeln(stdout, u.machine)
+  writeLine(stdout, u.sysname)
+  writeLine(stdout, u.nodename)
+  writeLine(stdout, u.release)
+  writeLine(stdout, u.machine)
 
diff --git a/tests/stdlib/trepr.nim b/tests/stdlib/trepr.nim
index 41c830621..8d1353173 100644
--- a/tests/stdlib/trepr.nim
+++ b/tests/stdlib/trepr.nim
@@ -9,7 +9,7 @@ type
     
 var val = {a, b}
 stdout.write(repr(val))
-stdout.writeln(repr({'a'..'z', 'A'..'Z'}))
+stdout.writeLine(repr({'a'..'z', 'A'..'Z'}))
 
 type
   TObj {.pure, inheritable.} = object
diff --git a/tests/stdlib/trepr2.nim b/tests/stdlib/trepr2.nim
index b15081e48..b7c2bd152 100644
--- a/tests/stdlib/trepr2.nim
+++ b/tests/stdlib/trepr2.nim
@@ -26,7 +26,7 @@ q[] = p
 

 s = @[q, q, q, q]

 

-writeln(stdout, repr(p))

-writeln(stdout, repr(q))

-writeln(stdout, repr(s))

-writeln(stdout, repr(en4))

+writeLine(stdout, repr(p))

+writeLine(stdout, repr(q))

+writeLine(stdout, repr(s))

+writeLine(stdout, repr(en4))

diff --git a/tests/stdlib/tstrtabs.nim b/tests/stdlib/tstrtabs.nim
index 251ec77ef..8404a6c88 100644
--- a/tests/stdlib/tstrtabs.nim
+++ b/tests/stdlib/tstrtabs.nim
@@ -1,12 +1,12 @@
 import strtabs
 
-var tab = newStringTable({"key1": "val1", "key2": "val2"}, 
+var tab = newStringTable({"key1": "val1", "key2": "val2"},
                          modeStyleInsensitive)
 for i in 0..80:
   tab["key_" & $i] = "value" & $i
   
 for key, val in pairs(tab):
-  writeln(stdout, key, ": ", val)
-writeln(stdout, "length of table ", $tab.len)
+  writeLine(stdout, key, ": ", val)
+writeLine(stdout, "length of table ", $tab.len)
 
-writeln(stdout, `%`("$key1 = $key2; ${PATH}", tab, {useEnvironment}))
+writeLine(stdout, `%`("$key1 = $key2; ${PATH}", tab, {useEnvironment}))
diff --git a/tests/stdlib/twalker.nim b/tests/stdlib/twalker.nim
index 89e6c2b9d..aad0fa786 100644
--- a/tests/stdlib/twalker.nim
+++ b/tests/stdlib/twalker.nim
@@ -5,9 +5,9 @@ import
 

 proc main(filter: string) =

   for filename in walkFiles(filter):

-    writeln(stdout, filename)

+    writeLine(stdout, filename)

 

   for key, val in envPairs():

-    writeln(stdout, key & '=' & val)

+    writeLine(stdout, key & '=' & val)

 

 main("*.nim")

diff --git a/tests/template/tstempl.nim b/tests/template/tstempl.nim
index 2b4a8baa0..f8e57abbb 100644
--- a/tests/template/tstempl.nim
+++ b/tests/template/tstempl.nim
@@ -15,10 +15,10 @@ var abclev = levB
 
 template tstLev(abclev: TLev) =
   bind tstempl.abclev, `%`
-  writeln(stdout, "global = $1, arg = $2, test = $3" % [
+  writeLine(stdout, "global = $1, arg = $2, test = $3" % [
     $tstempl.abclev, $abclev, $(tstempl.abclev == abclev)])
   # evaluates to true, but must be false
 
 
 tstLev(levA)
-writeln(stdout, $abclev)
+writeLine(stdout, $abclev)
diff --git a/tests/template/ttempl3.nim b/tests/template/ttempl3.nim
index 59be24624..c5d78d414 100644
--- a/tests/template/ttempl3.nim
+++ b/tests/template/ttempl3.nim
@@ -13,8 +13,8 @@ template withOpenFile(f: expr, filename: string, mode: TFileMode,
       quit("cannot open for writing: " & filename)
     
 withOpenFile(txt, "ttempl3.txt", fmWrite):
-  writeln(txt, "line 1")
-  txt.writeln("line 2")
+  writeLine(txt, "line 1")
+  txt.writeLine("line 2")
   
 var
   myVar: array[0..1, int]
diff --git a/tests/testament/caasdriver.nim b/tests/testament/caasdriver.nim
index c61a9f108..30383bddb 100644
--- a/tests/testament/caasdriver.nim
+++ b/tests/testament/caasdriver.nim
@@ -137,11 +137,11 @@ proc doScenario(script: string, output: Stream, mode: TRunMode, verbose: bool):
       if line.strip.len == 0: continue
 
       if line.startsWith("#"):
-        output.writeln line
+        output.writeLine line
         continue
       elif line.startsWith(">"):
         s.doCommand(line.substr(1).strip)
-        output.writeln line, "\n", if verbose: s.lastOutput else: ""
+        output.writeLine line, "\n", if verbose: s.lastOutput else: ""
       else:
         var expectMatch = true
         var pattern = s.replaceVars(line)
@@ -153,9 +153,9 @@ proc doScenario(script: string, output: Stream, mode: TRunMode, verbose: bool):
           s.lastOutput.find(re(pattern, flags = {reStudy})) != -1
 
         if expectMatch == actualMatch:
-          output.writeln "SUCCESS ", line
+          output.writeLine "SUCCESS ", line
         else:
-          output.writeln "FAILURE ", line
+          output.writeLine "FAILURE ", line
           result = false
 
 iterator caasTestsRunner*(filter = "", verbose = false): tuple[test,
diff --git a/tests/testament/htmlgen.nim b/tests/testament/htmlgen.nim
index a9f739995..98ccf1170 100644
--- a/tests/testament/htmlgen.nim
+++ b/tests/testament/htmlgen.nim
@@ -138,7 +138,7 @@ proc generateHtml*(filename: string, commit: int; onlyFailing: bool) =
   # generate navigation:
   outfile.write("""<ul id="tabs">""")
   for m in db.rows(sql"select id, name, os, cpu from Machine order by id"):
-    outfile.writeln """<li><a href="#$#">$#: $#, $#</a></li>""" % m
+    outfile.writeLine """<li><a href="#$#">$#: $#, $#</a></li>""" % m
   outfile.write("</ul>")
 
   for currentMachine in db.rows(sql"select id from Machine order by id"):
@@ -195,7 +195,7 @@ proc generateJson*(filename: string, commit: int) =
   let machine = $backend.getMachine(db)
   let data = db.getRow(sql(selRow), lastCommit, machine)
 
-  outfile.writeln("""{"total": $#, "passed": $#, "skipped": $#""" % data)
+  outfile.writeLine("""{"total": $#, "passed": $#, "skipped": $#""" % data)
 
   let results = newJArray()
   for row in db.rows(sql(selResults), lastCommit):
@@ -208,7 +208,7 @@ proc generateJson*(filename: string, commit: int) =
     obj["expected"] = %row[5]
     obj["given"] = %row[6]
     results.add(obj)
-  outfile.writeln(""", "results": """)
+  outfile.writeLine(""", "results": """)
   outfile.write(results.pretty)
 
   if not previousCommit.isNil:
@@ -220,9 +220,9 @@ proc generateJson*(filename: string, commit: int) =
       obj["old"] = %row[1]
       obj["new"] = %row[2]
       diff.add obj
-    outfile.writeln(""", "diff": """)
-    outfile.writeln(diff.pretty)
+    outfile.writeLine(""", "diff": """)
+    outfile.writeLine(diff.pretty)
 
-  outfile.writeln "}"
+  outfile.writeLine "}"
   close(db)
   close(outfile)
diff --git a/tests/trmacros/targlist.nim b/tests/trmacros/targlist.nim
index 321b3d5d2..f9d2cb6c6 100644
--- a/tests/trmacros/targlist.nim
+++ b/tests/trmacros/targlist.nim
@@ -3,7 +3,7 @@ discard """
 """
 
 proc f(x: varargs[string, `$`]) = discard
-template optF{f(x)}(x: varargs[expr]) = 
-  writeln(stdout, x)
+template optF{f(x)}(x: varargs[expr]) =
+  writeLine(stdout, x)
 
 f 1, 2, false, 3, "ha"
diff --git a/tests/trmacros/tstmtlist.nim b/tests/trmacros/tstmtlist.nim
index 20cb5d688..5202f778b 100644
--- a/tests/trmacros/tstmtlist.nim
+++ b/tests/trmacros/tstmtlist.nim
@@ -7,13 +7,13 @@ discard """
 
 template optWrite{
   write(f, x)
-  ((write|writeln){w})(f, y)
+  ((write|writeLine){w})(f, y)
 }(x, y: varargs[expr], f, w: expr) =
   w(f, "|", x, y, "|")
 
 if true:
   echo "0"
   write stdout, "1"
-  writeln stdout, "2"
+  writeLine stdout, "2"
   write stdout, "3"
   echo "4"
diff --git a/tools/cmerge.nim b/tools/cmerge.nim
index d2e540481..13bf8b64c 100644
--- a/tools/cmerge.nim
+++ b/tools/cmerge.nim
@@ -19,9 +19,9 @@ proc process(dir, infile: string, outfile: File,
                      ig <- (comment / \s+)* """:
       # follow the include file:
       if process(dir, matches[0], outfile, processed) == prAddIncludeDir:
-        writeln(outfile, line)
+        writeLine(outfile, line)
     else:
-      writeln(outfile, line)
+      writeLine(outfile, line)
 
 proc main(dir, outfile: string) =
   var o: File
diff --git a/tools/nimgrep.nim b/tools/nimgrep.nim
index 72e4adc07..221181f66 100644
--- a/tools/nimgrep.nim
+++ b/tools/nimgrep.nim
@@ -21,10 +21,10 @@ Options:
   --find, -f          find the pattern (default)
   --replace, -r       replace the pattern
   --peg               pattern is a peg
-  --re                pattern is a regular expression (default); extended 
+  --re                pattern is a regular expression (default); extended
                       syntax for the regular expression is always turned on
   --recursive         process directories recursively
-  --confirm           confirm each occurrence/replacement; there is a chance 
+  --confirm           confirm each occurrence/replacement; there is a chance
                       to abort any time without touching the file
   --stdin             read pattern from stdin (to avoid the shell's confusing
                       quoting rules)
@@ -39,13 +39,13 @@ Options:
 """
 
 type
-  TOption = enum 
+  TOption = enum
     optFind, optReplace, optPeg, optRegex, optRecursive, optConfirm, optStdin,
     optWord, optIgnoreCase, optIgnoreStyle, optVerbose
   TOptions = set[TOption]
-  TConfirmEnum = enum 
+  TConfirmEnum = enum
     ceAbort, ceYes, ceAll, ceNo, ceNone
-    
+
 var
   filenames: seq[string] = @[]
   pattern = ""
@@ -58,34 +58,34 @@ proc ask(msg: string): string =
   stdout.write(msg)
   result = stdin.readLine()
 
-proc confirm: TConfirmEnum = 
+proc confirm: TConfirmEnum =
   while true:
     case normalize(ask("     [a]bort; [y]es, a[l]l, [n]o, non[e]: "))
-    of "a", "abort": return ceAbort 
+    of "a", "abort": return ceAbort
     of "y", "yes": return ceYes
     of "l", "all": return ceAll
     of "n", "no": return ceNo
     of "e", "none": return ceNone
     else: discard
 
-proc countLines(s: string, first, last: int): int = 
+proc countLines(s: string, first, last: int): int =
   var i = first
   while i <= last:
-    if s[i] == '\13': 
+    if s[i] == '\13':
       inc result
       if i < last and s[i+1] == '\10': inc(i)
-    elif s[i] == '\10': 
+    elif s[i] == '\10':
       inc result
     inc i
 
-proc beforePattern(s: string, first: int): int = 
+proc beforePattern(s: string, first: int): int =
   result = first-1
   while result >= 0:
     if s[result] in NewLines: break
     dec(result)
   inc(result)
 
-proc afterPattern(s: string, last: int): int = 
+proc afterPattern(s: string, last: int): int =
   result = last+1
   while result < s.len:
     if s[result] in NewLines: break
@@ -99,7 +99,7 @@ proc writeColored(s: string) =
     stdout.write(s)
 
 proc highlight(s, match, repl: string, t: tuple[first, last: int],
-               line: int, showRepl: bool) = 
+               line: int, showRepl: bool) =
   const alignment = 6
   stdout.write(line.`$`.align(alignment), ": ")
   var x = beforePattern(s, t.first)
@@ -118,17 +118,17 @@ proc highlight(s, match, repl: string, t: tuple[first, last: int],
 proc processFile(filename: string) =
   var filenameShown = false
   template beforeHighlight =
-    if not filenameShown and optVerbose notin options: 
-      stdout.writeln(filename)
+    if not filenameShown and optVerbose notin options:
+      stdout.writeLine(filename)
       filenameShown = true
-  
+
   var buffer: string
   try:
     buffer = system.readFile(filename)
-  except IOError: 
+  except IOError:
     echo "cannot open file: ", filename
     return
-  if optVerbose in options: stdout.writeln(filename)
+  if optVerbose in options: stdout.writeLine(filename)
   var pegp: TPeg
   var rep: Regex
   var result: string
@@ -140,10 +140,10 @@ proc processFile(filename: string) =
       rep = re(pattern)
   else:
     pegp = peg(pattern)
-    
+
   if optReplace in options:
     result = newStringOfCap(buffer.len)
-    
+
   var line = 1
   var i = 0
   var matches: array[0..re.MaxSubpatterns-1, string]
@@ -157,24 +157,24 @@ proc processFile(filename: string) =
       t = findBounds(buffer, rep, matches, i)
     if t.first <= 0: break
     inc(line, countLines(buffer, i, t.first-1))
-    
+
     var wholeMatch = buffer.substr(t.first, t.last)
-    
+
     beforeHighlight()
-    if optReplace notin options: 
+    if optReplace notin options:
       highlight(buffer, wholeMatch, "", t, line, showRepl=false)
     else:
       var r: string
       if optRegex notin options:
         r = replace(wholeMatch, pegp, replacement % matches)
-      else: 
+      else:
         r = replace(wholeMatch, rep, replacement % matches)
-      if optConfirm in options: 
+      if optConfirm in options:
         highlight(buffer, wholeMatch, r, t, line, showRepl=true)
         case confirm()
         of ceAbort: quit(0)
-        of ceYes: reallyReplace = true 
-        of ceAll: 
+        of ceYes: reallyReplace = true
+        of ceAll:
           reallyReplace = true
           options.excl(optConfirm)
         of ceNo:
@@ -203,11 +203,11 @@ proc processFile(filename: string) =
 
 proc hasRightExt(filename: string, exts: seq[string]): bool =
   var y = splitFile(filename).ext.substr(1) # skip leading '.'
-  for x in items(exts): 
+  for x in items(exts):
     if os.cmpPaths(x, y) == 0: return true
 
-proc styleInsensitive(s: string): string = 
-  template addx: stmt = 
+proc styleInsensitive(s: string): string =
+  template addx: stmt =
     result.add(s[i])
     inc(i)
   result = ""
@@ -215,7 +215,7 @@ proc styleInsensitive(s: string): string =
   var brackets = 0
   while i < s.len:
     case s[i]
-    of 'A'..'Z', 'a'..'z', '0'..'9': 
+    of 'A'..'Z', 'a'..'z', '0'..'9':
       addx()
       if brackets == 0: result.add("_?")
     of '_':
@@ -234,29 +234,29 @@ proc styleInsensitive(s: string): string =
         while s[i] != '>' and s[i] != '\0': addx()
     of '\\':
       addx()
-      if s[i] in strutils.Digits: 
+      if s[i] in strutils.Digits:
         while s[i] in strutils.Digits: addx()
       else:
         addx()
     else: addx()
 
-proc walker(dir: string) = 
+proc walker(dir: string) =
   for kind, path in walkDir(dir):
     case kind
-    of pcFile: 
+    of pcFile:
       if extensions.len == 0 or path.hasRightExt(extensions):
         processFile(path)
-    of pcDir: 
+    of pcDir:
       if optRecursive in options:
         walker(path)
     else: discard
   if existsFile(dir): processFile(dir)
 
-proc writeHelp() = 
+proc writeHelp() =
   stdout.write(Usage)
   quit(0)
 
-proc writeVersion() = 
+proc writeVersion() =
   stdout.write(Version & "\n")
   quit(0)
 
@@ -267,9 +267,9 @@ proc checkOptions(subset: TOptions, a, b: string) =
 for kind, key, val in getopt():
   case kind
   of cmdArgument:
-    if options.contains(optStdin): 
+    if options.contains(optStdin):
       filenames.add(key)
-    elif pattern.len == 0: 
+    elif pattern.len == 0:
       pattern = key
     elif options.contains(optReplace) and replacement.len == 0:
       replacement = key
@@ -306,7 +306,7 @@ checkOptions({optFind, optReplace}, "find", "replace")
 checkOptions({optPeg, optRegex}, "peg", "re")
 checkOptions({optIgnoreCase, optIgnoreStyle}, "ignore_case", "ignore_style")
 
-if optStdin in options: 
+if optStdin in options:
   pattern = ask("pattern [ENTER to exit]: ")
   if isNil(pattern) or pattern.len == 0: quit(0)
   if optReplace in options:
@@ -314,18 +314,18 @@ if optStdin in options:
 
 if pattern.len == 0:
   writeHelp()
-else: 
-  if filenames.len == 0: 
+else:
+  if filenames.len == 0:
     filenames.add(os.getCurrentDir())
-  if optRegex notin options: 
+  if optRegex notin options:
     if optWord in options:
       pattern = r"(^ / !\letter)(" & pattern & r") !\letter"
-    if optIgnoreStyle in options: 
+    if optIgnoreStyle in options:
       pattern = "\\y " & pattern
     elif optIgnoreCase in options:
       pattern = "\\i " & pattern
   else:
-    if optIgnoreStyle in options: 
+    if optIgnoreStyle in options:
       pattern = styleInsensitive(pattern)
     if optWord in options:
       pattern = r"\b (:?" & pattern & r") \b"
diff --git a/tools/nimweb.nim b/tools/nimweb.nim
index a7301195e..852b43092 100644
--- a/tools/nimweb.nim
+++ b/tools/nimweb.nim
@@ -126,10 +126,10 @@ proc parseCmdLine(c: var TConfigData) =
       break
     of cmdLongOption, cmdShortOption:
       case normalize(key)
-      of "help", "h": 
+      of "help", "h":
         stdout.write(usage)
         quit(0)
-      of "version", "v": 
+      of "version", "v":
         stdout.write(version & "\n")
         quit(0)
       of "o", "output": c.outdir = val
@@ -431,7 +431,7 @@ proc buildWebsite(c: var TConfigData) =
     if not existsDir("web/upload"):
       createDir("web/upload")
     if open(f, outfile, fmWrite):
-      writeln(f, generateHTMLPage(c, file, content, rss))
+      writeLine(f, generateHTMLPage(c, file, content, rss))
       close(f)
     else:
       quit("[Error] cannot write file: " & outfile)