Commit Graph

8656 Commits

Author SHA1 Message Date
araq
cf4ac37643 progress 2025-11-09 09:50:11 +01:00
araq
44f3dcc9a3 wip 2025-11-08 23:42:04 +01:00
araq
2cb1c539e0 wip 2025-11-08 15:51:55 +01:00
araq
e173a6a7b5 added TLoc writing 2025-11-08 09:04:37 +01:00
araq
0bf8bbfd9f progress 2025-11-08 08:52:19 +01:00
araq
940ce87c73 prepare for dependency tracking 2025-11-08 07:42:26 +01:00
Araq
e6a1c14d91 progress 2025-11-07 23:35:45 +01:00
araq
b4c942c4cd wip 2025-11-07 21:27:08 +01:00
Andreas Rumpf
dc2fb81d9d Merge branch 'devel' into demotomohiro-add-ast2nif2 2025-11-07 17:16:32 +01:00
araq
6a2f4d29c4 wip 2025-11-07 15:52:00 +01:00
Andreas Rumpf
a866bf2a39 VM: optimize 'return' slots; saves millions of node allocations for N… (#25266)
…imbus
2025-11-07 13:53:24 +01:00
ringabout
6d3254a86f fixes #25251; SIGBUS with iterator over const Table lookup - premature temporary destruction (#25255)
fixes #25251

enforce a copy if the arg is a deref of a lent pointer since the arg
could be a temporary that will go out of scope
2025-11-07 13:53:24 +01:00
ringabout
116c220e3f fixes #25263; provides a new switch mangle:nim/cpp for debug name mangling (#25264)
fixes #25263

- [x] documentation and changelogs
2025-11-07 13:53:24 +01:00
metagn
839cbeb371 js: replace push.apply with for loop for string add [backport] (#25267)
While `a.push.apply(a, b)` is better for performance than the previous
`a = a.concat(b)` due to the fact that it doesn't create a new array,
there is a pretty big problem with it: depending on the JS engine, if
the second array is too long, it can [cause a
crash](https://tanaikech.github.io/2020/04/20/limitation-of-array.prototype.push.apply-under-v8-for-google-apps-script/)
due to the function `push` taking too many arguments. This has
unfortunately been what the codegen produces since 1.4.0 (commit
707367e1ca).

So string addition is now moved to a compilerproc that just uses a `for`
loop. From what I can tell this is the most compatible and the fastest.
Only potential problem compared to `concat` etc is with aliasing, i.e.
adding an array to itself, but I'm guessing it's enough that the length
from before the iteration is used, since it can only grow. The test
checks for aliased nim strings but I don't know if there's an extra
protection for them.
2025-11-07 20:19:50 +08:00
Andreas Rumpf
809662a228 VM: optimize 'return' slots; saves millions of node allocations for N… (#25266)
…imbus
2025-11-07 11:05:13 +01:00
ringabout
6f73094263 fixes #25251; SIGBUS with iterator over const Table lookup - premature temporary destruction (#25255)
fixes #25251

enforce a copy if the arg is a deref of a lent pointer since the arg
could be a temporary that will go out of scope
2025-11-07 10:06:05 +01:00
ringabout
1d08c4e241 fixes #25263; provides a new switch mangle:nim/cpp for debug name mangling (#25264)
fixes #25263

- [x] documentation and changelogs
2025-11-06 16:41:13 +01:00
demotomohiro
43ff7b1dc4 loads modules imported by system module and create module sym before decode 2025-11-06 04:50:21 +09:00
demotomohiro
54aa552fb6 refers imported symbols like Nimony 2025-11-06 04:50:21 +09:00
demotomohiro
ab13900fad saves/loads PSym.ast, constraint and instantiatedFrom 2025-11-06 04:50:21 +09:00
demotomohiro
f3178e4515 saves/loads flags of nkIdent node 2025-11-06 04:50:21 +09:00
demotomohiro
9f73412e93 saves/loads float Inf, NaN and NegInf literals 2025-11-06 04:50:21 +09:00
demotomohiro
91db9ac8f5 uses ItemId instead of PSym or PType for the set of decoded syms and types 2025-11-06 04:50:21 +09:00
demotomohiro
3c599ed7db adds expression test code 2025-11-06 04:50:20 +09:00
demotomohiro
66d7a8e0b4 adds generics test code and fixes bug 2025-11-06 04:50:20 +09:00
demotomohiro
6a74316c0e fixes assertion defect when encoding empty object type definition 2025-11-06 04:50:20 +09:00
demotomohiro
b50c453b14 adds procedure test code and fix bugs 2025-11-06 04:50:19 +09:00
demotomohiro
6f237be686 saves/loads symbol magic, options and offset 2025-11-06 04:50:19 +09:00
demotomohiro
8a4d921d6b saves/loads PNode and PSym line info 2025-11-06 04:50:19 +09:00
demotomohiro
51eccea910 saves/loads PSym guard, bitsize and alignment 2025-11-06 04:50:19 +09:00
demotomohiro
5eeede3a43 uses PSym.item and PType.item as id in NIF 2025-11-06 04:50:19 +09:00
demotomohiro
25ca7ccc79 encodes/decodes itemId.module 2025-11-06 04:50:19 +09:00
demotomohiro
e9127b2567 adds Nim's AST to/from NIF 2025-11-06 04:50:19 +09:00
Andreas Rumpf
cfefd1d95b produces vastly better error messages for implicit --import and --inc… (#25258)
…lude configuration options
2025-11-04 17:54:23 +01:00
ringabout
d54b5f3ae1 fixes #25252; Unexpected ambiguous call with fields over object with default fields (#25256)
fixes #25252
2025-11-04 20:08:07 +08:00
Yuriy Glukhov
99a222d63d Respect noinit for generic types (#25250) 2025-10-31 16:59:24 +01:00
Yuriy Glukhov
7af4e3eefd Fixes #25202 (#25244) 2025-10-28 12:48:22 +01:00
ringabout
130eac2f93 fixes #25008; Compiler internal error with static overload (#25234)
fixes #25008

It seems that `semOverloadedCall` evaluates the same node twice using
`tryConstExpr` in order for `efExplain` to print all the diagnostic
output. The problem is that `tryConstExpr` has side effects, i.e., it
changes the slot index of variables after VM execution.
2025-10-28 11:47:20 +01:00
ringabout
b8ce11dd9d fixes #25027; nim doc uses doc comment from private field for public field (#25239)
fixes #25027
2025-10-23 19:19:27 +02:00
Ryan McConnell
544c26c0b8 add srcDir variable to nim.cfg (#24919)
There might be a way to do this but I couldn't find anything about it.
This is a very simple thing that goes a long way in certain situations.
Trying to avoid needing to switch to nimscript just to get:
```nim
# config.nims
import os
let srcDir = currentSourcePath.parentDir()
switch("define", &"ProjPath:\"{srcDir}\"")
```
with this change just needs:
```
# nim.cfg
d %= "ProjPath=$srcDir"
```
2025-10-23 09:05:05 +02:00
ringabout
c449c72498 fixes #25236; broken assignment hooks of union inside variant object in orc (#25238)
fixes #25236
2025-10-21 16:59:22 +02:00
ringabout
1eae14a3be fixes #25226; VM repr raises RangeDefect for long string under refc (#25230)
fixes #25226

`int16` seems to be too small for a reasonable VM program
2025-10-17 17:32:28 +02:00
ringabout
5abd21dfa5 fixes #25123; fixes #11862; Case object from compileTime proc unable to be passed as static param (#25224)
fixes #25123; fixes #11862

follow up https://github.com/nim-lang/Nim/pull/24442
ref https://github.com/nim-lang/Nim/pull/24441

> To fix this, fields from inactive branches are now detected in
semmacrosanity.annotateType (called in fixupTypeAfterEval) and marked to
prevent the codegen of their assignments. In
https://github.com/nim-lang/Nim/pull/24441 these fields were excluded
from the resulting node, but this causes issues when the node is
directly supposed to go back into the VM, for example as const values. I
don't know if this is the only case where this happens, so I wasn't sure
about how to keep that implementation working.

Object variants fields coming from inactive branches from VM are now
flagged `nfPreventCg`. We can ignore them, as done by the C backends.
2025-10-16 18:22:46 +02:00
ringabout
f009ea6c3e fixes #25208; generates a copy for opcLdConst in the assignments (#25211)
fixes #25208


```nim
type Conf = object
  val: int

const defaultConf = Conf(val: 123)
static:
  var conf: Conf
  conf = defaultConf
```

```nim
# opcLdConst is now always valid. We produce the necessary copy in the
# assignments now:
```

A `opcLdConst` is generated for `defaultConf` in `conf = defaultConf`.
According to the comment above, we need to handle the copy for
assignments of `opcLdConst`
2025-10-16 18:22:06 +02:00
lit
8f3bdb6951 fixes #25222; cast[char](i) not trunc on JS (#25223)
fixes #25222
2025-10-16 18:21:37 +02:00
ringabout
31d64b57d5 fixes #25046; Infinite loop with anonymous iterator (#25221)
fixes #25046

```nim
proc makeiter(v: string): iterator(): string =
  return iterator(): string =
    yield v

# loops
for c in makeiter("test")():
  echo "loops ", c
```
becomes

```nim
var temp = makeiter("test")
for c in temp():
  echo "loops ", c
```
for closures that might have side effects
2025-10-15 12:11:15 +02:00
ringabout
f191ba8ddd fixes #25048; Closure environment wrongly marked as cyclic (#25220)
fixes  #25048

```nim
proc canFormAcycleAux =
  of tyObject:
    # Inheritance can introduce cyclic types, however this is not relevant
    # as the type that is passed to 'new' is statically known!
    # er but we use it also for the write barrier ...
    if tfFinal notin t.flags:
      # damn inheritance may introduce cycles:
      result = true
```

It seems that all objects without `tfFinal` in their flags are
registering cycles. It doesn't seem that `Env` can be a cyclic type
because of inheritance since it is not going to be inherited after all
by another `Env` object type
2025-10-15 07:24:48 +02:00
ringabout
fb4a82f5cc fixes #25210; VM error when passing object field ref to proc(var T): var T (#25213)
fixes #25210
no longer transform `addr(obj.field[])` into `obj.field` to keep the
addressing needed for VM
2025-10-15 07:21:08 +02:00
ringabout
c0fa86872b fixes nightlies due to UB errors; increase maxCPU hard limits (#25219)
ref https://github.com/nim-lang/Nim/pull/25217

The issues is actually that there is a hard limit for max cpus in
niminst: https://github.com/nim-lang/Nim/pull/25219, which set to 20
while there is a 21 cpus now
2025-10-13 13:47:06 +02:00
ringabout
3962264c35 nightlies regressions: CPU order matters for C sources? (#25217)
ref https://github.com/nim-lang/Nim/pull/25056


https://github.com/nim-lang/nightlies/actions/runs/18053288396/job/51378922406#step:12:1572

```
bin/nim compile -f --incremental:off --compileonly --gen_mapping --cc:gcc --skipUserCfg --os:windows --cpu:loongarch64 -d:danger -d:gitHash:f4497c61584dca8acd489ceb7ba862b150f5cf55 compiler/nim.nim
```

`loongarch64` is applied to all the platforms wrongly. Presumably it was
caused by the order?
2025-10-10 19:11:58 +02:00