Files
Nim/compiler
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
..
2023-12-15 10:20:57 +01:00
2025-08-27 12:23:04 +02:00
2025-10-28 12:48:22 +01:00
2017-01-07 22:35:09 +01:00
2025-05-11 06:40:46 +02:00
2024-12-27 19:42:18 +01:00
2021-01-12 09:36:51 +01:00
2024-10-29 08:01:44 +01:00
2023-07-02 22:36:05 +02:00
2023-11-06 18:33:28 +01:00
2025-09-18 19:44:39 +02:00
2025-09-18 19:44:39 +02:00
2025-09-24 18:40:43 +02:00
2024-03-16 08:35:18 +08:00
2025-08-27 12:23:04 +02:00
2025-08-27 12:23:04 +02:00
2023-12-25 07:12:54 +01:00

Nim Compiler

  • This directory contains the Nim compiler written in Nim.
  • Note that this code has been translated from a bootstrapping version written in Pascal.
  • So the code is not a poster child of good Nim code.

See Internals of the Nim Compiler for more information.