summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rwxr-xr-x[-rw-r--r--]contributors.txt3
-rwxr-xr-xdoc/manual.txt33
-rwxr-xr-xdoc/theindex.txt961
-rwxr-xr-xkoch.nim16
-rwxr-xr-xlib/pure/cgi.nim2
-rwxr-xr-xnim/evals.pas1
-rwxr-xr-x[-rw-r--r--]rod/ast.nim7
-rwxr-xr-x[-rw-r--r--]rod/ccgexprs.nim0
-rwxr-xr-x[-rw-r--r--]rod/cgen.nim0
-rwxr-xr-x[-rw-r--r--]rod/condsyms.nim0
-rwxr-xr-x[-rw-r--r--]rod/evals.nim209
-rwxr-xr-xrod/nimrod.ini1
-rwxr-xr-x[-rw-r--r--]rod/nimrod.nim0
-rwxr-xr-xrod/nversion.nim2
-rwxr-xr-x[-rw-r--r--]rod/options.nim0
-rwxr-xr-x[-rw-r--r--]rod/pbraces.nim0
-rwxr-xr-x[-rw-r--r--]rod/pnimsyn.nim0
-rwxr-xr-x[-rw-r--r--]rod/pragmas.nim0
-rwxr-xr-x[-rw-r--r--]rod/rodread.nim0
-rwxr-xr-x[-rw-r--r--]rod/rodwrite.nim0
-rwxr-xr-x[-rw-r--r--]rod/sem.nim0
-rwxr-xr-x[-rw-r--r--]rod/semdata.nim0
-rwxr-xr-x[-rw-r--r--]rod/semfold.nim0
-rwxr-xr-xrod/semstmts.nim223
-rwxr-xr-x[-rw-r--r--]rod/transf.nim0
-rwxr-xr-x[-rw-r--r--]rod/trees.nim0
-rwxr-xr-xtests/tclosure.nim4
-rwxr-xr-xtests/tconsteval.nim4
-rwxr-xr-xtests/tenuminh.nim10
-rwxr-xr-xtests/thallo.nim6
-rwxr-xr-xtests/titer5.nim2
-rwxr-xr-xweb/download.txt4
-rwxr-xr-xweb/news.txt9
-rwxr-xr-xweb/ticker.txt5
34 files changed, 737 insertions, 765 deletions
diff --git a/contributors.txt b/contributors.txt
index 2a2b57571..aa891cbc4 100644..100755
--- a/contributors.txt
+++ b/contributors.txt
@@ -1,4 +1,5 @@
 Mario Ray Mahardhika
 Philippe Lhoste
-Alexander R¿dseth
+Alexander Rødseth
 Jonathan Plona
+
diff --git a/doc/manual.txt b/doc/manual.txt
index 391f319a1..0db2ae22a 100755
--- a/doc/manual.txt
+++ b/doc/manual.txt
@@ -1111,7 +1111,7 @@ algorithm (in pseudo-code) determines type equality:
 
 .. code-block:: nimrod
   proc typeEqualsAux(a, b: PType,
-                     s: var set[tuple[PType, PType]]): bool =
+                     s: var set[PType * PType]): bool =
     if (a,b) in s: return true
     incl(s, (a,b))
     if a.kind == b.kind:
@@ -1140,7 +1140,7 @@ algorithm (in pseudo-code) determines type equality:
                  a.callingConvention == b.callingConvention
 
   proc typeEquals(a, b: PType): bool =
-    var s: set[tuple[PType, PType]] = {}
+    var s: set[PType * PType] = {}
     result = typeEqualsAux(a, b, s)
 
 Since types are graphs which can have cycles, the above algorithm needs an
@@ -1216,8 +1216,8 @@ algorithm returns true:
     return false
     
 
-Assignment compability
-~~~~~~~~~~~~~~~~~~~~~~
+Assignment compatibility
+~~~~~~~~~~~~~~~~~~~~~~~~
 
 An expression ``b`` can be assigned to an expression ``a`` iff ``a`` is an
 `l-value` and ``isImplicitlyConvertible(b.typ, a.typ)`` holds.
@@ -1727,23 +1727,26 @@ Procedures
 What most programming languages call `methods`:idx: or `functions`:idx: are
 called `procedures`:idx: in Nimrod (which is the correct terminology). A
 procedure declaration defines an identifier and associates it with a block
-of code. A procedure may call itself recursively. The syntax is::
+of code. 
+A procedure may call itself recursively. A parameter may be given a default
+value that is used if the caller does not provide a value for this parameter.
+The syntax is::
 
-  param ::= symbol (comma symbol)* [comma] ':' typeDesc
-  paramList ::= ['(' [param (comma param)* [comma]] ')'] [':' typeDesc]
+  param ::= symbol (comma symbol)* (':' typeDesc ['=' expr] | '=' expr)
+  paramList ::= ['(' [param (comma param)*] optPar ')'] [':' typeDesc]
 
-  genericParam ::= symbol [':' typeDesc]
-  genericParams ::= '[' genericParam (comma genericParam)* [comma] ']'
+  genericParam ::= symbol [':' typeDesc] ['=' expr]
+  genericParams ::= '[' genericParam (comma genericParam)* optPar ']'
+
+  routineDecl := symbol ['*'] [genericParams] paramList [pragma] ['=' stmt]
+  procDecl ::= 'proc' routineDecl
 
-  procDecl ::= 'proc' symbol ['*'] [genericParams] paramList [pragma]
-               ['=' stmt]
 
 If the ``= stmt`` part is missing, it is a `forward`:idx: declaration. If
-the proc returns a value, the procedure body can access an implicit declared
+the proc returns a value, the procedure body can access an implicitly declared
 variable named `result`:idx: that represents the return value. Procs can be
 overloaded. The overloading resolution algorithm tries to find the proc that is
-the best match for the arguments. A parameter may be given a default value that
-is used if the caller does not provide a value for this parameter. Example:
+the best match for the arguments. Example:
 
 .. code-block:: nimrod
 
@@ -1785,7 +1788,7 @@ type `var`).
 
 Operators with one parameter are prefix operators, operators with two
 parameters are infix operators. (However, the parser distinguishes these from
-the operators position within an expression.) There is no way to declare
+the operator's position within an expression.) There is no way to declare
 postfix operators: all postfix operators are built-in and handled by the
 grammar explicitly.
 
diff --git a/doc/theindex.txt b/doc/theindex.txt
index e9eb5080f..7be008d6a 100755
--- a/doc/theindex.txt
+++ b/doc/theindex.txt
@@ -11,17 +11,17 @@ Index
      * `macros.html#114 <macros.html#114>`_
 
    `!=`:idx:
-     `system.html#347 <system.html#347>`_
+     `system.html#353 <system.html#353>`_
 
    `$`:idx:
-     * `system.html#419 <system.html#419>`_
-     * `system.html#420 <system.html#420>`_
-     * `system.html#421 <system.html#421>`_
-     * `system.html#422 <system.html#422>`_
-     * `system.html#423 <system.html#423>`_
-     * `system.html#424 <system.html#424>`_
      * `system.html#425 <system.html#425>`_
      * `system.html#426 <system.html#426>`_
+     * `system.html#427 <system.html#427>`_
+     * `system.html#428 <system.html#428>`_
+     * `system.html#429 <system.html#429>`_
+     * `system.html#430 <system.html#430>`_
+     * `system.html#431 <system.html#431>`_
+     * `system.html#432 <system.html#432>`_
      * `times.html#109 <times.html#109>`_
      * `times.html#110 <times.html#110>`_
      * `pegs.html#133 <pegs.html#133>`_
@@ -33,181 +33,181 @@ Index
      * `strtabs.html#112 <strtabs.html#112>`_
 
    `%%`:idx:
-     * `system.html#292 <system.html#292>`_
-     * `system.html#293 <system.html#293>`_
-     * `system.html#294 <system.html#294>`_
-     * `system.html#295 <system.html#295>`_
-     * `system.html#296 <system.html#296>`_
+     * `system.html#298 <system.html#298>`_
+     * `system.html#299 <system.html#299>`_
+     * `system.html#300 <system.html#300>`_
+     * `system.html#301 <system.html#301>`_
+     * `system.html#302 <system.html#302>`_
 
    `&`:idx:
-     * `system.html#361 <system.html#361>`_
-     * `system.html#362 <system.html#362>`_
-     * `system.html#363 <system.html#363>`_
-     * `system.html#364 <system.html#364>`_
-     * `system.html#462 <system.html#462>`_
-     * `system.html#463 <system.html#463>`_
-     * `system.html#464 <system.html#464>`_
+     * `system.html#367 <system.html#367>`_
+     * `system.html#368 <system.html#368>`_
+     * `system.html#369 <system.html#369>`_
+     * `system.html#370 <system.html#370>`_
+     * `system.html#468 <system.html#468>`_
+     * `system.html#469 <system.html#469>`_
+     * `system.html#470 <system.html#470>`_
      * `pegs.html#114 <pegs.html#114>`_
 
    `*`:idx:
-     * `system.html#212 <system.html#212>`_
-     * `system.html#213 <system.html#213>`_
-     * `system.html#214 <system.html#214>`_
-     * `system.html#215 <system.html#215>`_
-     * `system.html#216 <system.html#216>`_
-     * `system.html#311 <system.html#311>`_
-     * `system.html#319 <system.html#319>`_
+     * `system.html#218 <system.html#218>`_
+     * `system.html#219 <system.html#219>`_
+     * `system.html#220 <system.html#220>`_
+     * `system.html#221 <system.html#221>`_
+     * `system.html#222 <system.html#222>`_
+     * `system.html#317 <system.html#317>`_
+     * `system.html#325 <system.html#325>`_
      * `complex.html#107 <complex.html#107>`_
      * `pegs.html#111 <pegs.html#111>`_
 
    `*%`:idx:
-     * `system.html#282 <system.html#282>`_
-     * `system.html#283 <system.html#283>`_
-     * `system.html#284 <system.html#284>`_
-     * `system.html#285 <system.html#285>`_
-     * `system.html#286 <system.html#286>`_
+     * `system.html#288 <system.html#288>`_
+     * `system.html#289 <system.html#289>`_
+     * `system.html#290 <system.html#290>`_
+     * `system.html#291 <system.html#291>`_
+     * `system.html#292 <system.html#292>`_
 
    `+`:idx:
-     * `system.html#187 <system.html#187>`_
-     * `system.html#188 <system.html#188>`_
-     * `system.html#189 <system.html#189>`_
-     * `system.html#190 <system.html#190>`_
-     * `system.html#191 <system.html#191>`_
-     * `system.html#202 <system.html#202>`_
-     * `system.html#203 <system.html#203>`_
-     * `system.html#204 <system.html#204>`_
-     * `system.html#205 <system.html#205>`_
-     * `system.html#206 <system.html#206>`_
-     * `system.html#307 <system.html#307>`_
-     * `system.html#309 <system.html#309>`_
-     * `system.html#320 <system.html#320>`_
-     * `complex.html#103 <complex.html#103>`_
-     * `pegs.html#113 <pegs.html#113>`_
-
-   `+%`:idx:
-     * `system.html#272 <system.html#272>`_
-     * `system.html#273 <system.html#273>`_
-     * `system.html#274 <system.html#274>`_
-     * `system.html#275 <system.html#275>`_
-     * `system.html#276 <system.html#276>`_
-
-   `-`:idx:
-     * `system.html#192 <system.html#192>`_
      * `system.html#193 <system.html#193>`_
      * `system.html#194 <system.html#194>`_
      * `system.html#195 <system.html#195>`_
      * `system.html#196 <system.html#196>`_
-     * `system.html#207 <system.html#207>`_
+     * `system.html#197 <system.html#197>`_
      * `system.html#208 <system.html#208>`_
      * `system.html#209 <system.html#209>`_
      * `system.html#210 <system.html#210>`_
      * `system.html#211 <system.html#211>`_
-     * `system.html#308 <system.html#308>`_
-     * `system.html#310 <system.html#310>`_
-     * `system.html#321 <system.html#321>`_
-     * `complex.html#104 <complex.html#104>`_
-     * `complex.html#105 <complex.html#105>`_
-     * `times.html#113 <times.html#113>`_
+     * `system.html#212 <system.html#212>`_
+     * `system.html#313 <system.html#313>`_
+     * `system.html#315 <system.html#315>`_
+     * `system.html#326 <system.html#326>`_
+     * `complex.html#103 <complex.html#103>`_
+     * `pegs.html#113 <pegs.html#113>`_
 
-   `-%`:idx:
-     * `system.html#277 <system.html#277>`_
+   `+%`:idx:
      * `system.html#278 <system.html#278>`_
      * `system.html#279 <system.html#279>`_
      * `system.html#280 <system.html#280>`_
      * `system.html#281 <system.html#281>`_
+     * `system.html#282 <system.html#282>`_
+
+   `-`:idx:
+     * `system.html#198 <system.html#198>`_
+     * `system.html#199 <system.html#199>`_
+     * `system.html#200 <system.html#200>`_
+     * `system.html#201 <system.html#201>`_
+     * `system.html#202 <system.html#202>`_
+     * `system.html#213 <system.html#213>`_
+     * `system.html#214 <system.html#214>`_
+     * `system.html#215 <system.html#215>`_
+     * `system.html#216 <system.html#216>`_
+     * `system.html#217 <system.html#217>`_
+     * `system.html#314 <system.html#314>`_
+     * `system.html#316 <system.html#316>`_
+     * `system.html#327 <system.html#327>`_
+     * `complex.html#104 <complex.html#104>`_
+     * `complex.html#105 <complex.html#105>`_
+     * `times.html#113 <times.html#113>`_
+
+   `-%`:idx:
+     * `system.html#283 <system.html#283>`_
+     * `system.html#284 <system.html#284>`_
+     * `system.html#285 <system.html#285>`_
+     * `system.html#286 <system.html#286>`_
+     * `system.html#287 <system.html#287>`_
 
    `-+-`:idx:
-     `system.html#322 <system.html#322>`_
+     `system.html#328 <system.html#328>`_
 
    `/`:idx:
-     * `system.html#312 <system.html#312>`_
+     * `system.html#318 <system.html#318>`_
      * `os.html#124 <os.html#124>`_
      * `complex.html#106 <complex.html#106>`_
      * `pegs.html#108 <pegs.html#108>`_
 
    `/%`:idx:
-     * `system.html#287 <system.html#287>`_
-     * `system.html#288 <system.html#288>`_
-     * `system.html#289 <system.html#289>`_
-     * `system.html#290 <system.html#290>`_
-     * `system.html#291 <system.html#291>`_
+     * `system.html#293 <system.html#293>`_
+     * `system.html#294 <system.html#294>`_
+     * `system.html#295 <system.html#295>`_
+     * `system.html#296 <system.html#296>`_
+     * `system.html#297 <system.html#297>`_
 
    `/../`:idx:
      `os.html#128 <os.html#128>`_
 
    `<`:idx:
-     * `system.html#262 <system.html#262>`_
+     * `system.html#268 <system.html#268>`_
+     * `system.html#269 <system.html#269>`_
+     * `system.html#270 <system.html#270>`_
+     * `system.html#271 <system.html#271>`_
+     * `system.html#272 <system.html#272>`_
+     * `system.html#321 <system.html#321>`_
+     * `system.html#345 <system.html#345>`_
+     * `system.html#346 <system.html#346>`_
+     * `system.html#347 <system.html#347>`_
+     * `system.html#348 <system.html#348>`_
+     * `system.html#349 <system.html#349>`_
+     * `system.html#350 <system.html#350>`_
+     * `system.html#351 <system.html#351>`_
+     * `system.html#352 <system.html#352>`_
+     * `times.html#114 <times.html#114>`_
+
+   `<%`:idx:
+     * `system.html#308 <system.html#308>`_
+     * `system.html#309 <system.html#309>`_
+     * `system.html#310 <system.html#310>`_
+     * `system.html#311 <system.html#311>`_
+     * `system.html#312 <system.html#312>`_
+
+   `<%`:idx:
+     `unicode.html#104 <unicode.html#104>`_
+
+   `<=`:idx:
      * `system.html#263 <system.html#263>`_
      * `system.html#264 <system.html#264>`_
      * `system.html#265 <system.html#265>`_
      * `system.html#266 <system.html#266>`_
-     * `system.html#315 <system.html#315>`_
+     * `system.html#267 <system.html#267>`_
+     * `system.html#320 <system.html#320>`_
+     * `system.html#338 <system.html#338>`_
      * `system.html#339 <system.html#339>`_
      * `system.html#340 <system.html#340>`_
      * `system.html#341 <system.html#341>`_
      * `system.html#342 <system.html#342>`_
      * `system.html#343 <system.html#343>`_
      * `system.html#344 <system.html#344>`_
-     * `system.html#345 <system.html#345>`_
-     * `system.html#346 <system.html#346>`_
-     * `times.html#114 <times.html#114>`_
 
-   `<%`:idx:
-     * `system.html#302 <system.html#302>`_
+   `<=`:idx:
+     `times.html#115 <times.html#115>`_
+
+   `<=%`:idx:
+     `unicode.html#103 <unicode.html#103>`_
+
+   `<=%`:idx:
      * `system.html#303 <system.html#303>`_
      * `system.html#304 <system.html#304>`_
      * `system.html#305 <system.html#305>`_
      * `system.html#306 <system.html#306>`_
+     * `system.html#307 <system.html#307>`_
 
-   `<%`:idx:
-     `unicode.html#104 <unicode.html#104>`_
-
-   `<=`:idx:
-     * `system.html#257 <system.html#257>`_
+   `==`:idx:
+     * `md5.html#107 <md5.html#107>`_
      * `system.html#258 <system.html#258>`_
      * `system.html#259 <system.html#259>`_
      * `system.html#260 <system.html#260>`_
      * `system.html#261 <system.html#261>`_
-     * `system.html#314 <system.html#314>`_
+     * `system.html#262 <system.html#262>`_
+     * `system.html#319 <system.html#319>`_
+     * `system.html#329 <system.html#329>`_
+     * `system.html#330 <system.html#330>`_
+     * `system.html#331 <system.html#331>`_
      * `system.html#332 <system.html#332>`_
      * `system.html#333 <system.html#333>`_
      * `system.html#334 <system.html#334>`_
      * `system.html#335 <system.html#335>`_
      * `system.html#336 <system.html#336>`_
      * `system.html#337 <system.html#337>`_
