mirror of
https://github.com/nim-lang/Nim.git
synced 2026-08-23 15:11:40 +00:00
Merge branch 'devel' into pr_renege
This commit is contained in:
11
.github/dependabot.yml
vendored
Normal file
11
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
# To get started with Dependabot version updates, you'll need to specify which
|
||||
# package ecosystems to update and where the package manifests are located.
|
||||
# Please see the documentation for all configuration options:
|
||||
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions" # See documentation for possible values
|
||||
directory: "/" # Location of package manifests
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
2
.github/workflows/bisects.yml
vendored
2
.github/workflows/bisects.yml
vendored
@@ -15,7 +15,7 @@ jobs:
|
||||
name: ${{ matrix.platform }}-bisects
|
||||
runs-on: ${{ matrix.platform }}
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Install OpenSSL (Windows)
|
||||
if: |
|
||||
|
||||
2
.github/workflows/ci_docs.yml
vendored
2
.github/workflows/ci_docs.yml
vendored
@@ -53,7 +53,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: 'Checkout'
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 2
|
||||
|
||||
|
||||
2
.github/workflows/ci_packages.yml
vendored
2
.github/workflows/ci_packages.yml
vendored
@@ -33,7 +33,7 @@ jobs:
|
||||
NIM_TESTAMENT_BATCH: ${{ matrix.batch }}
|
||||
steps:
|
||||
- name: 'Checkout'
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 2
|
||||
|
||||
|
||||
4
.github/workflows/ci_publish.yml
vendored
4
.github/workflows/ci_publish.yml
vendored
@@ -17,7 +17,7 @@ jobs:
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- name: 'Checkout'
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 2
|
||||
|
||||
@@ -60,7 +60,7 @@ jobs:
|
||||
run: nim c -r -d:release ci/action.nim
|
||||
|
||||
- name: 'Comment'
|
||||
uses: actions/github-script@v7
|
||||
uses: actions/github-script@v8
|
||||
with:
|
||||
script: |
|
||||
const fs = require('fs');
|
||||
|
||||
2
.github/workflows/stale.yml
vendored
2
.github/workflows/stale.yml
vendored
@@ -9,7 +9,7 @@ jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v9
|
||||
- uses: actions/stale@v10
|
||||
with:
|
||||
days-before-pr-stale: 365
|
||||
days-before-pr-close: 30
|
||||
|
||||
@@ -563,6 +563,26 @@ proc eraseVoidParams*(t: PType) =
|
||||
setLen t.n.sons, pos
|
||||
break
|
||||
|
||||
proc eraseTupleVoidFields*(t: PType) =
|
||||
## Remove void fields from a named tuple type, compacting both `t.n`
|
||||
## (the field symbol nodes) and `t.sonsImpl` (the child types).
|
||||
if t.n == nil: return # anonymous tuple, nothing to compact
|
||||
for i in 0..<t.kidsLen:
|
||||
if t.n[i].kind == nkRecList or t[i].kind == tyVoid:
|
||||
# found first void field, compact from here
|
||||
var pos = i
|
||||
for j in i+1..<t.kidsLen:
|
||||
if t[j].kind != tyVoid and j < t.n.len and t.n[j].kind != nkRecList:
|
||||
t.n[pos] = t.n[j]
|
||||
t[pos] = t[j]
|
||||
if t.n[pos].kind == nkSym:
|
||||
t.n[pos].sym.position = pos
|
||||
inc pos
|
||||
# else: skip void entries
|
||||
setLen t.n.sons, pos
|
||||
t.setSonsLen pos
|
||||
break
|
||||
|
||||
proc skipIntLiteralParams*(t: PType; idgen: IdGenerator) =
|
||||
for i, p in t.ikids:
|
||||
if p == nil: continue
|
||||
@@ -768,6 +788,8 @@ proc replaceTypeVarsTAux(cl: var TReplTypeVars, t: PType, isInstValue = false):
|
||||
propagateFieldFlags(result, result.n)
|
||||
if result.kind == tyObject and cl.c.computeRequiresInit(cl.c, result):
|
||||
result.incl tfRequiresInit
|
||||
if result.kind == tyTuple:
|
||||
eraseTupleVoidFields(result)
|
||||
|
||||
of tyProc:
|
||||
eraseVoidParams(result)
|
||||
|
||||
@@ -417,7 +417,8 @@ proc collectCycles() =
|
||||
cfprintf(cstderr, "[collectCycles] begin\n")
|
||||
yrcCollectorLock:
|
||||
mergePendingRoots()
|
||||
if roots.len >= RootsThreshold and mayRunCycleCollect():
|
||||
if roots.len >= rootsThreshold and mayRunCycleCollect():
|
||||
let nRoots = roots.len
|
||||
var j: GcEnv
|
||||
init j.traceStack
|
||||
collectCyclesBacon(j, 0)
|
||||
@@ -434,8 +435,11 @@ proc collectCycles() =
|
||||
elif rootsThreshold < high(int) div 4:
|
||||
rootsThreshold = (if rootsThreshold <= 0: defaultThreshold else: rootsThreshold)
|
||||
rootsThreshold = rootsThreshold div 2 +% rootsThreshold
|
||||
# Cap growth so threshold doesn't grow without bound when we rarely free cycles
|
||||
#rootsThreshold = min(rootsThreshold, defaultThreshold *% 16)
|
||||
# Cost-aware: if this run was expensive (large graph), raise threshold more so we don't run again too soon
|
||||
if j.touched > nRoots *% 4:
|
||||
rootsThreshold = rootsThreshold div 2 +% rootsThreshold
|
||||
rootsThreshold = min(rootsThreshold, defaultThreshold *% 16)
|
||||
rootsThreshold = min(rootsThreshold, nRoots *% 2)
|
||||
when logOrc:
|
||||
cfprintf(cstderr, "[collectCycles] end; freed %ld new threshold %ld\n", j.freed, rootsThreshold)
|
||||
when defined(nimOrcStats):
|
||||
|
||||
@@ -131,3 +131,47 @@ static:
|
||||
|
||||
main()
|
||||
mainProc()
|
||||
|
||||
|
||||
block:
|
||||
type
|
||||
Tuple[N] = tuple
|
||||
a: int
|
||||
b: N
|
||||
|
||||
TupleVoid = Tuple[void]
|
||||
|
||||
var x: TupleVoid = (a: 1, )
|
||||
doAssert x.a == 1
|
||||
|
||||
block:
|
||||
type W[N] = seq[tuple[b: N]]
|
||||
var _: W[void]
|
||||
|
||||
block:
|
||||
type Tuple2[N] = tuple
|
||||
a: int
|
||||
b: N
|
||||
c: int
|
||||
|
||||
var y: Tuple2[void] = (a: 10, c: 20)
|
||||
doAssert y.a == 10
|
||||
doAssert y.c == 20
|
||||
|
||||
block:
|
||||
type Outer[N] = tuple
|
||||
inner: tuple[x: int, y: N]
|
||||
|
||||
var o: Outer[void] = (inner: (x: 3, ))
|
||||
doAssert o.inner.x == 3
|
||||
|
||||
block:
|
||||
type Tup[T] = tuple
|
||||
a: int
|
||||
b: T
|
||||
|
||||
proc f[T](t: Tup[T]): int =
|
||||
result = t.a
|
||||
|
||||
var z: Tup[void] = (a: 7, )
|
||||
doAssert f(z) == 7
|
||||
|
||||
Reference in New Issue
Block a user