summary refs log tree commit diff stats
path: root/lib/system/alloc.nim
Commit message (Expand)AuthorAgeFilesLines
* fix allocator corruption for large sizes (#7338)jcosborn2018-03-171-36/+45
* make the allocator take a special path for allocations bigger than 2GB; fixes...Araq2018-02-271-2/+26
* fixes the tracking of 'occupied memory'Andreas Rumpf2018-01-301-6/+96
* alloc.nim: Make 'logAlloc' produce a toy Nim program for easier memory tracingAndreas Rumpf2018-01-181-2/+2
* GC improvements; distinguish between thread local and globals in the marking ...Araq2018-01-141-4/+4
* allocator: minor fix for deallocOsPagesAndreas Rumpf2017-12-111-0/+1
* make the new allocator workAraq2017-12-071-8/+15
* make allocator use the TLSF algorithm; work in progressAraq2017-12-071-30/+127
* fixes #3558Araq2017-10-161-7/+8
* fixes withRegion for --gc:stackAndreas Rumpf2017-06-191-1/+0
* memory manager: use less memory; corruption preventionAndreas Rumpf2017-04-021-59/+47
* Fixes #4719. (#5585)Eugene Kabanov2017-03-231-0/+3
* hotfix: allocator: don't set origSize to 0Araq2017-03-151-2/+2
* make memory tracker work without onThreadCreationAraq2017-03-141-4/+13
* introduce nimMaxHeap define to fight memory overcommitAndreas Rumpf2017-02-101-0/+5
* system.nim: don't use deprecated symbols/constructsAraq2017-02-081-1/+1
* critical realloc bugfix; refs #4818Andreas Rumpf2017-02-031-3/+4
* allocator: fixes regression: get alignment right for small objectsAraq2017-01-311-0/+2
* make AVL tree node part of the memory regions; fixes hard to reproduce channe...Araq2017-01-311-15/+15
* fix the racy allocator properlyAndreas Rumpf2017-01-311-1/+1
* added test case; threadex example crashes nowAraq2017-01-301-1/+5
* fixes #5301Araq2017-01-301-40/+55
* improvements to memtrackingAndreas Rumpf2017-01-261-1/+7
* memory allocator hotfix: do not allocate tremendous amounts of memoryAndreas Rumpf2017-01-131-11/+13
* disable new alloctor behaviour for emscriptenAndreas Rumpf2016-12-271-4/+5
* fixes #4818Araq2016-12-181-2/+22
* further memtracking improvementsAndreas Rumpf2016-11-241-0/+6
* bugfix: bottom of AVL tree is now threadsafeAndreas Rumpf2016-09-241-2/+2
* clean up a few stray c_stdout's in gc debug codeJacek Sieka2016-07-311-3/+3
* fix types of ansi_c/sysio to more closely match C ABIJacek Sieka2016-06-051-2/+2
* fixes #3184Andreas Rumpf2016-05-221-29/+32
* beginnings of --gc:stackAndreas Rumpf2016-03-121-147/+1
* further progress on --gc:v2Andreas Rumpf2016-02-171-4/+4
* Use ByteAddress instead of deprecated TAddressdef2016-01-241-1/+1
* lambda lifting support for iterToProc pluginAraq2015-12-011-1/+4
* Merge remote-tracking branch 'nim-lang/devel' into emscripten-supportAndrey Sobolev2015-10-011-4/+7
|\
| * Add option to disable munmap() use in the allocator.Reimer Behrends2015-09-181-4/+7
* | mmap non PageSize aligned supportAndrey Sobolev2015-09-101-1/+48
|/
* proper distinction between --gc:none and --os:standaloneAraq2015-06-291-9/+24
* Fix typos in commentsdef2015-06-211-1/+1
* lib/system/a-e - Dropped 'T' from typespdw2015-06-041-90/+94
* Use more Natural and Positive numbers in proc parametersdef2015-04-061-102/+102
* some better sysassert messagesSimon Hafner2015-04-041-2/+2
* introduced 'benign' pragmaAraq2014-10-251-1/+1
* renamefestAraq2014-08-231-2/+2
* system files use new identifiersAraq2014-08-231-35/+35
* the big renamefest: first stepsAraq2014-08-221-2/+2
* added getTotalSharedMem et al.Jostein Berre Eliassen2014-05-201-0/+16
* first version of 'spawn'Araq2014-04-161-2/+5
* improvements for 'pretty'Araq2013-12-281-3/+3
541' href='#n541'>541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663






















































































































































































































































































































































































































































































































































































































































































                                                                                                                         
## v0.18.0 - 01/03/2018

### Changes affecting backwards compatibility

#### Breaking changes in the standard library

- The ``[]`` proc for strings now raises an ``IndexError`` exception when
  the specified slice is out of bounds. See issue
  [#6223](https://github.com/nim-lang/Nim/issues/6223) for more details.
  You can use ``substr(str, start, finish)`` to get the old behaviour back,
  see [this commit](https://github.com/nim-lang/nimbot/commit/98cc031a27ea89947daa7f0bb536bcf86462941f) for an example.

- ``strutils.split`` and ``strutils.rsplit`` with an empty string and a
  separator now returns that empty string.
  See issue [#4377](https://github.com/nim-lang/Nim/issues/4377).

- Arrays of char cannot be converted to ``cstring`` anymore, pointers to
  arrays of char can! This means ``$`` for arrays can finally exist
  in ``system.nim`` and do the right thing. This means ``$myArrayOfChar`` changed
  its behaviour! Compile with ``-d:nimNoArrayToString`` to see where to fix your
  code.

- `reExtended` is no longer default for the `re` constructor in the `re`
  module.

- The behavior of ``$`` has been changed for all standard library collections. The
  collection-to-string implementations now perform proper quoting and escaping of
  strings and chars.

- `newAsyncSocket` taking an `AsyncFD` now runs `setBlocking(false)` on the
  fd.

- ``mod`` and bitwise ``and`` do not produce ``range`` subtypes anymore. This
  turned out to be more harmful than helpful and the language is simpler
  without this special typing rule.

- ``formatFloat``/``formatBiggestFloat`` now support formatting floats with zero
  precision digits. The previous ``precision = 0`` behavior (default formatting)
  is now available via ``precision = -1``.

- Moved from stdlib into Nimble packages:
  - [``basic2d``](https://github.com/nim-lang/basic2d)
    _deprecated: use ``glm``, ``arraymancer``, ``neo``, or another package instead_
  - [``basic3d``](https://github.com/nim-lang/basic3d)
    _deprecated: use ``glm``, ``arraymancer``, ``neo``, or another package instead_
  - [``gentabs``](https://github.com/lcrees/gentabs)
  - [``libuv``](https://github.com/lcrees/libuv)
  - [``numeric``](https://github.com/lcrees/polynumeric)
  - [``poly``](https://github.com/lcrees/polynumeric)
  - [``pdcurses``](https://github.com/lcrees/pdcurses)
  - [``romans``](https://github.com/lcrees/romans)
  - [``libsvm``](https://github.com/nim-lang/libsvm_legacy)
  - [``joyent_http_parser``](https://github.com/nim-lang/joyent_http_parser)

- Proc [toCountTable](https://nim-lang.org/docs/tables.html#toCountTable,openArray[A])
  now produces a `CountTable` with values correspoding to the number of occurrences
  of the key in the input. It used to produce a table with all values set to `1`.

  Counting occurrences in a sequence used to be:

  ```nim
  let mySeq = @[1, 2, 1, 3, 1, 4]
  var myCounter = initCountTable[int]()

  for item in mySeq:
    myCounter.inc item
  ```

  Now, you can simply do:

  ```nim
  let
    mySeq = @[1, 2, 1, 3, 1, 4]
    myCounter = mySeq.toCountTable()
  ```

- If you use ``--dynlibOverride:ssl`` with OpenSSL 1.0.x, you now have to
  define ``openssl10`` symbol (``-d:openssl10``). By default OpenSSL 1.1.x is
  assumed.

- ``newNativeSocket`` is now named ``createNativeSocket``.

- ``newAsyncNativeSocket`` is now named ``createAsyncNativeSocket``
  and it no longer raises an OS error but returns an ``osInvalidSocket`` when
  creation fails.

- The ``securehash`` module is now deprecated. Instead import ``std / sha1``.

- The ``readPasswordFromStdin`` proc has been moved from the ``rdstdin``
  to the ``terminal`` module, thus it does not depend on linenoise anymore.

#### Breaking changes in the compiler

- ``\n`` is now only the single line feed character like in most
  other programming languages. The new platform specific newline escape sequence is
  written as ``\p``. This change only affects the Windows platform.

- The overloading rules changed slightly so that constrained generics are
  preferred over unconstrained generics. (Bug #6526)

- We changed how array accesses "from backwards" like ``a[^1]`` or ``a[0..^1]`` are
  implemented. These are now implemented purely in ``system.nim`` without compiler
  support. There is a new "heterogenous" slice type ``system.HSlice`` that takes 2
  generic parameters which can be ``BackwardsIndex`` indices. ``BackwardsIndex`` is
  produced by ``system.^``.
  This means if you overload ``[]`` or ``[]=`` you need to ensure they also work
  with ``system.BackwardsIndex`` (if applicable for the accessors).

- The parsing rules of ``if`` expressions were changed so that multiple
  statements are allowed in the branches. We found few code examples that
  now fail because of this change, but here is one:

```nim
t[ti] = if exp_negative: '-' else: '+'; inc(ti)
```

This now needs to be written as:

```nim
t[ti] = (if exp_negative: '-' else: '+'); inc(ti)
```

- The experimental overloading of the dot ``.`` operators now take
  an ``untyped``` parameter as the field name, it used to be
  a ``static[string]``. You can use ``when defined(nimNewDot)`` to make
  your code work with both old and new Nim versions.
  See [special-operators](https://nim-lang.org/docs/manual.html#special-operators)
  for more information.

- ``yield`` (or ``await`` which is mapped to ``yield``) never worked reliably
  in an array, seq or object constructor and is now prevented at compile-time.

### Library additions

- **Added ``sequtils.mapLiterals`` for easier construction of array and tuple literals.**

- Added ``system.runnableExamples`` to make examples in Nim's documentation easier
  to write and test. The examples are tested as the last step of
  ``nim doc``.

- Implemented ``getIoHandler`` proc in the ``asyncdispatch`` module that allows
  you to retrieve the underlying IO Completion Port or ``Selector[AsyncData]``
  object in the specified dispatcher.

- For string formatting / interpolation a new module
  called [strformat](https://nim-lang.org/docs/strformat.html) has been added
  to the stdlib.

- The `ReadyKey` type in the selectors module now contains an ``errorCode``
  field to help distinguish between ``Event.Error`` events.

- Implemented an `accept` proc that works on a `SocketHandle` in
  ``nativesockets``.

- Added ``algorithm.rotateLeft``.

- Added ``typetraits.$`` as an alias for ``typetraits.name``.

- Added ``system.getStackTraceEntries`` that allows you to access the stack
  trace in a structured manner without string parsing.

- Added ``parseutils.parseSaturatedNatural``.

- Added ``macros.unpackVarargs``.

- Added support for asynchronous programming for the JavaScript backend using
  the `asyncjs` module.

- Added true color support for some terminals. Example:
```nim
import colors, terminal

const Nim = "Efficient and expressive programming."

var
  fg = colYellow
  bg = colBlue
  int = 1.0

enableTrueColors()

for i in 1..15:
  styledEcho bgColor, bg, fgColor, fg, Nim, resetStyle
  int -= 0.01
  fg = intensity(fg, int)

setForegroundColor colRed
setBackgroundColor colGreen
styledEcho "Red on Green.", resetStyle
```

### Library changes

- ``echo`` now works with strings that contain ``\0`` (the binary zero is not
  shown) and ``nil`` strings are equal to empty strings.

- JSON: Deprecated `getBVal`, `getFNum`, and `getNum` in favour of
  `getBool`, `getFloat`, `getBiggestInt`. A new `getInt` procedure was also
  added.

- ``rationals.toRational`` now uses an algorithm based on continued fractions.
  This means its results are more precise and it can't run into an infinite loop
  anymore.

- ``os.getEnv`` now takes an optional ``default`` parameter that tells ``getEnv``
  what to return if the environment variable does not exist.

- The ``random`` procs in ``random.nim`` have all been deprecated. Instead use
  the new ``rand`` procs. The module now exports the state of the random
  number generator as type ``Rand`` so multiple threads can easily use their
  own random number generators that do not require locking. For more information
  about this rename see issue [#6934](https://github.com/nim-lang/Nim/issues/6934)

- ``writeStackTrace`` is now proclaimed to have no IO effect (even though it does)
  so that it is more useful for debugging purposes.

- ``db_mysql`` module: ``DbConn`` is now a ``distinct`` type that doesn't expose the
  details of the underlying ``PMySQL`` type.

- ``parseopt2`` is now deprecated, use ``parseopt`` instead.

### Language additions

- It is now possible to forward declare object types so that mutually
  recursive types can be created across module boundaries. See
  [package level objects](https://nim-lang.org/docs/manual.html#package-level-objects)
  for more information.

- Added support for casting between integers of same bitsize in VM (compile time and nimscript).
  This allows to, among other things, reinterpret signed integers as unsigned.

- Custom pragmas are now supported using pragma ``pragma``, please see language
  manual for details.

- Standard library modules can now also be imported via the ``std`` pseudo-directory.
  This is useful in order to distinguish between standard library and nimble package
  imports:

  ```nim
  import std / [strutils, os, osproc]
  import someNimblePackage / [strutils, os]
  ```

### Language changes

- The **unary** ``<`` is now deprecated, for ``.. <`` use ``..<`` for other usages
  use the ``pred`` proc.

- Bodies of ``for`` loops now get their own scope:

```nim
# now compiles:
for i in 0..4:
  let i = i + 1
  echo i
```

- To make Nim even more robust the system iterators ``..`` and ``countup``
  now only accept a single generic type ``T``. This means the following code
  doesn't die with an "out of range" error anymore:

```nim
var b = 5.Natural
var a = -5
for i in a..b:
  echo i
```

- ``atomic`` and ``generic`` are no longer keywords in Nim. ``generic`` used to be
  an alias for ``concept``, ``atomic`` was not used for anything.

- The memory manager now uses a variant of the TLSF algorithm that has much
  better memory fragmentation behaviour. According
  to [http://www.gii.upv.es/tlsf/](http://www.gii.upv.es/tlsf/) the maximum
  fragmentation measured is lower than 25%. As a nice bonus ``alloc`` and
  ``dealloc`` became O(1) operations.

- The compiler is now more consistent in its treatment of ambiguous symbols:
  Types that shadow procs and vice versa are marked as ambiguous (bug #6693).

- codegenDecl pragma now works for the JavaScript backend. It returns an empty
  string for function return type placeholders.

- Extra semantic checks for procs with noreturn pragma: return type is not allowed,
  statements after call to noreturn procs are no longer allowed.

- Noreturn proc calls and raising exceptions branches are now skipped during common type
  deduction in ``if`` and ``case`` expressions. The following code snippets now compile:
  ```nim
  import strutils
  let str = "Y"
  let a = case str:
    of "Y": true
    of "N": false
    else: raise newException(ValueError, "Invalid boolean")
  let b = case str:
    of nil, "": raise newException(ValueError, "Invalid boolean")
    elif str.startsWith("Y"): true
    elif str.startsWith("N"): false
    else: false
  let c = if str == "Y": true
    elif str == "N": false
    else:
      echo "invalid bool"
      quit("this is the end")
  ```

- Pragmas now support call syntax, for example: ``{.exportc"myname".}`` and
  ``{.exportc("myname").}``

- The ``deprecated`` pragma now supports a user-definable warning message for procs.

  ```nim
  proc bar {.deprecated: "use foo instead".} =
    return

  bar()
  ```

### Tool changes

- The ``nim doc`` command is now an alias for ``nim doc2``, the second version of
  the documentation generator. The old version 1 can still be accessed
  via the new ``nim doc0`` command.

- Nim's ``rst2html`` command now supports the testing of code snippets via an RST
  extension that we called ``:test:``::

  ```rst
  .. code-block:: nim
      :test:
    # shows how the 'if' statement works
    if true: echo "yes"
  ```

### Compiler changes

### Bugfixes

- Fixed "ReraiseError when using try/except within finally block"
  ([#5871](https://github.com/nim-lang/Nim/issues/5871))
- Fixed "Range type inference leads to counter-intuitive behvaiour"
  ([#5854](https://github.com/nim-lang/Nim/issues/5854))
- Fixed "JSON % operator can fail in extern procs with dynamic types"
  ([#6385](https://github.com/nim-lang/Nim/issues/6385))
- Fixed ""intVal is not accessible" in VM"
  ([#6083](https://github.com/nim-lang/Nim/issues/6083))
- Fixed "Add excl for OrderedSet"
  ([#2467](https://github.com/nim-lang/Nim/issues/2467))
- Fixed "newSeqOfCap actually doesn't reserve memory"
  ([#6403](https://github.com/nim-lang/Nim/issues/6403))
- Fixed "[Regression] Nim segfaults"
  ([#6435](https://github.com/nim-lang/Nim/issues/6435))
- Fixed "Seq assignment is slower than expected"
  ([#6433](https://github.com/nim-lang/Nim/issues/6433))
- Fixed "json module issues with empty dicts and lists"
  ([#6438](https://github.com/nim-lang/Nim/issues/6438))
- Fixed "mingw installed via finish.exe fails to link if Nim located in path with whitespace"
  ([#6452](https://github.com/nim-lang/Nim/issues/6452))
- Fixed "unittest.check does not perform short-circuit evaluation"
  ([#5784](https://github.com/nim-lang/Nim/issues/5784))
- Fixed "Error while concatenating an array of chars."
  ([#5861](https://github.com/nim-lang/Nim/issues/5861))
- Fixed "range initialization: [ProveInit] hint: Cannot prove that"
  ([#6474](https://github.com/nim-lang/Nim/issues/6474))
- Fixed "scanf can call procs with side-effects multiple times"
  ([#6487](https://github.com/nim-lang/Nim/issues/6487))
- Fixed "gcsafe detection problem"
  ([#5620](https://github.com/nim-lang/Nim/issues/5620))
- Fixed "C++ codegen: `mitems` generates invalid code."
  ([#4910](https://github.com/nim-lang/Nim/issues/4910))
- Fixed "strange runtime behavior on macOS"
  ([#6496](https://github.com/nim-lang/Nim/issues/6496))
- Fixed "stdtmpl: invalid indentation after a line ending in question mark"
  ([#5070](https://github.com/nim-lang/Nim/issues/5070))
- Fixed "Windows: NAN troubles on c backend"
  ([#6511](https://github.com/nim-lang/Nim/issues/6511))
- Fixed "lib/nim/system/cellsets.nim(33, 31) Error: type mismatch while attempting to compile for 16bit CPUs"
  ([#3558](https://github.com/nim-lang/Nim/issues/3558))
- Fixed "Can't compile dynlib with ``-d:useNimRtl`` and ``--threads:on``"
  ([#5143](https://github.com/nim-lang/Nim/issues/5143))
- Fixed "var s = @[0,1,2,...] can generate thousand of single assignments in C code"
  ([#5007](https://github.com/nim-lang/Nim/issues/5007))
- Fixed "`echo` discards everything after a null character"
  ([#1137](https://github.com/nim-lang/Nim/issues/1137))
- Fixed "Turn off reExtended by default"
  ([#5627](https://github.com/nim-lang/Nim/issues/5627))
- Fixed "Bad Links in docs/backends.html"
  ([#5914](https://github.com/nim-lang/Nim/issues/5914))
- Fixed "Index out of bounds error in db_postgres when executing non parameter-substituted queries containing "?""
  ([#6571](https://github.com/nim-lang/Nim/issues/6571))
- Fixed "Please add pipe2 support to posix stdlib"
  ([#6553](https://github.com/nim-lang/Nim/issues/6553))
- Fixed "Return semantics vary depending on return style"
  ([#6422](https://github.com/nim-lang/Nim/issues/6422))
- Fixed "parsecsv.open reports SIGSEGV when calling 'open' on missing file"
  ([#6148](https://github.com/nim-lang/Nim/issues/6148))
- Fixed "VCC: Nim generates non-compilable code for system.nim"
  ([#6606](https://github.com/nim-lang/Nim/issues/6606))
- Fixed "Generic subtype matches worse than a generic"
  ([#6526](https://github.com/nim-lang/Nim/issues/6526))
- Fixed "formatFloat inconsistent scientific notation"
  ([#6589](https://github.com/nim-lang/Nim/issues/6589))
- Fixed "Generated c code calls function twice"
  ([#6292](https://github.com/nim-lang/Nim/issues/6292))
- Fixed "Range type inference leads to counter-intuitive behvaiour"
  ([#5854](https://github.com/nim-lang/Nim/issues/5854))
- Fixed "New backward indexing is too limited"
  ([#6631](https://github.com/nim-lang/Nim/issues/6631))
- Fixed "Table usage in a macro (SIGSEGV: Illegal storage access.)"
  ([#1860](https://github.com/nim-lang/Nim/issues/1860))
- Fixed "Incorrect deprecation error"
  ([#6634](https://github.com/nim-lang/Nim/issues/6634))
- Fixed "Wrong indices in arrays not starting with 0"
  ([#6675](https://github.com/nim-lang/Nim/issues/6675))
- Fixed "if expressions"
  ([#6609](https://github.com/nim-lang/Nim/issues/6609))
- Fixed "BackwardsIndex: converter + `[]` + unrelated type[^1]: lib/system.nim(3536, 3) Error"
  ([#6692](https://github.com/nim-lang/Nim/issues/6692))
- Fixed "BackwardsIndex: converter + `[]` + unrelated type[^1]: lib/system.nim(3536, 3) Error"
  ([#6692](https://github.com/nim-lang/Nim/issues/6692))
- Fixed "js backend 0.17.3: array bounds check for non zero based arrays is buggy"
  ([#6532](https://github.com/nim-lang/Nim/issues/6532))
- Fixed "HttpClient's new API doesn't work through a proxy for https URLs"
  ([#6685](https://github.com/nim-lang/Nim/issues/6685))
- Fixed "isServing isn't declared and isn't compiling"
  ([#6707](https://github.com/nim-lang/Nim/issues/6707))
- Fixed "[Regression] value out of range"
  ([#6710](https://github.com/nim-lang/Nim/issues/6710))

- Fixed "Error when using `multisync` macro"
  ([#6708](https://github.com/nim-lang/Nim/issues/6708))

- Fixed "formatFloat inconsistent scientific notation"
  ([#6589](https://github.com/nim-lang/Nim/issues/6589))
- Fixed "Using : (constructor arguments) for passing values to functions with default arguments causes a compiler crash."
  ([#6765](https://github.com/nim-lang/Nim/issues/6765))
- Fixed "In-place object initialization leads to vcc incompatible code"
  ([#6757](https://github.com/nim-lang/Nim/issues/6757))
- Fixed "Improve parseCookies doc"
  ([#5721](https://github.com/nim-lang/Nim/issues/5721))
- Fixed "Parser regression with nested do notation inside conditional"
  ([#6166](https://github.com/nim-lang/Nim/issues/6166))
- Fixed "Request for better error message"
  ([#6776](https://github.com/nim-lang/Nim/issues/6776))
- Fixed "Testament tester does not execute test with `exitcode` only"
  ([#6775](https://github.com/nim-lang/Nim/issues/6775))
- Fixed "JS integer division off by one"
  ([#6753](https://github.com/nim-lang/Nim/issues/6753))
- Fixed "Regression: cannot prove not nil"
  ([#5781](https://github.com/nim-lang/Nim/issues/5781))
- Fixed "SIGSEGV: Illegal storage access. (Attempt to read from nil?) in generic proc"
  ([#6073](https://github.com/nim-lang/Nim/issues/6073))
- Fixed "Request for better error message"
  ([#6776](https://github.com/nim-lang/Nim/issues/6776))
- Fixed "Nim #head: sorting via reference hangs compiler"
  ([#6724](https://github.com/nim-lang/Nim/issues/6724))
- Fixed "Cannot cast pointer to char in cpp"
  ([#5979](https://github.com/nim-lang/Nim/issues/5979))
- Fixed "asynchttpserver replies with several errors on single request"
  ([#6386](https://github.com/nim-lang/Nim/issues/6386))
- Fixed "object variants superclass trigger bad codegen"
  ([#5521](https://github.com/nim-lang/Nim/issues/5521))
- Fixed "JS integer division off by one"
  ([#6753](https://github.com/nim-lang/Nim/issues/6753))
- Fixed "js backend compiler crash with tables indexed by certain types"
  ([#6568](https://github.com/nim-lang/Nim/issues/6568))
- Fixed "Jsgen bug with is"
  ([#6445](https://github.com/nim-lang/Nim/issues/6445))
- Fixed "Subrange definition with ..<"
  ([#6788](https://github.com/nim-lang/Nim/issues/6788))
- Fixed "fields not initialized: array with enum index type as object field."
  ([#6682](https://github.com/nim-lang/Nim/issues/6682))
- Fixed "Can not delete data in table when table's data type is kind of "not nil""
  ([#6555](https://github.com/nim-lang/Nim/issues/6555))
- Fixed "tables.nim: Cannot prove that 'n' is initialized"
  ([#6121](https://github.com/nim-lang/Nim/issues/6121))
- Fixed "issues with 'not nil' applied to a closure proc"
  ([#6489](https://github.com/nim-lang/Nim/issues/6489))
- Fixed "`not nil` not working in some cases"
  ([#4686](https://github.com/nim-lang/Nim/issues/4686))
- Fixed "Cannot prove '@[v]' is not nil"
  ([#3993](https://github.com/nim-lang/Nim/issues/3993))

- Fixed "Feature: support TCP_NODELAY in net.sockets"
  ([#6795](https://github.com/nim-lang/Nim/issues/6795))
- Fixed "Code that makes the compiler throw an error message and then hangs"
  ([#6820](https://github.com/nim-lang/Nim/issues/6820))
- Fixed "Code that makes the compiler throw an error message and then hangs"
  ([#6820](https://github.com/nim-lang/Nim/issues/6820))
- Fixed "Inconsistent behavior with sequence and string slicing"
  ([#6223](https://github.com/nim-lang/Nim/issues/6223))
- Fixed "Wrong behavior of "split" (proc and iterator)"
  ([#4377](https://github.com/nim-lang/Nim/issues/4377))
- Fixed "[Documentation] Invalid module name: [foo, bar]"
  ([#6831](https://github.com/nim-lang/Nim/issues/6831))
- Fixed "The destructor is not called for temporary objects"
  ([#4214](https://github.com/nim-lang/Nim/issues/4214))
- Fixed "Destructors does not work with implicit items iterator in for loop"
  ([#985](https://github.com/nim-lang/Nim/issues/985))
- Fixed "Error in template when using the type of the parameter inside it"
  ([#6756](https://github.com/nim-lang/Nim/issues/6756))
- Fixed "should json.to() respect parent attributes?"
  ([#5856](https://github.com/nim-lang/Nim/issues/5856))
- Fixed "json 'to' macro can not marshalize into tuples"
  ([#6095](https://github.com/nim-lang/Nim/issues/6095))
- Fixed "json.to fails with seq[T]"
  ([#6604](https://github.com/nim-lang/Nim/issues/6604))
- Fixed "json.to() is not worth using compared to marshal.to[T]"
  ([#5848](https://github.com/nim-lang/Nim/issues/5848))
- Fixed "Memory not being released in time, running out of memory"
  ([#6031](https://github.com/nim-lang/Nim/issues/6031))
- Fixed "[Regression] Bad C codegen for generic code"
  ([#6889](https://github.com/nim-lang/Nim/issues/6889))
- Fixed "rollingFileLogger deletes file on every start."
  ([#6264](https://github.com/nim-lang/Nim/issues/6264))
- Fixed "Remove/deprecate securehash module."
  ([#6033](https://github.com/nim-lang/Nim/issues/6033))
- Fixed "[bug or not] object construction for seq[T] failed without space after colon"
  ([#5999](https://github.com/nim-lang/Nim/issues/5999))
- Fixed "issues with the random module"
  ([#4726](https://github.com/nim-lang/Nim/issues/4726))
- Fixed "Reassigning local var to seq of objects results in nil element in Object's seq field"
  ([#668](https://github.com/nim-lang/Nim/issues/668))
- Fixed "Compilation error with "newseq[string]""
  ([#6726](https://github.com/nim-lang/Nim/issues/6726))
- Fixed "await inside array/dict literal produces invalid code - Part 2"
  ([#6626](https://github.com/nim-lang/Nim/issues/6626))
- Fixed "terminal.eraseline() gives OverflowError on Windows"
  ([#6931](https://github.com/nim-lang/Nim/issues/6931))
- Fixed "[Regression] `sequtils.any` conflicts with `system.any`"
  ([#6932](https://github.com/nim-lang/Nim/issues/6932))
- Fixed "C++ codegen: `mitems` generates invalid code."
  ([#4910](https://github.com/nim-lang/Nim/issues/4910))
- Fixed "seq.mitems produces invalid cpp codegen"
  ([#6892](https://github.com/nim-lang/Nim/issues/6892))
- Fixed "Concepts regression"
  ([#6108](https://github.com/nim-lang/Nim/issues/6108))
- Fixed "Generic iterable concept with array crashes compiler"
  ([#6277](https://github.com/nim-lang/Nim/issues/6277))
- Fixed "C code generation "‘a’ is a pointer; did you mean to use ‘->’?""
  ([#6462](https://github.com/nim-lang/Nim/issues/6462))
- Fixed "`--NimblePath` fails if a `-` in path which is not followed by a number"
  ([#6949](https://github.com/nim-lang/Nim/issues/6949))
- Fixed ""not registered in the selector" in asyncfile.close() for something that clearly was registered"
  ([#6906](https://github.com/nim-lang/Nim/issues/6906))
- Fixed "strange frexp behavior"
  ([#6353](https://github.com/nim-lang/Nim/issues/6353))

- Fixed "noreturn branches of case statements shouldn't contribute to type"
  ([#6885](https://github.com/nim-lang/Nim/issues/6885))
- Fixed "Type inference for 'if' statements changed"
  ([#6980](https://github.com/nim-lang/Nim/issues/6980))
- Fixed "newest asyncdispatch recursion"
  ([#6100](https://github.com/nim-lang/Nim/issues/6100))
- Fixed "Ambiguous identifier between set type and proc"
  ([#6965](https://github.com/nim-lang/Nim/issues/6965))

- Fixed "Inconsistent behavior with sequence and string slicing"
  ([#6223](https://github.com/nim-lang/Nim/issues/6223))

- Fixed "Unsupported OpenSSL library imported dynamically"
  ([#5000](https://github.com/nim-lang/Nim/issues/5000))
- Fixed "`nim check` segfaults"
  ([#6972](https://github.com/nim-lang/Nim/issues/6972))
- Fixed "GC deadlock"
  ([#6988](https://github.com/nim-lang/Nim/issues/6988))
- Fixed "Create a seq without memory initialization"
  ([#6401](https://github.com/nim-lang/Nim/issues/6401))
- Fixed "Fix bug for getch on Windows while using the arrow keys"
  ([#6966](https://github.com/nim-lang/Nim/issues/6966))
- Fixed "runnableExamples doesn't work in templates"
  ([#7018](https://github.com/nim-lang/Nim/issues/7018))
- Fixed "runnableExamples doesn't work with untyped statement blocks"
  ([#7019](https://github.com/nim-lang/Nim/issues/7019))

- Fixed "Critical bug in parseBiggestFloat"
  ([#7060](https://github.com/nim-lang/Nim/issues/7060))
- Fixed "[RFC] strformat.% should be gone"
  ([#7078](https://github.com/nim-lang/Nim/issues/7078))
- Fixed "compiler crash on simple macro"
  ([#7093](https://github.com/nim-lang/Nim/issues/7093))
- Fixed "Make newlines sane again"
  ([#7089](https://github.com/nim-lang/Nim/issues/7089))
- Fixed "JS - Unicode enum string representation issue"
  ([#6741](https://github.com/nim-lang/Nim/issues/6741))
- Fixed "Strange behaviour of 0.17.3 (working ok in 0.17.2)"
  ([#6989](https://github.com/nim-lang/Nim/issues/6989))
- Fixed "Strange behaviour of 0.17.3 (working ok in 0.17.2)"
  ([#6989](https://github.com/nim-lang/Nim/issues/6989))
- Fixed "Compiler crash: try expression with infix as"
  ([#7116](https://github.com/nim-lang/Nim/issues/7116))
- Fixed "nimsuggest crash"
  ([#7140](https://github.com/nim-lang/Nim/issues/7140))
- Fixed "[RFC] Reintroduce readChar"
  ([#7072](https://github.com/nim-lang/Nim/issues/7072))
- Fixed "Copyright line needs updating"
  ([#7129](https://github.com/nim-lang/Nim/issues/7129))
- Fixed "-0.0 doesn't result in negative zero in VM"
  ([#7079](https://github.com/nim-lang/Nim/issues/7079))
- Fixed "Windows large filesize"
  ([#7121](https://github.com/nim-lang/Nim/issues/7121))
- Fixed "Securehash is not parsimonious with MD5 and other hash modules"
  ([#6961](https://github.com/nim-lang/Nim/issues/6961))
- Fixed "os.findExe() shouldn't look in current directory on posix, unless exe has a /"
  ([#6939](https://github.com/nim-lang/Nim/issues/6939))
- Fixed "`compiles(...)` with `fatal` pragma causes compiler to exit early"
  ([#7080](https://github.com/nim-lang/Nim/issues/7080))
- Fixed "NPE when compile macro that returns concrete value"
  ([#5450](https://github.com/nim-lang/Nim/issues/5450))
- Fixed "Using a variable of type `int | float` causes internal compiler error"
  ([#6946](https://github.com/nim-lang/Nim/issues/6946))
- Fixed "Unsigned integers could not be used as array indexes."
  ([#7153](https://github.com/nim-lang/Nim/issues/7153))
- Fixed "countdown with uint causes underflow"
  ([#4220](https://github.com/nim-lang/Nim/issues/4220))
- Fixed "Inconsistent method call syntax"
  ([#7200](https://github.com/nim-lang/Nim/issues/7200))
- Fixed "Impossible to create an empty const array"
  ([#6853](https://github.com/nim-lang/Nim/issues/6853))
- Fixed "Strange UINT handling"
  ([#3985](https://github.com/nim-lang/Nim/issues/3985))
- Fixed "Bad codegen when passing arg that is part of return value destination"
  ([#6960](https://github.com/nim-lang/Nim/issues/6960))
- Fixed "No info about gcsafety in error message when global var is accessed in async proc"
  ([#6186](https://github.com/nim-lang/Nim/issues/6186))
- Fixed "Resolving package vs. local import ambiguities"
  ([#2819](https://github.com/nim-lang/Nim/issues/2819))
- Fixed "Internal error with type() operator"
  ([#3711](https://github.com/nim-lang/Nim/issues/3711))
- Fixed "newAsyncSocket should raise an OS error plus other inconsistencies"
  ([#4995](https://github.com/nim-lang/Nim/issues/4995))
- Fixed "mapLiterals fails with negative values"
  ([#7215](https://github.com/nim-lang/Nim/issues/7215))
- Fixed "fmWrite doesn't truncate file with openAsync, unlike open()"
  ([#5531](https://github.com/nim-lang/Nim/issues/5531))
- Fixed "Move libsvm to an external nimble module"
  ([#5786](https://github.com/nim-lang/Nim/issues/5786))
- Fixed "Prevent acceptAddr gotcha with newSocket"
  ([#7227](https://github.com/nim-lang/Nim/issues/7227))
- Fixed "strtabs.getOrDefault is inconsistent with tables.getOrDefault"
  ([#4265](https://github.com/nim-lang/Nim/issues/4265))

- Fixed "Code falling through into exception handler when no exception thrown."
  ([#7232](https://github.com/nim-lang/Nim/issues/7232))
- Fixed "the new generic inference rules are broken"
  ([#7247](https://github.com/nim-lang/Nim/issues/7247))
- Fixed "Odd `..<` regression"
  ([#6992](https://github.com/nim-lang/Nim/issues/6992))
- Fixed "Different proc type inferred from default parameter"
  ([#4659](https://github.com/nim-lang/Nim/issues/4659))
- Fixed "Different proc type inferred from default parameter"
  ([#4659](https://github.com/nim-lang/Nim/issues/4659))
- Fixed "Testament sometimes ignores test failures"
  ([#7236](https://github.com/nim-lang/Nim/issues/7236))
- Fixed "New Allocator Fails On >=4GB Requests"
  ([#7120](https://github.com/nim-lang/Nim/issues/7120))
- Fixed "User pragmas hide effect specifications from sempass2"
  ([#7216](https://github.com/nim-lang/Nim/issues/7216))
- Fixed "C++: SIGABRT instead of IndexError for out-of-bounds"
  ([#6512](https://github.com/nim-lang/Nim/issues/6512))
- Fixed "An uncaught exception in cpp mode doesn't show the exception name/msg"
  ([#6431](https://github.com/nim-lang/Nim/issues/6431))