-     * `system.html#338 <system.html#338>`_
-
-   `<=`:idx:
-     `times.html#115 <times.html#115>`_
-
-   `<=%`:idx:
-     `unicode.html#103 <unicode.html#103>`_
-
-   `<=%`:idx:
-     * `system.html#297 <system.html#297>`_
-     * `system.html#298 <system.html#298>`_
-     * `system.html#299 <system.html#299>`_
-     * `system.html#300 <system.html#300>`_
-     * `system.html#301 <system.html#301>`_
-
-   `==`:idx:
-     * `md5.html#107 <md5.html#107>`_
-     * `system.html#252 <system.html#252>`_
-     * `system.html#253 <system.html#253>`_
-     * `system.html#254 <system.html#254>`_
-     * `system.html#255 <system.html#255>`_
-     * `system.html#256 <system.html#256>`_
-     * `system.html#313 <system.html#313>`_
-     * `system.html#323 <system.html#323>`_
-     * `system.html#324 <system.html#324>`_
-     * `system.html#325 <system.html#325>`_
-     * `system.html#326 <system.html#326>`_
-     * `system.html#327 <system.html#327>`_
-     * `system.html#328 <system.html#328>`_
-     * `system.html#329 <system.html#329>`_
-     * `system.html#330 <system.html#330>`_
-     * `system.html#331 <system.html#331>`_
-     * `system.html#465 <system.html#465>`_
+     * `system.html#471 <system.html#471>`_
      * `complex.html#102 <complex.html#102>`_
      * `unicode.html#105 <unicode.html#105>`_
      * `macros.html#116 <macros.html#116>`_
@@ -220,22 +220,22 @@ Index
      `pegs.html#140 <pegs.html#140>`_
 
    `>`:idx:
-     `system.html#349 <system.html#349>`_
+     `system.html#355 <system.html#355>`_
 
    `>%`:idx:
-     `system.html#418 <system.html#418>`_
+     `system.html#424 <system.html#424>`_
 
    `>=`:idx:
-     `system.html#348 <system.html#348>`_
+     `system.html#354 <system.html#354>`_
 
    `>=%`:idx:
-     `system.html#417 <system.html#417>`_
+     `system.html#423 <system.html#423>`_
 
    `?`:idx:
      `pegs.html#110 <pegs.html#110>`_
 
    `@`:idx:
-     * `system.html#357 <system.html#357>`_
+     * `system.html#363 <system.html#363>`_
      * `pegs.html#112 <pegs.html#112>`_
 
    `[]`:idx:
@@ -257,16 +257,16 @@ Index
      `xmlgen.html#107 <xmlgen.html#107>`_
 
    `abs`:idx:
-     * `system.html#267 <system.html#267>`_
-     * `system.html#268 <system.html#268>`_
-     * `system.html#269 <system.html#269>`_
-     * `system.html#270 <system.html#270>`_
-     * `system.html#271 <system.html#271>`_
-     * `system.html#316 <system.html#316>`_
+     * `system.html#273 <system.html#273>`_
+     * `system.html#274 <system.html#274>`_
+     * `system.html#275 <system.html#275>`_
+     * `system.html#276 <system.html#276>`_
+     * `system.html#277 <system.html#277>`_
+     * `system.html#322 <system.html#322>`_
      * `complex.html#108 <complex.html#108>`_
 
    `accumulateResult`:idx:
-     `system.html#483 <system.html#483>`_
+     `system.html#490 <system.html#490>`_
 
    `acronym`:idx:
      `xmlgen.html#108 <xmlgen.html#108>`_
@@ -275,11 +275,11 @@ Index
      `nimrodc.html#113 <nimrodc.html#113>`_
 
    `add`:idx:
-     * `system.html#365 <system.html#365>`_
-     * `system.html#366 <system.html#366>`_
-     * `system.html#367 <system.html#367>`_
-     * `system.html#368 <system.html#368>`_
-     * `system.html#369 <system.html#369>`_
+     * `system.html#371 <system.html#371>`_
+     * `system.html#372 <system.html#372>`_
+     * `system.html#373 <system.html#373>`_
+     * `system.html#374 <system.html#374>`_
+     * `system.html#375 <system.html#375>`_
      * `parsesql.html#108 <parsesql.html#108>`_
      * `macros.html#119 <macros.html#119>`_
      * `macros.html#120 <macros.html#120>`_
@@ -296,7 +296,7 @@ Index
      `os.html#137 <os.html#137>`_
 
    `addQuitProc`:idx:
-     `system.html#403 <system.html#403>`_
+     `system.html#409 <system.html#409>`_
 
    `address`:idx:
      `xmlgen.html#109 <xmlgen.html#109>`_
@@ -311,10 +311,10 @@ Index
      `strutils.html#150 <strutils.html#150>`_
 
    `alloc`:idx:
-     `system.html#410 <system.html#410>`_
+     `system.html#416 <system.html#416>`_
 
    `alloc0`:idx:
-     `system.html#411 <system.html#411>`_
+     `system.html#417 <system.html#417>`_
 
    `ALLOC_MAX_BLOCK_TO_DROP`:idx:
      `mysql.html#317 <mysql.html#317>`_
@@ -327,11 +327,11 @@ Index
 
    `and`:idx:
      * `system.html#121 <system.html#121>`_
-     * `system.html#237 <system.html#237>`_
-     * `system.html#238 <system.html#238>`_
-     * `system.html#239 <system.html#239>`_
-     * `system.html#240 <system.html#240>`_
-     * `system.html#241 <system.html#241>`_
+     * `system.html#243 <system.html#243>`_
+     * `system.html#244 <system.html#244>`_
+     * `system.html#245 <system.html#245>`_
+     * `system.html#246 <system.html#246>`_
+     * `system.html#247 <system.html#247>`_
 
    `any`:idx:
      `pegs.html#117 <pegs.html#117>`_
@@ -377,13 +377,13 @@ Index
      `tut2.html#106 <tut2.html#106>`_
 
    `Arrays`:idx:
-     `manual.html#153 <manual.html#153>`_
+     `manual.html#159 <manual.html#159>`_
 
    `assembler`:idx:
-     `manual.html#199 <manual.html#199>`_
+     `manual.html#205 <manual.html#205>`_
 
    `assert`:idx:
-     `system.html#415 <system.html#415>`_
+     `system.html#421 <system.html#421>`_
 
    `AST`:idx:
      `macros.html#101 <macros.html#101>`_
@@ -415,16 +415,16 @@ Index
      `xmlgen.html#112 <xmlgen.html#112>`_
 
    `base type`:idx:
-     `manual.html#174 <manual.html#174>`_
+     `manual.html#180 <manual.html#180>`_
 
    `big`:idx:
      `xmlgen.html#113 <xmlgen.html#113>`_
 
    `BiggestFloat`:idx:
-     `system.html#373 <system.html#373>`_
+     `system.html#379 <system.html#379>`_
 
    `BiggestInt`:idx:
-     `system.html#372 <system.html#372>`_
+     `system.html#378 <system.html#378>`_
 
    `BINARY_FLAG`:idx:
      `mysql.html#131 <mysql.html#131>`_
@@ -439,7 +439,7 @@ Index
      `mysql.html#128 <mysql.html#128>`_
 
    `block`:idx:
-     `manual.html#195 <manual.html#195>`_
+     `manual.html#201 <manual.html#201>`_
 
    `blockquote`:idx:
      `xmlgen.html#114 <xmlgen.html#114>`_
@@ -451,14 +451,14 @@ Index
      `system.html#109 <system.html#109>`_
 
    `boolean`:idx:
-     * `manual.html#147 <manual.html#147>`_
+     * `manual.html#153 <manual.html#153>`_
      * `tut1.html#107 <tut1.html#107>`_
 
    `br`:idx:
      `xmlgen.html#116 <xmlgen.html#116>`_
 
    `break`:idx:
-     `manual.html#196 <manual.html#196>`_
+     `manual.html#202 <manual.html#202>`_
 
    `breakpoint`:idx:
      `endb.html#103 <endb.html#103>`_
@@ -470,7 +470,7 @@ Index
      `system.html#133 <system.html#133>`_
 
    `calling conventions`:idx:
-     `manual.html#164 <manual.html#164>`_
+     `manual.html#170 <manual.html#170>`_
 
    `capitalize`:idx:
      `strutils.html#117 <strutils.html#117>`_
@@ -482,25 +482,25 @@ Index
      `pegs.html#122 <pegs.html#122>`_
 
    `card`:idx:
-     `system.html#175 <system.html#175>`_
+     `system.html#181 <system.html#181>`_
 
    `carriage return`:idx:
      `manual.html#122 <manual.html#122>`_
 
    `case`:idx:
-     `manual.html#184 <manual.html#184>`_
+     `manual.html#190 <manual.html#190>`_
 
    `cchar`:idx:
-     `system.html#374 <system.html#374>`_
+     `system.html#380 <system.html#380>`_
 
    `cdecl`:idx:
-     `manual.html#166 <manual.html#166>`_
+     `manual.html#172 <manual.html#172>`_
 
    `cdouble`:idx:
-     `system.html#381 <system.html#381>`_
+     `system.html#387 <system.html#387>`_
 
    `cfloat`:idx:
-     `system.html#380 <system.html#380>`_
+     `system.html#386 <system.html#386>`_
 
    `cgiError`:idx:
      `cgi.html#106 <cgi.html#106>`_
@@ -512,7 +512,7 @@ Index
      `system.html#110 <system.html#110>`_
 
    `character type`:idx:
-     `manual.html#148 <manual.html#148>`_
+     `manual.html#154 <manual.html#154>`_
 
    `character with decimal value d`:idx:
      `manual.html#130 <manual.html#130>`_
@@ -548,10 +548,10 @@ Index
      `mysql.html#273 <mysql.html#273>`_
 
    `chr`:idx:
-     `system.html#177 <system.html#177>`_
+     `system.html#183 <system.html#183>`_
 
    `cint`:idx:
-     `system.html#377 <system.html#377>`_
+     `system.html#383 <system.html#383>`_
 
    `cite`:idx:
      `xmlgen.html#119 <xmlgen.html#119>`_
@@ -626,13 +626,16 @@ Index
      `mysql.html#169 <mysql.html#169>`_
 
    `clong`:idx:
-     `system.html#378 <system.html#378>`_
+     `system.html#384 <system.html#384>`_
 
    `clongdouble`:idx:
-     `system.html#382 <system.html#382>`_
+     `system.html#388 <system.html#388>`_
 
    `clonglong`:idx:
-     `system.html#379 <system.html#379>`_
+     `system.html#385 <system.html#385>`_
+
+   `Close`:idx:
+     `system.html#507 <system.html#507>`_
 
    `close`:idx:
      * `lexbase.html#105 <lexbase.html#105>`_
@@ -641,21 +644,18 @@ Index
      * `parsecsv.html#109 <parsecsv.html#109>`_
      * `zipfiles.html#103 <zipfiles.html#103>`_
 
-   `Close`:idx:
-     `system.html#500 <system.html#500>`_
-
    `CloseFile`:idx:
-     `system.html#499 <system.html#499>`_
+     `system.html#506 <system.html#506>`_
 
    `closure`:idx:
-     `manual.html#171 <manual.html#171>`_
+     `manual.html#177 <manual.html#177>`_
 
    `cmdLineRest`:idx:
      `parseopt.html#106 <parseopt.html#106>`_
 
    `cmp`:idx:
-     * `system.html#355 <system.html#355>`_
-     * `system.html#356 <system.html#356>`_
+     * `system.html#361 <system.html#361>`_
+     * `system.html#362 <system.html#362>`_
 
    `cmpIgnoreCase`:idx:
      `strutils.html#135 <strutils.html#135>`_
@@ -696,19 +696,19 @@ Index
      `mysql.html#266 <mysql.html#266>`_
 
    `CompileDate`:idx:
-     `system.html#390 <system.html#390>`_
+     `system.html#396 <system.html#396>`_
 
    `compileTime`:idx:
-     `manual.html#229 <manual.html#229>`_
+     `manual.html#235 <manual.html#235>`_
 
    `CompileTime`:idx:
-     `system.html#391 <system.html#391>`_
+     `system.html#397 <system.html#397>`_
 
    `complex statements`:idx:
-     `manual.html#178 <manual.html#178>`_
+     `manual.html#184 <manual.html#184>`_
 
    `const`:idx:
-     `manual.html#182 <manual.html#182>`_
+     `manual.html#188 <manual.html#188>`_
 
    `constant expressions`:idx:
      `manual.html#108 <manual.html#108>`_
@@ -718,7 +718,8 @@ Index
      * `tut1.html#104 <tut1.html#104>`_
 
    `contains`:idx:
-     * `system.html#350 <system.html#350>`_
+     * `system.html#356 <system.html#356>`_
+     * `system.html#473 <system.html#473>`_
      * `strutils.html#137 <strutils.html#137>`_
      * `strutils.html#138 <strutils.html#138>`_
      * `strutils.html#139 <strutils.html#139>`_
@@ -726,17 +727,17 @@ Index
      * `pegs.html#142 <pegs.html#142>`_
 
    `continue`:idx:
-     `manual.html#198 <manual.html#198>`_
+     `manual.html#204 <manual.html#204>`_
 
    `copy`:idx:
-     * `system.html#404 <system.html#404>`_
-     * `system.html#405 <system.html#405>`_
+     * `system.html#410 <system.html#410>`_
+     * `system.html#411 <system.html#411>`_
 
    `copyFile`:idx:
      `os.html#142 <os.html#142>`_
 
    `copyMem`:idx:
-     `system.html#407 <system.html#407>`_
+     `system.html#413 <system.html#413>`_
 
    `copyNimNode`:idx:
      `macros.html#136 <macros.html#136>`_
@@ -757,16 +758,16 @@ Index
      `math.html#109 <math.html#109>`_
 
    `countdown`:idx:
-     `system.html#436 <system.html#436>`_
+     `system.html#442 <system.html#442>`_
 
    `countProcessors`:idx:
      `osproc.html#117 <osproc.html#117>`_
 
    `countup`:idx:
-     `system.html#437 <system.html#437>`_
+     `system.html#443 <system.html#443>`_
 
    `cpuEndian`:idx:
-     `system.html#396 <system.html#396>`_
+     `system.html#402 <system.html#402>`_
 
    `createDir`:idx:
      * `os.html#159 <os.html#159>`_
@@ -776,16 +777,16 @@ Index
      `mysql.html#269 <mysql.html#269>`_
 
    `cschar`:idx:
-     `system.html#375 <system.html#375>`_
+     `system.html#381 <system.html#381>`_
 
    `cshort`:idx:
-     `system.html#376 <system.html#376>`_
+     `system.html#382 <system.html#382>`_
 
    `cstring`:idx:
      `system.html#112 <system.html#112>`_
 
    `cstringArray`:idx:
-     `system.html#383 <system.html#383>`_
+     `system.html#389 <system.html#389>`_
 
    `CSV`:idx:
      `parsecsv.html#101 <parsecsv.html#101>`_
@@ -1157,25 +1158,25 @@ Index
      `terminal.html#104 <terminal.html#104>`_
 
    `dangling else problem`:idx:
-     `manual.html#179 <manual.html#179>`_
+     `manual.html#185 <manual.html#185>`_
 
    `dbgLineHook`:idx:
-     `system.html#432 <system.html#432>`_
+     `system.html#438 <system.html#438>`_
 
    `dd`:idx:
      `xmlgen.html#123 <xmlgen.html#123>`_
 
-   `dead_code_elim`:idx:
+   `deadCodeElim`:idx:
      `nimrodc.html#114 <nimrodc.html#114>`_
 
    `dealloc`:idx:
-     `system.html#413 <system.html#413>`_
+     `system.html#419 <system.html#419>`_
 
    `debugger`:idx:
      `nimrodc.html#110 <nimrodc.html#110>`_
 
    `dec`:idx:
-     `system.html#166 <system.html#166>`_
+     `system.html#172 <system.html#172>`_
 
    `decodeData`:idx:
      `cgi.html#107 <cgi.html#107>`_
@@ -1200,31 +1201,31 @@ Index
    `dfn`:idx:
      `xmlgen.html#125 <xmlgen.html#125>`_
 
-   `digits`:idx:
-     `pegs.html#126 <pegs.html#126>`_
-
    `Digits`:idx:
      `strutils.html#104 <strutils.html#104>`_
 
+   `digits`:idx:
+     `pegs.html#126 <pegs.html#126>`_
+
    `DirSep`:idx:
      `os.html#103 <os.html#103>`_
 
    `discard`:idx:
-     `manual.html#180 <manual.html#180>`_
+     `manual.html#186 <manual.html#186>`_
 
    `div`:idx:
-     * `system.html#217 <system.html#217>`_
-     * `system.html#218 <system.html#218>`_
-     * `system.html#219 <system.html#219>`_
-     * `system.html#220 <system.html#220>`_
-     * `system.html#221 <system.html#221>`_
+     * `system.html#223 <system.html#223>`_
+     * `system.html#224 <system.html#224>`_
+     * `system.html#225 <system.html#225>`_
+     * `system.html#226 <system.html#226>`_
+     * `system.html#227 <system.html#227>`_
      * `xmlgen.html#126 <xmlgen.html#126>`_
 
    `dl`:idx:
      `xmlgen.html#127 <xmlgen.html#127>`_
 
    `domain specific languages`:idx:
-     `manual.html#216 <manual.html#216>`_
+     `manual.html#222 <manual.html#222>`_
 
    `dt`:idx:
      `xmlgen.html#128 <xmlgen.html#128>`_
@@ -1245,7 +1246,7 @@ Index
      `system.html#149 <system.html#149>`_
 
    `each`:idx:
-     `system.html#468 <system.html#468>`_
+     `system.html#475 <system.html#475>`_
 
    `EArithmetic`:idx:
      `system.html#146 <system.html#146>`_
@@ -1263,7 +1264,7 @@ Index
      `cgi.html#104 <cgi.html#104>`_
 
    `echo`:idx:
-     `system.html#484 <system.html#484>`_
+     `system.html#491 <system.html#491>`_
 
    `EControlC`:idx:
      `system.html#151 <system.html#151>`_
@@ -1274,6 +1275,29 @@ Index
    `EDivByZero`:idx:
      `system.html#147 <system.html#147>`_
 
+   `EFloatDivByZero`:idx:
+     * `manual.html#146 <manual.html#146>`_
+     * `system.html#163 <system.html#163>`_
+
+   `EFloatInexact`:idx:
+     * `manual.html#149 <manual.html#149>`_
+     * `system.html#166 <system.html#166>`_
+
+   `EFloatingPoint`:idx:
+     * `manual.html#150 <manual.html#150>`_
+     * `system.html#161 <system.html#161>`_
+
+   `EFloatInvalidOp`:idx:
+     `system.html#162 <system.html#162>`_
+
+   `EFloatOverflow`:idx:
+     * `manual.html#147 <manual.html#147>`_
+     * `system.html#164 <system.html#164>`_
+
+   `EFloatUnderflow`:idx:
+     * `manual.html#148 <manual.html#148>`_
+     * `system.html#165 <system.html#165>`_
+
    `EInvalidCsv`:idx:
      `parsecsv.html#105 <parsecsv.html#105>`_
 
@@ -1320,7 +1344,7 @@ Index
      `endb.html#102 <endb.html#102>`_
 
    `EndOfFile`:idx:
