summary refs log tree commit diff stats
path: root/lib
Commit message (Collapse)AuthorAgeFilesLines
* generate symchoice for ambiguous types in templates & generics + handle ↵metagn2024-08-251-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | types in symchoices (#23997) fixes #23898, supersedes #23966 and #23990 Since #20631 ambiguous type symbols in templates are rejected outright, now we generate a symchoice for type nodes if they're ambiguous, a generalization of what was done in #22375. This is done for generics as well. Symchoices also handle type symbols better now, ensuring their type is a `typedesc` type; this probably isn't necessary for everything to work but it makes the logic more robust. Similar to #23989, we have to prepare for the fact that ambiguous type symbols behave differently than normal type symbols and either error normally or relegate to other routine symbols if the symbol is being called. Generating a symchoice emulates this behavior, `semExpr` will find the type symbol first, but since the symchoice has other symbols, it will count as an ambiguous type symbol. I know it seems spammy to carry around an ambiguity flag everywhere, but in the future when we have something like #23104 we could just always generate a symchoice, and the symchoice itself would carry the info of whether the first symbol was ambiguous. But this could harm compiler performance/memory use, it might be better to generate it only when we have to, which in the case of type symbols is only when they're ambiguous.
* fixes #23915; std/random produces different results on c/js (#24003)ringabout2024-08-251-13/+32
| | | fixes #23915
* fixes #23956; bindUnix loses the last character on OpenBSD (#23961)Alfred Morgan2024-08-222-4/+4
| | | | | uses calculation as shown in https://man7.org/linux/man-pages/man7/unix.7.html > offsetof(struct sockaddr_un, sun_path) + strlen(sun_path) + 1
* Revert "Fixed an issue where `errorCode` was always 0 when `startProcess` ↵ringabout2024-08-211-7/+4
| | | | | did…" (#23995) Reverts nim-lang/Nim#23992
* Fixed an issue where `errorCode` was always 0 when `startProcess` did… ↵握猫猫2024-08-211-4/+7
| | | | | | | | | (#23992) …n't use the `poEvalCommand` flag https://forum.nim-lang.org/t/12310 Added a test case, tested on my fedora system.
* fixes #23945; type checking for whenvm expresssions (#23970)ringabout2024-08-201-16/+3
| | | fixes #23945
* fixes docgen regression: don't add newLine for code if it's the first line ↵ringabout2024-08-171-1/+4
| | | | | | | | | | | | | | | (#23154) Before (devel) ![image](https://github.com/nim-lang/Nim/assets/43030857/cde37109-027a-46c1-a37e-1d6062e6c609) After (this PR and stable) ![image](https://github.com/nim-lang/Nim/assets/43030857/3366877c-7223-4749-a584-fe93f731281f) It now keeps the same behavior as before
* better examples for std/inotify (#23415)Archar Gelod2024-08-141-11/+21
| | | | | | | | | | | | | | | | | Previous example wouldn't run unless `std/posix` was imported and it wasn't mentioned anywhere in the docs. Other changes in the example: - replaced magic number with constant `MaxWatches` . - changed seq buffer to array, because length is already constant + pointer is a bit nicer: `addr seq[0]` vs `addr arr` - added example for getting a `cstring` name value from `InotifyEvent` struct with explicit cast. - added a bit more description to `inotify_init1` (copied from `man inotify(7)`) --------- Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com>
* fix #23817; Use __builtin_saddl_overflow variants for arm-none-eabi-gcc. ↵Mark Leyva2024-08-121-3/+11
| | | | | | | | | | | | | | | | | | | | (#23835) Provides a fix for #23817. With target `arm-none-eabi`, GCC defines `int32_t` to `long int`. Nim uses `__builtin_sadd_overflow` for 32-bit targets, but this emits warnings on GCC releases 13 and under, while generating an error on GCC 14. More info regarding this [here](https://gcc.gnu.org/gcc-14/porting_to.html#c) and [here](https://gcc.gnu.org/pipermail/gcc-cvs/2023-December/394351.html). The proposed PR attempts to address this issue for these targets by defining the `nimAddInt`, `nimSubInt`, and `nimMulInt` macros to use the appropriate compiler intrinsics for this platform. As for as we know, the LLVM toolchain for bare metal Arm does not define `int32_t` as `long int` and has no need for this patch. Thus, we only define the above macros for GCC targeting `arm-non-eabi`.
* Adds `SEQ_DECL_SIZE 1` back under `clang` and a test (#23942)Juan M Gómez2024-08-121-1/+3
|
* opensym as node kind + fixed experimental switch (#23892)metagn2024-08-122-2/+4
| | | | | | | | | | | | | | | refs https://github.com/nim-lang/Nim/pull/23873#discussion_r1687995060, fixes #23386, fixes #23385, supersedes #23572 Turns the `nfOpenSym` node flag implemented in #23091 and extended in #23102 and #23873, into a node kind `nkOpenSym` that forms a unary node containing either `nkSym` or `nkOpenSymChoice`. Since this affects macros working on generic proc AST, the node kind is now only generated when the experimental switch `genericsOpenSym` is enabled, and a new node flag `nfDisabledOpenSym` is set to the `nkSym` or `nkOpenSymChoice` when the switch is not enabled so that we can give a warning. Now that the experimental switch has more reasonable semantics, we define `nimHasGenericsOpenSym2`.
* fixes #23913; empty SEQ_DECL_SIZE (#23940)Tomohiro2024-08-121-3/+1
|
* impr: std/cpuinfo: use documented impl ; support JS (#23911)lit2024-08-111-60/+81
| | | | | | | | | | | | | | | | | | | | | | | Currently `cpuinfo.countProcessor` uses hard-coded `HW_AVAILCPU=25` for both MacOS and BSD; However, [There is no HW_AVAILCPU on FreeBSD, NetBSD, and OpenBSD]( https://bugs.webkit.org/show_bug.cgi?id=132542) Also, `HW_AVAILCPU` is undocmented in MacOS, while `sysctlbyname("hw.logicalcpu",...)` is documented and used by many other languages' implementations, like [Haskell](https://gitlab.haskell.org/ghc/ghc/-/blob/master/rts/posix/OSThreads.c?ref_type=heads#L376) --- This PR: - use `importc` value instead of hard-coded values for `HW_*` macros. - use "hw.logicialcpu" over undocumented HW_AVAILCPU. - reduce 2 elements of `mib` array when calling `sysctl` as they're no use.
* Fixed nimscript docs (#23938)Antonis Geralis2024-08-111-7/+7
|
* Add a document to toOpenArray proc (#23905)Tomohiro2024-08-012-0/+18
|
* fixes JS semicolon omissions (#23896)ringabout2024-07-267-11/+11
|
* doc,test(times): followup #23861 (#23881)lit2024-07-231-3/+4
| | | followup #23861
* Allocator: Always place free cells into the active chunk and add ↵SirOlaf2024-07-221-21/+96
| | | | | | | | | | | | | | documentation (#23871) Lets single threaded applications benefit from tracking foreign cells as well. After this, `SmallChunk` technically doesn't need to act as a linked list anymore I think, gotta investigate that more though. The likelihood of overflowing `chunk.free` also rises, so to work around that it might make sense to check `foreignCells` instead of adjusting free space or replace free with a counter for the local capacity. For Nim compile I can observe a ~10mb reduction, and smaller ones for other projects.
* fixes #23838: Compilation by MinGW for cpu=i386 with time_t bug (#23876)Ward2024-07-221-1/+1
| | | | Change Time type in std/time_t to `distinct clong` instead of `distinct int32`
* Fix out-of-bounds slicing in std/varints (#23868)Buldram2024-07-221-6/+6
| | | | | | Corrects a slicing mistake in the `std/varints` implementation which caused it to fail when writing large numbers into buffers smaller than 10..13-bytes, now 9-byte buffers are sufficient as the documentation states.
* Allocator: Track number of foreign cells a small chunk has access to (#23856)SirOlaf2024-07-201-29/+46
| | | | | | | | | Ref: https://github.com/nim-lang/Nim/issues/23788 There was a small leak in the above issue even after fixing the segfault. The sizes of `free` and `acc` were changed to 32bit because adding the `foreignCells` field will drastically increase the memory usage for programs that hold onto memory for a long time if they stay as 64bit.
* Add '.' (period, dot, ..) to `FormatLiterals` so that `ss.fff` can work. ↵c-blake2024-07-191-1/+1
| | | | | | | | | | | | | (#23861) Honestly, to me the entire design of a (highly!) restricted set of `FormatLiterals` characters seems antithetical to the very idea of a format string template. Fixing that is a much larger change, though. So, this PR just adds `'.'` so that the standard (both input & output!) notation for decimal numbers in Nim can be used for the seconds part of a time format in `lib/pure/times.format(.., f)`. It should only make legal what was illegal and should be harmless since `'.'` is not used in any special way otherwise.
* doc: times.nim: DD -> dd (#23857)lit2024-07-181-2/+2
| | | `YYYY-MM-dd` was mistaken as `YYYY-MM-DD`.
* fixes #23844; Nim devel nightly i386 build failing (#23849)ringabout2024-07-171-1/+1
| | | | | | | | | | | | fixes #23844 follow up https://github.com/nim-lang/Nim/pull/23834 ```nim type Timespec* {.importc: "struct timespec", header: "<time.h>", final, pure.} = object ## struct timespec tv_sec*: Time ## Seconds. tv_nsec*: clong ## Nanoseconds. ```
* Add warnings about exec usage. (#23820)Antonis Geralis2024-07-171-2/+9
| | | | | | | | | | | Related to https://github.com/nim-lang/Nim/issues/23819 and also found in discord https://discord.com/channels/371759389889003530/371759389889003532/1260845467147829372 Since nothing can be done, besides deprecating the function, a warning is a better option. --------- Co-authored-by: Juan Carlos <juancarlospaco@gmail.com>
* Silence `hint:performance` message when using very basic http client (#23832)c-blake2024-07-151-1/+2
| | | | | | | | | | | | code such as: ```Nim import std/httpclient # nim c --hint:performance:on echo newHttpClient(proxy=nil, headers=newHttpHeaders({"Accept": "*/*"})).getContent("x") ``` (Fix was suggested by @ringabout in a private channel.) Seems useful since `httpclient` is so basic/probably pervasive with many hundreds of `import`s across the NimbleVerse.
* Use monotonic timestamp to calculate timeouts refs #23826 (#23834)Mark Leyva2024-07-151-10/+16
| | | | | | Related to #23826. This address issues raised [here](https://github.com/nim-lang/Nim/pull/23826#issuecomment-2226877361) by using a monotonic timestamp to calculate timeouts and increasing the max sleep time to 50ms.
* bump NimVersion to 2.1.9 (#23831)Miran2024-07-121-1/+1
| | | This is a 2.2 RC1.
* fixes #23825; Busy wait on waitid, sleeping at regular intervals (#23826)Mark Leyva2024-07-121-101/+42
| | | | | | | | | Addresses #23825 by using the approaching described in https://github.com/nim-lang/Nim/pull/23743#issuecomment-2199523110. This takes the approach from Python's `subprocess` library which calls `waitid` in loop, while sleeping at regular intervals. CC @alex65536
* deprecate `owner` from `std/macros` (#23828)ringabout2024-07-121-1/+1
|
* conditional compilation of gcd(SomeInteger,SomeInteger) in std/math (#23773)quimt2024-07-091-34/+37
| | | | | | | | | | | The most specific version of `gcd(int,int)` in `std/math` uses bitwise comparisons from C compilers, which can't be borrowed on the js platform in the web browser. Conditional compilation here should fix the issue for this and downstream libraries such as `std/rationals` when compiling to browser js as the backend. --------- Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Adjust the correct chunk's free space in allocator (#23795)SirOlaf2024-07-081-2/+2
| | | Fixes #23788
* Replacement PR for https://github.com/nim-lang/Nim/pull/23779 that (#23793)c-blake2024-07-071-26/+42
| | | | | | | makes new hash the default, with an opt-out (& js-no-big-int) define. Also update changelog (& fix one typo). Only really expect the chronos hash-order sensitive test to fail until they merge that PR and tag a new release.
* Update documentation for parseEnum in strutils.nim (#23804)Leon Lysak2024-07-061-2/+2
| | | | | | | added small note regarding style insensitivity for parsing enums. the casing of the first letter is still taken into account for this function. was confused a little at first because when I read "style insensitive manner" I thought it meant casing as well and ran into a couple of `ValueError`'s because of it.
* Fixed issues when using `std/parseopt` in miscripts with cmdline = "" (#23785)Gianmarco2024-07-021-3/+15
| | | | | | | Using initOptParser with an empty cmdline (so that it gets the cmdline from the command line) in nimscripts does not yield the expected results. Fixes #23774.
* Fix doc: '\c' '\L' in lexbase.nim (#23781)lit2024-07-011-4/+4
| | | - In lexbase.nim, `\c` `\L` were rendered as `c` `L`.
* refine: strmisc.expandTabs better code structure (#23783)lit2024-07-011-9/+6
| | | | | | | | | After this pr, for a string with just 20 length and 6 `'\t'`, the time reduces by about 1.5%[^t]. Also, the code is clearer than the previous at some places. [^t]: Generally speaking, this rate increases with length. I may test for longer string later.
* fixes #5091; Ensure we don't wait on an exited process on Linux (#23743)Mark Leyva2024-07-011-0/+2
| | | | | Fixes #5091. Ensure we don't wait on an exited process on Linux
* fixes #23725; Size computations work better when they are correct (#23758)Andreas Rumpf2024-06-261-6/+10
| | | [backport]
* Check for nil in cstringArrayToSeq (#23747)Yuriy Glukhov2024-06-241-0/+2
| | | | | | | | This fixes crashes in some specific network configurations (as `cstringArrayToSeq` is used extensively in `nativesockets`). --------- Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* fixes #23742; setLen(0) no longer allocates memory for uninitialized ↵ringabout2024-06-211-2/+8
| | | | | | | | | | strs/seqs for refc (#23745) fixes #23742 Before my PR, `setLen(0)` doesn't free buffer if `s != nil`, but it allocated unnecessary memory for `strs`. This PR rectifies this behavior. `setLen(0)` no longer allocates memory for uninitialized strs/seqs
* Add Farm Hash conditioned upon `nimPreviewHashFarm` as 64-bit `Hash` (#23735)c-blake2024-06-191-20/+184
| | | | | | | | | | | | | | | | | | | | | | | | | Unlike present Nim this actually fills `Hash` for `string` & related. For the curious, note that `hashData` remains the aboriginal Nim string hasher & `import hashes {.all.}` allows simultaneous test/time of {orig, murmur, farm} on your favorite CPU & back end compiler. Update tests also conditioned upon `nimPreviewHashFarm` so they should pass either with or without that `define` on. In `--jsbigint=on` mode, only the lower 32-bits of `Hash` match nimvm & run-time values because `type Hash = int` and on JS int=int32, not int64 as for 64-bit Nim platforms. Due to the matching, `const` Table should match run-time `Table` on all platforms. To operate in `--jsbigint=off` mode is feasible but needs much "double precision mul/xor/ror/shr-arithmetic"-style work. That is distracting & also of questionable value since JS added BigInt in 2018, ringabout added Nim support for it in 2021 & `nimPreviewHashFarm` is unlikely to swap from an opt-in to an opt-out default before 2025..2026 which will have given a backward looking time window of 7..8 years for deployment platforms - reasonably generous. Add a changelog entry for 2.2.
* fixes #23732, os.sleep(-1) now returns immediately (#23734)lit2024-06-181-0/+3
| | | fixes #23732
* Fix NIM_STATIC_ASSERT_AUX being redefined on different lines (#23729)fakuivan2024-06-181-4/+8
| | | | | | | | | fixes #17247 This generates a new NIM_STATIC_ASSERT_AUX variable for each line that NIM_STATIC_ASSERT is called from. While this can solve all existing issues in the current code base, this method is not effective for multiple asserts on a single line.
* Fix non-exported `memfiles.setFileSize` to be able to shrink files on posix ↵c-blake2024-06-141-36/+30
| | | | | | | | | | | | | | via `memfiles.resize` (#23717) Fix non-exported `setFileSize` to take optional `oldSize` to (on posix) shrink differently than it grows (`ftruncate` not `posix_fallocate`) since it makes sense to assume the higher address space has already been allocated there and include the old file size in the `proc resize` call. Also, do not even try `setFileSize` in the first place unless the `open` itself works by moving the call into the `if newFileSize != -1` branch. Just cosmetics, also improve some old 2011 comments, note a logic diff for callers using both `mappedSize` & `newFileSize` from windows branch in case someone wants to fix that & simplify code formatting a little.
* fixes #22927; no test case extractable [backport] (#23707)Andreas Rumpf2024-06-121-11/+23
|
* fixes #23513, parseutils.nim: parseInt's doc example. (#23561)lit2024-06-121-8/+12
| | | | | | | | | | fixes #23513 Also, the old `runnableExample` is just a copy of `proc parseInt(openArray[char], var int, int)` variant (in Line 1000). --------- Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com>
* fixes #22510 (#23100)Andreas Rumpf2024-06-061-27/+24
|
* make `std/options` compatible with strictdefs (#23675)ringabout2024-06-051-6/+6
|
* fix noreturn/implicit discard check logic (#23681)metagn2024-06-051-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | fixes #10440, fixes #13871, fixes #14665, fixes #19672, fixes #23677 The false positive in #23677 was caused by behavior in `implicitlyDiscardable` where only the last node of `if`/`case`/`try` etc expressions were considered, as in the final node of the final branch (in this case `else`). To fix this we use the same iteration in `implicitlyDiscardable` that we use in `endsInNoReturn`, with the difference that for an `if`/`case`/`try` statement to be implicitly discardable, all of its branches must be implicitly discardable. `noreturn` calls are also considered implicitly discardable for this reason, otherwise stuff like `if true: discardableCall() else: error()` doesn't compile. However `endsInNoReturn` also had bugs, one where `finally` was considered in noreturn checking when it shouldn't, another where only `nkIfStmt` was checked and not `nkIfExpr`, and the node given for the error message was bad. So `endsInNoReturn` now skips over `skipForDiscardable` which no longer contains `nkIfStmt`/`nkCaseStmt`/`nkTryStmt`, stores the first encountered returning node in a var parameter for the error message, and handles `finally` and `nkIfExpr`. Fixing #23677 already broke a line in `syncio` so some package code might be affected.