defines the gcRefc symbol which allows writing specific code for refc (#20009)

* define gcRefc symbols

* add comments

* add a changelog item

* Update changelog.md

Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>

* Update changelog.md

Co-authored-by: Yardanico <tiberiumk12@gmail.com>

Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
Co-authored-by: Yardanico <tiberiumk12@gmail.com>
This commit is contained in:
flywind 2022-07-17 15:24:40 +08:00 • committed by GitHub
commit 01ad0cdc52
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 9 additions and 1 deletions

View file

@ -110,6 +110,8 @@ becomes an alias for `addr`.
In the command line, this is defined as `-d:a.b.c`. Older versions can
use accents as in ``defined(`a.b.c`)`` to access such defines.
- Defines the `gcRefc` symbol which allows writing specific code for the refc GC.
## Compiler changes
- `nim` can now compile version 1.4.0 as follows: `nim c --lib:lib --stylecheck:off compiler/nim`,

View file

@ -542,6 +542,7 @@ proc processMemoryManagementOption(switch, arg: string, pass: TCmdLinePass,
incl conf.globalOptions, optTlsEmulation # Boehm GC doesn't scan the real TLS
of "refc":
unregisterArcOrc(conf)
defineSymbol(conf.symbols, "gcrefc")
conf.selectedGC = gcRefc
of "markandsweep":
unregisterArcOrc(conf)

View file

@ -1,10 +1,15 @@
discard """
matrix: "--gc:refc; --gc:orc"
"""
import "$lib/.." / compiler/strutils2
block: # setLen
var a = "abc"
a.setLen 0
a.setLen 3, isInit = false
doAssert a[1] == 'b'
when defined(gcRefc): # bug #19763
doAssert a[1] == 'b'
a.setLen 0
a.setLen 3, isInit = true
doAssert a[1] == '\0'