-     * `system.html#501 <system.html#501>`_
+     * `system.html#508 <system.html#508>`_
      * `lexbase.html#101 <lexbase.html#101>`_
 
    `endsWith`:idx:
@@ -1328,7 +1352,7 @@ Index
      * `pegs.html#144 <pegs.html#144>`_
 
    `ENoExceptionToReraise`:idx:
-     * `manual.html#187 <manual.html#187>`_
+     * `manual.html#193 <manual.html#193>`_
      * `system.html#158 <system.html#158>`_
 
    `entityName`:idx:
@@ -1341,7 +1365,7 @@ Index
      `tut1.html#113 <tut1.html#113>`_
 
    `Enumeration`:idx:
-     `manual.html#149 <manual.html#149>`_
+     `manual.html#155 <manual.html#155>`_
 
    `enum_field_types`:idx:
      `mysql.html#202 <mysql.html#202>`_
@@ -1371,7 +1395,6 @@ Index
      `system.html#153 <system.html#153>`_
 
    `EOutOfRange`:idx:
-     * `manual.html#146 <manual.html#146>`_
      * `tut1.html#112 <tut1.html#112>`_
      * `system.html#156 <system.html#156>`_
 
@@ -1379,7 +1402,7 @@ Index
      `system.html#148 <system.html#148>`_
 
    `equalMem`:idx:
-     `system.html#409 <system.html#409>`_
+     `system.html#415 <system.html#415>`_
 
    `EraseLine`:idx:
      `terminal.html#108 <terminal.html#108>`_
@@ -1391,8 +1414,8 @@ Index
      `system.html#145 <system.html#145>`_
 
    `error`:idx:
-     * `manual.html#226 <manual.html#226>`_
-     * `manual.html#230 <manual.html#230>`_
+     * `manual.html#232 <manual.html#232>`_
+     * `manual.html#237 <manual.html#237>`_
      * `macros.html#138 <macros.html#138>`_
 
    `errorMsg`:idx:
@@ -1427,16 +1450,16 @@ Index
      `xmlgen.html#104 <xmlgen.html#104>`_
 
    `except`:idx:
-     `manual.html#190 <manual.html#190>`_
+     `manual.html#196 <manual.html#196>`_
 
    `exception handlers`:idx:
-     `manual.html#189 <manual.html#189>`_
+     `manual.html#195 <manual.html#195>`_
 
    `exceptions`:idx:
      `tut2.html#107 <tut2.html#107>`_
 
    `excl`:idx:
-     `system.html#174 <system.html#174>`_
+     `system.html#180 <system.html#180>`_
 
    `exclFilePermissions`:idx:
      `os.html#165 <os.html#165>`_
@@ -1465,6 +1488,9 @@ Index
    `ExeExt`:idx:
      `os.html#107 <os.html#107>`_
 
+   `existsCookie`:idx:
+     `cgi.html#146 <cgi.html#146>`_
+
    `existsDir`:idx:
      `os.html#115 <os.html#115>`_
 
@@ -1517,13 +1543,13 @@ Index
      `math.html#106 <math.html#106>`_
 
    `fastcall`:idx:
-     `manual.html#169 <manual.html#169>`_
+     `manual.html#175 <manual.html#175>`_
 
    `fastRuneAt`:idx:
      `unicode.html#108 <unicode.html#108>`_
 
    `fatal`:idx:
-     `manual.html#231 <manual.html#231>`_
+     `manual.html#238 <manual.html#238>`_
 
    `fieldset`:idx:
      `xmlgen.html#130 <xmlgen.html#130>`_
@@ -1613,7 +1639,7 @@ Index
      `mysql.html#218 <mysql.html#218>`_
 
    `fileHandle`:idx:
-     `system.html#525 <system.html#525>`_
+     `system.html#532 <system.html#532>`_
 
    `fileNewer`:idx:
      `os.html#119 <os.html#119>`_
@@ -1628,10 +1654,10 @@ Index
      `os.html#106 <os.html#106>`_
 
    `finally`:idx:
-     `manual.html#191 <manual.html#191>`_
+     `manual.html#197 <manual.html#197>`_
 
    `find`:idx:
-     * `system.html#466 <system.html#466>`_
+     * `system.html#472 <system.html#472>`_
      * `strutils.html#119 <strutils.html#119>`_
      * `strutils.html#120 <strutils.html#120>`_
      * `strutils.html#121 <strutils.html#121>`_
@@ -1649,6 +1675,9 @@ Index
    `float64`:idx:
      `system.html#108 <system.html#108>`_
 
+   `floatChecks`:idx:
+     `manual.html#152 <manual.html#152>`_
+
    `floatVal`:idx:
      `macros.html#124 <macros.html#124>`_
 
@@ -1656,10 +1685,10 @@ Index
      `macros.html#130 <macros.html#130>`_
 
    `FlushFile`:idx:
-     `system.html#503 <system.html#503>`_
+     `system.html#510 <system.html#510>`_
 
    `for`:idx:
-     * `manual.html#208 <manual.html#208>`_
+     * `manual.html#214 <manual.html#214>`_
      * `tut1.html#105 <tut1.html#105>`_
 
    `form`:idx:
@@ -1669,51 +1698,51 @@ Index
      `manual.html#124 <manual.html#124>`_
 
    `forward`:idx:
-     `manual.html#203 <manual.html#203>`_
+     `manual.html#209 <manual.html#209>`_
 
    `frexp`:idx:
      `math.html#120 <math.html#120>`_
 
    `functional`:idx:
-     * `manual.html#163 <manual.html#163>`_
+     * `manual.html#169 <manual.html#169>`_
      * `tut1.html#124 <tut1.html#124>`_
 
    `FUNCTIONPOINT`:idx:
      `libcurl.html#265 <libcurl.html#265>`_
 
    `functions`:idx:
-     `manual.html#201 <manual.html#201>`_
+     `manual.html#207 <manual.html#207>`_
 
    `GC_disable`:idx:
-     `system.html#469 <system.html#469>`_
+     `system.html#476 <system.html#476>`_
 
    `GC_disableMarkAndSweep`:idx:
-     `system.html#475 <system.html#475>`_
+     `system.html#482 <system.html#482>`_
 
    `GC_enable`:idx:
-     `system.html#470 <system.html#470>`_
+     `system.html#477 <system.html#477>`_
 
    `GC_enableMarkAndSweep`:idx:
-     `system.html#474 <system.html#474>`_
+     `system.html#481 <system.html#481>`_
 
    `GC_fullCollect`:idx:
-     `system.html#471 <system.html#471>`_
+     `system.html#478 <system.html#478>`_
 
    `GC_getStatistics`:idx:
-     `system.html#476 <system.html#476>`_
+     `system.html#483 <system.html#483>`_
 
    `GC_ref`:idx:
-     * `system.html#477 <system.html#477>`_
-     * `system.html#478 <system.html#478>`_
-     * `system.html#479 <system.html#479>`_
+     * `system.html#484 <system.html#484>`_
+     * `system.html#485 <system.html#485>`_
+     * `system.html#486 <system.html#486>`_
 
    `GC_setStrategy`:idx:
-     `system.html#473 <system.html#473>`_
+     `system.html#480 <system.html#480>`_
 
    `GC_unref`:idx:
-     * `system.html#480 <system.html#480>`_
-     * `system.html#481 <system.html#481>`_
-     * `system.html#482 <system.html#482>`_
+     * `system.html#487 <system.html#487>`_
+     * `system.html#488 <system.html#488>`_
+     * `system.html#489 <system.html#489>`_
 
    `generalized raw string literal`:idx:
      `manual.html#136 <manual.html#136>`_
@@ -1722,7 +1751,7 @@ Index
      `regexprs.html#102 <regexprs.html#102>`_
 
    `Generics`:idx:
-     * `manual.html#212 <manual.html#212>`_
+     * `manual.html#218 <manual.html#218>`_
      * `tut2.html#109 <tut2.html#109>`_
 
    `getApplicationDir`:idx:
@@ -1750,6 +1779,9 @@ Index
    `getContentType`:idx:
      `cgi.html#111 <cgi.html#111>`_
 
+   `getCookie`:idx:
+     `cgi.html#145 <cgi.html#145>`_
+
    `getCreationTime`:idx:
      `os.html#118 <os.html#118>`_
 
@@ -1757,7 +1789,7 @@ Index
      `os.html#120 <os.html#120>`_
 
    `getCurrentExceptionMsg`:idx:
-     `system.html#428 <system.html#428>`_
+     `system.html#434 <system.html#434>`_
 
    `getCurrentLine`:idx:
      `lexbase.html#106 <lexbase.html#106>`_
@@ -1779,13 +1811,13 @@ Index
      `os.html#162 <os.html#162>`_
 
    `getFilePos`:idx:
-     `system.html#523 <system.html#523>`_
+     `system.html#530 <system.html#530>`_
 
    `getFileSize`:idx:
-     `system.html#515 <system.html#515>`_
+     `system.html#522 <system.html#522>`_
 
    `getFreeMem`:idx:
-     `system.html#434 <system.html#434>`_
+     `system.html#440 <system.html#440>`_
 
    `getGatewayInterface`:idx:
      `cgi.html#113 <cgi.html#113>`_
@@ -1840,7 +1872,7 @@ Index
      `md5.html#106 <md5.html#106>`_
 
    `getOccupiedMem`:idx:
-     `system.html#433 <system.html#433>`_
+     `system.html#439 <system.html#439>`_
 
    `getopt`:idx:
      `parseopt.html#108 <parseopt.html#108>`_
@@ -1855,7 +1887,7 @@ Index
      `cgi.html#125 <cgi.html#125>`_
 
    `getRefcount`:idx:
-     `system.html#427 <system.html#427>`_
+     `system.html#433 <system.html#433>`_
 
    `getRemoteAddr`:idx:
      `cgi.html#126 <cgi.html#126>`_
@@ -1924,7 +1956,7 @@ Index
      `times.html#105 <times.html#105>`_
 
    `getTotalMem`:idx:
-     `system.html#435 <system.html#435>`_
+     `system.html#441 <system.html#441>`_
 
    `get_tty_password`:idx:
      `mysql.html#282 <mysql.html#282>`_
@@ -1991,18 +2023,18 @@ Index
      `system.html#126 <system.html#126>`_
 
    `hint`:idx:
-     * `manual.html#224 <manual.html#224>`_
-     * `manual.html#233 <manual.html#233>`_
+     * `manual.html#230 <manual.html#230>`_
+     * `manual.html#240 <manual.html#240>`_
      * `macros.html#140 <macros.html#140>`_
 
    `hostCPU`:idx:
-     `system.html#398 <system.html#398>`_
+     `system.html#404 <system.html#404>`_
 
    `HOSTNAME_LENGTH`:idx:
      `mysql.html#111 <mysql.html#111>`_
 
    `hostOS`:idx:
-     `system.html#397 <system.html#397>`_
+     `system.html#403 <system.html#403>`_
 
    `hr`:idx:
      `xmlgen.html#140 <xmlgen.html#140>`_
@@ -2045,12 +2077,12 @@ Index
    `ident=`:idx:
      `macros.html#132 <macros.html#132>`_
 
-   `identChars`:idx:
-     `pegs.html#128 <pegs.html#128>`_
-
    `IdentChars`:idx:
      `strutils.html#105 <strutils.html#105>`_
 
+   `identChars`:idx:
+     `pegs.html#128 <pegs.html#128>`_
+
    `identifier`:idx:
      `manual.html#105 <manual.html#105>`_
 
@@ -2064,29 +2096,29 @@ Index
      `strutils.html#106 <strutils.html#106>`_
 
    `if`:idx:
-     `manual.html#183 <manual.html#183>`_
+     `manual.html#189 <manual.html#189>`_
 
    `img`:idx:
      `xmlgen.html#142 <xmlgen.html#142>`_
 
    `implicit block`:idx:
-     `manual.html#210 <manual.html#210>`_
+     `manual.html#216 <manual.html#216>`_
 
    `import`:idx:
-     * `manual.html#220 <manual.html#220>`_
+     * `manual.html#226 <manual.html#226>`_
      * `tut1.html#128 <tut1.html#128>`_
 
    `importc`:idx:
      `nimrodc.html#101 <nimrodc.html#101>`_
 
    `in`:idx:
-     `system.html#351 <system.html#351>`_
+     `system.html#357 <system.html#357>`_
 
    `inc`:idx:
-     `system.html#165 <system.html#165>`_
+     `system.html#171 <system.html#171>`_
 
    `incl`:idx:
-     `system.html#173 <system.html#173>`_
+     `system.html#179 <system.html#179>`_
 
    `inclFilePermissions`:idx:
      `os.html#164 <os.html#164>`_
@@ -2098,10 +2130,13 @@ Index
      `manual.html#113 <manual.html#113>`_
 
    `inf`:idx:
-     `system.html#429 <system.html#429>`_
+     `system.html#435 <system.html#435>`_
+
+   `InfChecks`:idx:
+     `manual.html#151 <manual.html#151>`_
 
    `information hiding`:idx:
-     * `manual.html#218 <manual.html#218>`_
+     * `manual.html#224 <manual.html#224>`_
      * `tut1.html#126 <tut1.html#126>`_
 
    `init`:idx:
@@ -2111,7 +2146,7 @@ Index
      `parseopt.html#103 <parseopt.html#103>`_
 
    `inline`:idx:
-     `manual.html#168 <manual.html#168>`_
+     `manual.html#174 <manual.html#174>`_
 
    `input`:idx:
      `xmlgen.html#143 <xmlgen.html#143>`_
@@ -2150,7 +2185,7 @@ Index
      `macros.html#129 <macros.html#129>`_
 
    `is`:idx:
-     `system.html#353 <system.html#353>`_
+     `system.html#359 <system.html#359>`_
 
    `isAlpha`:idx:
      `unicode.html#116 <unicode.html#116>`_
@@ -2162,18 +2197,18 @@ Index
      `unicode.html#114 <unicode.html#114>`_
 
    `isMainModule`:idx:
-     `system.html#389 <system.html#389>`_
+     `system.html#395 <system.html#395>`_
 
    `isNil`:idx:
-     * `system.html#456 <system.html#456>`_
-     * `system.html#457 <system.html#457>`_
-     * `system.html#458 <system.html#458>`_
-     * `system.html#459 <system.html#459>`_
-     * `system.html#460 <system.html#460>`_
-     * `system.html#461 <system.html#461>`_
+     * `system.html#462 <system.html#462>`_
+     * `system.html#463 <system.html#463>`_
+     * `system.html#464 <system.html#464>`_
+     * `system.html#465 <system.html#465>`_
+     * `system.html#466 <system.html#466>`_
+     * `system.html#467 <system.html#467>`_
 
    `is_not`:idx:
-     `system.html#354 <system.html#354>`_
+     `system.html#360 <system.html#360>`_
 
    `IS_NOT_NULL`:idx:
      `mysql.html#303 <mysql.html#303>`_
@@ -2203,15 +2238,15 @@ Index
      `mysql.html#255 <mysql.html#255>`_
 
    `items`:idx:
-     * `system.html#450 <system.html#450>`_
-     * `system.html#451 <system.html#451>`_
-     * `system.html#452 <system.html#452>`_
-     * `system.html#453 <system.html#453>`_
-     * `system.html#454 <system.html#454>`_
-     * `system.html#455 <system.html#455>`_
+     * `system.html#456 <system.html#456>`_
+     * `system.html#457 <system.html#457>`_
+     * `system.html#458 <system.html#458>`_
+     * `system.html#459 <system.html#459>`_
+     * `system.html#460 <system.html#460>`_
+     * `system.html#461 <system.html#461>`_
 
    `iterator`:idx:
-     `manual.html#209 <manual.html#209>`_
+     `manual.html#215 <manual.html#215>`_
 
    `iterOverEnvironment`:idx:
      `os.html#150 <os.html#150>`_
@@ -2244,11 +2279,11 @@ Index
      `xmlgen.html#147 <xmlgen.html#147>`_
 
    `len`:idx:
-     * `system.html#168 <system.html#168>`_
-     * `system.html#169 <system.html#169>`_
-     * `system.html#170 <system.html#170>`_
-     * `system.html#171 <system.html#171>`_
-     * `system.html#172 <system.html#172>`_
+     * `system.html#174 <system.html#174>`_
+     * `system.html#175 <system.html#175>`_
+     * `system.html#176 <system.html#176>`_
+     * `system.html#177 <system.html#177>`_
+     * `system.html#178 <system.html#178>`_
      * `strtabs.html#109 <strtabs.html#109>`_
      * `parsesql.html#107 <parsesql.html#107>`_
      * `macros.html#118 <macros.html#118>`_
@@ -2280,13 +2315,13 @@ Index
    `line feed`:idx:
      `manual.html#123 <manual.html#123>`_
 
-   `line_dir`:idx:
+   `lineDir`:idx:
      `nimrodc.html#107 <nimrodc.html#107>`_
 
    `lines`:idx:
-     `system.html#524 <system.html#524>`_
+     `system.html#531 <system.html#531>`_
 
-   `line_trace`:idx:
+   `lineTrace`:idx:
      `nimrodc.html#109 <nimrodc.html#109>`_
 
    `link`:idx:
@@ -2326,7 +2361,7 @@ Index
      `system.html#127 <system.html#127>`_
 
    `Macros`:idx:
-     `manual.html#215 <manual.html#215>`_
+     `manual.html#221 <manual.html#221>`_
 
    `make_password_from_salt`:idx:
      `mysql.html#281 <mysql.html#281>`_
@@ -2370,13 +2405,13 @@ Index
      * `pegs.html#137 <pegs.html#137>`_
 
    `max`:idx:
-     * `system.html#318 <system.html#318>`_
-     * `system.html#444 <system.html#444>`_
-     * `system.html#445 <system.html#445>`_
-     * `system.html#446 <system.html#446>`_
-     * `system.html#447 <system.html#447>`_
-     * `system.html#448 <system.html#448>`_
-     * `system.html#449 <system.html#449>`_
+     * `system.html#324 <system.html#324>`_
+     * `system.html#450 <system.html#450>`_
+     * `system.html#451 <system.html#451>`_
+     * `system.html#452 <system.html#452>`_
+     * `system.html#453 <system.html#453>`_
+     * `system.html#454 <system.html#454>`_
+     * `system.html#455 <system.html#455>`_
 
    `MAX_BIGINT_WIDTH`:idx:
      `mysql.html#194 <mysql.html#194>`_
@@ -2437,40 +2472,42 @@ Index
      `tut2.html#105 <tut2.html#105>`_
 
    `methods`:idx:
-     `manual.html#200 <manual.html#200>`_
+     `manual.html#206 <manual.html#206>`_
 
    `min`:idx:
-     * `system.html#317 <system.html#317>`_
-     * `system.html#438 <system.html#438>`_
-     * `system.html#439 <system.html#439>`_
-     * `system.html#440 <system.html#440>`_
-     * `system.html#441 <system.html#441>`_
-     * `system.html#442 <system.html#442>`_
-     * `system.html#443 <system.html#443>`_
+     * `system.html#323 <system.html#323>`_
+     * `system.html#444 <system.html#444>`_
+     * `system.html#445 <system.html#445>`_
+     * `system.html#446 <system.html#446>`_
+     * `system.html#447 <system.html#447>`_
+     * `system.html#448 <system.html#448>`_
+     * `system.html#449 <system.html#449>`_
 
    `mod`:idx:
-     * `system.html#222 <system.html#222>`_
-     * `system.html#223 <system.html#223>`_
-     * `system.html#224 <system.html#224>`_
-     * `system.html#225 <system.html#225>`_
-     * `system.html#226 <system.html#226>`_
+     * `system.html#228 <system.html#228>`_
+     * `system.html#229 <system.html#229>`_
+     * `system.html#230 <system.html#230>`_
+     * `system.html#231 <system.html#231>`_
+     * `system.html#232 <system.html#232>`_
 
    `modify_defaults_file`:idx:
      `mysql.html#284 <mysql.html#284>`_
 
    `module`:idx:
-     * `manual.html#217 <manual.html#217>`_
+     * `manual.html#223 <manual.html#223>`_
      * `tut1.html#125 <tut1.html#125>`_
 
    `moveFile`:idx:
      `os.html#143 <os.html#143>`_
 
    `moveMem`:idx:
-     `system.html#408 <system.html#408>`_
+     `system.html#414 <system.html#414>`_
 
    `multi-methods`:idx:
-     * `manual.html#207 <manual.html#207>`_
-     * `tut2.html#104 <tut2.html#104>`_
+     `tut2.html#104 <tut2.html#104>`_
+
+   `Multi-methods`:idx:
+     `manual.html#213 <manual.html#213>`_
 
    `MULTIPLE_KEY_FLAG`:idx:
      `mysql.html#127 <mysql.html#127>`_
@@ -2990,7 +3027,7 @@ Index
      `mysql.html#110 <mysql.html#110>`_
 
    `nan`:idx:
-     `system.html#431 <system.html#431>`_
+     `system.html#437 <system.html#437>`_
 
    `Natural`:idx:
      `system.html#134 <system.html#134>`_
@@ -2999,7 +3036,7 @@ Index
      `pegs.html#131 <pegs.html#131>`_
 
    `neginf`:idx:
-     `system.html#430 <system.html#430>`_
+     `system.html#436 <system.html#436>`_
 
    `nestList`:idx:
      `macros.html#152 <macros.html#152>`_
@@ -3065,13 +3102,13 @@ Index
    `newIntLitNode`:idx:
      `macros.html#142 <macros.html#142>`_
 
-   `newLine`:idx:
-     `pegs.html#121 <pegs.html#121>`_
-
    `newline`:idx:
      * `manual.html#121 <manual.html#121>`_
      * `pegs.html#120 <pegs.html#120>`_
 
+   `newLine`:idx:
+     `pegs.html#121 <pegs.html#121>`_
+
    `NewLines`:idx:
      `lexbase.html#102 <lexbase.html#102>`_
 
@@ -3082,10 +3119,10 @@ Index
      `pegs.html#124 <pegs.html#124>`_
 
    `newSeq`:idx:
-     `system.html#167 <system.html#167>`_
+     `system.html#173 <system.html#173>`_
 
    `newString`:idx:
-     `system.html#360 <system.html#360>`_
+     `system.html#366 <system.html#366>`_
 
    `newStringStream`:idx:
      `streams.html#117 <streams.html#117>`_
@@ -3106,24 +3143,24 @@ Index
      `math.html#108 <math.html#108>`_
 
    `nimcall`:idx:
-     `manual.html#170 <manual.html#170>`_
+     `manual.html#176 <manual.html#176>`_
 
    `NimrodMajor`:idx:
-     `system.html#393 <system.html#393>`_
+     `system.html#399 <system.html#399>`_
 
    `NimrodMinor`:idx:
-     `system.html#394 <system.html#394>`_
+     `system.html#400 <system.html#400>`_
 
    `NimrodPatch`:idx:
-     `system.html#395 <system.html#395>`_
+     `system.html#401 <system.html#401>`_
 
    `NimrodVersion`:idx:
-     `system.html#392 <system.html#392>`_
+     `system.html#398 <system.html#398>`_
 
    `noconv`:idx:
-     `manual.html#173 <manual.html#173>`_
+     `manual.html#179 <manual.html#179>`_
 
-   `no_decl`:idx:
+   `noDecl`:idx:
      `nimrodc.html#104 <nimrodc.html#104>`_
 
    `NO_DEFAULT_VALUE_FLAG`:idx:
@@ -3132,6 +3169,9 @@ Index
    `nonterminal`:idx:
      `pegs.html#123 <pegs.html#123>`_
 
+   `noreturn`:idx:
+     `manual.html#236 <manual.html#236>`_
+
    `normalize`:idx:
      `strutils.html#118 <strutils.html#118>`_
 
@@ -3139,18 +3179,18 @@ Index
      `xmlgen.html#152 <xmlgen.html#152>`_
 
    `noSideEffect`:idx:
-     `manual.html#227 <manual.html#227>`_
+     `manual.html#233 <manual.html#233>`_
 
    `not`:idx:
      * `system.html#120 <system.html#120>`_
-     * `system.html#197 <system.html#197>`_
-     * `system.html#198 <system.html#198>`_
-     * `system.html#199 <system.html#199>`_
-     * `system.html#200 <system.html#200>`_
-     * `system.html#201 <system.html#201>`_
+     * `system.html#203 <system.html#203>`_
+     * `system.html#204 <system.html#204>`_
+     * `system.html#205 <system.html#205>`_
+     * `system.html#206 <system.html#206>`_
+     * `system.html#207 <system.html#207>`_
 
    `not_in`:idx:
-     `system.html#352 <system.html#352>`_
+     `system.html#358 <system.html#358>`_
 
    `NOT_NULL_FLAG`:idx:
      `mysql.html#124 <mysql.html#124>`_
@@ -3165,7 +3205,7 @@ Index
      `mysql.html#137 <mysql.html#137>`_
 
    `object`:idx:
-     * `manual.html#156 <manual.html#156>`_
+     * `manual.html#162 <manual.html#162>`_
      * `xmlgen.html#153 <xmlgen.html#153>`_
 
    `octet2hex`:idx:
@@ -3178,8 +3218,8 @@ Index
      `mysql.html#189 <mysql.html#189>`_
 
    `Open`:idx:
-     * `system.html#497 <system.html#497>`_
-     * `system.html#498 <system.html#498>`_
+     * `system.html#504 <system.html#504>`_
+     * `system.html#505 <system.html#505>`_
 
    `open`:idx:
      * `lexbase.html#104 <lexbase.html#104>`_
@@ -3193,14 +3233,14 @@ Index
      * `system.html#130 <system.html#130>`_
 
    `OpenFile`:idx:
-     * `system.html#495 <system.html#495>`_
-     * `system.html#496 <system.html#496>`_
+     * `system.html#502 <system.html#502>`_
+     * `system.html#503 <system.html#503>`_
 
    `operator`:idx:
      `manual.html#139 <manual.html#139>`_
 
    `Operators`:idx:
-     `manual.html#205 <manual.html#205>`_
+     `manual.html#211 <manual.html#211>`_
 
    `optgroup`:idx:
      `xmlgen.html#155 <xmlgen.html#155>`_
@@ -3210,14 +3250,14 @@ Index
 
    `or`:idx:
      * `system.html#122 <system.html#122>`_
-     * `system.html#242 <system.html#242>`_
-     * `system.html#243 <system.html#243>`_
-     * `system.html#244 <system.html#244>`_
-     * `system.html#245 <system.html#245>`_
-     * `system.html#246 <system.html#246>`_
+     * `system.html#248 <system.html#248>`_
+     * `system.html#249 <system.html#249>`_
+     * `system.html#250 <system.html#250>`_
+     * `system.html#251 <system.html#251>`_
+     * `system.html#252 <system.html#252>`_
 
    `ord`:idx:
-     `system.html#176 <system.html#176>`_
+     `system.html#182 <system.html#182>`_
 
    `ordinal`:idx:
      `tut1.html#114 <tut1.html#114>`_
@@ -3418,10 +3458,10 @@ Index
      `streams.html#118 <streams.html#118>`_
 
    `PFloat32`:idx:
-     `system.html#385 <system.html#385>`_
+     `system.html#391 <system.html#391>`_
 
    `PFloat64`:idx:
-     `system.html#386 <system.html#386>`_
+     `system.html#392 <system.html#392>`_
 
    `Pgptr`:idx:
      `mysql.html#104 <mysql.html#104>`_
@@ -3433,10 +3473,10 @@ Index
      `parsexml.html#115 <parsexml.html#115>`_
 
    `PInt32`:idx:
-     `system.html#388 <system.html#388>`_
+     `system.html#394 <system.html#394>`_
 
    `PInt64`:idx:
-     `system.html#387 <system.html#387>`_
+     `system.html#393 <system.html#393>`_
 
    `PIRest`:idx:
      `parsexml.html#116 <parsexml.html#116>`_
@@ -3520,11 +3560,11 @@ Index
      `system.html#113 <system.html#113>`_
 
    `pointers`:idx:
-     * `manual.html#159 <manual.html#159>`_
+     * `manual.html#165 <manual.html#165>`_
      * `tut1.html#120 <tut1.html#120>`_
 
    `pop`:idx:
-     `system.html#467 <system.html#467>`_
+     `system.html#474 <system.html#474>`_
 
    `Positive`:idx:
      `system.html#135 <system.html#135>`_
@@ -3560,17 +3600,17 @@ Index
      `xmlgen.html#159 <xmlgen.html#159>`_
 
    `pred`:idx:
-     `system.html#164 <system.html#164>`_
+     `system.html#170 <system.html#170>`_
 
    `PRI_KEY_FLAG`:idx:
      `mysql.html#125 <mysql.html#125>`_
 
    `procedural type`:idx:
-     * `manual.html#162 <manual.html#162>`_
+     * `manual.html#168 <manual.html#168>`_
      * `tut1.html#123 <tut1.html#123>`_
 
    `procedures`:idx:
-     `manual.html#202 <manual.html#202>`_
+     `manual.html#208 <manual.html#208>`_
 
    `processedRows`:idx:
      `parsecsv.html#107 <parsecsv.html#107>`_
@@ -3579,10 +3619,10 @@ Index
      `osproc.html#112 <osproc.html#112>`_
 
    `procvar`:idx:
-     `manual.html#228 <manual.html#228>`_
+     `manual.html#234 <manual.html#234>`_
 
    `programming by contracts`:idx:
-     `system.html#414 <system.html#414>`_
+     `system.html#420 <system.html#420>`_
 
    `Psockaddr`:idx:
      `mysql.html#250 <mysql.html#250>`_
@@ -3675,7 +3715,7 @@ Index
      `math.html#134 <math.html#134>`_
 
    `push/pop`:idx:
-     `manual.html#234 <manual.html#234>`_
+     `manual.html#241 <manual.html#241>`_
 
    `putEnv`:idx:
      `os.html#149 <os.html#149>`_
@@ -3690,14 +3730,14 @@ Index
      `xmlgen.html#160 <xmlgen.html#160>`_
 
    `quit`:idx:
-     * `system.html#487 <system.html#487>`_
-     * `system.html#488 <system.html#488>`_
+     * `system.html#494 <system.html#494>`_
+     * `system.html#495 <system.html#495>`_
 
    `QuitFailure`:idx:
-     `system.html#486 <system.html#486>`_
+     `system.html#493 <system.html#493>`_
 
    `QuitSuccess`:idx:
-     `system.html#485 <system.html#485>`_
+     `system.html#492 <system.html#492>`_
 
    `quotation mark`:idx:
      `manual.html#128 <manual.html#128>`_
@@ -3721,29 +3761,29 @@ Index
      `system.html#128 <system.html#128>`_
 
    `re-raised`:idx:
-     `manual.html#186 <manual.html#186>`_
+     `manual.html#192 <manual.html#192>`_
 
    `readBool`:idx:
      `streams.html#106 <streams.html#106>`_
 
    `readBuffer`:idx:
-     `system.html#518 <system.html#518>`_
+     `system.html#525 <system.html#525>`_
 
    `ReadBytes`:idx:
-     `system.html#516 <system.html#516>`_
+     `system.html#523 <system.html#523>`_
 
    `readChar`:idx:
-     * `system.html#502 <system.html#502>`_
+     * `system.html#509 <system.html#509>`_
      * `streams.html#105 <streams.html#105>`_
 
    `ReadChars`:idx:
-     `system.html#517 <system.html#517>`_
+     `system.html#524 <system.html#524>`_
 
    `readData`:idx:
      `cgi.html#108 <cgi.html#108>`_
 
    `readFile`:idx:
-     `system.html#504 <system.html#504>`_
+     `system.html#511 <system.html#511>`_
 
    `readFloat32`:idx:
      `streams.html#111 <streams.html#111>`_
@@ -3764,7 +3804,7 @@ Index
      `streams.html#107 <streams.html#107>`_
 
    `readLine`:idx:
-     * `system.html#512 <system.html#512>`_
+     * `system.html#519 <system.html#519>`_
      * `streams.html#114 <streams.html#114>`_
 
    `readRow`:idx:
@@ -3774,13 +3814,13 @@ Index
      `streams.html#113 <streams.html#113>`_
 
    `realloc`:idx:
-     `system.html#412 <system.html#412>`_
+     `system.html#418 <system.html#418>`_
 
    `reBinary`:idx:
      `regexprs.html#116 <regexprs.html#116>`_
 
-   `Recursive module dependancies`:idx:
-     `manual.html#221 <manual.html#221>`_
+   `Recursive module dependencies`:idx:
+     `manual.html#227 <manual.html#227>`_
 
    `reEmail`:idx:
      `regexprs.html#119 <regexprs.html#119>`_
@@ -3870,20 +3910,20 @@ Index
      * `strutils.html#123 <strutils.html#123>`_
 
    `repr`:idx:
-     `system.html#370 <system.html#370>`_
+     `system.html#376 <system.html#376>`_
 
    `ResetAttributes`:idx:
      `terminal.html#110 <terminal.html#110>`_
 
    `result`:idx:
-     * `manual.html#193 <manual.html#193>`_
-     * `manual.html#204 <manual.html#204>`_
+     * `manual.html#199 <manual.html#199>`_
+     * `manual.html#210 <manual.html#210>`_
 
    `resume`:idx:
      `osproc.html#109 <osproc.html#109>`_
 
    `return`:idx:
-     `manual.html#192 <manual.html#192>`_
+     `manual.html#198 <manual.html#198>`_
 
    `reURL`:idx:
      `regexprs.html#120 <regexprs.html#120>`_
@@ -3910,7 +3950,7 @@ Index
      `manual.html#112 <manual.html#112>`_
 
    `safecall`:idx:
-     `manual.html#167 <manual.html#167>`_
+     `manual.html#173 <manual.html#173>`_
 
    `sameFile`:idx:
      `os.html#140 <os.html#140>`_
@@ -3923,7 +3963,7 @@ Index
 
    `scope`:idx:
      * `manual.html#106 <manual.html#106>`_
-     * `manual.html#222 <manual.html#222>`_
+     * `manual.html#228 <manual.html#228>`_
 
    `scramble`:idx:
      `mysql.html#278 <mysql.html#278>`_
@@ -3953,7 +3993,7 @@ Index
      `xmlgen.html#163 <xmlgen.html#163>`_
 
    `separate compilation`:idx:
-     * `manual.html#219 <manual.html#219>`_
+     * `manual.html#225 <manual.html#225>`_
      * `tut1.html#127 <tut1.html#127>`_
 
    `seq`:idx:
@@ -3963,7 +4003,7 @@ Index
      `pegs.html#109 <pegs.html#109>`_
 
    `Sequences`:idx:
-     * `manual.html#154 <manual.html#154>`_
+     * `manual.html#160 <manual.html#160>`_
      * `tut1.html#118 <tut1.html#118>`_
 
    `SERVER_MORE_RESULTS_EXISTS`:idx:
@@ -4003,12 +4043,15 @@ Index
      `system.html#132 <system.html#132>`_
 
    `set type`:idx:
-     * `manual.html#158 <manual.html#158>`_
+     * `manual.html#164 <manual.html#164>`_
      * `tut1.html#116 <tut1.html#116>`_
 
    `setBackgroundColor`:idx:
      `terminal.html#116 <terminal.html#116>`_
 
+   `setCookie`:idx:
+     `cgi.html#144 <cgi.html#144>`_
+
    `setCurrentDir`:idx:
      `os.html#121 <os.html#121>`_
 
@@ -4025,7 +4068,7 @@ Index
      `os.html#163 <os.html#163>`_
 
    `setFilePos`:idx:
-     `system.html#522 <system.html#522>`_
+     `system.html#529 <system.html#529>`_
 
    `SET_FLAG`:idx:
      `mysql.html#135 <mysql.html#135>`_
@@ -4034,37 +4077,37 @@ Index
      `terminal.html#115 <terminal.html#115>`_
 
    `setLen`:idx:
-     * `system.html#358 <system.html#358>`_
-     * `system.html#359 <system.html#359>`_
+     * `system.html#364 <system.html#364>`_
+     * `system.html#365 <system.html#365>`_
 
    `setTestData`:idx:
      `cgi.html#142 <cgi.html#142>`_
 
    `shl`:idx:
-     * `system.html#232 <system.html#232>`_
+     * `system.html#238 <system.html#238>`_
+     * `system.html#239 <system.html#239>`_
+     * `system.html#240 <system.html#240>`_
+     * `system.html#241 <system.html#241>`_
+     * `system.html#242 <system.html#242>`_
+
+   `shr`:idx:
      * `system.html#233 <system.html#233>`_
      * `system.html#234 <system.html#234>`_
      * `system.html#235 <system.html#235>`_
      * `system.html#236 <system.html#236>`_
-
-   `shr`:idx:
-     * `system.html#227 <system.html#227>`_
-     * `system.html#228 <system.html#228>`_
-     * `system.html#229 <system.html#229>`_
-     * `system.html#230 <system.html#230>`_
-     * `system.html#231 <system.html#231>`_
+     * `system.html#237 <system.html#237>`_
 
    `simple assertions`:idx:
      `regexprs.html#103 <regexprs.html#103>`_
 
    `simple statements`:idx:
-     `manual.html#177 <manual.html#177>`_
+     `manual.html#183 <manual.html#183>`_
 
    `sinh`:idx:
      `math.html#129 <math.html#129>`_
 
    `sizeof`:idx:
-     `system.html#162 <system.html#162>`_
+     `system.html#168 <system.html#168>`_
 
    `sleep`:idx:
      `os.html#170 <os.html#170>`_
@@ -4609,7 +4652,7 @@ Index
      * `math.html#115 <math.html#115>`_
      * `complex.html#109 <complex.html#109>`_
 
-   `stack_trace`:idx:
+   `stackTrace`:idx:
      `nimrodc.html#108 <nimrodc.html#108>`_
 
    `standardDeviation`:idx:
@@ -4626,7 +4669,7 @@ Index
      `tut2.html#112 <tut2.html#112>`_
 
    `Statements`:idx:
-     `manual.html#176 <manual.html#176>`_
+     `manual.html#182 <manual.html#182>`_
 
    `static error`:idx:
      `manual.html#109 <manual.html#109>`_
@@ -4635,16 +4678,16 @@ Index
      `manual.html#103 <manual.html#103>`_
 
    `stdcall`:idx:
-     `manual.html#165 <manual.html#165>`_
+     `manual.html#171 <manual.html#171>`_
 
    `stderr`:idx:
-     `system.html#494 <system.html#494>`_
+     `system.html#501 <system.html#501>`_
 
    `stdin`:idx:
-     `system.html#492 <system.html#492>`_
+     `system.html#499 <system.html#499>`_
 
    `stdout`:idx:
-     `system.html#493 <system.html#493>`_
+     `system.html#500 <system.html#500>`_
 
    `st_dynamic_array`:idx:
      `mysql.html#339 <mysql.html#339>`_
@@ -4692,7 +4735,7 @@ Index
      `mysql.html#198 <mysql.html#198>`_
 
    `string`:idx:
-     * `manual.html#151 <manual.html#151>`_
+     * `manual.html#157 <manual.html#157>`_
      * `system.html#111 <system.html#111>`_
 
    `string interpolation`:idx:
@@ -4708,7 +4751,7 @@ Index
      `xmlgen.html#166 <xmlgen.html#166>`_
 
    `structured type`:idx:
-     `manual.html#152 <manual.html#152>`_
+     `manual.html#158 <manual.html#158>`_
 
    `strVal`:idx:
      `macros.html#128 <macros.html#128>`_
@@ -4735,14 +4778,14 @@ Index
      `xmlgen.html#168 <xmlgen.html#168>`_
 
    `subrange`:idx:
-     * `manual.html#150 <manual.html#150>`_
+     * `manual.html#156 <manual.html#156>`_
      * `tut1.html#115 <tut1.html#115>`_
 
    `substitution`:idx:
      `strutils.html#107 <strutils.html#107>`_
 
    `succ`:idx:
-     `system.html#163 <system.html#163>`_
+     `system.html#169 <system.html#169>`_
 
    `sum`:idx:
      `math.html#110 <math.html#110>`_
@@ -4754,7 +4797,7 @@ Index
      `osproc.html#108 <osproc.html#108>`_
 
    `swap`:idx:
-     `system.html#416 <system.html#416>`_
+     `system.html#422 <system.html#422>`_
 
    `symAddr`:idx:
      `dynlib.html#104 <dynlib.html#104>`_
@@ -4766,10 +4809,10 @@ Index
      `macros.html#131 <macros.html#131>`_
 
    `syscall`:idx:
-     `manual.html#172 <manual.html#172>`_
+     `manual.html#178 <manual.html#178>`_
 
    `system`:idx:
-     `manual.html#223 <manual.html#223>`_
+     `manual.html#229 <manual.html#229>`_
 
    `table`:idx:
      `xmlgen.html#170 <xmlgen.html#170>`_
@@ -4778,7 +4821,7 @@ Index
      `manual.html#125 <manual.html#125>`_
 
    `TAddress`:idx:
-     `system.html#371 <system.html#371>`_
+     `system.html#377 <system.html#377>`_
 
    `tan`:idx:
      `math.html#130 <math.html#130>`_
@@ -4988,10 +5031,10 @@ Index
      `xmlgen.html#172 <xmlgen.html#172>`_
 
    `template`:idx:
-     `manual.html#214 <manual.html#214>`_
+     `manual.html#220 <manual.html#220>`_
 
    `TEndian`:idx:
-     `system.html#384 <system.html#384>`_
+     `system.html#390 <system.html#390>`_
 
    `term`:idx:
      * `pegs.html#103 <pegs.html#103>`_
@@ -5010,13 +5053,13 @@ Index
      `xmlgen.html#173 <xmlgen.html#173>`_
 
    `TFile`:idx:
-     `system.html#489 <system.html#489>`_
+     `system.html#496 <system.html#496>`_
 
    `TFileHandle`:idx:
-     `system.html#491 <system.html#491>`_
+     `system.html#498 <system.html#498>`_
 
    `TFileMode`:idx:
-     `system.html#490 <system.html#490>`_
+     `system.html#497 <system.html#497>`_
 
    `TFilePermission`:idx:
      `os.html#161 <os.html#161>`_
@@ -5037,7 +5080,7 @@ Index
      `strtabs.html#111 <strtabs.html#111>`_
 
    `TGC_Strategy`:idx:
-     `system.html#472 <system.html#472>`_
+     `system.html#479 <system.html#479>`_
 
    `th`:idx:
      `xmlgen.html#175 <xmlgen.html#175>`_
@@ -5085,10 +5128,10 @@ Index
      `macros.html#105 <macros.html#105>`_
 
    `toBiggestFloat`:idx:
-     `system.html#400 <system.html#400>`_
+     `system.html#406 <system.html#406>`_
 
    `toBiggestInt`:idx:
-     `system.html#402 <system.html#402>`_
+     `system.html#408 <system.html#408>`_
 
    `toBin`:idx:
      `strutils.html#159 <strutils.html#159>`_
@@ -5097,13 +5140,13 @@ Index
      `system.html#136 <system.html#136>`_
 
    `toFloat`:idx:
-     `system.html#399 <system.html#399>`_
+     `system.html#405 <system.html#405>`_
 
    `toHex`:idx:
      `strutils.html#140 <strutils.html#140>`_
 
    `toInt`:idx:
-     `system.html#401 <system.html#401>`_
+     `system.html#407 <system.html#407>`_
 
    `toLower`:idx:
      * `strutils.html#113 <strutils.html#113>`_
@@ -5129,13 +5172,13 @@ Index
      `unicode.html#113 <unicode.html#113>`_
 
    `toU16`:idx:
-     `system.html#185 <system.html#185>`_
+     `system.html#191 <system.html#191>`_
 
    `toU32`:idx:
-     `system.html#186 <system.html#186>`_
+     `system.html#192 <system.html#192>`_
 
    `toU8`:idx:
-     `system.html#184 <system.html#184>`_
+     `system.html#190 <system.html#190>`_
 
    `toUpper`:idx:
      * `strutils.html#115 <strutils.html#115>`_
@@ -5158,7 +5201,7 @@ Index
      `xmlgen.html#178 <xmlgen.html#178>`_
 
    `traced`:idx:
-     * `manual.html#160 <manual.html#160>`_
+     * `manual.html#166 <manual.html#166>`_
      * `tut1.html#121 <tut1.html#121>`_
 
    `transformFile`:idx:
@@ -5168,7 +5211,7 @@ Index
      `cgi.html#105 <cgi.html#105>`_
 
    `TResult`:idx:
-     `system.html#161 <system.html#161>`_
+     `system.html#167 <system.html#167>`_
 
    `TRune`:idx:
      `unicode.html#101 <unicode.html#101>`_
@@ -5180,7 +5223,7 @@ Index
      `math.html#133 <math.html#133>`_
 
    `try`:idx:
-     * `manual.html#188 <manual.html#188>`_
+     * `manual.html#194 <manual.html#194>`_
      * `tut2.html#108 <tut2.html#108>`_
 
    `Tsqlite3_callback`:idx:
@@ -5232,10 +5275,10 @@ Index
      `times.html#104 <times.html#104>`_
 
    `tuple`:idx:
-     `manual.html#155 <manual.html#155>`_
+     `manual.html#161 <manual.html#161>`_
 
    `tuple unpacking`:idx:
-     `manual.html#206 <manual.html#206>`_
+     `manual.html#212 <manual.html#212>`_
 
    `TWeekDay`:idx:
      `times.html#102 <times.html#102>`_
@@ -5261,7 +5304,7 @@ Index
    `type`:idx:
      * `manual.html#102 <manual.html#102>`_
      * `manual.html#141 <manual.html#141>`_
-     * `manual.html#211 <manual.html#211>`_
+     * `manual.html#217 <manual.html#217>`_
 
    `type casts`:idx:
      `tut2.html#101 <tut2.html#101>`_
@@ -5270,7 +5313,7 @@ Index
      `tut2.html#102 <tut2.html#102>`_
 
    `type parameters`:idx:
-     * `manual.html#213 <manual.html#213>`_
+     * `manual.html#219 <manual.html#219>`_
      * `tut2.html#110 <tut2.html#110>`_
 
    `type suffix`:idx:
@@ -5301,7 +5344,7 @@ Index
      `mysql.html#126 <mysql.html#126>`_
 
    `units`:idx:
-     `manual.html#175 <manual.html#175>`_
+     `manual.html#181 <manual.html#181>`_
 
    `unixTimeToWinTime`:idx:
      `times.html#117 <times.html#117>`_
@@ -5324,7 +5367,7 @@ Index
      `mysql.html#129 <mysql.html#129>`_
 
    `untraced`:idx:
-     * `manual.html#161 <manual.html#161>`_
+     * `manual.html#167 <manual.html#167>`_
      * `tut1.html#122 <tut1.html#122>`_
 
    `URLdecode`:idx:
@@ -5355,7 +5398,7 @@ Index
      `strutils.html#162 <strutils.html#162>`_
 
    `Var`:idx:
-     `manual.html#181 <manual.html#181>`_
+     `manual.html#187 <manual.html#187>`_
 
    `var`:idx:
      `xmlgen.html#181 <xmlgen.html#181>`_
@@ -5368,7 +5411,7 @@ Index
      * `math.html#135 <math.html#135>`_
 
    `variant`:idx:
-     * `manual.html#157 <manual.html#157>`_
+     * `manual.html#163 <manual.html#163>`_
      * `tut2.html#103 <tut2.html#103>`_
 
    `verbose`:idx:
@@ -5394,16 +5437,16 @@ Index
      * `zipfiles.html#110 <zipfiles.html#110>`_
 
    `warning`:idx:
-     * `manual.html#225 <manual.html#225>`_
-     * `manual.html#232 <manual.html#232>`_
+     * `manual.html#231 <manual.html#231>`_
+     * `manual.html#239 <manual.html#239>`_
      * `macros.html#139 <macros.html#139>`_
 
    `when`:idx:
-     * `manual.html#185 <manual.html#185>`_
+     * `manual.html#191 <manual.html#191>`_
      * `tut1.html#106 <tut1.html#106>`_
 
    `while`:idx:
-     `manual.html#197 <manual.html#197>`_
+     `manual.html#203 <manual.html#203>`_
 
    `Whitespace`:idx:
      `strutils.html#102 <strutils.html#102>`_
@@ -5415,31 +5458,31 @@ Index
      `times.html#118 <times.html#118>`_
 
    `write`:idx:
-     * `system.html#505 <system.html#505>`_
-     * `system.html#506 <system.html#506>`_
-     * `system.html#507 <system.html#507>`_
-     * `system.html#508 <system.html#508>`_
-     * `system.html#509 <system.html#509>`_
-     * `system.html#510 <system.html#510>`_
-     * `system.html#511 <system.html#511>`_
+     * `system.html#512 <system.html#512>`_
+     * `system.html#513 <system.html#513>`_
+     * `system.html#514 <system.html#514>`_
+     * `system.html#515 <system.html#515>`_
+     * `system.html#516 <system.html#516>`_
+     * `system.html#517 <system.html#517>`_
+     * `system.html#518 <system.html#518>`_
      * `streams.html#103 <streams.html#103>`_
      * `streams.html#104 <streams.html#104>`_
 
    `writeBuffer`:idx:
-     `system.html#521 <system.html#521>`_
+     `system.html#528 <system.html#528>`_
 
    `writeBytes`:idx:
-     `system.html#519 <system.html#519>`_
+     `system.html#526 <system.html#526>`_
 
    `writeChars`:idx:
-     `system.html#520 <system.html#520>`_
+     `system.html#527 <system.html#527>`_
 
    `writeContentType`:idx:
      `cgi.html#143 <cgi.html#143>`_
 
    `writeln`:idx:
-     * `system.html#513 <system.html#513>`_
-     * `system.html#514 <system.html#514>`_
+     * `system.html#520 <system.html#520>`_
+     * `system.html#521 <system.html#521>`_
 
    `WriteStyled`:idx:
      `terminal.html#112 <terminal.html#112>`_
@@ -5456,27 +5499,27 @@ Index
 
    `xor`:idx:
      * `system.html#123 <system.html#123>`_
-     * `system.html#247 <system.html#247>`_
-     * `system.html#248 <system.html#248>`_
-     * `system.html#249 <system.html#249>`_
-     * `system.html#250 <system.html#250>`_
-     * `system.html#251 <system.html#251>`_
+     * `system.html#253 <system.html#253>`_
+     * `system.html#254 <system.html#254>`_
+     * `system.html#255 <system.html#255>`_
+     * `system.html#256 <system.html#256>`_
+     * `system.html#257 <system.html#257>`_
 
    `yield`:idx:
-     `manual.html#194 <manual.html#194>`_
+     `manual.html#200 <manual.html#200>`_
 
    `ze`:idx:
-     * `system.html#178 <system.html#178>`_
-     * `system.html#179 <system.html#179>`_
+     * `system.html#184 <system.html#184>`_
+     * `system.html#185 <system.html#185>`_
 
    `ze64`:idx:
-     * `system.html#180 <system.html#180>`_
-     * `system.html#181 <system.html#181>`_
-     * `system.html#182 <system.html#182>`_
-     * `system.html#183 <system.html#183>`_
+     * `system.html#186 <system.html#186>`_
+     * `system.html#187 <system.html#187>`_
+     * `system.html#188 <system.html#188>`_
+     * `system.html#189 <system.html#189>`_
 
    `ZEROFILL_FLAG`:idx:
      `mysql.html#130 <mysql.html#130>`_
 
    `zeroMem`:idx:
-     `system.html#406 <system.html#406>`_
\ No newline at end of file
+     `system.html#412 <system.html#412>`_
\ No newline at end of file
diff --git a/koch.nim b/koch.nim
index bb9d84d8e..e79ab9a36 100755
--- a/koch.nim
+++ b/koch.nim
@@ -79,7 +79,6 @@ const
   bootOptions = "" # options to pass to the bootstrap process
 
 proc findStartNimrod: string = 
-  const buildScript = "build.sh"
   # we try several things before giving up:
   # * bin/nimrod
   # * $PATH/nimrod
@@ -95,6 +94,7 @@ proc findStartNimrod: string =
   result = "bin" / "nim".exe
   if ExistsFile(result): return
   when defined(Posix):
+    const buildScript = "build.sh"
     if ExistsFile(buildScript): 
       if tryExec("./" & buildScript): return "bin" / nimrod
   
@@ -102,16 +102,20 @@ proc findStartNimrod: string =
   echo("Found no nimrod compiler and every attempt to build one failed!")
   quit("FAILURE")
 
+proc safeRemove(filename: string) = 
+  if existsFile(filename): removeFile(filename)
+
 proc bootIteration(args: string): bool = 
   var nimrod1 = "rod" / "nimrod1".exe
-  moveFile nimrod1, "rod" / "nimrod".exe
+  safeRemove(nimrod1)
+  moveFile(nimrod1, "rod" / "nimrod".exe)
   exec "rod" / "nimrod1 cc $# $# rod/nimrod.nim" % [bootOptions, args]
   # Nimrod does not produce an executable again if nothing changed. That's ok:
   result = sameFileContent("rod" / "nimrod".exe, nimrod1)
-  if result:
-    moveFile "bin" / "nimrod".exe, "rod" / "nimrod".exe
-    echo "executables are equal: SUCCESS!"
-  removeFile nimrod1
+  safeRemove("bin" / "nimrod".exe)
+  copyFile("bin" / "nimrod".exe, "rod" / "nimrod".exe)
+  safeRemove(nimrod1)
+  if result: echo "executables are equal: SUCCESS!"
 
 proc boot(args: string) =
   echo "iteration: 1"
diff --git a/lib/pure/cgi.nim b/lib/pure/cgi.nim
index baae244e7..93d29189b 100755
--- a/lib/pure/cgi.nim
+++ b/lib/pure/cgi.nim
@@ -370,6 +370,6 @@ proc getCookie*(name: string): string =
 proc existsCookie*(name: string): bool = 
   ## Checks if a cookie of `name` exists.
   if cookies == nil: cookies = parseCookies(getHttpCookie())
-  result = hasKey(cookies)
+  result = hasKey(cookies, name)
 
 
diff --git a/nim/evals.pas b/nim/evals.pas
index b9672ba37..b7edc43ed 100755
--- a/nim/evals.pas
+++ b/nim/evals.pas
@@ -370,6 +370,7 @@ begin
   while x <> nil do begin
     if sfResult in sym.flags then begin
       result := x.params[0];
+      if result = nil then result := emptyNode;
       exit
     end;
     result := IdNodeTableGet(x.mapping, sym);
diff --git a/rod/ast.nim b/rod/ast.nim
index 24ee4da5b..17e20dd2b 100644..100755
--- a/rod/ast.nim
+++ b/rod/ast.nim
@@ -355,8 +355,6 @@ type
       sym*: PSym
     of nkIdent: 
       ident*: PIdent
-    of nkMetaNode: 
-      nodePtr*: PNodePtr
     else: 
       sons*: TNodeSeq
   
@@ -885,7 +883,6 @@ proc copyNode(src: PNode): PNode =
   of nkSym: result.sym = src.sym
   of nkIdent: result.ident = src.ident
   of nkStrLit..nkTripleStrLit: result.strVal = src.strVal
-  of nkMetaNode: result.nodePtr = src.nodePtr
   else: nil
 
 proc copyTree(src: PNode): PNode = 
@@ -902,7 +899,6 @@ proc copyTree(src: PNode): PNode =
   of nkSym: result.sym = src.sym
   of nkIdent: result.ident = src.ident
   of nkStrLit..nkTripleStrLit: result.strVal = src.strVal
-  of nkMetaNode: result.nodePtr = src.nodePtr
   else: 
     result.sons = nil
     newSons(result, sonsLen(src))
@@ -1018,8 +1014,7 @@ proc IntSetEnlarge(t: var TIntSet) =
   swap(t.data, n)
 
 proc IntSetPut(t: var TIntSet, key: int): PTrunk = 
-  var h: int
-  h = key and t.max
+  var h = key and t.max
   while t.data[h] != nil: 
     if t.data[h].key == key: 
       return t.data[h]
diff --git a/rod/ccgexprs.nim b/rod/ccgexprs.nim
index aa6ec2ed0..aa6ec2ed0 100644..100755
--- a/rod/ccgexprs.nim
+++ b/rod/ccgexprs.nim
diff --git a/rod/cgen.nim b/rod/cgen.nim
index 5399cdccf..5399cdccf 100644..100755
--- a/rod/cgen.nim
+++ b/rod/cgen.nim
diff --git a/rod/condsyms.nim b/rod/condsyms.nim
index 0325a2b77..0325a2b77 100644..100755
--- a/rod/condsyms.nim
+++ b/rod/condsyms.nim
diff --git a/rod/evals.nim b/rod/evals.nim
index 4c7b1df9d..bfc46aa5c 100644..100755
--- a/rod/evals.nim
+++ b/rod/evals.nim
@@ -84,7 +84,10 @@ proc stackTrace(c: PEvalContext, n: PNode, msg: TMsgKind, arg: string = "") =
   liMessage(n.info, msg, arg)
 
 proc isSpecial(n: PNode): bool = 
-  result = (n.kind == nkExceptBranch) or (n.kind == nkEmpty)
+  result = (n.kind == nkExceptBranch) 
+  # or (n.kind == nkEmpty)
+  # XXX this does not work yet! Better to compile too much than to compile to
+  # few programs
 
 proc evalIf(c: PEvalContext, n: PNode): PNode = 
   var i = 0
@@ -131,7 +134,7 @@ proc evalWhile(c: PEvalContext, n: PNode): PNode =
       if result.sons[0] == nil: 
         result = emptyNode    # consume ``break`` token
         break 
-    of nkExceptBranch, nkReturnToken, nkEmpty: 
+    of nkExceptBranch, nkReturnToken: 
       break 
     else: 
       nil
@@ -247,7 +250,7 @@ proc evalCall(c: PEvalContext, n: PNode): PNode =
   if n.typ != nil: d.params[0] = getNullValue(n.typ, n.info)
   pushStackFrame(c, d)
   result = evalAux(c, prc)
-  if isSpecial(result): return 
+  if result.kind == nkExceptBranch: return 
   if n.typ != nil: result = d.params[0]
   popStackFrame(c)
 
@@ -257,7 +260,9 @@ proc evalVariable(c: PStackFrame, sym: PSym): PNode =
   var x = c
   while x != nil: 
     if sfResult in sym.flags: 
-      return x.params[0]
+      result = x.params[0]
+      if result == nil: result = emptyNode
+      return
     result = IdNodeTableGet(x.mapping, sym)
     if result != nil: return 
     x = x.next
@@ -289,14 +294,11 @@ proc evalFieldAccess(c: PEvalContext, n: PNode): PNode =
   # a real field access; proc calls have already been
   # transformed
   # XXX: field checks!
-  var 
-    x: PNode
-    field: PSym
   result = evalAux(c, n.sons[0])
   if isSpecial(result): return 
-  x = result
+  var x = result
   if x.kind != nkPar: InternalError(n.info, "evalFieldAccess")
-  field = n.sons[1].sym
+  var field = n.sons[1].sym
   for i in countup(0, sonsLen(n) - 1): 
     if x.sons[i].kind != nkExprColonExpr: 
       InternalError(n.info, "evalFieldAccess")
@@ -306,10 +308,9 @@ proc evalFieldAccess(c: PEvalContext, n: PNode): PNode =
   result = emptyNode
 
 proc evalAsgn(c: PEvalContext, n: PNode): PNode = 
-  var x: PNode
   result = evalAux(c, n.sons[0])
   if isSpecial(result): return 
-  x = result
+  var x = result
   result = evalAux(c, n.sons[1])
   if isSpecial(result): return 
   x.kind = result.kind
@@ -328,15 +329,9 @@ proc evalAsgn(c: PEvalContext, n: PNode): PNode =
   result = emptyNode
 
 proc evalSwap(c: PEvalContext, n: PNode): PNode = 
-  var 
-    x: PNode
-    tmpi: biggestInt
-    tmpf: biggestFloat
-    tmps: string
-    tmpn: PNode
   result = evalAux(c, n.sons[0])
   if isSpecial(result): return 
-  x = result
+  var x = result
   result = evalAux(c, n.sons[1])
   if isSpecial(result): return 
   if (x.kind != result.kind): 
@@ -344,19 +339,19 @@ proc evalSwap(c: PEvalContext, n: PNode): PNode =
   else: 
     case x.kind
     of nkCharLit..nkInt64Lit: 
-      tmpi = x.intVal
+      var tmpi = x.intVal
       x.intVal = result.intVal
       result.intVal = tmpi
     of nkFloatLit..nkFloat64Lit: 
-      tmpf = x.floatVal
+      var tmpf = x.floatVal
       x.floatVal = result.floatVal
       result.floatVal = tmpf
     of nkStrLit..nkTripleStrLit: 
-      tmps = x.strVal
+      var tmps = x.strVal
       x.strVal = result.strVal
       result.strVal = tmps
     else: 
-      tmpn = copyTree(x)
+      var tmpn = copyTree(x)
       discardSons(x)
       for i in countup(0, sonsLen(result) - 1): addSon(x, result.sons[i])
       discardSons(result)
@@ -375,13 +370,12 @@ proc evalSym(c: PEvalContext, n: PNode): PNode =
   if result == nil: stackTrace(c, n, errCannotInterpretNodeX, n.sym.name.s)
   
 proc evalIncDec(c: PEvalContext, n: PNode, sign: biggestInt): PNode = 
-  var a, b: PNode
   result = evalAux(c, n.sons[1])
   if isSpecial(result): return 
-  a = result
+  var a = result
   result = evalAux(c, n.sons[2])
   if isSpecial(result): return 
-  b = result
+  var b = result
   case a.kind
   of nkCharLit..nkInt64Lit: a.intval = a.intVal + sign * getOrdValue(b)
   else: internalError(n.info, "evalIncDec")
@@ -466,16 +460,15 @@ proc evalUpConv(c: PEvalContext, n: PNode): PNode =
     stackTrace(c, n, errInvalidConversionFromTypeX, typeToString(src))
   
 proc evalRangeChck(c: PEvalContext, n: PNode): PNode = 
-  var x, a, b: PNode
   result = evalAux(c, n.sons[0])
   if isSpecial(result): return 
-  x = result
+  var x = result
   result = evalAux(c, n.sons[1])
   if isSpecial(result): return 
-  a = result
+  var a = result
   result = evalAux(c, n.sons[2])
   if isSpecial(result): return 
-  b = result
+  var b = result
   if leValueConv(a, x) and leValueConv(x, b): 
     result = x                # a <= x and x <= b
     result.typ = n.typ
@@ -494,11 +487,10 @@ proc evalConvCStrToStr(c: PEvalContext, n: PNode): PNode =
   result.typ = n.typ
 
 proc evalRaise(c: PEvalContext, n: PNode): PNode = 
-  var a: PNode
   if n.sons[0] != nil: 
     result = evalAux(c, n.sons[0])
     if isSpecial(result): return 
-    a = result
+    var a = result
     result = newNodeIT(nkExceptBranch, n.info, a.typ)
     addSon(result, a)
     c.lastException = result
@@ -516,14 +508,18 @@ proc evalReturn(c: PEvalContext, n: PNode): PNode =
   result = newNodeIT(nkReturnToken, n.info, nil)
 
 proc evalProc(c: PEvalContext, n: PNode): PNode = 
-  var v: PSym
   if n.sons[genericParamsPos] == nil: 
     if (resultPos < sonsLen(n)) and (n.sons[resultPos] != nil): 
-      v = n.sons[resultPos].sym
+      var v = n.sons[resultPos].sym
       result = getNullValue(v.typ, n.info)
       IdNodeTablePut(c.tos.mapping, v, result)
-    result = evalAux(c, n.sons[codePos])
-    if result.kind == nkReturnToken: result = IdNodeTableGet(c.tos.mapping, v)
+      result = evalAux(c, n.sons[codePos])
+      if result.kind == nkReturnToken: 
+        result = IdNodeTableGet(c.tos.mapping, v)
+    else:
+      result = evalAux(c, n.sons[codePos])
+      if result.kind == nkReturnToken: 
+        result = emptyNode
   else: 
     result = emptyNode
   
@@ -541,51 +537,42 @@ proc evalIs(c: PEvalContext, n: PNode): PNode =
   result = newIntNodeT(ord(inheritanceDiff(result.typ, n.sons[2].typ) >= 0), n)
 
 proc evalSetLengthStr(c: PEvalContext, n: PNode): PNode = 
-  var 
-    a, b: PNode
-    oldLen, newLen: int
   result = evalAux(c, n.sons[1])
   if isSpecial(result): return 
-  a = result
+  var a = result
   result = evalAux(c, n.sons[2])
   if isSpecial(result): return 
-  b = result
+  var b = result
   case a.kind
   of nkStrLit..nkTripleStrLit: 
-    newLen = int(getOrdValue(b))
+    var newLen = int(getOrdValue(b))
     setlen(a.strVal, newLen)
   else: InternalError(n.info, "evalSetLengthStr")
   result = emptyNode
 
 proc evalSetLengthSeq(c: PEvalContext, n: PNode): PNode = 
-  var 
-    a, b: PNode
-    newLen, oldLen: int
   result = evalAux(c, n.sons[1])
   if isSpecial(result): return 
-  a = result
+  var a = result
   result = evalAux(c, n.sons[2])
   if isSpecial(result): return 
-  b = result
+  var b = result
   if a.kind != nkBracket: InternalError(n.info, "evalSetLengthSeq")
-  newLen = int(getOrdValue(b))
-  oldLen = sonsLen(a)
+  var newLen = int(getOrdValue(b))
+  var oldLen = sonsLen(a)
   setlen(a.sons, newLen)
   for i in countup(oldLen, newLen - 1): 
     a.sons[i] = getNullValue(skipTypes(n.sons[1].typ, abstractVar), n.info)
   result = emptyNode
 
 proc evalNewSeq(c: PEvalContext, n: PNode): PNode = 
-  var 
-    a, b: PNode
-    t: PType
   result = evalAux(c, n.sons[1])
   if isSpecial(result): return 
-  a = result
+  var a = result
   result = evalAux(c, n.sons[2])
   if isSpecial(result): return 
-  b = result
-  t = skipTypes(n.sons[1].typ, abstractVar)
+  var b = result
+  var t = skipTypes(n.sons[1].typ, abstractVar)
   if a.kind == nkEmpty: InternalError(n.info, "first parameter is empty")
   a.kind = nkBracket
   a.info = n.info
@@ -601,38 +588,35 @@ proc evalAssert(c: PEvalContext, n: PNode): PNode =
   else: stackTrace(c, n, errAssertionFailed)
   
 proc evalIncl(c: PEvalContext, n: PNode): PNode = 
-  var a, b: PNode
   result = evalAux(c, n.sons[1])
   if isSpecial(result): return 
-  a = result
+  var a = result
   result = evalAux(c, n.sons[2])
   if isSpecial(result): return 
-  b = result
+  var b = result
   if not inSet(a, b): addSon(a, copyTree(b))
   result = emptyNode
 
 proc evalExcl(c: PEvalContext, n: PNode): PNode = 
-  var a, b, r: PNode
   result = evalAux(c, n.sons[1])
   if isSpecial(result): return 
-  a = result
+  var a = result
   result = evalAux(c, n.sons[2])
   if isSpecial(result): return 
-  b = newNodeIT(nkCurly, n.info, n.sons[1].typ)
+  var b = newNodeIT(nkCurly, n.info, n.sons[1].typ)
   addSon(b, result)
-  r = diffSets(a, b)
+  var r = diffSets(a, b)
   discardSons(a)
   for i in countup(0, sonsLen(r) - 1): addSon(a, r.sons[i])
   result = emptyNode
 
 proc evalAppendStrCh(c: PEvalContext, n: PNode): PNode = 
-  var a, b: PNode
   result = evalAux(c, n.sons[1])
   if isSpecial(result): return 
-  a = result
+  var a = result
   result = evalAux(c, n.sons[2])
   if isSpecial(result): return 
-  b = result
+  var b = result
   case a.kind
   of nkStrLit..nkTripleStrLit: add(a.strVal, chr(int(getOrdValue(b))))
   else: InternalError(n.info, "evalAppendStrCh")
@@ -640,10 +624,9 @@ proc evalAppendStrCh(c: PEvalContext, n: PNode): PNode =
 
 proc evalConStrStr(c: PEvalContext, n: PNode): PNode = 
   # we cannot use ``evalOp`` for this as we can here have more than 2 arguments
-  var a: PNode
   result = evalAux(c, n.sons[1])
   if isSpecial(result): return 
-  a = result
+  var a = result
   for i in countup(2, sonsLen(n) - 1): 
     result = evalAux(c, n.sons[i])
     if isSpecial(result): return 
@@ -651,26 +634,24 @@ proc evalConStrStr(c: PEvalContext, n: PNode): PNode =
   result = a
 
 proc evalAppendStrStr(c: PEvalContext, n: PNode): PNode = 
-  var a, b: PNode
   result = evalAux(c, n.sons[1])
   if isSpecial(result): return 
-  a = result
+  var a = result
   result = evalAux(c, n.sons[2])
   if isSpecial(result): return 
-  b = result
+  var b = result
   case a.kind
   of nkStrLit..nkTripleStrLit: a.strVal = a.strVal & getStrValue(b)
   else: InternalError(n.info, "evalAppendStrStr")
   result = emptyNode
 
 proc evalAppendSeqElem(c: PEvalContext, n: PNode): PNode = 
-  var a, b: PNode
   result = evalAux(c, n.sons[1])
   if isSpecial(result): return 
-  a = result
+  var a = result
   result = evalAux(c, n.sons[2])
   if isSpecial(result): return 
-  b = result
+  var b = result
   if a.kind == nkBracket: addSon(a, copyTree(b))
   else: InternalError(n.info, "evalAppendSeqElem")
   result = emptyNode
@@ -684,11 +665,7 @@ proc isEmpty(n: PNode): bool =
   result = (n != nil) and (n.kind == nkEmpty)
 
 proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode = 
-  var 
-    m: TMagic
-    a, b, cc: PNode
-    k: biggestInt
-  m = getMagic(n)
+  var m = getMagic(n)
   case m
   of mNone: result = evalCall(c, n)
   of mIs: result = evalIs(c, n)
@@ -714,7 +691,7 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
   of mNLen: 
     result = evalAux(c, n.sons[1])
     if isSpecial(result): return 
-    a = result
+    var a = result
     result = newNodeIT(nkIntLit, n.info, n.typ)
     case a.kind
     of nkEmpty..nkNilLit: 
@@ -723,10 +700,10 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
   of mNChild: 
     result = evalAux(c, n.sons[1])
     if isSpecial(result): return 
-    a = result
+    var a = result
     result = evalAux(c, n.sons[2])
     if isSpecial(result): return 
-    k = getOrdValue(result)
+    var k = getOrdValue(result)
     if not (a.kind in {nkEmpty..nkNilLit}) and (k >= 0) and (k < sonsLen(a)): 
       result = a.sons[int(k)]
       if result == nil: result = newNode(nkEmpty)
@@ -736,13 +713,13 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
   of mNSetChild: 
     result = evalAux(c, n.sons[1])
     if isSpecial(result): return 
-    a = result
+    var a = result
     result = evalAux(c, n.sons[2])
     if isSpecial(result): return 
-    b = result
+    var b = result
     result = evalAux(c, n.sons[3])
     if isSpecial(result): return 
-    k = getOrdValue(b)
+    var k = getOrdValue(b)
     if (k >= 0) and (k < sonsLen(a)) and not (a.kind in {nkEmpty..nkNilLit}): 
       if result.kind == nkEmpty: a.sons[int(k)] = nil
       else: a.sons[int(k)] = result
@@ -752,7 +729,7 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
   of mNAdd: 
     result = evalAux(c, n.sons[1])
     if isSpecial(result): return 
-    a = result
+    var a = result
     result = evalAux(c, n.sons[2])
     if isSpecial(result): return 
     addSon(a, result)
@@ -760,7 +737,7 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
   of mNAddMultiple: 
     result = evalAux(c, n.sons[1])
     if isSpecial(result): return 
-    a = result
+    var a = result
     result = evalAux(c, n.sons[2])
     if isSpecial(result): return 
     for i in countup(0, sonsLen(result) - 1): addSon(a, result.sons[i])
@@ -768,10 +745,10 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
   of mNDel: 
     result = evalAux(c, n.sons[1])
     if isSpecial(result): return 
-    a = result
+    var a = result
     result = evalAux(c, n.sons[2])
     if isSpecial(result): return 
-    b = result
+    var b = result
     result = evalAux(c, n.sons[3])
     if isSpecial(result): return 
     for i in countup(0, int(getOrdValue(result)) - 1): 
@@ -780,13 +757,13 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
   of mNKind: 
     result = evalAux(c, n.sons[1])
     if isSpecial(result): return 
-    a = result
+    var a = result
     result = newNodeIT(nkIntLit, n.info, n.typ)
     result.intVal = ord(a.kind)
   of mNIntVal: 
     result = evalAux(c, n.sons[1])
     if isSpecial(result): return 
-    a = result
+    var a = result
     result = newNodeIT(nkIntLit, n.info, n.typ)
     case a.kind
     of nkCharLit..nkInt64Lit: result.intVal = a.intVal
@@ -794,7 +771,7 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
   of mNFloatVal: 
     result = evalAux(c, n.sons[1])
     if isSpecial(result): return 
-    a = result
+    var a = result
     result = newNodeIT(nkFloatLit, n.info, n.typ)
     case a.kind
     of nkFloatLit..nkFloat64Lit: result.floatVal = a.floatVal
@@ -811,7 +788,7 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
   of mNStrVal: 
     result = evalAux(c, n.sons[1])
     if isSpecial(result): return 
-    a = result
+    var a = result
     result = newNodeIT(nkStrLit, n.info, n.typ)
     case a.kind
     of nkStrLit..nkTripleStrLit: result.strVal = a.strVal
@@ -819,7 +796,7 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
   of mNSetIntVal: 
     result = evalAux(c, n.sons[1])
     if isSpecial(result): return 
-    a = result
+    var a = result
     result = evalAux(c, n.sons[2])
     if isSpecial(result): return 
     a.intVal = result.intVal  # XXX: exception handling?
@@ -827,7 +804,7 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
   of mNSetFloatVal: 
     result = evalAux(c, n.sons[1])
     if isSpecial(result): return 
-    a = result
+    var a = result
     result = evalAux(c, n.sons[2])
     if isSpecial(result): return 
     a.floatVal = result.floatVal # XXX: exception handling?
@@ -835,7 +812,7 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
   of mNSetSymbol: 
     result = evalAux(c, n.sons[1])
     if isSpecial(result): return 
-    a = result
+    var a = result
     result = evalAux(c, n.sons[2])
     if isSpecial(result): return 
     a.sym = result.sym        # XXX: exception handling?
@@ -843,7 +820,7 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
   of mNSetIdent: 
     result = evalAux(c, n.sons[1])
     if isSpecial(result): return 
-    a = result
+    var a = result
     result = evalAux(c, n.sons[2])
     if isSpecial(result): return 
     a.ident = result.ident    # XXX: exception handling?
@@ -851,7 +828,7 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
   of mNSetType: 
     result = evalAux(c, n.sons[1])
     if isSpecial(result): return 
-    a = result
+    var a = result
     result = evalAux(c, n.sons[2])
     if isSpecial(result): return 
     a.typ = result.typ        # XXX: exception handling?
@@ -859,7 +836,7 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
   of mNSetStrVal: 
     result = evalAux(c, n.sons[1])
     if isSpecial(result): return 
-    a = result
+    var a = result
     result = evalAux(c, n.sons[2])
     if isSpecial(result): return 
     a.strVal = result.strVal  # XXX: exception handling?
@@ -867,14 +844,14 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
   of mNNewNimNode: 
     result = evalAux(c, n.sons[1])
     if isSpecial(result): return 
-    k = getOrdValue(result)
+    var k = getOrdValue(result)
     result = evalAux(c, n.sons[2])
-    if isSpecial(result): return 
-    a = result
+    if result.kind == nkExceptBranch: return 
+    var a = result
     if (k < 0) or (k > ord(high(TNodeKind))): 
       internalError(n.info, "request to create a NimNode with invalid kind")
-    if a.kind == nkNilLit: result = newNodeI(TNodeKind(int(k)), n.info)
-    else: result = newNodeI(TNodeKind(int(k)), a.info)
+    result = newNodeI(TNodeKind(int(k)), 
+      if a.kind == nkNilLit: n.info else: a.info)
   of mNCopyNimNode: 
     result = evalAux(c, n.sons[1])
     if isSpecial(result): return 
@@ -888,33 +865,33 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
     if isSpecial(result): return 
     if not (result.kind in {nkStrLit..nkTripleStrLit}): 
       InternalError(n.info, "no string node")
-    a = result
+    var a = result
     result = newNodeIT(nkIdent, n.info, n.typ)
     result.ident = getIdent(a.strVal)
   of mIdentToStr: 
     result = evalAux(c, n.sons[1])
     if isSpecial(result): return 
     if result.kind != nkIdent: InternalError(n.info, "no ident node")
-    a = result
+    var a = result
     result = newNodeIT(nkStrLit, n.info, n.typ)
     result.strVal = a.ident.s
   of mEqIdent: 
     result = evalAux(c, n.sons[1])
     if isSpecial(result): return 
-    a = result
+    var a = result
     result = evalAux(c, n.sons[2])
     if isSpecial(result): return 
-    b = result
+    var b = result
     result = newNodeIT(nkIntLit, n.info, n.typ)
     if (a.kind == nkIdent) and (b.kind == nkIdent): 
       if a.ident.id == b.ident.id: result.intVal = 1
   of mEqNimrodNode: 
     result = evalAux(c, n.sons[1])
     if isSpecial(result): return 
-    a = result
+    var a = result
     result = evalAux(c, n.sons[2])
     if isSpecial(result): return 
-    b = result
+    var b = result
     result = newNodeIT(nkIntLit, n.info, n.typ)
     if (a == b) or
         (b.kind in {nkNilLit, nkEmpty}) and (a.kind in {nkNilLit, nkEmpty}): 
@@ -941,15 +918,15 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
   of mNewString: 
     result = evalAux(c, n.sons[1])
     if isSpecial(result): return 
-    a = result
+    var a = result
     result = newNodeIT(nkStrLit, n.info, n.typ)
     result.strVal = newString(int(getOrdValue(a)))
   else: 
     result = evalAux(c, n.sons[1])
     if isSpecial(result): return 
-    a = result
-    b = nil
-    cc = nil
+    var a = result
+    var b: PNode = nil
+    var cc: PNode = nil
     if sonsLen(n) > 2: 
       result = evalAux(c, n.sons[2])
       if isSpecial(result): return 
@@ -962,7 +939,6 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
     else: result = evalOp(m, n, a, b, cc)
   
 proc evalAux(c: PEvalContext, n: PNode): PNode = 
-  var a: PNode
   result = emptyNode
   dec(gNestedEvals)
   if gNestedEvals <= 0: stackTrace(c, n, errTooManyIterations)
@@ -974,14 +950,14 @@ proc evalAux(c: PEvalContext, n: PNode): PNode =
   of nkCall, nkHiddenCallConv, nkMacroStmt, nkCommand, nkCallStrLit: 
     result = evalMagicOrCall(c, n)
   of nkCurly, nkBracket, nkRange: 
-    a = copyNode(n)
+    var a = copyNode(n)
     for i in countup(0, sonsLen(n) - 1): 
       result = evalAux(c, n.sons[i])
       if isSpecial(result): return 
       addSon(a, result)
     result = a
   of nkPar: 
-    a = copyTree(n)
+    var a = copyTree(n)
     for i in countup(0, sonsLen(n) - 1): 
       result = evalAux(c, n.sons[i].sons[1])
       if isSpecial(result): return 
@@ -1015,8 +991,7 @@ proc evalAux(c: PEvalContext, n: PNode): PNode =
       result = evalAux(c, n.sons[i])
       case result.kind
       of nkExceptBranch, nkReturnToken, nkBreakStmt: break 
-      else: 
-        nil
+      else: nil
   of nkProcDef, nkMethodDef, nkMacroDef, nkCommentStmt, nkPragma, nkTypeSection, 
      nkTemplateDef, nkConstSection, nkIteratorDef, nkConverterDef, 
      nkIncludeStmt, nkImportStmt, nkFromStmt: 
diff --git a/rod/nimrod.ini b/rod/nimrod.ini
index 98c520c63..e1b3d3bb2 100755
--- a/rod/nimrod.ini
+++ b/rod/nimrod.ini
@@ -39,6 +39,7 @@ Files: "*.nim"
 Files: "rod/readme.txt"
 Files: "rod/nimrod.ini"
 Files: "rod/nimrod.cfg"
+Files: "rod/*.nim"
 Files: "build/empty.txt"
 Files: "bin/empty.txt"
 Files: "nim/*.*"
diff --git a/rod/nimrod.nim b/rod/nimrod.nim
index b5ed532c9..b5ed532c9 100644..100755
--- a/rod/nimrod.nim
+++ b/rod/nimrod.nim
diff --git a/rod/nversion.nim b/rod/nversion.nim
index 9eb8cd117..8fbe87b07 100755
--- a/rod/nversion.nim
+++ b/rod/nversion.nim
@@ -15,6 +15,6 @@ const
   defaultAsmMarkerSymbol* = '!'
   VersionMajor* = 0
   VersionMinor* = 8
-  VersionPatch* = 5
+  VersionPatch* = 6
   VersionAsString* = $VersionMajor & "." & $VersionMinor & "." & $VersionPatch
 
diff --git a/rod/options.nim b/rod/options.nim
index 15bca38b6..15bca38b6 100644..100755
--- a/rod/options.nim
+++ b/rod/options.nim
diff --git a/rod/pbraces.nim b/rod/pbraces.nim
index 4a5f85b85..4a5f85b85 100644..100755
--- a/rod/pbraces.nim
+++ b/rod/pbraces.nim
diff --git a/rod/pnimsyn.nim b/rod/pnimsyn.nim
index 21980ccc4..21980ccc4 100644..100755
--- a/rod/pnimsyn.nim
+++ b/rod/pnimsyn.nim
diff --git a/rod/pragmas.nim b/rod/pragmas.nim
index 72a6bd4e4..72a6bd4e4 100644..100755
--- a/rod/pragmas.nim
+++ b/rod/pragmas.nim
diff --git a/rod/rodread.nim b/rod/rodread.nim
index ee295d122..ee295d122 100644..100755
--- a/rod/rodread.nim
+++ b/rod/rodread.nim
diff --git a/rod/rodwrite.nim b/rod/rodwrite.nim
index 370ebc314..370ebc314 100644..100755
--- a/rod/rodwrite.nim
+++ b/rod/rodwrite.nim
diff --git a/rod/sem.nim b/rod/sem.nim
index 2f9f90335..2f9f90335 100644..100755
--- a/rod/sem.nim
+++ b/rod/sem.nim
diff --git a/rod/semdata.nim b/rod/semdata.nim
index 5020f103d..5020f103d 100644..100755
--- a/rod/semdata.nim
+++ b/rod/semdata.nim
diff --git a/rod/semfold.nim b/rod/semfold.nim
index 455ddf2b8..455ddf2b8 100644..100755
--- a/rod/semfold.nim
+++ b/rod/semfold.nim
diff --git a/rod/semstmts.nim b/rod/semstmts.nim
index c7dfc8466..415bb1a32 100755
--- a/rod/semstmts.nim
+++ b/rod/semstmts.nim
@@ -28,16 +28,16 @@ proc semWhen(c: PContext, n: PNode): PNode =
         result = semStmt(c, it.sons[0]) # do not open a new scope!
     else: illFormedAst(n)
   if result == nil: 
-    result = newNodeI(nkNilLit, n.info) # The ``when`` statement implements the mechanism for platform dependant
-                                        # code. Thus we try to ensure here consistent ID allocation after the
-                                        # ``when`` statement.
+    result = newNodeI(nkNilLit, n.info) 
+  # The ``when`` statement implements the mechanism for platform dependant
+  # code. Thus we try to ensure here consistent ID allocation after the
+  # ``when`` statement.
   IDsynchronizationPoint(200)
 
 proc semIf(c: PContext, n: PNode): PNode = 
-  var it: PNode
   result = n
   for i in countup(0, sonsLen(n) - 1): 
-    it = n.sons[i]
+    var it = n.sons[i]
     if it == nil: illFormedAst(n)
     case it.kind
     of nkElifBranch: 
@@ -58,19 +58,17 @@ proc semDiscard(c: PContext, n: PNode): PNode =
   n.sons[0] = semExprWithType(c, n.sons[0])
   if n.sons[0].typ == nil: liMessage(n.info, errInvalidDiscard)
   
-proc semBreakOrContinue(c: PContext, n: PNode): PNode = 
-  var 
-    s: PSym
-    x: PNode
+proc semBreakOrContinue(c: PContext, n: PNode): PNode =
   result = n
   checkSonsLen(n, 1)
   if n.sons[0] != nil: 
+    var s: PSym
     case n.sons[0].kind
     of nkIdent: s = lookUp(c, n.sons[0])
     of nkSym: s = n.sons[0].sym
     else: illFormedAst(n)
     if (s.kind == skLabel) and (s.owner.id == c.p.owner.id): 
-      x = newSymNode(s)
+      var x = newSymNode(s)
       x.info = n.info
       incl(s.flags, sfUsed)
       n.sons[0] = x
@@ -80,13 +78,12 @@ proc semBreakOrContinue(c: PContext, n: PNode): PNode =
     liMessage(n.info, errInvalidControlFlowX, renderTree(n, {renderNoComments}))
   
 proc semBlock(c: PContext, n: PNode): PNode = 
-  var labl: PSym
   result = n
   Inc(c.p.nestedBlockCounter)
   checkSonsLen(n, 2)
   openScope(c.tab)            # BUGFIX: label is in the scope of block!
   if n.sons[0] != nil: 
-    labl = newSymS(skLabel, n.sons[0], c)
+    var labl = newSymS(skLabel, n.sons[0], c)
     addDecl(c, labl)
     n.sons[0] = newSymNode(labl) # BUGFIX
   n.sons[1] = semStmt(c, n.sons[1])
@@ -109,7 +106,8 @@ proc semAsm(con: PContext, n: PNode): PNode =
     result = copyNode(n)
     str = n.sons[1].strVal
     if str == "": 
-      liMessage(n.info, errEmptyAsm) # now parse the string literal and substitute symbols:
+      liMessage(n.info, errEmptyAsm) 
+    # now parse the string literal and substitute symbols:
     a = 0
     while true: 
       b = strutils.find(str, marker, a)
@@ -143,18 +141,13 @@ proc semWhile(c: PContext, n: PNode): PNode =
   closeScope(c.tab)
 
 proc semCase(c: PContext, n: PNode): PNode = 
-  var 
-    length: int
-    covered: biggestint       # for some types we count to check if all cases have been covered
-    chckCovered: bool
-    x: PNode
   # check selector:
   result = n
   checkMinSonsLen(n, 2)
   openScope(c.tab)
   n.sons[0] = semExprWithType(c, n.sons[0])
-  chckCovered = false
-  covered = 0
+  var chckCovered = false
+  var covered: biggestint = 0
   case skipTypes(n.sons[0].Typ, abstractVarRange).Kind
   of tyInt..tyInt64, tyChar, tyEnum: 
     chckCovered = true
@@ -162,12 +155,12 @@ proc semCase(c: PContext, n: PNode): PNode =
     nil
   else: liMessage(n.info, errSelectorMustBeOfCertainTypes)
   for i in countup(1, sonsLen(n) - 1): 
-    x = n.sons[i]
+    var x = n.sons[i]
     case x.kind
     of nkOfBranch: 
       checkMinSonsLen(x, 2)
       semCaseBranch(c, n, x, i, covered)
-      length = sonsLen(x)
+      var length = sonsLen(x)
       x.sons[length - 1] = semStmtScope(c, x.sons[length - 1])
     of nkElifBranch: 
       chckCovered = false
@@ -313,8 +306,9 @@ proc semVar(c: PContext, n: PNode): PNode =
     if a.sons[length - 2] != nil: typ = semTypeNode(c, a.sons[length - 2], nil)
     else: typ = nil
     if a.sons[length - 1] != nil: 
-      def = semExprWithType(c, a.sons[length - 1]) # BUGFIX: ``fitNode`` is needed here!
-                                                   # check type compability between def.typ and typ:
+      def = semExprWithType(c, a.sons[length - 1]) 
+      # BUGFIX: ``fitNode`` is needed here!
+      # check type compability between def.typ and typ:
       if (typ != nil): def = fitNode(c, typ, def)
       else: typ = def.typ
     else: 
@@ -369,7 +363,8 @@ proc semConst(c: PContext, n: PNode): PNode =
       v = semIdentWithPragma(c, skConst, a.sons[0], {})
     if a.sons[1] != nil: typ = semTypeNode(c, a.sons[1], nil)
     else: typ = nil
-    def = semAndEvalConstExpr(c, a.sons[2]) # check type compability between def.typ and typ:
+    def = semAndEvalConstExpr(c, a.sons[2]) 
+    # check type compability between def.typ and typ:
     if (typ != nil): 
       def = fitRemoveHiddenConv(c, typ, def)
     else: 
@@ -397,7 +392,8 @@ proc semFor(c: PContext, n: PNode): PNode =
   length = sonsLen(n)
   openScope(c.tab)
   if n.sons[length - 2].kind == nkRange: 
-    checkSonsLen(n.sons[length - 2], 2) # convert ``in 3..5`` to ``in countup(3, 5)``
+    checkSonsLen(n.sons[length - 2], 2) 
+    # convert ``in 3..5`` to ``in countup(3, 5)``
     countupNode = newNodeI(nkCall, n.sons[length - 2].info)
     countUp = StrTableGet(magicsys.systemModule.Tab, getIdent("countup"))
     if (countUp == nil): liMessage(countupNode.info, errSystemNeeds, "countup")
@@ -431,32 +427,27 @@ proc semFor(c: PContext, n: PNode): PNode =
   Dec(c.p.nestedLoopCounter)
 
 proc semRaise(c: PContext, n: PNode): PNode = 
-  var typ: PType
   result = n
   checkSonsLen(n, 1)
   if n.sons[0] != nil: 
     n.sons[0] = semExprWithType(c, n.sons[0])
-    typ = n.sons[0].typ
+    var typ = n.sons[0].typ
     if (typ.kind != tyRef) or (typ.sons[0].kind != tyObject): 
       liMessage(n.info, errExprCannotBeRaised)
   
 proc semTry(c: PContext, n: PNode): PNode = 
-  var 
-    length: int
-    a: PNode
-    typ: PType
-    check: TIntSet
+  var check: TIntSet
   result = n
   checkMinSonsLen(n, 2)
   n.sons[0] = semStmtScope(c, n.sons[0])
   IntSetInit(check)
   for i in countup(1, sonsLen(n) - 1): 
-    a = n.sons[i]
+    var a = n.sons[i]
     checkMinSonsLen(a, 1)
-    length = sonsLen(a)
+    var length = sonsLen(a)
     if a.kind == nkExceptBranch: 
       for j in countup(0, length - 2): 
-        typ = semTypeNode(c, a.sons[j], nil)
+        var typ = semTypeNode(c, a.sons[j], nil)
         if typ.kind == tyRef: typ = typ.sons[0]
         if (typ.kind != tyObject): 
           liMessage(a.sons[j].info, errExprCannotBeRaised)
@@ -465,26 +456,24 @@ proc semTry(c: PContext, n: PNode): PNode =
         if IntSetContainsOrIncl(check, typ.id): 
           liMessage(a.sons[j].info, errExceptionAlreadyHandled)
     elif a.kind != nkFinally: 
-      illFormedAst(n)         # last child of an nkExcept/nkFinally branch is a statement:
+      illFormedAst(n) 
+    # last child of an nkExcept/nkFinally branch is a statement:
     a.sons[length - 1] = semStmtScope(c, a.sons[length - 1])
 
 proc semGenericParamList(c: PContext, n: PNode, father: PType = nil): PNode = 
-  var 
-    L: int
-    s: PSym
-    a, def: PNode
-    typ: PType
   result = copyNode(n)
   if n.kind != nkGenericParams: InternalError(n.info, "semGenericParamList")
   for i in countup(0, sonsLen(n) - 1): 
-    a = n.sons[i]
+    var a = n.sons[i]
     if a.kind != nkIdentDefs: illFormedAst(n)
-    L = sonsLen(a)
-    def = a.sons[L - 1]
+    var L = sonsLen(a)
+    var def = a.sons[L - 1]
+    var typ: PType
     if a.sons[L - 2] != nil: typ = semTypeNode(c, a.sons[L - 2], nil)
     elif def != nil: typ = newTypeS(tyExpr, c)
     else: typ = nil
     for j in countup(0, L - 3): 
+      var s: PSym
       if (typ == nil) or (typ.kind == tyTypeDesc): 
         s = newSymS(skType, a.sons[j], c)
         s.typ = newTypeS(tyGenericParam, c)
@@ -499,11 +488,10 @@ proc semGenericParamList(c: PContext, n: PNode, father: PType = nil): PNode =
       addDecl(c, s)
 
 proc addGenericParamListToScope(c: PContext, n: PNode) = 
-  var a: PNode
   if n.kind != nkGenericParams: 
     InternalError(n.info, "addGenericParamListToScope")
   for i in countup(0, sonsLen(n) - 1): 
-    a = n.sons[i]
+    var a = n.sons[i]
     if a.kind != nkSym: internalError(a.info, "addGenericParamListToScope")
     addDecl(c, a.sym)
 
@@ -512,8 +500,9 @@ proc SemTypeSection(c: PContext, n: PNode): PNode =
     s: PSym
     t, body: PType
     a: PNode
-  result = n # process the symbols on the left side for the whole type section, before
-             # we even look at the type definitions on the right
+  result = n 
+  # process the symbols on the left side for the whole type section, before
+  # we even look at the type definitions on the right
   for i in countup(0, sonsLen(n) - 1): 
     a = n.sons[i]
     if a.kind == nkCommentStmt: continue 
@@ -528,7 +517,8 @@ proc SemTypeSection(c: PContext, n: PNode): PNode =
     s.typ = newTypeS(tyForward, c)
     s.typ.sym = s             # process pragmas:
     if a.sons[0].kind == nkPragmaExpr: 
-      pragma(c, s, a.sons[0].sons[1], typePragmas) # add it here, so that recursive types are possible:
+      pragma(c, s, a.sons[0].sons[1], typePragmas) 
+    # add it here, so that recursive types are possible:
     addInterfaceDecl(c, s)
     a.sons[0] = newSymNode(s)
   for i in countup(0, sonsLen(n) - 1): 
@@ -571,7 +561,8 @@ proc SemTypeSection(c: PContext, n: PNode): PNode =
     a = n.sons[i]
     if a.kind == nkCommentStmt: continue 
     if (a.sons[0].kind != nkSym): IllFormedAst(a)
-    s = a.sons[0].sym         # compute the type's size and check for illegal recursions:
+    s = a.sons[0].sym         
+    # compute the type's size and check for illegal recursions:
     if a.sons[1] == nil: 
       if (a.sons[2] != nil) and
           (a.sons[2].kind in {nkSym, nkIdent, nkAccQuoted}): 
@@ -592,9 +583,8 @@ proc addParams(c: PContext, n: PNode) =
     addDecl(c, n.sons[i].sym)
 
 proc semBorrow(c: PContext, n: PNode, s: PSym) = 
-  var b: PSym
   # search for the correct alias:
-  b = SearchForBorrowProc(c, s, c.tab.tos - 2)
+  var b = SearchForBorrowProc(c, s, c.tab.tos - 2)
   if b == nil: 
     liMessage(n.info, errNoSymbolToBorrowFromFound) # store the alias:
   n.sons[codePos] = newSymNode(b)
@@ -605,9 +595,8 @@ proc sideEffectsCheck(c: PContext, s: PSym) =
     liMessage(s.info, errXhasSideEffects, s.name.s)
   
 proc addResult(c: PContext, t: PType, info: TLineInfo) = 
-  var s: PSym
   if t != nil: 
-    s = newSym(skVar, getIdent("result"), getCurrOwner())
+    var s = newSym(skVar, getIdent("result"), getCurrOwner())
     s.info = info
     s.typ = t
     incl(s.flags, sfResult)
@@ -619,14 +608,11 @@ proc addResultNode(c: PContext, n: PNode) =
   if c.p.resultSym != nil: addSon(n, newSymNode(c.p.resultSym))
   
 proc semLambda(c: PContext, n: PNode): PNode = 
-  var 
-    s: PSym
-    oldP: PProcCon
   result = n
   checkSonsLen(n, codePos + 1)
-  s = newSym(skProc, getIdent(":anonymous"), getCurrOwner())
+  var s = newSym(skProc, getIdent(":anonymous"), getCurrOwner())
   s.info = n.info
-  oldP = c.p                  # restore later
+  var oldP = c.p                  # restore later
   s.ast = n
   n.sons[namePos] = newSymNode(s)
   pushOwner(s)
@@ -660,7 +646,6 @@ proc semProcAux(c: PContext, n: PNode, kind: TSymKind,
                 validPragmas: TSpecialWords): PNode = 
   var 
     s, proto: PSym
-    oldP: PProcCon
     gp: PNode
   result = n
   checkSonsLen(n, codePos + 1)
@@ -670,7 +655,7 @@ proc semProcAux(c: PContext, n: PNode, kind: TSymKind,
   else: 
     s = semIdentVis(c, kind, n.sons[0], {})
   n.sons[namePos] = newSymNode(s)
-  oldP = c.p                  # restore later
+  var oldP = c.p                  # restore later
   if sfStar in s.flags: incl(s.flags, sfInInterface)
   s.ast = n
   pushOwner(s)
@@ -693,8 +678,9 @@ proc semProcAux(c: PContext, n: PNode, kind: TSymKind,
     if oldP.owner.kind != skModule: 
       s.typ.callConv = ccClosure
     else: 
-      s.typ.callConv = lastOptionEntry(c).defaultCC # add it here, so that recursive procs are possible:
-                                                    # -2 because we have a scope open for parameters
+      s.typ.callConv = lastOptionEntry(c).defaultCC 
+    # add it here, so that recursive procs are possible:
+    # -2 because we have a scope open for parameters
     if kind in OverloadableSyms: 
       addInterfaceOverloadableSymAt(c, s, c.tab.tos - 2)
     else: 
@@ -745,12 +731,9 @@ proc semProcAux(c: PContext, n: PNode, kind: TSymKind,
   c.p = oldP                  # restore
   
 proc semIterator(c: PContext, n: PNode): PNode = 
-  var 
-    t: PType
-    s: PSym
   result = semProcAux(c, n, skIterator, iteratorPragmas)
-  s = result.sons[namePos].sym
-  t = s.typ
+  var s = result.sons[namePos].sym
+  var t = s.typ
   if t.sons[0] == nil: liMessage(n.info, errXNeedsReturnType, "iterator")
   if n.sons[codePos] == nil: liMessage(n.info, errImplOfXexpected, s.name.s)
   
@@ -762,43 +745,34 @@ proc semMethod(c: PContext, n: PNode): PNode =
   result = semProcAux(c, n, skMethod, methodPragmas)
 
 proc semConverterDef(c: PContext, n: PNode): PNode = 
-  var 
-    t: PType
-    s: PSym
   if not isTopLevel(c): liMessage(n.info, errXOnlyAtModuleScope, "converter")
   checkSonsLen(n, codePos + 1)
   if n.sons[genericParamsPos] != nil: 
     liMessage(n.info, errNoGenericParamsAllowedForX, "converter")
   result = semProcAux(c, n, skConverter, converterPragmas)
-  s = result.sons[namePos].sym
-  t = s.typ
+  var s = result.sons[namePos].sym
+  var t = s.typ
   if t.sons[0] == nil: liMessage(n.info, errXNeedsReturnType, "converter")
   if sonsLen(t) != 2: liMessage(n.info, errXRequiresOneArgument, "converter")
   addConverter(c, s)
 
 proc semMacroDef(c: PContext, n: PNode): PNode = 
-  var 
-    t: PType
-    s: PSym
   checkSonsLen(n, codePos + 1)
   if n.sons[genericParamsPos] != nil: 
     liMessage(n.info, errNoGenericParamsAllowedForX, "macro")
   result = semProcAux(c, n, skMacro, macroPragmas)
-  s = result.sons[namePos].sym
-  t = s.typ
+  var s = result.sons[namePos].sym
+  var t = s.typ
   if t.sons[0] == nil: liMessage(n.info, errXNeedsReturnType, "macro")
   if sonsLen(t) != 2: liMessage(n.info, errXRequiresOneArgument, "macro")
   if n.sons[codePos] == nil: liMessage(n.info, errImplOfXexpected, s.name.s)
   
 proc evalInclude(c: PContext, n: PNode): PNode = 
-  var 
-    fileIndex: int
-    f: string
   result = newNodeI(nkStmtList, n.info)
   addSon(result, n)           # the rodwriter needs include information!
   for i in countup(0, sonsLen(n) - 1): 
-    f = getModuleFile(n.sons[i])
-    fileIndex = includeFilename(f)
+    var f = getModuleFile(n.sons[i])
+    var fileIndex = includeFilename(f)
     if IntSetContainsOrIncl(c.includedFiles, fileIndex): 
       liMessage(n.info, errRecursiveDependencyX, f)
     addSon(result, semStmt(c, gIncludeFile(f)))
@@ -806,26 +780,23 @@ proc evalInclude(c: PContext, n: PNode): PNode =
 
 proc semCommand(c: PContext, n: PNode): PNode = 
   result = semExpr(c, n)
-  if result.typ != nil: liMessage(n.info, errDiscardValue)
+  if result.typ != nil and result.typ.kind != tyStmt:
+    liMessage(n.info, errDiscardValue)
   
 proc SemStmt(c: PContext, n: PNode): PNode = 
   const                       # must be last statements in a block:
     LastBlockStmts = {nkRaiseStmt, nkReturnStmt, nkBreakStmt, nkContinueStmt}
-  var length: int
   result = n
   if n == nil: return 
   if nfSem in n.flags: return 
   case n.kind
-  of nkAsgn: 
-    result = semAsgn(c, n)
+  of nkAsgn: result = semAsgn(c, n)
   of nkCall, nkInfix, nkPrefix, nkPostfix, nkCommand, nkMacroStmt, nkCallStrLit: 
     result = semCommand(c, n)
-  of nkEmpty, nkCommentStmt, nkNilLit: 
-    nil
-  of nkBlockStmt: 
-    result = semBlock(c, n)
+  of nkEmpty, nkCommentStmt, nkNilLit: nil
+  of nkBlockStmt: result = semBlock(c, n)
   of nkStmtList: 
-    length = sonsLen(n)
+    var length = sonsLen(n)
     for i in countup(0, length - 1): 
       n.sons[i] = semStmt(c, n.sons[i])
       if (n.sons[i].kind in LastBlockStmts): 
@@ -834,50 +805,28 @@ proc SemStmt(c: PContext, n: PNode): PNode =
           of nkPragma, nkCommentStmt, nkNilLit, nkEmpty: 
             nil
           else: liMessage(n.sons[j].info, errStmtInvalidAfterReturn)
-  of nkRaiseStmt: 
-    result = semRaise(c, n)
-  of nkVarSection: 
-    result = semVar(c, n)
-  of nkConstSection: 
-    result = semConst(c, n)
-  of nkTypeSection: 
-    result = SemTypeSection(c, n)
-  of nkIfStmt: 
-    result = SemIf(c, n)
-  of nkWhenStmt: 
-    result = semWhen(c, n)
-  of nkDiscardStmt: 
-    result = semDiscard(c, n)
-  of nkWhileStmt: 
-    result = semWhile(c, n)
-  of nkTryStmt: 
-    result = semTry(c, n)
-  of nkBreakStmt, nkContinueStmt: 
-    result = semBreakOrContinue(c, n)
-  of nkForStmt: 
-    result = semFor(c, n)
-  of nkCaseStmt: 
-    result = semCase(c, n)
-  of nkReturnStmt: 
-    result = semReturn(c, n)
-  of nkAsmStmt: 
-    result = semAsm(c, n)
-  of nkYieldStmt: 
-    result = semYield(c, n)
-  of nkPragma: 
-    pragma(c, c.p.owner, n, stmtPragmas)
-  of nkIteratorDef: 
-    result = semIterator(c, n)
-  of nkProcDef: 
-    result = semProc(c, n)
-  of nkMethodDef: 
-    result = semMethod(c, n)
-  of nkConverterDef: 
-    result = semConverterDef(c, n)
-  of nkMacroDef: 
-    result = semMacroDef(c, n)
-  of nkTemplateDef: 
-    result = semTemplateDef(c, n)
+  of nkRaiseStmt: result = semRaise(c, n)
+  of nkVarSection: result = semVar(c, n)
+  of nkConstSection: result = semConst(c, n)
+  of nkTypeSection: result = SemTypeSection(c, n)
+  of nkIfStmt: result = SemIf(c, n)
+  of nkWhenStmt: result = semWhen(c, n)
+  of nkDiscardStmt: result = semDiscard(c, n)
+  of nkWhileStmt: result = semWhile(c, n)
+  of nkTryStmt: result = semTry(c, n)
+  of nkBreakStmt, nkContinueStmt: result = semBreakOrContinue(c, n)
+  of nkForStmt: result = semFor(c, n)
+  of nkCaseStmt: result = semCase(c, n)
+  of nkReturnStmt: result = semReturn(c, n)
+  of nkAsmStmt: result = semAsm(c, n)
+  of nkYieldStmt: result = semYield(c, n)
+  of nkPragma: pragma(c, c.p.owner, n, stmtPragmas)
+  of nkIteratorDef: result = semIterator(c, n)
+  of nkProcDef: result = semProc(c, n)
+  of nkMethodDef: result = semMethod(c, n)
+  of nkConverterDef: result = semConverterDef(c, n)
+  of nkMacroDef: result = semMacroDef(c, n)
+  of nkTemplateDef: result = semTemplateDef(c, n)
   of nkImportStmt: 
     if not isTopLevel(c): liMessage(n.info, errXOnlyAtModuleScope, "import")
     result = evalImport(c, n)
diff --git a/rod/transf.nim b/rod/transf.nim
index 6bb825e13..6bb825e13 100644..100755
--- a/rod/transf.nim
+++ b/rod/transf.nim
diff --git a/rod/trees.nim b/rod/trees.nim
index 69b77b8ab..69b77b8ab 100644..100755
--- a/rod/trees.nim
+++ b/rod/trees.nim
diff --git a/tests/tclosure.nim b/tests/tclosure.nim
index 399f68463..761e9a8f3 100755
--- a/tests/tclosure.nim
+++ b/tests/tclosure.nim
@@ -12,8 +12,8 @@ var
 
 proc testA() =
   var p = 0
-  map(myData, lambda (x: int): int =
-                result = x + 1 shl (lambda (y: int): int =
+  map(myData, proc (x: int): int =
+                result = x + 1 shl (proc (y: int): int =
                   return y + p
                 )(0)
                 inc(p))
diff --git a/tests/tconsteval.nim b/tests/tconsteval.nim
index 2bda0651d..ce90d7c27 100755
--- a/tests/tconsteval.nim
+++ b/tests/tconsteval.nim
@@ -1,3 +1,4 @@
+import strutils
 
 const
   HelpText = """
@@ -9,7 +10,7 @@ const
 Compiled at: $2, $3
 
 Usage:
-  koch.py [options] command [options for command]
+  koch [options] command [options for command]
 Options:
   --force, -f, -B, -b      forces rebuild
   --help, -h               shows this help and quits
@@ -23,4 +24,5 @@ Possible Commands:
 """ % [NimrodVersion & repeatChar(44-len(NimrodVersion)), 
        CompileDate, CompileTime]
 
+echo helpText
 
diff --git a/tests/tenuminh.nim b/tests/tenuminh.nim
deleted file mode 100755
index 02c71613b..000000000
--- a/tests/tenuminh.nim
+++ /dev/null
@@ -1,10 +0,0 @@
-type
-  TCardPts = enum
-    North, West, South, East
-
-  TCardPts2 = enum of TCardPts
-    N, W, S, E
-
-# If I do:
-var y = W
-echo($y & "=" & $ord(y)) #OUT W=5
diff --git a/tests/thallo.nim b/tests/thallo.nim
index 86aa89f0a..f1cae5897 100755
--- a/tests/thallo.nim
+++ b/tests/thallo.nim
@@ -61,11 +61,15 @@ for x, y in items([(1, 2), (3, 4), (6, 1), (5, 2)]):
   echo x
   echo y
   
+proc simpleConst(): int = return 34
+  
 # test constant evaluation: 
-const 
+const  
+  constEval3 = simpleConst()
   constEval = "abc".contains('b')
   constEval2 = fac(7)
 
+echo(constEval3)
 echo(constEval)
 echo(constEval2)
 echo(1.`+`(2))
diff --git a/tests/titer5.nim b/tests/titer5.nim
index c84c5c807..1ac37ba66 100755
--- a/tests/titer5.nim
+++ b/tests/titer5.nim
@@ -1,4 +1,6 @@
 # Test method call syntax for iterators:
+import strutils
+
 const lines = """abc  xyz"""
 
 for x in lines.split():
diff --git a/web/download.txt b/web/download.txt
index 2bb131227..21ca1f57d 100755
--- a/web/download.txt
+++ b/web/download.txt
@@ -3,8 +3,8 @@
 
 Here you can download the latest version of the Nimrod Compiler.
 Please choose your platform:
-* source-based installation: `<download/nimrod_0.8.2.zip>`_
-* installer for Windows XP/Vista (i386): `<download/nimrod_0.8.2.exe>`_
+* source-based installation: `<download/nimrod_0.8.6.zip>`_
+* installer for Windows XP/Vista (i386): `<download/nimrod_0.8.6.exe>`_
   (includes GCC and everything else you need)
 
 The source-based installation has been tested on these systems:
diff --git a/web/news.txt b/web/news.txt
index 70eac26b6..36457803c 100755
--- a/web/news.txt
+++ b/web/news.txt
@@ -3,7 +3,7 @@ News
 ====
 
 
-2009-XX-XX Version 0.8.6 released
+2009-12-21 Version 0.8.6 released
 =================================
 
 Version 0.8.6 has been released! Get it `here <download.html>`_. The version
@@ -15,8 +15,6 @@ Bugfixes
 --------
 - The pragmas ``hint[X]:off`` and ``warning[X]:off`` now work.
 - Method call syntax for iterators works again (``for x in lines.split()``).
-- Many bugfixes concerning macro evaluation.
-- Many bugfixes concerning compile-time evaluation.
 - Fixed a typo in ``removeDir`` for POSIX that lead to an infinite recursion.
 - The compiler now checks that module filenames are valid identifiers.
 - Empty patterns for the ``dynlib`` pragma are now possible. 
@@ -34,11 +32,12 @@ Additions
 - Grammar/parser: ``SAD|IND`` is allowed before any kind of closing bracket.
   This allows for more flexible source code formating.
 - The compiler now uses a *bind* table for symbol lookup within a ``bind``
-  context. (See `<manual/#templates>`_ for details.)
+  context. (See `<manual.html#templates>`_ for details.)
 - ``discard """my long comment"""`` is now optimized away.
 - New ``--floatChecks: on|off`` switches and pragmas for better debugging
   of floating point operations. (See
-  `<manual/#pre-defined-floating-point-types>`_ for details.)
+  `<manual.html#pre-defined-floating-point-types>`_ for details.)
+- The manual has been improved. (Many thanks to Philippe Lhoste!)
 
 
 Changes affecting backwards compatibility
diff --git a/web/ticker.txt b/web/ticker.txt
index 4f33e4ce7..35826948f 100755
--- a/web/ticker.txt
+++ b/web/ticker.txt
@@ -1,6 +1,9 @@
+| `2009-12-21`:newsdate:
+| Nimrod version 0.8.6 has been released! 
+  Get it `here <./download.html>`_. Merry Christmas!
+
 | `2009-10-21`:newsdate:
 | Nimrod version 0.8.2 has been released!
-  Get it `here <./download.html>`_.
 
 | `2009-09-12`:newsdate:
 | Nimrod version 0.8.0 has been released!