`len` could contain side effects and may result in different values when
substituted twice in the template expansion. Instead, capture the result
of substituting `len` once.
closes: #21538
* Add a test case
There are way more test cases (See all branches of analyseIfAddressTaken but this covers at least a second branch
* Port analyseIfAddressTaken from semexprs to sigmatch
This was done since we cannot import sem or semexprs (circular import) but we need the rest of the logic. In needs to be done here since the converter isn't semmed afterwards and so we can't just leave the process til later use the version from semexprs
* Less hacky solution which has the checking be done in analyseIfAddressTakenInCall
This was done instead of the recommendation on removing it since sfAddrTaken is used in places other than the backend
* Remove weird whitespace
* Still check nkHiddenAddr if we are checking a converter
* Fix custom objects, fix handling of nil variables
* Rename because lldb complains about dashes in filename
* Add example of how to use custom type formatting from Nim
* Add synthetic objects with dynamic fields and add an example
* fix#18977 disallow change branch of an object variant in ORC
* check errors for goto exception
* fixes conditions
* fixes tests
* add a test case for #18977
* fixes#21306; don't transform yields in the var section when introducing new local vars
* adds `inVarSection` so the var section in the var section is freshed
* use `isIntroducingNewLocalVars` to avoid yield transformations in var sections
* fixes comments
* fixes#21023; Segfault when mixing seqs, orc, variants and futures
* fixes none of the branches were explicitly selected
* add one more test
* one more test
* finish issue #21474: a better message if dot is not found locally when using gendepend
* fix a typo in compiler
* trim empty path reported in `findNodeJs`
* compiler/main.nim: switch raise to simply quit
* Remove Defect from raises list
Since defects aren't tracked anymore this causes a hint to pop up mentioning it
* Still track Defect when getting ran with an older Nim version
The raises followed a pattern so moving them into a pragma didn't seem to cause any extra problems
* Make pickBestCandidate store syms
* Remove useless cursor
* Try making pickBestCandidate more readable
* Fix advance order
* Revert back to seq with lots of comments
---------
Co-authored-by: SirOlaf <>
a warning message been added to the documentation to remind users that the timeout parameter is expressed in milliseconds, not seconds. to help prevent confusion and unexpected behaviours.
* fixes#20139; hash types based on its path relative its project
* add a test case
* fixes procs
* better implementation and test case
---------
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* fixes#21326; getAst uses type info to annotateType quoted variables
* simplify logics; sem types first
* fixes important packages
* add testcases
* tiny
* fixes#10938; always initialize global variable in VM
* fixes importc vars
* there is a pre-existing issue regarding closure types in the VM
* add tests
Add mention of breaking change to changelog
As described by #21435 , generic proc declarations making use of `_` as generic
parameter are no longer possible. This is a change that was introduced by
#21192 . During the debate over if this should be part of the intended spec in
#21435 we concluded that it is and thus should be mentioned as a breaking
change in the changelogs.
* Fix: make nintendoswitch someGcc, remove symlink support for nintendoswitch, add getAppFilename for nintendoswitch
* Fix: use getApplHeuristic on nintendoswitch
* fixes#19795; remove parse pipeline
* isScript
* fixes nimscriptapi
* don't touch reorder
* check script
* fixes tests
* it seems implicit imports of system cause troubles
* access the first child of `nkStmtList`
* ignore comments
* minor messages
* perhaps increases hloLoopDetector
* the module is a stmtList, which changes the errors
* fixes nimdoc
* fixes tlinter
* fixes nim secret tests
* fixes arc_misc
* fixes nim secret tests again
* safe; fixes one more test
* GlobalError is the root cause too
* fixes parsing errors
* put emit types to the cfsForwardTypes section
* fixes#11852; `{.push checks:off}` now works in procs
* disable navigator
* fixes nimdoc
* add tests for JS
* fixes nimsuggest
ioselectors: ioselectors_epoll: for NuttX, limit initial numFD to configured value.
In the NuttX build config, there is a setting called "FS_NEPOLL_DESCRIPTORS".
--------
config FS_NEPOLL_DESCRIPTORS
int "Maximum number of default epoll descriptors for epoll_create1(2)"
default 8
---help---
The maximum number of default epoll descriptors for epoll_create1(2)
--------
For NuttX, change the number of fd arrays allocated by newSelector() to that value.
Signed-off-by: Takeyoshi Kikuchi <kikuchi@centurysys.co.jp>
* Add test case
* closes#21247 Add the sfAddrTaken flag to var parameters in converters
This allows the JS backend to properly pass the parameter as a fat pointer
I have seen these questions: "Why I got an invalid module name errors?". To eliminate this kind of questions, We might improve th error messages. Though, the question might evolve into "What is a valid Nim identifier", which should be more searchable on the Internet.
* Add support for orc strings
* Cleaned up testing script
Enums now printing properly
Merged both old and new strings into the one printer
Moving onto sets which seem kinda difficult
* Sets working
Instead of trying to imitate how Nim represents enums, I just call the dollar proc for each enum value
While this runs into problems if the user doesn't call the dollar proc anywhere, I believe its a decent tradeoff
I've cleaned up the error message for when it cannot find dollar proc (Might add in proper message on how to fix)
* Support sequences
V2 runtime seems to have sequences that don't have a len (Guessing its some kind of short seq optimisation?) but I've rolled
the implementation into normal sequences since the implementation is practically the same
* Clean up test program so it isn't using diff
Also don't redirect the first nim compile to /dev/null so that we can check for any compilation errors
I found the diff to be annoying to read (Seeing as the test script already performs diffing)
* Tables are now supported
* Add colours to test output
It was getting difficult to tell apart test output from GDB output so I added colour to better tell them apart
* Both old and new runtime are working
Set exit code in python test script so that this could possibly be added to the CI. Only issue is that it can be flaky (GDB crashes randomly for some reason)
* Remove old code that was commented out
If I need it later I'll just use git
* Remove branch that never runs
* Remove the old test output [skip ci]
* Add general purpose `setFileSize` (unexported for now). Use to simplify
`memfiles.open` as well as make robust (via hard allocation, not merely
`ftruncate` address space allocation) on systems with `posix_fallocate`.
As part of this, fix a bad `closeHandle` return check bug on Windows and
add `MemFile.resize` for Windows now that setFileSize makes that easier.
* Adapt existing test to exercise newly portable `MemFile.resize`.
* Since Apple has never provided `posix_fallocate`, provide a fallback.
This is presently written in terms of `ftruncate`, but it can be
improved to use `F_PREALLOCATE` instead, as mentioned in a comment.
* This adds `parseutils.parseSize`, an inverse to `strutils.formatSize`
which has existed since 2017.
It is useful for parsing the compiler's own output logs (like SuccessX)
or many other scenarios where "human readable" units have been chosen.
The doc comment and tests explain accepted syntax in detail.
Big units lead to small numbers, often with a fractional part, but we
parse into an `int64` since that is what `formatSize` stringifies and
this is an inverse over partial function slots. Although metric
prefixes z & y for zettabyte & yottabyte are accepted, these will
saturate the result at `int64.high` unless the qualified number is a
small fraction. This should not be much of a problem until such sizes
are common (at which point another overload with the parse result
either `float64` or `int128` could be added).
Tests avoids `test()` because of a weakly related static: test() failure
as mentioned in https://github.com/nim-lang/Nim/pull/21325. This is a
more elemental VM failure. As such, it needs its own failure exhibition
issue that is a smaller test case. (I am working on that, but unless
there is a burning need to `parseSize` at compile-time before run-time
it need not hold up this PR.)
* This worked with `int` but fails with `int64`. Try for green tests.
* Lift 2-result matching into a `checkParseSize` template and format as a
table of input & 2 expected outputs which seems nicer and to address
https://github.com/nim-lang/Nim/pull/21349#pullrequestreview-1294407679
* Fix (probably) the i386 trouble by using `int64` consistently.
* Improve documentation by mentioning saturation.
* Improve documentation with `runnableExamples` and a little more detail in
the main doc comment based on excellent code review by @juancarlospaco:
https://github.com/nim-lang/Nim/pull/21349#pullrequestreview-1294564155
* Address some more @juancarlospaco code review concerns.
* Remove a stray space.
* Mention milli-bytes in docs to maybe help clarify why wild conventions
are so prone to going case-insensitive-metric.
* Add some parens.
* Add test cases
* Implement contains for CacheSeq
* Implement contains for CacheTable
* Fix implementation of hasKey
* Remove contains for CacheSeq
Fix runnable examples
I was accidently using --doccmd:skip so I didn't spot the failure locally
* Implement hasKey as a VM callback instead of magic
* Implement suggestions from PR
Co-Authored-By: ringabout <ringabout@users.noreply.github.com>
* Update lib/core/macrocache.nim
---------
Co-authored-by: ringabout <ringabout@users.noreply.github.com>
Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com>
* suppresses non-exported fields of types and adds command-line option to re-enable this if desired
* corrected the doctest that produced a CI error
* an embarrassingly bad error in reasoning
* modified a nimdoc test to reflect updated behavior
* needed another change to bring utils.html doctest in sync with update
* add info
* fix nimdoc
* lint
* render postfix
* fixes a problem
* fixes nimdoc
* fix nimdoc
---------
Co-authored-by: johnperry-math <john.perry@usm.edu>
Co-authored-by: johnperry-math <devotus@yahoo.com>
Revert "Fix #13093 C++ Atomics: operator= is implicitly deleted because the default definition would be ill-formed (#21169)"
This reverts commit a7bae919ad.
* Implemented level based macro expand functionality
- it can handle single macro call or expand whole function/proc/etc and it
- In addition, I have altered the parser to provide the endInfo for the node.
The usefulness of the `endInfo` is not limited to the `expandMacro`
functionality but also it is useful for `ideOutline` functionality and I have
altered the ideOutline functionality to use `endInfo`. Note `endInfo` most of
the time is lost during the AST transformation thus in `nimsuggest.nim` I am
using freshly parsed tree to get the location information.
* Make sure we stop expanding correctly
* Test CI
* Fix tv3_outline.nim
* Add docs informing about gotcha of clients
It is a hidden problem that AsyncHttpClient-instances *can not* deal with multiple requests at once.
Similar to normal HttpClients they can only deal with sending one request at a time.
This is not told anywhere in the documentation, but critical information that should be available to the user.
* Update lib/pure/httpclient.nim
fixes typo
Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com>
Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com>
* Merge devel
Add another test case
* Fix test
Use getCustomPragmaVal instead of hasCustomPragma
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
parseopt.nim documentation clarity
Added example for default values to cmd line parameters.
Additionally, added lines in getopt documentation about case switching still requiring the `cmdEnd` kind. Hopefully this clears up any vagueness for those following along in the example but omitting the `cmdEnd` in the case because the documentation said it wasn't needed.
* underscores for routine parameters
fixes#13443, fixes#13804, refs #21121
* add changelog + more tests
* support generics and ensure inferred lambdas work
* docgen: implement cross-document links
Fully implements https://github.com/nim-lang/RFCs/issues/125
Follow-up of: https://github.com/nim-lang/Nim/pull/18642 (for internal links)
and https://github.com/nim-lang/Nim/issues/20127.
Overview
--------
Explicit import-like directive is required, called `.. importdoc::`.
(the syntax is % RST, Markdown will use it for a while).
Then one can reference any symbols/headings/anchors, as if they
were in the local file (but they will be prefixed with a module name
or markup document in link text).
It's possible to reference anything from anywhere (any direction
in `.nim`/`.md`/`.rst` files).
See `doc/docgen.md` for full description.
Working is based on `.idx` files, hence one needs to generate
all `.idx` beforehand. A dedicated option `--index:only` is introduced
(and a separate stage for `--index:only` is added to `kochdocs.nim`).
Performance note
----------------
Full run for `./koch docs` now takes 185% of the time before this PR.
(After: 315 s, before: 170 s on my PC).
All the time seems to be spent on `--index:only` run, which takes
almost as much (85%) of normal doc run -- it seems that most time
is spent on file parsing, turning off HTML generation phase has not
helped much.
(One could avoid it by specifying list of files that can be referenced
and pre-processing only them. But it can become error-prone and I assume
that these linke will be **everywhere** in the repository anyway,
especially considering https://github.com/nim-lang/RFCs/issues/478.
So every `.nim`/`.md` file is processed for `.idx` first).
But that's all without significant part of repository converted to
cross-module auto links. To estimate impact I checked the time for
`doc`ing a few files (after all indexes have been generated), and
everywhere difference was **negligible**.
E.g. for `lib/std/private/osfiles.nim` that `importdoc`s large
`os.idx` and hence should have been a case with relatively large
performance impact, but:
* After: 0.59 s.
* Before: 0.59 s.
So Nim compiler works so slow that doc part basically does not matter :-)
Testing
-------
1) added `extlinks` test to `nimdoc/`
2) checked that `theindex.html` is still correct
2) fixed broken auto-links for modules that were derived from `os.nim`
by adding appropriate ``importdoc``
Implementation note
-------------------
Parsing and formating of `.idx` entries is moved into a dedicated
`rstidx.nim` module from `rstgen.nim`.
`.idx` file format changed:
* fields are not escaped in most cases because we need original
strings for referencing, not HTML ones
(the exception is linkTitle for titles and headings).
Escaping happens later -- on the stage of `rstgen` buildIndex, etc.
* all lines have fixed number of columns 6
* added discriminator tag as a first column,
it always allows distinguish Nim/markup entries, titles/headings, etc.
`rstgen` does not rely any more (in most cases) on ad-hoc logic
to determine what type each entry is.
* there is now always a title entry added at the first line.
* add a line number as 6th column
* linkTitle (4th) column has a different format: before it was like
`module: funcName()`, now it's `proc funcName()`.
(This format is also propagated to `theindex.html` and search results,
I kept it that way since I like it more though it's discussible.)
This column is what used for Nim symbols resolution.
* also changed details on column format for headings and titles:
"keyword" is original, "linkTitle" is HTML one
* fix paths on Windows + more clear code
* Update compiler/docgen.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Handle .md and .nim paths uniformly in findRefFile
* handle titles better + more comments
* don't allow markup overwrite index title for .nim files
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
tlsEmulation:on under NetBSD-10Beta and NetBSD-current produces an executable which crashes immediately as follows:
Core was generated by `koch'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x000000000047b4c2 in nimZeroMem ()
(gdb) bt
#0 0x000000000047b4c2 in nimZeroMem ()
#1 0x00000000004897b2 in threadVarAlloc__system_2162 ()
#2 0x000000000048980e in initThreadVarsEmulation ()
#3 0x0000000000489848 in PreMain ()
#4 0x000000000048986a in NimMain ()
#5 0x00000000004898a9 in main ()
I can't speak about the other BSDs.
* avoiding allocating an unnecessary byte for IPv4
The inet.h file uses 16 as the string in C needs the last null byte
1b929c02af/include/linux/inet.h (L49)
However, strings in Nim do not need this. So one byte is being allocated unnecessary and will never be used.
* avoid unnecessary allocation in IPv6 dollar
It is currently allocating 48 bytes. However, the Nim implementation for IPv6 will print a maximum of 39 characters. Nim does not implement IPv6 "0000:0000:0000:0000:0000:ffff:255.255.255.255" (45 characters) nor "0000:0000:0000:0000:0000:ffff:255.255.255.255%3" (47 characters).
The indication in inet.h for 48 is due to the maximum use of 47 characters of a C string that needs a null byte at the end. So 48.
1b929c02af/include/linux/inet.h (L50)
* Track seen module graphs so symbols from the same module aren't repeated
Add test case
* Track symbols instead of modules
* Don't show duplicate symbols in spell checker
Removes the declared location from the message. Since we don't show duplicates anymore it would be a bit misleading if we only show the location for the first declaration of the symbol
* [change] add/insert/delete family of xmltree expanded with several variations. Added replace methods family
* [change] Lifted child limitations on insert methods (consulted with @araq)
* [tests] add/insert/replace/delete of xmltree XmlNodes tests added
* Add test
* Check file exists before adding it into compilation
* Make error message look like other error messages
i.e. following the format `error msg: file`
* Name iterators something human readable
Remove intermediate async procs from stacktraces
Clean async traceback message from reraises message
* Remove unused import/variable
* Fix failing tests
Don't add {.stackTrace: off.} to anonymous procs (They already don't appear in stacktrace)
* Fix failing tests in pragma category
Now check that the nim is a routine type first so we don't run into any assertion defects
* Hide stack trace pragma in docs and update doc tests
User doesn't need to know if something won't appear so this more becomes verbose noise
If this is a bad idea we can always add a `when defined(nimdoc)` switch so we don't add {.stackTrace: off.} to the Future[T] returning proc for docs
* Parse the new line format
* Fix pattern
Didn't have space after the path
* Remove duplicate sources
Sources would sometimes double up with a new line at the end
* Remove unused variable
* Refactor sourcemap.nim
Removes the multiple translations needed, now goes from single high level type to the final SourceMap
Adds documentation for procs
* Line numbers line up properly now
Files aren't linking correctly though
* Files now link up correctly
Lines are sometimes off but overall seems pretty good
Just need to implement parser
* Add column info to output
Add sourceMappingURL to rope directly to prevent copy
* Properly handle columns
* Remove debug lines
* Add testcase
* Finish testcase
* Use the outdir folder instead of the folder the test is in to find the sourcemap
Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com>
* fixes#21043; fixes a named exception in the infixAs expression which generate an implicit uninitialized let statement
* Update compiler/sempass2.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* work around chronos
chronos has tests against the devel branch, it will be eventually fine.
* Apply suggestions from code review
* Update testament/important_packages.nim
* Trying to fix by changing renderer
* add renderExpandUsing flag
This flag makes the renderer expand parameters that use using statement to have their full type
* Update docs
* Make comment better explain why checking for nkSym
* Fix nil access when macro/template has parameter with no type
* Fix nil access when node is not semmed yet
* change `include genode/env` to an import
ref 0b262e9496 (diff-8718bd20d8f61d6638d3d64b19efc31bcd40a6d5be8215b2a1f0b75ed93e8d56)
* fixes comments
* ship a modern nimble with lock files support
* not sure whether the latest nimble has a regression
now I'm trying 0.14.0
* change `pkgs` to `pkgs2` (#21073)
* overwrite problematic packages
* Apply suggestions from code review
* Apply suggestions from code review
* Apply suggestions from code review
* alternative, much simpler algorithm for strict func checking
* forgot to git add new compiler module
* new spec is incredibly simple to describe
* fixes bigints regression
* typos
* closes#16305; closes#17387; closes#20863
* fix#16758 Nim crashes in fixAbstractType
* Update compiler/semexprs.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Implicit return working for asyncdispatch proc
Closes#11558
* Test case
* Test that return value is actually used
* Update tests/async/t11558.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* fix issue #20922 by handling missing expr in `exprList` for `tkOf`
* fix line numbers in test case
* rewrite exprList requiring expr, add optionalExprList for except
As suggested by @metagn.
* update test case to reflect new code
* update grammar.txt
* update line numbers in test case taking into account nimout
Given the number of errors that are produced it seems easier to do it
this way instead of using `tt.Error`.
* Breaking parser changes, implement https://github.com/nim-lang/RFCs/issues/442
Types are separated from expressions and better reflected in the grammar.
* add test
* more accurate grammar
* fix keyword typedescs
* accept expressions in proc argument lists
* CI "fixes"
* fixes
* allow full ref expressions again, adapt old tests
* cleanup, fix some tests
* improve grammar, try and revert semtypes change
* restrict sigil binding to identOrLiteral
* fix, should have caught this immediately
* add changelog entry, fix double not nil bug
* correct grammar
* change section
* fix
* real fix hopefully
* fix test
* support LL(1) for tuples
* make grammar.txt too
* draft for let daa
* patch
* fixes bugs
* errors for global let variable reassignments
* checkpoint
* out param accepts let
* add more tests
* add documentation
* merge tests
* test disable do: block lambda lifting
* fix last test [skip ci]
* deprecate `do:` meaning `do ():` + misc cleanup
closes https://github.com/nim-lang/RFCs/issues/486
* oops
* fix
* no idea what could be causing nimsuggest failure other than this
* ensure ci works
* better procvar ambiguity errors, clean up after #20457fixes#6359, fixes#13849
* only trigger on closedsymchoice again
* new approach
* add manual entry for ambiguous enums too
* add indent [skip ci]
* move to proc
* Add comments on CPU arch detection
* Support HPPA/hppa/parisc64 CPU architecture
* Support sparc64 CPU architecture
* Update tools/niminst/makefile.nimf
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* better error messages for dot operators [backport]
fixes#13063
* also fixes#7777
* fix#6981 and #9831 too
* fix
* minor improvement
* sus test fixes
* make test multiplatform lol
* fix nimsuggest test, extra improvements
* Remove confusing "ppc" block
The PowerPC arch is called "powerpc" in platforms.nim
The makefile shipped in release 1.6.10 populates the oFiles variable when myos=linux and mycpu=powerpc
mycpu=ppc instead leads to ``no C code generated for: [linux: ppc]. Stop``
* Handle ucpu=ppc
* fix =#13790 ptr char (+friends) should not implicitly convert to cstring
* Apply suggestions from code review
* first round; compiles on windows
* nimPreviewSlimSystem
* conversion is unsafe, cast needed
* fixes more tests
* fixes asyncnet
* another try another error
* last one
* true
* one more
* why bugs didn't show at once
* add `nimPreviewCstringConversion` switch
* typo
Co-authored-by: xflywind <43030857+xflywind@users.noreply.github.com>
* unnamed break in the block now gives an error
* bootstrap
* fixes
* more fixes
* break with label
* label again
* one moee
* Delete test5.txt
* it now gives a UnnamedBreak warning
* change the URL of bump back to the original one
* test azure
* use exit 1
* try again
* use useSysAssert
* disable i386
* use refc for tlsEmulation on i386
* use refc
* disable i386
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
* fix =#13790 ptr char (+friends) should not implicitly convert to cstring
* Apply suggestions from code review
* first round; compiles on windows
* nimPreviewSlimSystem
* conversion is unsafe, cast needed
* fixes more tests
* fixes asyncnet
* another try another error
* last one
* true
* one more
* why bugs didn't show at once
* add `nimPreviewCstringConversion` switch
* typo
* fixes ptr to cstring warnings[backport]
* add fixes
Co-authored-by: xflywind <43030857+xflywind@users.noreply.github.com>
* Add flushThreshold to std/logging loggers
* Remove duplicate field
* Add -d:nimFlushAllLogs for changing default flush behavior globally
* Add changelog entry for log flushing change
* Flush all log levels by default in Nim v2
* [sugar] handle HiddenDeref in capture, error at CT if unsupported nnk
Instead of running into trouble of the `.strVal` access failing, it's
better to error at CT.
* [tests] remove unnecessary import in test case
* improve ident extraction & extend test cases
* [tests] improve tests for `capture` of different types & act. check
* fixes documentation regression and a bit clean up
follow up https://github.com/nim-lang/Nim/pull/20371
* Apply suggestions from code review
* Apply suggestions from code review
* fixes#20746; remove string copies for ORC booted compiler
* add a test case
* use `cursor` thanks to @beef331
* for old compilers
* change file extension
* change test cases
* fixes regression #17121; adding doc comment in importc proc makes it silently noop at CT
* Update compiler/vmgen.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* quit value gets saturated to ranges
* add documentation
* minimal changes
* refactor
* small fix
* add documentation
* fixes
* Update lib/system.nim
Co-authored-by: Juan Carlos <juancarlospaco@gmail.com>
Co-authored-by: Juan Carlos <juancarlospaco@gmail.com>
* fix posix.mq_receive compilation with cpp backend
* only enable runnableExample on posix
* linux, not posix
* simplify example
* add test
* mqueue.h does not exist on MacOS
* place test case in own block
* drop runnableExamples
* Improve dollar
* Improve dollar
* Simplify, remove 1 if in for loop
* ci
* Update lib/pure/net.nim
* Update lib/pure/net.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* fix semcase on tySequence and tyObject #20283#19682
* use better arg name
* avoiding returns nil use errorNode instead, clean code
* use efNoDiagnostics flag
* remove tests/errmsgs/t19682.nim
* combine 2 test cases to one file
* Genode: add native signal handler
* Genode: add scheduleCallbacks to asyncdispatch
This resolves some awkwardness where an RPC server may or may not
use callSoon while dispatching RPC but without scheduling timers
or I/O.
fix closure iter state table init type
It is a well-known fact that using closed intervals for ranges is
logically, objectively and eternally wrong, as evidenced by this
off-by-one.
* Revert "Add OpenSSL 3 support (#19814)"
This reverts commit 2dcfd73260.
* openssl 3 support no longer opt in + some 1.0 support
* hopefully fix
* maybe fix
* final attempt
* actual fix hopefully
* Silence warning false positive for int128.nim: Warning: target type is larger than source type
* Silence warning false positive for int128.nim: Warning: target type is larger than source type
* https://github.com/nim-lang/Nim/pull/20666#discussion_r1006162835
* Added openarray[char] overloads to std/unicode
Call substr instead of index slice inside unicode
Added substr overload for openarray for parity with string functionality
Made style checker happies and fixed overloads for substr
* Added update to changelog [skip ci]
* Inline unicode string operations
* Moved substr overload to unicode
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Added 'openarray[char]' overloads to 'std/parseutils'
* Removed redundant `start` and `last` params from slice using procs
* Fixed type for parseIdent overload
* fixed one by off with 'substr'
* removed missed start parameters for procedures
* Added 'openarray[char]' overloads to 'std/parseutils'
* Removed redundant `start` and `last` params from slice using procs
* Fixed type for parseIdent overload
* fixed one by off with 'substr'
* removed missed start parameters for procedures
* Fixed VM op to work with new 'opcSlice'
* Corrected captureBetween's logic to work with openarray
* js sys's parsefloat logic now uses openarray
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
* Add test for tuple being invalid size
* Test tuple size before accessing fields
* Fix formatting for import
* Fix not being able to build from csources_v1
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Added tests
* Fix expected string
* Allow hooks to take an optional parameter that is the current options
* Add options to hooks for other generic types
* Fix doc links
* Implemented opcSlice to make 'toOpenArray' work on the VM
* Added nkOpenArray for VM to reduce bodgeness
* Fixed range issues and erraneous comments
* Range check correctly for openArrays in opcLdArr
* Inverted logic for ldArr checking
* vm now supports slicing strings
* Added string tests
* Removed usage of 'nkOpenArray' and redundant operations
* Refactored vmSlice implementation, removing redundant and incorrect code
* Made tuples go throw opcWrObj for field assignment
* All strkinds should be considered for openarrays
* Handle nkOpenSymChoice for nkAccQuoted in considerQuotedIdent
* Add test
* Update compiler/lookups.nim
Co-authored-by: SirOlaf <a>
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Make rstgen work with gcsafe
Co-authored-by: Danil Yarantsev <tiberiumk12@gmail.com>
* add tests and fixes
* if nimHasWarningAsError
Co-authored-by: Danil Yarantsev <tiberiumk12@gmail.com>
* allocator: catch up with multi-threading techniques
* removed the global thread lock
* more atomics for fun and profit
* added important sysAssert
* stats remain thread local and don't have to be atomic
* undo split chunk optimizations in the hope it makes the CI happy
* FTP client is now able to connect to server over TLS by set `useTls = true` in newAsyncFtpClient proc
* Update asyncftpclient.nim
* fix CI
* shouldn't use {.error.}
* Update lib/pure/asyncftpclient.nim
Co-authored-by: flywind <xzsflywind@gmail.com>
Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com>
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
* Fix/improve handling of forward declarations in nimsuggest
- ideUse now works fine when invoked on the implementation
- implemented ideDeclaration to make cover lsp feature textDocument/declaration
- fixed performance issue related to deduplicating symbols. Now the
deduplication happens after the symbols are filtered. As a alternative we might
change the way cached symbols are stored(e. g. use set).
- I also fixed the way globalSymbols work. Now it will sort the responses based
on the match location to make sure that the results are sorted in user friendly way.
* Update nimsuggest/nimsuggest.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Implement Markdown indented code blocks
Additional indentation of 4 spaces makes a block an "indented code block"
(monospaced text without syntax highlighting).
Also `::` RST syntax for code blocks is disabled.
So instead of
```rst
see::
Some code
```
the code block should be written as
```markdown
see:
Some code
```
* Migrate RST literal blocks :: to Markdown's ones
The strutils `delete` func with signature
func delete*(s: var string, first, last: int)
was deprecated in adba5eb45e, in favor of one with signature
func delete*(s: var string, slice: Slice[int])
However, a few procedures still used the deprecated form. This commit
updates them, resolving these deprecation warnings:
rstgen.nim(766, 12) Warning: use `delete(s, first..last)`; delete is deprecated [Deprecated]
strutils.nim(1651, 19) Warning: use `delete(s, first..last)`; delete is deprecated [Deprecated]
strutils.nim(1679, 7) Warning: use `delete(s, first..last)`; delete is deprecated [Deprecated]
strutils.nim(2472, 7) Warning: use `delete(s, first..last)`; delete is deprecated [Deprecated]
Before this commit:
- `trimZeros` called `s.delete(i+1, i)` for an input that lacks a
trailing zero (like "1.23").
- `removePrefix*(s: var string, prefix: string)` called
`s.delete(0, -1)` when the prefix was the empty string.
which did not modify `s`, nor raise an error. But the newer slice
`delete` raises an `IndexDefect` when the start of the slice is greater
than the end, so we avoid calling the new `delete` for such a case.
Recall that exceptions inheriting from `system.Defect` are not tracked
with the `.raises: []` exception tracking mechanism [1], so this commit
does not break existing code like:
proc foo {.raises: [].} =
var s = "abc1.20"
s.removePrefix("abc")
s.trimZeros()
doAssert s == "1.2"
The `strutils.delete` deprecation was motivated by a problem with
`system.delete` [2][3]:
`system.delete` had surprising behavior when the index passed to it
was out of bounds (it would delete the last entry then). Compile
with `-d:nimStrictDelete` so that an index error is produced
instead.
Be aware however that your code might depend on this quirky behavior
so a review process is required on your part before you can use
`-d:nimStrictDelete`. To make this review easier, use the
`-d:nimAuditDelete` switch, which pretends that `system.delete` is
deprecated so that it is easier to see where it was used in your
code.
`-d:nimStrictDelete` will become the default in upcoming versions.
A similar deprecation happened with `sequtils.delete` [4], but that
deprecated form is already not used in this repo.
[1] https://github.com/nim-lang/Nim/blob/2dec69fe5aa6/doc/manual.md#exception-tracking
[2] https://github.com/nim-lang/Nim/blob/2dec69fe5aa6/changelogs/changelog_1_6_0.md#system
[3] https://github.com/nim-lang/Nim/commit/92cb76571432
[4] https://github.com/nim-lang/Nim/commit/1d6863a7899f
* fixes#19231; newFinalize doesn't work with ORC
first make it pass tests
* remove the tables dep
creates a binding for finalized procs in order to handle the same symbols. It used to wrongly generat a new symbol id for the same symbol as the encountered one before
* refactor and revert #14257
* de indentation
* fixes tests; uses instantiated types
* pragma for sfCallsite instead of name check at every template definition
Not documented because it seems to be for internal use?
Should also make it possible to make comparisons and setops imports, but this doesn't have to be done.
I can reuse a name like `cursor` for the pragma as well, added a new name just to be safe.
* make sfCallsite recursive, add tests
* fix#19678 Broken behavior with string ranges in case labels
* Update compiler/semtypes.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* system refactor, move out 600 lines
* compilation, slice, backwardsindex, misc_num moved out of system
* some procs/types moved into arithmetics, basic_types
* system no longer depends on syncio
* some procs moved around to fit with their surroundings
* make exceptions an import, old ops to misc_num
* move instantiationInfo back
* move back nim version, fix windows echo
* include compilation
* better docs for imported modules, fix unsigned ops
also remove ze, ze64, toU8, toU16, toU32 with nimPreviewSlimSystem
* fix terminal
* workaround IC test & weird csize bug, changelog
* move NimMajor etc back to compilation, rebase for CI
* try ic fix
* form single `indices`, slim out TaintedString, try fix IC
* fix CI, update changelog, addQuitProc
* fix CI
* try fix CI
* actually fix CI finally hopefully
* Update lib/system/compilation.nim
Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com>
* update kochdocs
* hopefully fix csize uses for slimsystem
* fix tquit
Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com>
* fixes#19401; fixes#19402; rework Forward declaration and finalizer for ORC
* add more tests
* give it a name
* make more tests
* fixes tests
* hidden addr for cpp
* move code to a function
* make more standard libraries work with `nimPreviewSlimSystem`
* typo
* part two
* Delete specutils.nim
* fixes more tests
* more fixes
* fixes tests
* fixes three more tests
* add formatfloat import
* fix
* last
* make it match ccgexprs.nim `isSimpleExpr`
* x in {1, 2}
* r[].x and r.x when r is ref type
* float(x)
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
* refactorings in preparation for ropes elimination of the C code generator; mostly the usual ': Rope' -> 'result: var Rope' rewrite
* rewrote ccgcalls.nim
* refactored ccgexprs.nim
* ccgliterals: refactoring
* refactoring: code dealing with name mangling
* refactoring: getRecordFieldsAux
* ropes are strings (insert obscene joke here)
* optimize JS code gen
* optimizations and code improvements
* more optimizations
* final cleanups
* bump macOS image on Azure CI to macos-11
##[warning]The macOS-10.15 environment is deprecated, consider switching to macos-11(macos-latest), macos-12 instead. For more details see https://github.com/actions/virtual-environments/issues/5583
* fix CI error
* fixes#20426; remove `maincommand` and `m` options since they are a noop since 2014 and causes confusion
fixes#204267f7b13a45f (diff-d949f8c356fd2dc9ceedc6f3dbbd01e2c806269dd0a8ad6516facf589fa2c99a) makes it a no op, but it causes a regression because it should add `expectArg(switch, arg, pass, info)` before the discard statement. It causes https://github.com/nim-lang/Nim/issues/20426 to happen. Without `expectArg(switch, arg, pass, info)`, `-mm:orc` is wrongly interpreted as `-m` and compiler, which doesn't make sense. It should either abort compilation or prints `argument for command line option expected: '-m'` message. Since they are a no op since 2014, let's remove it to clear the confusion. Let's wait and see whether it breaks something.
* add a changelog
* Optimize `base64.encodeMime`
* 5x faster for common scenarios, 13x faster if `lineLen` <= encoded
string's length or `newLine` is empty.
* Changed `lineLen`'s type to `Positive` to disallow `0`.
* Fix
* Revert "fixes #20285; prevent oid time overflow at year 2038"
This reverts commit dfcdb6ec2a.
* increase time to 64 bits and clean up
* add testcase
* inline consts
* add a changelog
* fixes #20285; prevent oid time overflow at year 2038
* Extract Markdown & Rst doc into separate file
This documentation should be extracted into separate file
as it's user's documentation, which can be used as a separate
utility for compiling `.md/.rst` files.
* Restructure: move markup info into markdown_rst.md
+Markdown link migration
* fix#19882 Improve error message when instantiating generics that lack a type
* Update tests/errmsgs/t19882.nim
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
* don't run azure on other branches either
refs #20184
Azure is more prone to clogging & it's especially bad with the timeouts (some PRs haven't rebased).
* allow all version- branches
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
* add closing quote
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
* fix typos in manual.md
1. remove redundant `(`
1. 'System module' -> 'system module'.
* Update manual.md
"However" is not easy to understand. Suggest changing to the word into "In this version" to make the comparison explicite.
* conservative partial revert of #19814
* fix
* revert tssl
* revert azure CI change
* keep azure, revert version range
* fully revert CI, add changelog
* useOpenssl3 as separate define, .3 is a version
put mOpenArrayToSeq in compile-time evaluation whitelist
(it was mNone before which was whitelisted), homogenize
"ordinal type expected" errors, put overloadable enums
in non-experimental manual
* nimgrep: add `--matchContext` and `--noMatchContext` options
* Rename options for uniformity
* Revise option names, add `--parentPath` options
* Revert --bin deprecation
* Copy-paste an original test from quantimnot
The origin was:
96544656d5/tnimgrep.nim
* Change ! to n
* Attempt to fix test
* Fix test on Windows
* Change --contentsFile -> --inFile, add more tests
* Bump
* Change --parentPath to --dirpath
* Fix cannot create Windows directory in root
Fixes#20306, a regression bug with `createDir` caused by
`23e0160af283bb0bb573a86145e6c1c792780d49`.
The issue is that, if the path consists only of a drive and a single
directory (e.g. "Y:\nimcache2" in the original issue), then no
directories will be created. This works fine if there are multiple
directories (e.g. "Y:\nimcache2\test").
In the case of "Y:\nimcache2", `omitNext` in `createDir` is `false` on
the last condition in `createDir`. This means that the "nimcache2"
directory will not be created, and no exception will be raised.
Fixed by refactoring to use `parentDirs` iterator instead of iterating
over the string characters. Motivation is reduced code complexity.
Will not test the specific "C:\test" `createDir` case, since there is no
standard Windows drive with write permissions in the root. Creating a
custom drive-mapping to Windows Temp is a non-option. That could mess
up some users running the test.
Added `parentDirs` tests since they are lacking on for POSIX paths.
* Fix `createDir("")` causing error
The change to `createDir` caused `createDir("")` to raise an error,
where it previously didn't. Fixed so `createDir("")` does not fail, and
added test case.
Markdown link migration part 1
Also the warning is improved a bit.
Local links (targeting inside its document) which had had a full anchor
were turned into concise form.
The very fact that they existed may be due to the bug in
reference to subsections fixed https://github.com/nim-lang/Nim/pull/20279,
now they are working well (both in RST syntax and
new Pandoc Markdown syntax implemented in
https://github.com/nim-lang/Nim/pull/20304)
prevent use-after-free bugs in cased objects
the bug happens specifically when deleting
an item in a seq. The item taking it's place
might not have the same case fields. Then =sink(x[i], move x[xl])
might leave the deleted fields still in memory!
If the new item switches branches again, you get a use-after-free bug.
* Implement Pandoc Markdown concise link extension
This implements https://github.com/nim-lang/Nim/issues/20127.
Besides reference to headings we also support doing references
to Nim symbols inside Nim modules.
Markdown:
```
Some heading
------------
Ref. [Some heading].
```
Nim:
```
proc someFunction*() ...
... ## Ref. [someFunction]
```
This is substitution for RST syntax like `` `target`_ ``.
All 3 syntax variants of extension from Pandoc Markdown are supported:
`[target]`, `[target][]`, `[description][target]`.
This PR also fixes clashes in existing files, particularly
conflicts with RST footnote feature, which does not work with
this PR (but there is a plan to adopt a popular [Markdown footnote
extension](https://pandoc.org/MANUAL.html#footnotes) to make footnotes work).
Also the PR fixes a bug that Markdown links did not work when `[...]`
section had a line break.
The implementation is straightforward since link resolution did not
change w.r.t. RST implementation, it's almost only about new syntax
addition. The only essential difference is a possibility to add a custom
link description: form `[description][target]` which does not have an
RST equivalent.
* fix nim 1.0 gotcha
* Add improved Windows UNC path support in std/os
Original issue: `std/os.createDir` tries to create every component of
the given path as a directory. The problem is that `createDir`
interprets every backslash/slash as a path separator. For a UNC path
this is incorrect. E.g. one UNC form is `\\Server\Volume\Path`. It's an
error to create the `\\Server` directory, as well as creating
`\\Server\Volume`.
Add `ntpath.nim` module with `splitDrive` proc. This implements UNC path
parsing as implemented in the Python `ntpath.py` module. The following
UNC forms are supported:
* `\\Server\Volume\Path`
* `\\?\Volume\Path`
* `\\?\UNC\Server\Volume\Path`
Improves support for UNC paths in various procs in `std/os`:
---
* pathnorm.addNormalizePath
* Issue: This had incomplete support for UNC paths
* The UNC prefix (first 2 characters of a UNC path) was assumed to
be exactly `\\`, but it can be `//` and `\/`, etc. as well
* Also, the UNC prefix must be normalized to the `dirSep` argument
of `addNormalizePath`
* Resolution: Changed to account for different UNC prefixes, and
normalizing the prefixes according to `dirSep`
* Affected procs that get tests: `relativePath`, `joinPath`
* Issue: The server/volume part of UNC paths can be stripped when
normalizing `..` path components
* This error should be negligable, so ignoring this
* splitPath
* Now make sure the UNC drive is not split; return the UNC drive as
`head` if the UNC drive is the only component of the path
* Consequently fixes `extractFilename`, `lastPathPart`
* parentDir / `/../`
* Strip away drive before working on the path, prepending the drive
after all work is done - prevents stripping UNC components
* Return empty string if drive component is the only component; this
is the behavior for POSIX paths as well
* Alternative implementation: Just call something like
`pathnorm.normalizePath(path & "/..")` for the whole proc - maybe
too big of a change
* tailDir
* If drive is present in path, just split that from path and return
path
* parentDirs iterator
* Uses `parentDir` for going backwards
* When going forwards, first `splitDrive`, yield the drive field, and
then iterate over path field as normal
* splitFile
* Make sure path parsing stops at end of drive component
* createDir
* Fixed by skipping drive part before creating directories
* Alternative implementation: use `parentDirs` iterator instead of
iterating over characters
* Consequence is that it will try to create the root directory
* isRootDir
* Changed to treat UNC drive alone as root (e.g. "//?/c:" is root)
* This change prevents the empty string being yielded by the
`parentDirs` iterator with `fromRoot = false`
* Internal `sameRoot`
* The "root" refers to the drive, so `splitDrive` can be used here
This adds UNC path support to all procs that could use it in std/os. I
don't think any more work has to be done to support UNC paths. For the
future, I believe the path handling code can be refactored due to
duplicate code. There are multiple ways of manipulating paths, such as
manually searching string for path separator and also having a path
normalizer (pathnorm.nim). If all path manipulation used `pathnorm.nim`,
and path component splitting used `parentDirs` iterator, then a lot of
code could be removed.
Tests
---
Added test file for `pathnorm.nim` and `ntpath.nim`.
`pathnorm.normalizePath` has no tests, so I'm adding a few unit tests.
`ntpath.nim` contains tests copied from Python's test suite.
Added integration tests to `tos.nim` that tests UNC paths.
Removed incorrect `relativePath` runnableExamples from being tested on Windows:
---
`relativePath("/Users///me/bar//z.nim", "//Users/", '/') == "me/bar/z.nim"`
This is incorrect on Windows because the `/` and `//` are not the same
root. `/` (or `\`) is expanded to the drive in the current working
directory (e.g. `C:\`). `//` (or `\\`), however, are the first two
characters of a UNC path. The following holds true for normal Windows
installations:
* `dirExists("/Users") != dirExists("//Users")`
* `dirExists("\\Users") != dirExists("\\\\Users")`
Fixes#19103
Questions:
---
* Should the `splitDrive` proc be in `os.nim` instead with copyright
notice above the proc?
* Is it fine to put most of the new tests into the `runnableExamples`
section of the procs in std/os?
* [skipci] Apply suggestions from code review
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
* [skip ci] Update lib/pure/os.nim
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
* Move runnableExamples tests in os.nim to tos.nim
* tests/topt_no_cursor: Change from using splitFile to splitDrive
`splitFile` can no longer be used in the test, because it generates
different ARC code on Windows and Linux. This replaces `splitFile` with
`splitDrive`, because it generates same ARC code on Windows and Linux,
and returns a tuple. I assume the test wants a proc that returns a
tuple.
* Drop copyright attribute to Python
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
* remove deprecated pragma syntax from 0.20.0
closes#4651, closes#16653 with a cheap fix for now due to
how early `tfFinal` is set
* remove type pragma between name and generics
* undo removal, try removing bind expression (0.8.14)
* fix test, unremove bind expr
* remove again
* Update changelog.md
Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
* dependencies @ HEAD & weave test dependencies
* try fix package ci
Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
* Fix 16937: Make --clib option works
* Make tests/compiler/tcmdlineclib.nim works from any current dir
* Try to fix link error on macosx
* Add a comment to tests/compiler/tcmdlineclib.nims
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
* implement case for cstring
for now just converts to string on C backend
* custom implementation for cstring
* remove leftover
* revert even more
* add nil + fix packages weird variant literal bug
* update docs
* [Testament] Extend and document message testing aids
* Enable inline msgs when not reject action.
Eliminates the pain of changing the line and column numbers in `nimout`
or `output` while making changes to the test.
* Enable using inline msgs and nimout together.
Allows ease of inline msgs for the test as well as testing msgs from
other modules.
* Add path separator and test filename variable interpolation in
msgs.
Eases handling path separators in the msgs.
* Add some documentation.
* Fixed lots of broken tests
* Fixed more broken tests
* Support multiple inline messages per a line
* Fix a broken test
* Revert variable substitution in `output`
* Remove uneeded params
* Update doc/testament.md
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
* Update testament/specs.nim
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
* Update testament/specs.nim
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
* Fix indentation
Co-authored-by: quantimnot <quantimnot@users.noreply.github.com>
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
- needs #20168 to make the stuff working
I went for this minimal solution because it seems like `compiler.nimble` and
`nimsuggest.nimble` are not in use
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
- apparently TLineInfo's implementation of `==` ignores the column. After I fixed
the code to use exact TLineInfo comparison I fixed several other issues hidden
by that issue.
- Replaced `tuple[sym, info]` with `SymInfoPair`
* minor updates on manual
1. statement -> keyword:
1. re-phase on the explanation of `import except`: maybe the newer version does not export some of the identifiers;
1. "The original module name is then not accessible" is moved up to the previous paragraph, since it is coupled with
the previous paragraph, but not the current one.
1. re-phase on the explanation of _Disabling certain messages_.
* Apply suggestions from code review
Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
* Update manual.md
do not use "()".
* Update doc/manual.md
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com>
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
Fix links to subheader when TOC is present
It was observed (in https://github.com/nim-lang/Nim/pull/20112)
that links to 2nd- (and subsequent) -level headings
fail if TOC is present, e.g.:
```nim
.. contents::
Type relations
==============
Convertible relation
--------------------
Ref. `Convertible relation`_
```
The problem here is that links are resolved in `rst.nim` but later
`rstgen.nim` fixes ("fixes") anchors to make them unique so that
TOC always works (if e.g. there was another sub-section like
"Convertible relation").
The solution implemented in this PR is to move that fix-up of anchors
into `rst.nim`, so that link resolution could know final anchors.
The bug seems to be added in https://github.com/nim-lang/Nim/pull/2332
in 2015, that is it is present in Nim 1.0.
* micro implementation of rfc 149
refs https://github.com/nim-lang/RFCs/issues/149
* number/array/seq literals, more statements
* try fix number literal alias issue
* renew expectedType with if/case/try branch types
* fix (nerf) index type handling and float typed int
* use typeAllowed
* tweaks + const test (tested locally) [skip ci]
* fill out more of the checklist
* more literals, change @ order, type conversions
Not copying the full call tree before the typedesc call check
in `semIndirectOp` is also a small performance improvement.
* disable self-conversion warning
* revert type conversions (maybe separate op later)
* deal with CI for now (seems unrelated), try enums
* workaround CI different way
* proper fix
* again
* see sizes
* lol
* overload selection, simplify int literal -> float
* range, new @ solution, try use fitNode for nil
* use new magic
* try fix ranges, new magic, deal with #20193
* add documentation, support templates
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Minor refactor
* Add OpenSSL 3 support
Remove symbols noOpenSSLHacksq and openssl10
* Drop loading of older openssl versions
* Add library path
* Use only versioned libssl soname os OSX
* Update .github/workflows/ci_packages.yml
Co-authored-by: Hein Thant <official.heinthanth@gmail.com>
* On Mac OS X CI, link OpenSSL in /usr/local/lib/
* Install OpenSSL on Mac OS X on azure pipeline
* Remove DYLD_LIBRARY_PATH
Co-authored-by: Hein Thant <official.heinthanth@gmail.com>
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
Co-authored-by: Hein Thant <official.heinthanth@gmail.com>
* Add `doctype: RST|Markdown|RstMarkdown` pragma
Implements https://github.com/nim-lang/RFCs/issues/68 ,
see also discussion in https://github.com/nim-lang/Nim/issues/17987
The permitted values:
* `markdown`, which is default. It still contains nearly all of
the RST supported but it is assumed that in time we will give up
most or all RST features in this mode
* `rst`, without any extensions
* `RstMarkdown` — compatibility with Nim 1.x. It's basically RST
with those Markdown features enabled that don't conflict with RST.
* Apply suggestions from code review
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
* Additional fix in spirit of review
* Fix test after #20188
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
* fixes#19973; switch to poll on posix
* it is fd
* exclude lwip
* fixes lwip
* rename select to timeoutRead
* refactor into timeoutRead/timeoutWrite
* refactor common parts
Co-authored-by: xflywind <43030857+xflywind@users.noreply.github.com>
* Remove string == nil/nil == string error
This was to help migration for `nil` strings being removed, but `nil` strings have been gone for a while now.
* remove isNil too
* Add use of Windows Wide CRT API for env. vars
Replaces use of CRT API `getenv` and `putenv` with respectively
`_wgetenv` and `_wputenv`. Motivation is to reliably convert environment
variables to UTF-8, and the wide API is best there, because it's
reliably UTF-16.
Changed the hack in `lib/std/private/win_setenv.nim` by switching the
order of the Unicode and MBCS environment update; Unicode first, MBCS
second. Because `_wgetenv`/`_wputenv` is now used, the Unicode
environment will be initialized, so it should always be updated.
Stop updating MBCS environment with the name of `getEnv`. It's not
necessarily true that MBCS encoding and the `string` encoding is the
same. Instead convert UTF-16 to current Windows code page with
`wcstombs`, and use that string to update MBCS.
Fixes regression in `6b3c77e` that caused `std/envvars.getEnv` or
`std/os.getEnv` on Windows to return non-UTF-8 encoded strings.
Add tests that test environment variables with Unicode characters in
their name or value.
* Fix test issues
Fixes
* `nim cpp` didn't compile the tests
* Nimscript import of `tosenv.nim` from `test_nimscript.nims` failed
with "cannot importc"
* Fix missing error check on `wcstombs`
* Fix ANSI testing errors
* Separate ANSI-related testing to their own tests, and only executing
them if running process has a specific code page
* Setting locale with `setlocale` was not reliable and didn't work on
certain machines
* Add handling of a "no character representation" error in second
`wcstombs` call
* tests/newruntime_misc: Increment allocCount
Increments overall allocations in `tnewruntime_misc` test. This is
because `getEnv` now does an additional allocation: allocation of the
UTF-16 string used as parameter to `c_wgetenv`.
* Revert "tests/newruntime_misc: Increment allocCount"
This reverts commit 4d4fe8bd3e.
* tests/newruntime_misc: Increment allocCount on Windows
Increments overall allocations in `tnewruntime_misc` test for Windows.
This is because `getEnv` on Windows now does an additional allocation:
allocation of the UTF-16 string used as parameter to `c_wgetenv`.
* Refactor, adding suggestions from code review
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
* Document, adding suggestions
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com>
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
The Nim manual says that an implicit conversion to cstring will
eventually not be allowed [1]:
A Nim `string` is implicitly convertible to `cstring` for convenience.
[...]
Even though the conversion is implicit, it is not *safe*: The garbage collector
does not consider a `cstring` to be a root and may collect the underlying
memory. For this reason, the implicit conversion will be removed in future
releases of the Nim compiler. Certain idioms like conversion of a `const` string
to `cstring` are safe and will remain to be allowed.
And from Nim 1.6.0, such a conversion triggers a warning [2]:
A dangerous implicit conversion to `cstring` now triggers a `[CStringConv]` warning.
This warning will become an error in future versions! Use an explicit conversion
like `cstring(x)` in order to silence the warning.
However, some files in this repo produced such a warning. For example,
before this commit, compiling `parsejson.nim` would produce:
/foo/Nim/lib/pure/parsejson.nim(221, 37) Warning: implicit conversion to 'cstring' from a non-const location: my.buf; this will become a compile time error in the future [CStringConv]
/foo/Nim/lib/pure/parsejson.nim(231, 39) Warning: implicit conversion to 'cstring' from a non-const location: my.buf; this will become a compile time error in the future [CStringConv]
This commit resolves the most visible `CStringConv` warnings, making the
cstring conversions explicit.
[1] https://github.com/nim-lang/Nim/blob/d2318d9ccfe6/doc/manual.md#cstring-type
[2] https://github.com/nim-lang/Nim/blob/d2318d9ccfe6/changelogs/changelog_1_6_0.md#type-system
When checking conditions, pass `check` untyped argument directly to if. This results in better error messages when the condition is malformed.
Previously `check 1` would fail at compile time with `Error: type mismatch: got 'int literal(-2)' for '-2' but expected 'bool'`
Now it fails with `Error: type mismatch: got 'int literal(1)' for '1' but expected 'bool'`.
Similarly `check "foo"` would fail with
```
Error: type mismatch: got <string>
but expected one of:
proc `not`(a: typedesc): typedesc
first type mismatch at position: 1
required type for a: typedesc
but expression '"somestring"' is of type: string
...
```
Now it fails with `Error: type mismatch: got 'string' for '"somestring"' but expected 'bool'`
* CI upgrade to ubuntu-20.04
The ubuntu-18.04 environment is deprecated, consider switching to ubuntu-20.04(ubuntu-latest), or ubuntu-22.04 instead. For more details see https://github.com/actions/virtual-environments/issues/6002
* Update azure-pipelines.yml
Based on what I understand from [Wikipedia](https://en.wikipedia.org/wiki/ISO_week_date#Weeks_per_year), 2001 does not have 53 weeks, but 2004, 2009, 2015, 2020 do. The years 2000 and 2001 seem to be copy pasted from the `getDaysInYear` example above. The result of `getWeeksInIsoYear` also seem to match up with Wikipedia.
That means these runnableExamples were never tested. Why is this the case? I only discovered this in #20091.
* fixes#20153; do not escape `_` for mysql
* add a test
* Update db_mysql.nim
* Update tdb_mysql.nim
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
Without this, the httpclient examples are essentially setting you up for failure. I was bitten by this when my app became unable to open any more sockets.
I'm not entirely sure how long this will relevant, as I hope destructors will be added to an upcoming version of the stdlib. But figured it was worth submitting anyways!
* Add Wider Ascii Chars sets string formatting in strutils.nim
Add Wider Ascii Chars sets for string formatting (#19994) (#20120):
- Added `UppercaseLetters`, `LowercaseLetters` The set of UppercaseLetters and lowercase ASCII letters.
- Added `PunctuationChars` The set of all ASCII punctuation characters.
- Added `PrintableChars` The set of all printable ASCII characters (letters, digits, whitespace, and punctuation characters).
* Update changelog.md
Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
* Update changelog.md
Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com>
* Fix header level for noalias pragma section.
* Fix code snippet outside of code block that raised an error with `rst2html`.
* Fix broken 'Convertible relation' links that were raising warnings.
Co-authored-by: quantimnot <quantimnot@users.noreply.github.com>
* bump macOS image on Azure CI to macos-11
##[warning]The macOS-10.15 environment is deprecated, consider switching to macos-11(macos-latest), macos-12 instead. For more details see https://github.com/actions/virtual-environments/issues/5583
* fix CI error
* .forbids pragma: defining illegal effects for proc types
This patch intends to define the opposite of the .tags pragma: a way to define effects which are not allowed in a proc.
* updated documentation and changelogs for the forbids pragma
* renamed notTagEffects to forbiddenEffects
* corrected issues of forbids pragma
the forbids pragma didn't handle simple restrictions properly and it also had issues with subtyping
* removed incorrect character from changelog
* added test to cover the interaction of methods and the forbids pragma
* covering the interaction of the tags and forbids pragmas
* updated manual about the forbids pragma
* removed useless statement
* corrected the subtyping of proc types using the forbids pragma
* updated manual for the forbids pragma
* updated documentations for forbids pragma
* updated nim docs
* updated docs with rsttester.nim
* regenerated documentation
* updated rst docs
* Update changelog.md
Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com>
* updated changelog
* corrected typo
Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com>
We were doing a very poor job detecting the major version of GCC by
parsing the output of --version.
This patches uses -dumpversion to make this parsing straightforward and
it also fixes a bunch of compiling issues on different platforms with
custom output for --version switches. For example, openSUSE first line
of the output includes the revision number and the parsing that was
being done did mix that number with the major version and breaks
building the nim compiler (as it doesn't find the 3 dots for an X.Y.Z semver
format, hence returning "false").
In this patch, we simply use -dumpversion (which has been at least from
1993, so we are safe :)
* Improve rand(bool)
* Use sign test instead of mod 2
* Use mod 2 again, as it works for js
* Use right shift as suggested by the authors of xoroshiro
* Update random.nim
* General case doesn't need any right shift it was correct to begin with
* Update random.nim
* add comment
Co-authored-by: flywind <43030857+xflywind@users.noreply.github.com>
Fixed errors in Nim Backend integration.
Section "Nim invocation example from C"
NimMain needs a declaration and function declarations have external
linkage by default.
Also with the order of arguments to gcc with a static lib,
maths.c needs to come before the static lib.
* Implement type command
- this will be mapped to textDocument/typeDefinition in LSP protocol. It will be
very useful for `nim` in particular because typically most of the time the type
is inferred.
* Update nimsuggest/nimsuggest.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
- add additional parameters parsing (other implementations will just
ignore them). E.g. if in RST we have:
.. code:: nim
:test: "nim c $1"
...
then in Markdown that will be:
```nim test="nim c $1"
...
```
- implement Markdown interpretation of additional indentation which is
less than 4 spaces (>=4 spaces is a code block but it's not
implemented yet). RST interpretes it as quoted block, for Markdown it's
just normal paragraphs.
- add separate `md2html` and `md2tex` commands. This is to separate
Markdown behavior in cases when it diverges w.r.t. RST significantly —
most conspicously like in the case of additional indentation above, and
also currently the contradicting inline rule of Markdown is also turned
on only in `md2html` and `md2tex`. **Rationale:** mixing Markdown and
RST arbitrarily is a way to nowhere, we need to provide a way to fix the
particular behavior. Note that still all commands have **both** Markdown
and RST features **enabled**. In this PR `*.nim` files can be processed
only in Markdown mode, while `md2html` is for `*.md` files and
`rst2html` for `*.rst` files.
- rename `*.rst` files to `.*md` as our current default behavior is
already Markdown-ish
- convert code blocks in `docgen.rst` to Markdown style as an example.
Other code blocks will be converted in the follow-up PRs
- fix indentation inside Markdown code blocks — additional indentation
is preserved there
- allow more than 3 backticks open/close blocks (tildas \~ are still not
allowed to avoid conflict with RST adornment headings) see also
https://github.com/nim-lang/RFCs/issues/355
- better error messages
- (other) fix a bug that admonitions cannot be used in sandbox mode; fix
annoying warning on line 2711
* Change `styleCheck` to ignore foreign packages
* Symbols from foreign packages are now ignored.
* Fixed `styleCheck` violations in `compiler` package.
* Added symbol ownership to custom annotation pragmas.
* Minor refactors to cleanup style check callsites.
* Minor internal documentation of reasons why a symbol isn't checked.
Style violations were fixed in the compiler after thet were exposed by
the changes. The compiler wouldn't compile otherwise.
Symbol ownership for custom pragma annotations is needed for checking
the annotation's style. A NPE was raised otherwise.
Fixes#10201
See also nim-lang/RFCs#456
* Fix a misunderstanding about excluding field style checks
I had refactored the callsites of `styleCheckUse` to apply the DRY
principle, but I misunderstood the field access handling in a template
as a general case. This corrects it.
* Fix some `styleCheck` violations in `compiler/evalffi`
The violations were exposed in CI when the compiler was built with
libffi.
* Removed some uneeded transitionary code
* Add changelog entry
Co-authored-by: quantimnot <quantimnot@users.noreply.github.com>
* Add sink and lent to critbits
* Remove lent for pairs
I guess lent doesn't work well inside tuples
* Remove lent from template in critbits
Apparently this also doesn't work, because some checks failed
* replace gcc asm with __asm__ and add a test
* update test case to specify gcc or clang and not cpp
Co-authored-by: daniel <danielclarke@wearepopgun.com>
Fixes Compilation error with --app:lib when a module tries to pull os.paramStr on posix by throwing a runtime exception instead.
More details here: #19964
* default threads on
* make rst gcsafe
* ignore threads option for nimscript
* threads off
* use createShared for threads
* test without threads
* avr threds off
* avr threads off
* async threads off
* threads off
* fix ci
* restore option
* make CI pleased
* fix ic tests
* Update config.nims
* add changelog
* Update changelog.md
Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
* fix vcc rawsetjmp
* changing `_longjmp()` to `longjmp()` and
`_setjmp()` to `setjmp()`
* fix
* fix setjmp to clangcl on Windows
* fix genTrySetjmp() to clangcl on Windows
* once C++, always C++
When using `{.compile: "file.cc".}` in a nim module, even when compiling
with `nim c` the C++ compiler should be used - once any C++ file has
been compiled, the C++ linker also needs to be used.
* more strict C++ check
* simplify code
* [docgen] Group sidebar sections into <details> (open by default)
* [docgen] Consistent indentation in generated HTML
(this is a boon for working on docgen's html/css output)
* [docgen] Move Source/Edit buttons inside main div
This makes styling the documentation significantly easier.
* [docgen] Somewhat consistent CSS formatting
* [docgen] Keep the sidebar onscreen while scrolling
* [docgen] Tweak CSS for the sticky sidebar
* [docgen] search type=text ==> type=search
* [docgen] Update expected doc output
* [docgen] Fix Group by Type sidebar placement bug
* [docgen] Curse you, whitespace (fix tests)
* [docgen] Fix rst2html tests
Co-authored-by: sandytypical <43030857+xflywind@users.noreply.github.com>
* Windows: enable nimRawSetjmp by default
See #19197. The default setjmp can randomly segfault on windows
* Attempt to disable the flag for bootstraping
* Disable styleCheck for c_setjmp
* Initial implementation of nimsuggest v3
Rework `nimsuggest` to use caching to make usage of ide commands more efficient.
Previously, all commands no matter what the state of the process is were causing
clean build. In the context of Language Server Protocol(LSP) and lsp clients
this was causing perf issues and overall instability. Overall, the goal of v3 is
to fit to LSP Server needs
- added two new commands:
- `recompile` to do clean compilation
- `changed` which can be used by the IDEs to notify that a particular file has been changed.
The later can be utilized when using LSP file watches.
- `globalSymbols` - searching global references
- added `segfaults` dependency to allow fallback to clean build when incremental
fails. I wish the error to be propagated to the client so we can work on fixing
the incremental build failures (typically hitting pointer)
- more efficient rebuild flow. ATM incremental rebuild is triggered when the
command needs that(i. e. it is global) while the commands that work on the
current source rebuild only it
Things missing in this PR:
- Documentation
- Extensive unit testing.
Although functional I still see this more as a POC that this approach can work.
Next steps:
- Implement `sug` request.
- Rework/extend the protocol to allow better client/server communication.
Ideally we will need push events, diagnostics should be restructored to allow
per file notifications, etc.
- implement v3 test suite.
- better logging
* Add tests for v3 and implement ideSug
* Remove typeInstCache/procInstCache cleanup
* Add ideChkFile command
* Avoid contains call when adding symbol info
* Remove log
* Remove segfaults
* Add two debugutils procs that native debuggers can break on use to
execute commands when code of interest is being compiled.
* Add GDB and LLDB programs to disable and enable breakpoints and
watchpoints when code of interest is being compiled.
* Extend the `intern.rst` docs regarding debugging the compiler.
Co-authored-by: quantimnot <quantimnot@users.noreply.github.com>
Added `strutils.find` changes
Standard library section restructured to group by `changed/added/deprecated/removed` with paragraphs marked by markdown comments.
This changes the default for the `last` parameter of various `find`
routines from `0` to `-1`. Previous default prevents limiting the search
to the first character. This is a logic error, as full text search was
performed for 2 *valid* values of `last`: `0` and `last.high()`.
Adds an overload for `initSkipTable` which returns a newly initialized
table. This encapsulates every single usage of a `var`-acting original
func in this module.
Co-authored-by: flywind <xzsflywind@gmail.com>
change the type of mangleJsName
since mangleJsName is used in macros, there is no need to use cstring. Using cstring may increase conversions and cause warnings.
* Refactor and doc package handling, module name mangling
* Consolidate, de-duplicate and extend package handling
* Alter how duplicate module names of a package are handled
* Alter how module names are mangled
* Fix crash when another package is named 'stdlib' (test case added)
* Doc what defines a package in the manual
Modules with duplicate names within a package used to be given 'fake'
packages to resolve conflicts. That prevented the ability to discern if
a module belonged to the current project package or a foreign package.
They now have the proper package owner and the names are mangled in a
consistent manner to prevent codegen clashes.
All module names are now mangled the same. Stdlib was treated special
before, but now it is same as any other package. This fixes a crash
when a foreign package is named 'stdlib'.
Module mangling is altered for both file paths and symbols used by the
backends.
Removed an unused module name to package mapping that may have been
intended for IC. The mapping was removed because it wasn't being used
and was complicating the issue of package modules with duplicate names
not having the proper package owner assigned.
* Fix some tests
* Refactor `packagehandling`
* Remove `packagehandling.withPackageName` and its uses
* Move module path mangling from `packagehandling` to `modulepaths`
* Move `options.toRodFile` to `ic` to break import cycle
* Changed import style to match preferred style
Co-authored-by: quantimnot <quantimnot@users.noreply.github.com>
* Fix global destructor injection for JS backend
* Moved global destructors injection before the final call to transform and
generate JS code. It had previously been after and thus not no JS was
generated for them.
* Added some internal documentation of `jsgen`.
* Enable a current destructor test to cover the JS backend as well.
* Fixes the JS aspect of #17237.
* Fixed global destructor injection order for JS backend
Co-authored-by: quantimnot <quantimnot@users.noreply.github.com>
it appears the documentation intends to compare & with .fmt but there is no formatting in the string. even though the assert is true it doesn't quite prove that .fmt is an equivalent formatter.
The test tasyncssl may fail on modern linux versions
as they require at least 2048 bit certificates.
A new certificate and private key with default values
has been added to meet this new requirement.
IANA is using id 0 for "HOPOPT" instead of "ip"
for some time now and those systems that still
support the old mapping will stop doing so at
some point in the future.
Some BSDs and openSUSE are already following this
change as per IANA list here:
https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
As new unixes (and maybe Windows, who knows) start
to adopt the updated IANA list, this will keep
failing from time to time, so it's better to
remove the "ip" check altogether.
* Fix questionable suggestion in `stutils` docs
- Removes the recommendation to pass a string slice for getting a relative
index for `find` and `rfind` functions, as this currently makes a string
copy, while a simple subtraction is enough.
- Docstring for `SkipTable` type.
* Doc layout fixup
* Better error message and tests for bad await
* Use compiles to check if await is valid
* temp: disable windows noasync test
* Better error report, simplify test
Co-authored-by: flywind <xzsflywind@gmail.com>
* stylecheck usages part two: stdlib cleanup
typeinfo.nim: importCompilerProc => importcompilerproc
nre.nim: newLineFlags => newlineFlags
system.nim: JSRoot => JsRoot
ref #19319
* prefer importCompilerProc
* fix stylecheck error with asyncdispatch
it is a partial regression since #12842
* add tests
* don't use echo in tests
* fix stylecheck bug with nre
* Update compiler/linter.nim
* no need to check dotexpr again
* neither did let/var/const
* Fix bug in freshVarForClosureIter. Fixes#18474.
freshVarForClosureIter was returning non-fresh symbols sometimes.
Fixed by making addField return the generated PSym.
* remove discardable
Co-authored-by: Nick Smallbone <nick@smallbone.se>
* Fixed formatting error in warningAsError.
There was only a single space character between the warning and its description, so it shows up as part of the name (in bold) and with no description.
Copied the way hotCodeReloading was formatted, with the description in a new line.
Also changed descriptions from 'ditto' to what the description it references says.
* Fixed typo in advopt.txt
Corrected 'hints' to 'warnings' in updated advopt.txt.
Simply recurse into their first child, which is always
a nkDotExpr instead of treating them seperately.
This fixes the rhs sym of a nkCheckedFieldExpr being
checked twice in aliases. This double checking didn't
cause any issues, but was unintentional and redundant.
* Remove Deprecated httpcore func
* Remove Deprecated httpcore func
* Fix a test with Deprecated func
* Restart CI, Apple can code shit anymore I tell you
* Fix CPU detection for i386
Commit 787def271b breaks CPU detection for i386 on OpenBSD and probably on other platforms.
[ isOpenIndiana -eq "yes" ] always returns 0, so mycpu is always set to "amd64".
* Update buildsh.nimf
Fix accidental bashism
* Remove define nimExperimentalAsyncjsThen for std/asyncjs.then and std/jsfetch
* Remove define nimExperimentalAsyncjsThen for std/asyncjs.then and std/jsfetch
* Remove define nimExperimentalAsyncjsThen for std/asyncjs.then and std/jsfetch
* Remove define nimExperimentalAsyncjsThen for std/asyncjs.then and std/jsfetch
This removes volatiles on ARC/ORC targets in NimMain and PreMainInner.
This avoids an issue where they couldn't be optimised out on
microcontrollers leading to larger code. Since the stack bottom doesn't
have to be initialised this way when using ARC or ORC (or None, which is
also covered by this PR) these can be safely removed.
extccomp.addExternalFileToCompile() relies on hashes to decide whether
an external C file needs recompilation or not.
Due to short-circuit evaluation of boolean expressions, the procedure
that generates a corresponding hash file is not called the first time an
external file is compiled, so an avoidable recompilation is triggered
the next build.
This patch fixes that by moving the proc call with a desired side
effect from its boolean expression, so it's executed unconditionally.
Fixes silent disappearance of Markdown (pseudo-)link when it's detected as
unsafe protocol. Now it will be converted to plain text in spirit of
[the specification](https://spec.commonmark.org/0.30/#links).
For that sake the check for protocol is added to rst.nim also.
* move io out of system
* fix tests
* fix tests
* next step
* rename to syncio
* rename
* fix nimscript
* comma
* fix
* fix parts of errors
* good for now
* fix test
* Update with latest API and fix missing bindings
remove deprecated `Body`
remove implicit `cstring` convs
add `Headers` to `FetchOptions`
add `Request` init proc which takes `FetchOptions`
* Update lib/std/jsfetch.nim
Co-authored-by: Juan Carlos <juancarlospaco@gmail.com>
* Update lib/std/jsfetch.nim
Co-authored-by: Juan Carlos <juancarlospaco@gmail.com>
* remove experimental flag
Co-authored-by: Juan Carlos <juancarlospaco@gmail.com>
* New/better macro pragmas, make some experimental
fix#15920, close#18212, close#14781, close#6696,
close https://github.com/nim-lang/RFCs/issues/220
Variable macro pragmas have been changed to
only take a unary section node.
They can now also be applied in sections with multiple variables,
as well as `const` sections. They also accept arguments.
Templates now support macro pragmas, mirroring other routine types.
Type and variable macro pragmas have been made experimental.
Symbols without parentheses instatiating nullary macros or templates
has also been documented in the experimental manual.
A check for a redefinition error based on the left hand side of variable
definitions when using variable macro pragmas was disabled.
This nerfs `byaddr` specifically, however this has been documented as
a consequence of the experimental features `byaddr` uses.
Given how simple these changes are I'm worried if I'm missing something.
* accomodate compiler boot
* allow weird pragmas
* add test for #10994
* remove some control flow, try remove some logic
Instead of rejecting type expressions based on node kind,
evaluate the expression as a type.
This is already the behavior for call results, and it has its own error
for non-types, which is the same error you would normally get
with 2 words swapped.
* deprecate unsafeAddr; extend addr
addr is now available for all addressable locations, unsafeAddr is deprecated and become an alias for addr
* follow @Vindaar's advice
* change the signature of addr
* unsafeAddr => addr (stdlib)
* Update changelog.md
* unsafeAddr => addr (tests)
* Revert "unsafeAddr => addr (stdlib)"
This reverts commit ab83c99c50.
* doc changes; thanks to @konsumlamm
Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
* Use openarray of bytes in md5
* fix CI
* cleanup
* use noSideEffect for bootstrapping
* fix CI again
* actually fix CI by checking if it works
* this is getting ridiculous
* put old md5 version in compiler, remove vmop
* Parameters now can constrain static in type definitions
resolved regression with generic procedures
* Update compiler/sigmatch.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
Fixes three broken cross references to `rfind` in strutils.
Breakage due to signature changes of the `rfind` methods.
Co-authored-by: adigitoleo <adigitoleo@dissimulo.com>
Mention the `import foo {.all.}` syntax in the manual,
with a caveat about private imports.
Also link to the experimental importutils module.
Co-authored-by: adigitoleo <adigitoleo@dissimulo.com>
--expandArc
```
var
a
b
a = matrix(5, 5, 1.0)
b = matrix(5, 5, 2.0)
`=sink`(b, -
let blitTmp = b
wasMoved(b)
blitTmp +
a)
`=destroy`(b)
`=destroy`(a)
```
* add new modules, except experimental ones
* remove deprecated modules mersenne and sharedlist
* better describe why some modules fail and some modules don't
* Update lists.nim
* Update tlists.nim
* removed check `if b.tail != nil`
The tail of the list being null it is still possible to retrieve its end by going through all nodes from the head. So checking for null from `b.tail` is unnecessary. However, setting `a.tail = b.tail` only if `a.head != nil`, so you don't break a good list with an already broken one.
* Update colors.nim
Added `lightgray` alias to `lightgrey` and `...grey`aliases for the rest of the gray colors.
Added color `rebeccapurple`.
Fixed the incorrect values for the `PaleVioletRed` and `MediumPurple` colors.
This module should now be matching the CSS colors.
I used the seq[tuple] syntax for defining the names.
* Document colors changes.
Previously CVerifyPeerUseEnvVars was not being passed into
scanSslCertificates, which meant that we weren't scanning
additional certificate locations given via the SSL_CERT_FILE and
SSL_CERT_DIR environment variables
* Variant of that works with raw IpAddresses.
- Add doc tests for new net proc's.
- Aadd recvFrom impl
- Add recvFrom impl -- tweak handling data var
- Update lib/pure/net.nim
Co-authored-by: Dominik Picheta <dominikpicheta@googlemail.com>
- cleaning up sendTo args
- remove extra connect test
- cleaning up sendTo args
- fix inet_ntop test
- fix test failing - byte len
* fix test failing - byte len
* debugging odd windows build failure
* debugging odd windows build failure
* more experiments to figure out the windows failure
* try manual assigment on InAddr
Co-authored-by: Jaremy Creechley <jaremy.creechley@panthalassa.com>
* fixes a possible 'javascript:' protocol exploit [backport:1.0]
* add tests
* Update tests/stdlib/trstgen.nim
* add the same logic for hyperlinks
* move the logic into a proc
Co-authored-by: narimiran <narimiran@disroot.org>
* nimRawSetjmp: support Windows
Using `_setjmp()` directly is required to avoid some rare (but very
annoying) exception-related stack corruption leading to segfaults on
Windows, with Mingw-w64 and SEH.
More details: https://github.com/status-im/nimbus-eth2/issues/3121
Also add "nimBuiltinSetjmp" - mostly for benchmarking.
* fix for Apple's Clang++
`spawn` uses `nimSpawn3` internally and `pinnedSpawn` uses `nimSpawn4` internally. I comment it in order to help contributors get the gist of its functionality.
When creating heterogenous slices of distinct types, the compiler does
not initialize the internal type's `size` before accessing it.
This then leads to this crash message:
```
compiler/int128.nim(594, 11) `false` masking only implemented for 1, 2, 4 and 8 bytes [AssertionError]
```
This patch initializes the `size` properly, fixing the problem.
* Testament checks host/cpu in compiler/platform for discard spec statement
* Remove duplicated value checks, add comments, add all cpu bit sizes and endianesses
Co-authored-by: quantimnot <quantimnot@users.noreply.github.com>
* Refactor: rename proc to func
* Fix punycode.decode function
This function could only properly decode punycodes containing a single
encoded unicode character. As soon as there was more than one punycode
character group to decode it produced invalid output - the number of
characters was correct, but their position was not.
* Update tpunycode.nim
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
* Merge file size fields correctly on Windows
Merge file size fields correctly on Windows
- Merge the two 32-bit file size fields from `BY_HANDLE_FILE_INFORMATION` correctly in `rawToFormalFileInfo`.
- Fixes#19135
* Update os.nim
This flag has a very significant performance impact on programs compiled with --threads:on. It is also apparently not needed anymore for standard circumstances. Can we remove the config? See https://github.com/nim-lang/Nim/issues/18146#issuecomment-876802676 for discussion and perf impact. [backport:1.6]
* Call {.cursor.} a pragma.
Its hard to find .curser annotation while googling because all other things like it are called pragmas. See https://nim-lang.org/docs/manual.html#pragmas
Also the . in front of the name makes it hard to find and search for.
Can we just call it cursor pragma?
* Small fix for comment.
* Use testament to check Norm test pass
This is what I actually use to test Norm, so it's better to use it.
This should not currently pass. This is expected because this is exactly the problem I want to highlight with this PR. My tests do indeed not pass at the moment.
* Remove clearNimblePath from testament command.
Co-authored-by: flywind <xzsflywind@gmail.com>
* Fix vm's sametype implementation to properly handle generics and typedescs
* actually fixed sametype + have test
* added comments and removed unsafe code
Otherwise, compiler produces broken error message - `$1` is not interpolated
`Error: The $1 type doesn't have a default value. The following fields must be initialized: importGraph.`
* adding new system module sysexitprocs and including system exit procedures when registering exit handlers defined in userland
* fixing failing tests and adding initialization guard to handle cases where the module's global init logic isn't invoked first as is the case with some gc implementaions
* js backend shouldn't try to invoke actual system exit procs
* fixing formatting in sysexitprocs.nim
* 256 was too much - my max number of plugins in my engine is 64 and I require two hooks per runtime it looks like with tls emulation turned off, so for my purposes 128 should be sufficient
* so atExit should be enough here, can get rid of all the extra cruft I had added on top since I didn't realize atExit already provided a stack
* done being cute - since newruntime prevents correct cpp codegen for object variants apparently and breaks tests if I try to use std/exitprocs, ddSysExitProc is just going into both modules. Since system doesn't include system/io, polluting system with it doesn't make sense either... at least it is only importc'd when it is required in either module and we don't have to have any weird when defined(nimOwnedEnabled) with a comment explaining why
* Update terminal.nim
- Added some extra docs to cursorUp/Down/Forward/Backward
- I was able to use hideCursor and showCursor without adding stdout, removed the parameter
- Added docs to terminalHeight()* and terminalWidth()*
* Update lib/pure/terminal.nim
Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
* Update lib/pure/terminal.nim
Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
* Added back f: file to cursor movement
* Removed unnecessary comments
Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
* Fix#19052; [backport:1.6.0]
Adds a compile flag to avoid a getrandom syscall, fixing #19052.
This is neccesary when the getrandom syscall is missing, as noted in #19052, particularly in kernel versions < 3.17 when getrandom was introduced. Specifically relevant is this is missing from kernel 3.10, which is the supported kernel throughout RHEL 7 and CentOS 7, which is widely used at many organizations. Without this, versions of nim that include sysrand (i.e. versions >= 1.6.0) will not compile without modification, however with this change a compile flag may be used to fall back using /dev/urandom as done with any unknown Posix OS (preferred here as a fallback since it already supplies a cryptographically secure PRNG and existing code deals with entropy pool init, etc).
The change is placed behind a compile flag, as discussed in github ticket #19052 (summed up here):
* First, I can't seem to catch that a importc such as SYS_getrandom is declared without using it (the declared proc returns true, but compiler throws an undeclared identifier flag when referencing it).
* Second, it seemed preferable to be behaviorally explicit vs implicit when considering this is intended to be a cryptographically secure PRNG.
* Third, if I intend to compile on a kernel >= 3.17 while running the binary on at least one system < 3.17, I'll want to be able to target this without relying on a compile time determination if the getrandom syscall is available.
* Documenting compile flag for -d:nimNoGetRandom and adding changelog entry
Related to #19052 and comments in PR #19053. Also created a new changelog file since none currently exists.
Co-authored-by: Timothy Alexander <talexander@midwestlabs.com>
* SameTypeAux now properly traverses generic distincts
* Smarter traversal of distincts
* Removed redundant check
* Fixed nkConv for jsgen
* Added test for non distinct nkConv
* using skiptypes for distinct now
* Fixed genaddr for nkconv
* deinitializing locks at program exit
* deinitLock shouldn't be called for js backend I guess...
* I suppose this is the best way to detect the
ewruntime option
* I guess I need these guards here too...
* fixing merge conflict
* Porting Nim to run on Zephyr.
Includes changes to `std/net`.
Squashed commit of the following:
tweaking more memory / malloc things
revert back bitmasks
tweaking nim to use kernel heap as C malloc doesn't work
fixing socket polling on zephyr
cleanup getting maximum sockets for process or for rtos'es
reorganizing and fixing net for async / system
merge netlite changes back into nativesockets
merge netlite changes back into nativesockets
reverting native sockets back
tweaking nim / zephyr network
adding option to run 'net-lite' from linux
bridging zephyr's max connections
fixing net errors
fixing compilation with getAddrString
fixing compilation with getAddrString
experimenting with a nativesockets_lite ... getAddrString
experimenting with a nativesockets_lite ... getAddrString
experimenting with a nativesockets_lite ... getLocalAddr
experimenting with a nativesockets_lite ... getLocalAddr
experimenting with a nativesockets_lite ...
add note regarding incorrect FreeRTOS Sockadd_in fields
changing to NIM_STATIC_ASSERT
cleaning up the static_assert error messages
cleaning up the static_assert error messages
setting up static assert ftw!
testing compile time asserts
reworking Sockaddr objects to more closely match various platforms
reworking Sockaddr objects to more closely match various platforms
reworking Sockaddr objects to more closely match various platforms
finding missing items (issue #18684)
fixup posix constants (issue #18684)
adding plumbing for zephyr os (issue #18684)
adding plumbing for zephyr os (issue #18684)
* fixing constant capitalizations
* remove extra debug prints and fix TSa_Family/cint issue
* remove extra debug prints and fix TSa_Family/cint issue
* Porting Nim to run on Zephyr.
Includes changes to `std/net`.
Squashed commit of the following:
tweaking more memory / malloc things
revert back bitmasks
tweaking nim to use kernel heap as C malloc doesn't work
fixing socket polling on zephyr
cleanup getting maximum sockets for process or for rtos'es
reorganizing and fixing net for async / system
merge netlite changes back into nativesockets
merge netlite changes back into nativesockets
reverting native sockets back
tweaking nim / zephyr network
adding option to run 'net-lite' from linux
bridging zephyr's max connections
fixing net errors
fixing compilation with getAddrString
fixing compilation with getAddrString
experimenting with a nativesockets_lite ... getAddrString
experimenting with a nativesockets_lite ... getAddrString
experimenting with a nativesockets_lite ... getLocalAddr
experimenting with a nativesockets_lite ... getLocalAddr
experimenting with a nativesockets_lite ...
add note regarding incorrect FreeRTOS Sockadd_in fields
changing to NIM_STATIC_ASSERT
cleaning up the static_assert error messages
cleaning up the static_assert error messages
setting up static assert ftw!
testing compile time asserts
reworking Sockaddr objects to more closely match various platforms
reworking Sockaddr objects to more closely match various platforms
reworking Sockaddr objects to more closely match various platforms
finding missing items (issue #18684)
fixup posix constants (issue #18684)
adding plumbing for zephyr os (issue #18684)
adding plumbing for zephyr os (issue #18684)
* fixing constant capitalizations
* remove extra debug prints and fix TSa_Family/cint issue
* remove extra debug prints and fix TSa_Family/cint issue
* fixing PR issues
* Porting Nim to run on Zephyr.
Includes changes to `std/net`.
Squashed commit of the following:
tweaking more memory / malloc things
revert back bitmasks
tweaking nim to use kernel heap as C malloc doesn't work
fixing socket polling on zephyr
cleanup getting maximum sockets for process or for rtos'es
reorganizing and fixing net for async / system
merge netlite changes back into nativesockets
merge netlite changes back into nativesockets
reverting native sockets back
tweaking nim / zephyr network
adding option to run 'net-lite' from linux
bridging zephyr's max connections
fixing net errors
fixing compilation with getAddrString
fixing compilation with getAddrString
experimenting with a nativesockets_lite ... getAddrString
experimenting with a nativesockets_lite ... getAddrString
experimenting with a nativesockets_lite ... getLocalAddr
experimenting with a nativesockets_lite ... getLocalAddr
experimenting with a nativesockets_lite ...
add note regarding incorrect FreeRTOS Sockadd_in fields
changing to NIM_STATIC_ASSERT
cleaning up the static_assert error messages
cleaning up the static_assert error messages
setting up static assert ftw!
testing compile time asserts
reworking Sockaddr objects to more closely match various platforms
reworking Sockaddr objects to more closely match various platforms
reworking Sockaddr objects to more closely match various platforms
finding missing items (issue #18684)
fixup posix constants (issue #18684)
adding plumbing for zephyr os (issue #18684)
adding plumbing for zephyr os (issue #18684)
* fixing constant capitalizations
* remove extra debug prints and fix TSa_Family/cint issue
* remove extra debug prints and fix TSa_Family/cint issue
* Remerge
* fixing constant capitalizations
* remove extra debug prints and fix TSa_Family/cint issue
* remove extra debug prints and fix TSa_Family/cint issue
* fixing PR issues
* fix maxDescriptors on zephyr/freertos
* move maxDescriptors to selector.nim -- fixes compile issue
* change realloc impl on zephyr to match ansi c behavior
* change realloc impl on zephyr to match ansi c behavior
* force compileOnly mode for tlwip
Co-authored-by: Jaremy J. Creechley <jaremy.creechley@wavebaselabs.com>
Co-authored-by: Jaremy Creechley <jaremy.creechley@panthalassa.com>
When assigning constant output to a seq, and then passing that static
seq to other functions that take `openArray`, the compiler may end up
producing errors, as it does not know how to convert `static[seq[T]]`
to `openArray[T]`. By ignoring the `static` wrapper on the type for
the purpose of determining data memory location and length, this gets
resolved cleanly. Unfortunately, it is relatively tricky to come up
with a minimal example, as there are followup problems from the failing
conversion, e.g., this may lead to `internal error: inconsistent
environment type`, instead of the relevant `openArrayLoc` error message.
* feat: copy to clipboard
* fix: CI failure related issue
* fix: CI failure issue
* fix: copy to clipboard button bug
* feat: copy pragmadots value to clipboard
Nim 1.4.x compiled the below code without error when using
`--experimental:strictFuncs`
import std/sequtils
type Foo = ref object
let foo1 = Foo()
let foo2 = Foo()
let foos = @[foo1, foo2]
let fooTuples = @[(foo1, 1), (foo2, 2)]
discard repeat(foo1, 3)
discard zip(foos, foos)
discard unzip(fooTuples)
However, since 2020-12-09, devel Nim produced errors like
/tmp/bar.nim(11, 15) template/generic instantiation of `repeat` from here
/foo/nim/pure/collections/sequtils.nim(172, 6) Error: 'repeat' can have side effects
an object reachable from 'x' is potentially mutated
/foo/nim/pure/collections/sequtils.nim(183, 15) the mutation is here
/foo/nim/pure/collections/sequtils.nim(183, 15) is the statement that connected the mutation to the parameter
This commit reverts some `proc` to `func` changes so that code that:
- calls `repeat`, `zip`, or `unzip`
- and instantiates them with types containing `ref`
can once again be compiled with `strictFuncs`. Otherwise, a user might
be forced to drop or alter their `strictFuncs` use when upgrading from
Nim 1.4.x, or when writing new code that uses these procedures (at least
for now, with the current `strictFuncs` implementation).
This commit also adds tests to assert that the remaining funcs in this
module can be compiled with `strictFuncs` when used with types
containing `ref`.
The original batch of `proc` to `func` changes in `sequtils.nim` was in
commit 6f57ebae34, which was partially reverted in 38eb021f81.
See also: https://github.com/nim-lang/Nim/issues/16305
* Fixed `strictFuncs` support for `std/pegs`
Enabled `std/pegs` in the `strictFuncs` import test.
Fixes#18057Fixes#16892
See #18111
* Rebased from `devel`
* Conditionally compile `std/pegs` in `koch`
This is for supporting `csources` bootstrap.
Co-authored-by: quantimnot <quantimnot@users.noreply.github.com>
* correct effect tracking for .borrowed procs [backport]
* progress
* fix error message in a test
* correctly fix it
Co-authored-by: narimiran <narimiran@disroot.org>
* fixes#18858 [backport]
* ensure async tests work with --experimental:strictEffects [backport]
* ensure async tests work with --experimental:strictEffects [backport]
* Fixes implicit and explicit generics
* moved block logic into 'maybeInstantiateGeneric'
* Added more tests
* Update compiler/semexprs.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Assignments, which would accidentally create global
variables, instead throw an error in strict mode
* Assignment to a getter-only property
Co-authored-by: Sven Keller <s.keller@cortona.de>
* Document `-d:asyncBackend` flag
Since libraries may want to support multiple async backends, it's useful
to standardize the way this is done, so as to simplify usage of any
async backend within the ecosystem.
A similar text is being added to chronos here:
https://github.com/status-im/nim-chronos/pull/216
See also https://github.com/status-im/nim-chronos/issues/207
* typos, add none
* Update lib/pure/asyncdispatch.nim
* Update lib/pure/asyncdispatch.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Fix initrand to avoid random number sequences overlapping
* Minor fix
* Fix compile error on js backend
* Disable new test for js backend
* Minor fix
* tempfiles module uses random.initRand()
* Remove unused module import from lib/std/tempfiles.nim
* Initialize baseState in initRand()
* Run tests/stdlib/trandom.nim from tests/test_nimscript.nims
* baseState is initialized only with sysrand.urandom and quit if failed
* Add comments
* fixes#17369
* megatest is green for --cpu:arm64
* docgen output includes more tags/raises
* implemented 'effectsOf'
* algorithm.nim: uses new effectsOf annotation
* closes#18376
* closes#17475
* closes#13905
* allow effectsOf: [a, b]
* added a test case
* parameters that are not ours cannot be declared as .effectsOf
* documentation
* manual: added the 'sort' example
* bootstrap with the new better options
* move PNode.comment so a side channel, reducing memory usage
* fix a bug
* fixup
* use sfHasComment to speedup comment lookups
* fix for IC
* Update compiler/parser.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* fixes#14511 [backport:1.4]
Signed-off-by: Dankr4d <dude569@freenet.de>
* Replaced fix with code from alaviss, for better readability, with small
changes.
Signed-off-by: Dankr4d <dude569@freenet.de>
* - Specified output in test.
Signed-off-by: Dankr4d <dude569@freenet.de>
* Replaced case in nnkRecCase with a simpler version, which just adds the
last son.
Signed-off-by: Dankr4d <dude569@freenet.de>
* Update tests/macros/t14511.nim
* Update tests/macros/t14511.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Use assert in runnableExamples and improve boundary check
* Add more tests for ceilDiv
* Fix comment in ceilDiv
* Calling ceilDiv with int type T such like sizeof(T) > 8 is error
* improvements to $(SomeInteger) and addInt
* remove mIntToStr, mInt64ToStr
* improvements
* fix tests/pragmas/tinjectstmt.nim; the diff is harmless, cgen code is identical with -d:danger or debug mode
* rm tests/system/tstrmantle.nim
* revert compiler/jsgen.nim for -d:nimVersion140
* fix#10053 FieldError for vm
* fixup
* FieldError now also shows runtime value of discriminant
* fix field error reporting in vm
* also report culprit line info in err msg
* fix errors for newruntime 2
* fix for js
* fixup
* PRTEMP4
* works
* works
* works perfect
* refactor
* std/private/repr_impl
* suppport --gc:arc
* cleanup
* refactor
* simplify
* simplify
* simplify
* fixup
* move out compiler.vmgen.genCustom
* fixup
* fixup
* add tests
* revert compiler/debugutils.nim
* simplify reprDiscriminant
* fixup
* lib/std/private/repr_impl.nim -> lib/system/repr_impl.nim
* try to fix D20210812T165220
* honor --declaredlocs
* control toFileLineCol via --declaredlocs
* Only allow IPv4 literals in strict form
The strict form as defined in RFC 6943, section 3.1.1 only allows the dotted
form ddd.ddd.ddd.ddd of IPv4 literals, where ddd is a one to three digit decimal
number between 0 and 255. Until now octal numbers (with a leading zero) were
interpreted as decimal numbers which has security implications, see
CVE-2021-29922 and CVE-2021-29923.
* Update lib/pure/net.nim
Co-authored-by: Dominik Picheta <dominikpicheta@googlemail.com>
* silence error output from template_various.nim
* any => auto in tests
* avoid showing failed for parseSpec since this is expected behavior in 2 cases: tincludefile.nim, tnav1.nim
* enforce InheritFromException
* fixup
* ReSync with Devel
* ReSync
* Documentation only, add 1 example to For loop macro
* Flip it
* Update doc/manual.rst
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Remove unnecessary environment tracking
* try to fix windows
* fix delEnv
* make putEnv work on windows even with empty values; improve tests: add tests, add js, vm testing
* [skip ci] fix changelog
Co-authored-by: Caden Haustein <code@brightlysalty.33mail.com>
* [enumutils] provide node kind for `Invalid node type` error
* [enumutils] add support for nnkAccQuoted in `genEnumCaseStmt`
For reasons unknown to me, when running `nim doc` on a file that uses
`parseEnum` with an enum that contains accented quotes errors at CT
with the `Invalid node for type` error. Further errors are raised,
probably because the enum parsing fails?
* Replace calls to C `putenv` with C `setenv` to remove possible memory leaks
* Add test of correct behaviour on invalid input
* Fix style in tests/stdlib/tos.nim
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
* Update tests/stdlib/tos.nim
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
* Update tests/stdlib/tos.nim
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
* Add comment with bug number to tests/stdlib/tos.nim
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
* Fix possible msvc arch issues
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
* add [1..2] for JArray
* fix BackwardsIndex to int
* fix for BackwardsIndex
* fix for assert node kind check
* fix variable name
* Update lib/pure/json.nim
* fix for when x.a is BackwardsIndex
Co-authored-by: itsumura-h <dumblepy@mail.com>
Co-authored-by: Dominik Picheta <dominikpicheta@googlemail.com>
* document some std library evolution policies
In wanting to improve the standard library, it's helpful to have a set
of principles and guidelines to lean back on, that show how to introduce
such improvements while at the same time considering existing users of
the language.
A key idea behind documentation of this sort is that it should highlight
a path forwards in making changes rather than trying to prevent them,
and although the current snippet does include some language for what one
shouldn't do, it also shows a few options for what one can do.
This is a riff on https://github.com/nim-lang/Nim/pull/18468 mainly
based on what helps enable to the use of Nim productively in
environments and teams where the priority and focus is not always on the
tool (Nim in this case) but rather on the codebase itself, and its use
by end users.
We use similar guidance documentation to help coordinate the code of the
teams using Nim in https://status-im.github.io/nim-style-guide/ where it
is applied not as law, but rather as recommendations for the default
approach that should be considered first.
* document the new policies
* typo
* Update doc/contributing.rst
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
* Update doc/contributing.rst
* Update doc/contributing.rst
Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
* Update doc/contributing.rst
Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
* Update doc/contributing.rst
* Update doc/contributing.rst
Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
* clarify some things
* Update doc/contributing.rst
Co-authored-by: Dominik Picheta <dominikpicheta@googlemail.com>
Co-authored-by: Jacek Sieka <arnetheduck@gmail.com>
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
Co-authored-by: Dominik Picheta <dominikpicheta@googlemail.com>
* compiler/vmhooks: add getVar to allow vmops with var params
* addFloat vmops with var param
* cgen now renders float32 literals in c backend using roundtrip float to string
* attempt to support short commit hashes
Not sure if that's the correct way and what happens when the short hash matches "head"
* need to remove #
* Output needs to be stripped of newlines
* Revert "followup #17398: `getTempDir`, `getConfigDir` now do not have trailing DirSep (#17402)"
This reverts commit 2356d0603f.
* Revert "fix #17393 getHomeDir and expandTilde should not include trailing `/` (#17398)"
This reverts commit bebf2ce24a.
* fix test
Implemented support for Nimble local cache with package directories with
a checksum of the package at the end of their names. Now the compiler
supports package paths in the form:
* /path_to_nimble_cache_dir/pkgs/package_name-1.2.3-
FEBADEAEA2345E777F0F6F8433F7F0A52EDD5D1B
* /path_to_nimble_cache_dir/pkgs/package_name-#head-
042D4BE2B90ED0672E717D71850ABDB0A2D19CD2
* /path_to_nimble_cache_dir/pkgs/package_name-#branch-name-
DBC1F902CB79946E990E38AF51F0BAD36ACFABD9
Related to nim-lang/nimble#127
* deprecate sequtils.delete and add an overload with saner semantics
* AssertionDefect => IndexDefect
* improve tsequtils
* add tests; use splice in js for optimization
* Extended side effect error messages
* Applied feedback:
- refactored `markSideEffect`
- refactored string interpolations
- single message
- skip diagnostics in `system.compiles` context
Other:
- started a test of diagnostic messages
[ci skip] Tests aren't updated yet because messaging isn't nailed down.
* - Added hints of where for side effect call locations.
- Tried to clarify the reasons.
* fix tests
* Applied PR review feedback:
- moved collection of side effects from TSym to TContext
- used pragma shorthand form `.sideEffect` and `.noSideEffect` in messages
- added leading '>' to structured messages for readability
- changed `sempass2.markSideEffect` to a proc
- replaced `system.echo` in the test to make the test compatible with Windows
* Applied NEP1 formatting suggestion
Co-authored-by: quantimnot <quantimnot@users.noreply.github.com>
* [skip ci] thamming_orc test created/destroyed counts match
The thamming_orc.nim code now counts all created objects being tested, not just the ones following the "first 20" test, and the position of the `destroyed += 1` counter has been adjusted so it counts all the calls that are as a result of `=trace` tracing and not just the original destruction calls.
* Improve description of how `=trace` is used
The following nuances weren't previously fully explained:
1. That `=trace` is only used by `--gc:orc`.
2. That `=trace` is almost certainly used along with `=destroy` when manual resource allocation has been used, but it is only required if there is a possibility of cyclic references in the wrapped types (ie. generic types).
3. That, currently, a forward definition is required for the second of the pair to avoid an auto compiler generation conflict.
The pattern of the use of `=trace` has also been made more extensive, showing how both a custom `=destroy` and `=trace` are used for manual allocation of resources when there is any possibility of a cyclic reference in the resource-wrapped values.
* Update doc/destructors.rst
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
The thamming_orc.nim code now counts all created objects being tested, not just the ones following the "first 20" test, and the position of the `destroyed += 1` counter has been adjusted so it counts all the calls that are as a result of `=trace` tracing and not just the original destruction calls.
* ORC: support custom =trace procs (WIP)
* Update tests/arc/tcustomtrace.nim
Co-authored-by: Clyybber <darkmine956@gmail.com>
* =trace is now documented and seems to work
* make test green
Co-authored-by: Clyybber <darkmine956@gmail.com>
The asynchronous process completion handler callback should be called
only once. This is achieved by passing `WT_EXECUTEONLYONCE` flag to the
`registerWaitForSingleObject` Windows API procedure.
Related to cheatfate/asynctools#35
* ORC refactoring in preparation for further changes (=dispose must die)
* ORC: embrace =destroy, avoid =dispose
* ORC: no need for =dispose
* closes#18421
* Added more concise calling convention/pragma mismatch messages
* Now only adds callConvMsg/lock message when sensible
* Fixed message formatting
* Added tests, and fixed some bugs
* Tests joined, and always indenting
* More tests and more bug fixes
* Fixed first test in tprocmismatch
* Using var param for writting mismatches
* Better logic for handling proc type rel and conv/pragma mismatch
* Refactored getProcConvMismatch
* Fixed callConv message formatting
* Fixed test for proper message
* Cleanup to address issues
* getProcConvMismatch now returns tuple, and reformatted code
* improvements to hint:processing
* fix tests; do not show hintProcessing for nimscript unless given -d:nimHintProcessingNims
* fix trunner and avoid need for -d:nimHintProcessingNims
* fix some tests
* {.used: symbol}
* add tests
* fix tests with --import
* --import works without giving spurious unused warnings
* new warning warnDuplicateModuleImport for `import foo; import foo`
* fix test, add resolveModuleAlias, use proper line info for module aliases
* fix spurious warnings
* fix deprecation msg for deprecated modules even with `import foo as bar`
* disable a test for i386 pending sorting XDeclaredButNotUsed errors
* UnusedImport now works with re-exported symbols
* fix typo [skip ci]
* ic support
* add genPNode to allow writing PNode-based compiler code similarly to `genAst`
* fix DuplicateModuleImport warning
* adjust test
* fixup
* fixup
* fixup
* fix after rebase
* fix for IC
* keep the proc inline, move the const out
* [skip ci] fix changelog
* experiment: remove calls to resolveModuleAlias
* followup
* fixup
* fix tests/modules/tselfimport.nim
* workaround tests/deprecated/tmodule1.nim
* fix properly
* simplify
* add test case for pure enum redefinition error within enum (fixed in recent PR)
* remove code duplication
* Revert "remove code duplication" (would require bootstrap >= 1.4)
This reverts commit 3f793874c2.
* fixup
* Fixed missing newline after bound marker in mulipart post (#14794) and a problem where calling postContent with multipart data does not set content-length header.
* Update lib/pure/httpclient.nim
* Added comment outlining the reason for changes to httpclient.nim and added tests to ensure that multipart post has a newline at the end of the body, and that the content-length header is present.
* Fixed typo in comments.
* Removed redundant blank lines in thttpclient_standalone.nim.
Co-authored-by: Mark Pointing <mark@futurepoint.com.au>
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
In CPS we would consume an exception in the except branch by stashing it
into a local then remove the exception from Nim environment so as not to
leak it to other code that would be running before the continuation
continues
However since popCurrentException() assumes that the exception always
exist, removing the exception from an except branch will cause a
SIGSEGV to happen. This commit fixes that.
* fixes#18235 - proc annotation type macro sym leak
- also fixed a typo
- proc annotations guard symbol exports with shadow scopes
- symbol handling is shadow scope aware
* test for exporting an existing unexported sym
this one is for my homie alaviss.
* Special handling not needed in semProcAnnotation
* Testcasing
* [skip ci] clean-up and add some more comments
* [skip ci] rm trailing whitespace
Co-authored-by: Clyybber <darkmine956@gmail.com>
* make strict funcs analysis smarter: varParam[i] = v is different from varParam[i][] = v
* added a test case
* Update compiler/varpartitions.nim
Co-authored-by: Clyybber <darkmine956@gmail.com>
* Fix JS error on index page and detect dark mode
The theindex.html page doesn't have a dark mode switch so the main
function will error because `toggleSwitch` is not defined. Checks have
been added to prevent this from happening.
Also add automatic detection of system settings for dark-mode. This
could also be done with pure css, but then the dark mode variable
declarations would have to be duplicated to work with the switch so I
went with this approach.
* Fix nimdoc tests
* Fix rst2html tests
* simplify extccomp.nim json logic via jsonutils
* fix#18084
* simplify further
* workaround for bootstrap that can be removed after updating csources_v1 >= 1.2
* fix warnings/hints in nimdoc/tester.nim
* improve err msg for nimdoc/tester.nim and change flag from fixup to nimTestsNimdocFixup
* address comment: put back quit instead of doAssert
Copying StackTraceEntry instances when nimStackTraceOverride is defined
breaks the link between a cstring field that's supposed to point at
another string field in the same object.
Sometimes, the original object is garbage collected, that memory region
reused for storing other strings, so when the StackTraceEntry copy tries
to use its cstring pointer to construct a traceback message, it accesses
unrelated strings.
This only happens for async tracebacks and this patch prevents that by
making sure we only use the string fields when nimStackTraceOverride is
defined.
Async tracebacks also beautified slightly by getting rid of an extra line
that was supposed to be commented out, along with the corresponding debugging output.
There's also a micro-optimisation to avoid concatenating two strings just
to get their combined length.
* fixes#17943
* IC: test 'nim check --ic:on' for the full Nim compiler
* Update testament/testament.nim
Co-authored-by: Clyybber <darkmine956@gmail.com>
Co-authored-by: Clyybber <darkmine956@gmail.com>
This allows the ability to set a checkbox as checked programmatically. It's different from `setAttribute` because once an input has been clicked on by the user, `setAttribute` no longer works programmatically.
* refs #17946; refactor testament test summary, show test duration for failures; increase timeout tchannels
* revert workarounds from https://github.com/nim-lang/Nim/pull/16698 and add allowPrefixMatch optional param to greedyOrderedSubsetLines
* add test
* workaround for yet another testament bug
* reuse config/build_config.txt for all bootstrap scripts (posix + windows + ci)
* ci_docs: use build_all.bat in CI (just in that pipeline) to ensure it keeps working
* fixup
* fix pre-existing bug in build_all.bat
* fixup
* cp => copy /y
* auto-generate build_all.bat, build_all.sh
* fixup
* gitutils: add diffStrings, diffFiles, and use it in testament to compare expected vs gotten
* refactor with createTempDir
* cleanup
* refacotr
* PRTEMP fake test spec changes to show effect of diffStrings
* add runnableExamples for experimental/diff + cross-reference with gitutils
* Revert "PRTEMP fake test spec changes to show effect of diffStrings"
This reverts commit 57dc8d642d.
* Implement https://forum.nim-lang.org/t/7848#50018 with just the same
`SuccessX` hint category, build mode on a separate, final line, and
no change to how the mode is spelled for -d:release/-d:danger.
* Change to add a new BuildMode hint category and keep testament in sync
as per comment.
* Add "--hint:buildmode:off" to `defaultHintsOff`.
* Remove as requested.
* As requested for tests clean up.
* Address code review.
* Address code review.
* Mirror db45642311
* rename a test so it runs in CI; merge several tests with nim check
* continue
* continue
* continue
* rename tests/errmsgs/undeclared_routine_compiles.nim -> tests/errmsgs/tundeclared_routine_compiles.nim
* `--usenimcache` (implied by `nim r main`) now caches some compile options
to avoid recompiling when project was previously compiled with such options.
* works
* add test
* changelog
* use std/with
* refactor all code that builds csources
* fixup
* nim_csourcesDir_v0 + nim_csourcesDir
* remove deprecated, unused scripts from ci/
* reuse nimCsourcesHash in ci
* simplify CI pipelines by reusing nimBuildCsourcesIfNeeded
* simplify ci_docs.yml by reusing nimBuildCsourcesIfNeeded
* cleanup
* use csources_v1 as destination dir
* fixup
* remove pushCsources
* address comment: remove build.sh support for now
* fixup
* Adhere left-to-right rule for custom pragma priority
* Improve error message for no custom pragmas
* custom pragmas on var/let sym take priority over its type ones
* Workaround & bug
* CIs: attempt to use csources_v1
* also updated the BSDs
* also updated azure pipelines
* std modules should not itself use the 'std/' import dir...
* compiler has to be careful with std/ for v1 booting
* support skip ci in azure pipelines
* [skip ci] example of a commit that skips CI
* example of a commit that does not skip CI
* fix github actions logic for ci skip handling
* [skip ci] example of a commit that skips CI for all pipelines
* example of a commit that does not skip CI for any pipeline
* ic fixed navigator crash when track wrong/missed
Also fixed an issue with getNimcacheDir not observing the outDir.
* closer, but not sure how to test[skip ci][ci skip]
* IC navigator: added support for include files
* update
* make posix happy via expandFilename
* update
Co-authored-by: Saem Ghani <saemghani+github@gmail.com>
* [ci skip] document compiler/ic/rodfiles.nim
Why?
* understand how rodfile module works and a bit of the format
* leave notes behind for others
* rather than Araq guess what others need, he can fix what other glean
* possible model for making the compiler more aproachable
Bonus:
* might have found a minor bug in `loadSection`
* Update compiler/ic/rodfiles.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* IC exposes typedesc implementation shenanigans; so I change system.default's definition to what it should have been to begin with
* Update lib/system.nim
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
* Allow use of colons inside fmt
allowing colons inside fmt by replacing the format specifier delimiter lets arbitrary nim code be run within fmt expressions.
* oops
* Update strformat.nim
* one space.
* Update lib/pure/strformat.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Update lib/pure/strformat.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* changed parser to ignore ':' within parens
* Update strformat.nim
* Update lib/pure/strformat.nim
Co-authored-by: flywind <xzsflywind@gmail.com>
* formatting,documentation,backslash escapes
Adding support for evaluating expressions by special-casing parentheses causes this regression: `&"""{ "(hello)" }"""` no longer parses.
In addition, code such as &"""{(if open: '(' else: ')')}""" wouldn't work.
To enable that, as well as the use of, e.g. Table constructors inside curlies, I've added backslash escapes.
This also means that if/for/etc statements, unparenthesized, will work, if the colons are escaped, but i've left that under-documented.
It's not exactly elegant having two types of escape, but I believe it's the least bad option.
* not sure about how this works
* changelog
* changelog
* added json strformat test
* pulled my thumb out and wrote a parser
* more escapes and string tests
* ok, now i'm sure it's broken but cant get a failing test
* found it
* ok, that'll do
* did i delete this?
* spcng
* spacing
* messed up where changelogs are supposed to go
* ocd
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
Co-authored-by: flywind <xzsflywind@gmail.com>
* getCustomPragma is split up in more usable chunks
* changelog entry
* fix for style checks
* shitty typedesc special casing
* Add since annotation and remove typedesc comments
* Fix typo
* Revert since annotation because it breaks bootstrapping
* Export getCustomPragmaNode conditionally
* Reduce code duplication
* Update since
* Update lib/core/macros.nim
* Apply suggestions from code review
Co-authored-by: Clyybber <darkmine956@gmail.com>
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
`Task.callback` cannot be nil, we need to raise it at debug and release mode
Situations:
- if users create a Task object without using `toTask` and invoke the Task
- if users already move the Task and invoke the Task
* IC: first steps towards 'nim check --def --ic:on'
* IC navigator: deduplicate output lines
* IC navigator: progress
* IC navigator: use a different nimcache entry
* IC navigator: special logic for templates/macros
* IC navigator: proper error messages
* IC navigator: prepare for testing code; document only what currently works somewhat
* Remove the use of usrToCell in gcMark [backport:1.2]
Recently, we've discovered a GC crash resulting from inlining of
the memory allocation procs that allowed the compiler to avoid
maintaining any references to the "user pointer" on the stack.
Instead, a "cell pointer" appeared there and all field accesses
were performed with adjusted offsets. This interfered with the
ability of the GC to mark the correct cell in the conservative
stack scans which lead to premature collection of objects.
More details here:
af69b3ceae
This commit closes another theoretical loophole that may lead to
the same problem. If a short proc is accessing both the object and
its reference count in a short sequence of instructions, the compiler
may be enticed to reduce the number of registers being used by storing
only a single pointer to the object and using offsets when reading
and writing fields. A perfectly good strategy would be to store only
the cell pointer, so the reference count updates can be performed
without applying offsets. Accessing the fields of the object requires
offsets anyway, but these can be adjusted at compile-time without any
loss. Following this strategy will lead to the same problem of marking
a wrong cell during the conservative stack scan, leading to premature
collection.
The problem is avoided by not using `usrToCell` in `gcMark`. Since
the cell discovery logic can already handle interior pointers, the
user pointers don't need to be adjusted for the GC to function correctly.
* Allow use of colons inside fmt
allowing colons inside fmt by replacing the format specifier delimiter lets arbitrary nim code be run within fmt expressions.
Co-authored-by: flywind <xzsflywind@gmail.com>
* formatting,documentation,backslash escapes
Adding support for evaluating expressions by special-casing parentheses causes this regression: `&"""{ "(hello)" }"""` no longer parses.
In addition, code such as &"""{(if open: '(' else: ')')}""" wouldn't work.
To enable that, as well as the use of, e.g. Table constructors inside curlies, I've added backslash escapes.
This also means that if/for/etc statements, unparenthesized, will work, if the colons are escaped, but i've left that under-documented.
It's not exactly elegant having two types of escape, but I believe it's the least bad option.
* changelog
* added json strformat test
* pulled my thumb out and wrote a parser
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
Co-authored-by: flywind <xzsflywind@gmail.com>
* fix failing test toSeq in manual which now works
* changelog
* reject proc fn(a: iterable)
* add iterable to spec
* remove MCS/UFCS limitation that now works
* Genode: move dyncall failures to runtime
Do not use the "error" pragma to warn that dynamic library loading is
not implemented, print a message at runtime and exit.
* Genode: use stricter dataspace type in page allocator
* Genode: remove compiler configuration from nim.cfg
Self-hosting Nim is not supported on Genode and defining the
cross-compilation environment can be done externally.
* Genode: use new mutex API
* Genode: call nim_component_construct as a C procedure
* Genode: implement echo for NimStringV2
* use sink and lent in deques
* Update lib/pure/collections/deques.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
Debugger works for enums again. Additionally, flags work better than before.
Reworked object printer as well, but the approach needs much more work or has
to be replaced all together. This is mostly to save the work and myself or
someone else can revisit it.
* new `macros.genAst`: fixes all issues with `quote do`
* add changelog entry
* add workaround for https://github.com/nim-lang/Nim/issues/2465#issuecomment-511076669
* add test for #9607
* add kNoExposeLocalInjects option
* add test case for nested application of genAst
* genAst: automatically call newLit when needed
* allow skipping `{}`: genAst: foo
* add test that shows this fixes#11986
* add examples showing mixin; add examples showing passing types, macros, templates
* move to std/genasts
* improve docs
This is taken from:
af69b3ceae
Full original comment:
This is to avoid heavy inlining happening when two allocation calls
would occur shortly after each other.
This inlining would sometimes be accompanied with an optimisation
as the compiler is able to see that cellToUsr ending the first
allocation call is shortly followed by an usrToCell call. The
pointer arithmetic is redundant and the compiler can eliminate it,
leaving only the cell address in a register (and later the stack)
instead of the actual pointer to the user data, as one would expect.
This combined with a GC collect cycle will cause the stack scan to
only notice the cell address, which is of no good due to a usrToCell
in the gcMark call which shifts that address to an adjacent cell.
This means that the actual cell of importance will not get marked
and thus cause a premature collection of that cell. BOOM.
* unify tuple expressions
* fix test
* fix test
* apply feedback
* Handle empty tuples
* Fix rendering named unary tuple
* Protect static NimNode against stripping
* Slightly less hacky
* Revert "Slightly less hacky"
This reverts commit 170c5aec0addc029f637afbc948700ca006b7942.
* Slightly less hacky
* Cleanup
* Fix test
* Fix another test
* Add condsym
* Rebase fallout
* changelog: Move from compiler changes to language changes
* Add stricter tests
* Add empty tuple example to doc/astspec
* Fix test
Co-authored-by: Clyybber <darkmine956@gmail.com>
* don't zero out in a move in the VM
* Add testcases for #17199
* Update tests/arc/tarcmisc.nim
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
* Update tests/vm/tissues.nim
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
* Fix test failures
* Fix test
* Fix tests
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
This commit fixes mispellings of "occurrence" introduced by:
- 76a3b350ce (#17337)
- 8e8bea9044 (#17339)
and adds the same "every occurrence of" in the `replaceWord` func.
Other changes:
- Prefer "replace with" to "replace by".
- Be more consistent with "the" - prefer "of the character" given that
we wrote "by the character".
- Try to be more consistent with writing the types - add
"the string `sub`" given that we wrote "the character `sub`".
* improve test coverage for isolation
* a bit better
* rename channels to channels_builtin
* follow up #17276
* fix
* Update lib/std/private/jsutils.nim
* IC: renamed to_packed_ast module to ic module
* IC: don't store the --forceBuild flag, makes it easier to test
* IC: enable hello world test
* Codegen: refactorings for IC; changed the name mangling algorithm
* fixed the HCR regressions
* life is too short for HCR
* tconvexhull is now allowed to use deepCopy
* IC exposed a stdlib bug, required a refactoring
* codegen: code cleanups
* IC: even if a module is outdated, its dependencies might come from disk
* IC: progress
* IC: better name mangling, module IDs are not stable
* IC: another refactoring helping with --ic:on --gc:arc
* disable arraymancer on Windows for the time being
* disable arraymancer altogether
* IC: make basic test work with 'nim cpp'
* IC: progress on --ic:on --gc:arc
* wip; name mangling for type info
* simplified proc-like name ident to symbol code
* wip - reworking generic param sem
* wip - closer to removing nkEmpty generic params
* it's hacky but tests pass
* slowly tweaking semProcAux to take on semLambda
* fix pragma superset check proto vs current
* Set the symbol owner earlier
* partial progress reworking proto
found bug where default values between forward and impl lead to overload
resolution issues.
* simplified pragma handling and callConv checks
Co-authored-by: Clyybber <Clyybber@users.noreply.github.com>
* partially working
* cgexprs issue
* It works!
* comment clean-up
* clean-up asserts, comments, and other bits
* add isGenericParams, inline isGeneric queries
* seeing if this is sufficiently consistent
* can use this approach or continue it in a further PR
* commentary about nullary generics and clean-ups
* fixed a mistake in PNode isGenericRoutine
* Some small cleanups
* Small cleanup
* for func lambdas ensure we use lambda pragmas
* add some basic compileTime func tests
* [ci skip] remove comments
Co-authored-by: Clyybber <Clyybber@users.noreply.github.com>
Co-authored-by: Clyybber <darkmine956@gmail.com>
* use NIM_TESTAMENT_BATCH for important_packages, improve formatting, code cleanups
* workaround for nimcrypto not having `--path:.`; remove workaround "two are special snowflakes"
* add comment explaining why nimcrypto fails and what packages need to be testable
* IC: compilerprocs are handled correctly
* IC: special logic for .exportC'ed procs
* IC: 'hello world' compiles for the first round (2nd round fails)
* IC: hello world seems to work
* followup #16871 asyncjs.then: allow pipelining procs returning futures
* rename test files where they belong
* fix tests
* tests for then with `onReject` callback
* rename test file containing fail to avoid messing with grep
* address comments
* cleanup
* un-disable 1 test
This alters the DFA control flow graph generation for case statments.
Gotos are now generated as a chained link, this ensures that evaluation
of variant branches collapses as early as possible, without hitting the
2k call limit.
* Fix unicode.split with seperators examples
https://nim-lang.org/docs/unicode.html#split.i%2Cstring%2CRune%2Cint didn't work with the set constructor `{}` so replaced it with a string that's converted to an openArray compatible type containing `Rune`s.
* Add runnableExamples to unicode.split
* Add runnableExamples to split with single separator too
* Simplify runnableExamples unicode.split
* Improve the rest of the runnableExamples with the simplified code
* Simplify runnableExamples of unicode.split even more
* Formatted unicode.split example
* Update lib/pure/unicode.nim
Co-authored-by: zetashift <rishi2@laptop.localdomain>
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
* refs #17114: workaround for arm64 which should segfault but does not
* fixup
* Update lib/std/wrapnils.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
Follow up of 5dc544e1f5
After updating windeps.zip, it appears that Windows' build was
unchanged. As it turns out, cacert.pem is not set for packaging by the
compiler package manifest.
This commit add cacert.pem to the Windows package.
* fixes#15210 [backport:1.2]
* make tests green
* make ordinal work
* makes Swapable test compile
* make Indexable example work
* concepts: 'self' is now 'Self'
* concepts: make Dictionary example compile
* document the new concept implementation
* concepts: make typeDesc work properly
* concepts: allow documentation comments (d'oh)
* add enumutils.items for enum with holes
* changelog
* ref in lib.rst
* use `type SomeSparseEnum* = (not Ordinal) and enum` instead of concept
* address comment: rename back to enum with holes
Checked field expressions, such as an object variant field access results in
occasionally broken address analysis crashing the VM. This guard added here
mimics guarded access in ldObjAddr as well. This is to prevent a crash, while a
fix is devised.
* add simpler to use readChars overload
* use new readChars overload
* Update lib/wrappers/openssl.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
Co-authored-by: flywind <xzsflywind@gmail.com>
* Improve ropes module
Improve wording
Update runnableExamples
Add index bound check for `[]`
Minor format changes
* Update tests/stdlib/tropes.nim
Run on C & JS target
Test in VM
Add tests for `[]`
When statement branches exit early outside of nimvm. In nimvm it seems that all
sides of the branches must be evaluated as the code gen happens at a later
stage, this remains intact.
* Improve the strformat module
Improve documentation
Use runnableExamples
* Fix overflow error for low(int64)
Add test
* Use assert in runnableExamples
* Improve tstrformat
Put tests in proc & test VM
Put tests in blocks
Add c, js targets
* Use doAssert in tests
* Disable JS & VM tests
* add example of hashing an object by all of its fields with `fields`
* Update lib/pure/hashes.nim
* Update lib/pure/hashes.nim
* Update lib/pure/hashes.nim
Co-authored-by: flywind <43030857+xflywind@users.noreply.github.com>
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
In line 289 it said PT =minino for cat. Cat in Portugues is Gato, like in spanish. minino sounds like a foreigner trying to pronounce menino, which means boy, not cat.
For variation's sake, my suggestion is to use the italian(IT) version Gatto, since it keeps in line with being close to ES, alternatively the german(DE) version Katze could be used instead.
* Analyse last reads all at once
* Integrate firstWrite analysis
* Small cleanup
* Use sets instead of seqs
* Remove instrTargets
* Reap the benefits
* Implement error diagnostics
* Operate on DFA index for lastRead analysis
* Use mgetOrPut
* Cache alias results
This improves performance by a lot, since many
CFG locations map to a single PNode
* Improve performance
* Improve performance
* Cleanup
* Fix#17025
* Grammar
* Expand testcase
* basic stability improvements; refs nimsuggest
* fixed dot operator recursive loop & macro suggest
* hacky fix for run away dot operator sem check
Committing this mostly to make the issue more clear. Perhaps get better
feedback.
* semExprWithType seems like a better place to check
* fixed error messages const case expressions
* Clean-up test
* stopped the dot operator madness
No longer get infinite recursion when seming broken code with a dot
operator macro like in jsffi.
Co-authored-by: Araq <rumpf_a@web.de>
* Add pqsetsinglerowmode to postgres module
Very useful to reduce memory usage when fetch a large amount of data.
Documentation: https://www.postgresql.org/docs/current/libpq-single-row-mode.html
* Add missing enum to the ExecStatusType
* Revert entry
* Update ConnStatusType enum
* Improve documentation for math
Support empty input for cumsummed
Use runnableExamples
Move some examples to tests
Add more tests
* Update tests/stdlib/tmath.nim
Move some tests to trandom.nim
Move tests into main template where possible
Add test for #17017
* Add more tests for gamma & lgamma
Remove gamma(-1.0) example
Small fixes/changes
* Move more tests into template main()
* Fix typos
* Add edge case examples for copySign
* Improve documentation for random
Use runnableExamples
Minor changes
* Apply suggestions
Remove echo
Use RNG in more places
* Fix skipRandomNumbers example
* Analyse last reads all at once
* Integrate firstWrite analysis
* Small cleanup
* Use sets instead of seqs
* Remove instrTargets
* Reap the benefits
* Implement error diagnostics
* Operate on DFA index for lastRead analysis
* Use mgetOrPut
* Cache alias results
This improves performance by a lot, since many
CFG locations map to a single PNode
* Improve performance
* Improve performance
* Cleanup
* Analyse last reads all at once
* Integrate firstWrite analysis
* Small cleanup
* Use sets instead of seqs
* Remove instrTargets
* Reap the benefits
* Implement error diagnostics
* Operate on DFA index for lastRead analysis
* Use mgetOrPut
* Various changes to `lists` (RFC #303)
* Removing a non-element is no-op; better tests
* Remove preserves cycles; add appendMove alias; tests.
* Return value for (singly linked) `lists.remove`
* More test for lists.remove
* Moved `lists.append` to the end of the file to see all `add` definitions
* Disable testing js for now
* Use workaround for swap js bug
* Smaller diff
* Undo "silent" deprecation of append
* Correct typo in changelog
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
* Remove `appendMoved`
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
* Don't remove appendMoved
Co-authored-by: Clyybber <darkmine956@gmail.com>
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
* stdlib/os: handle symlinks in copy/move functions
- Added optional `options` argument to `copyFile`, `copyFileToDir`, and
`copyFileWithPermissions`. By default, symlinks are followed (copy files
symlinks point to).
- `copyDir` and `copyDirWithPermissions` copy symlinks as symlinks (instead of
skipping them as it was before).
- `moveFile` and `moveDir` move symlinks as symlinks (instead of skipping them
sometimes as it was before).
- Added optional `followSymlinks` argument to `setFilePermissions`.
See also: https://github.com/nim-lang/RFCs/issues/319
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
* Address comments in #16709
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
* Address comments in #16709 (second iteration)
Skip symlinks on Windows.
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
This commit attempts to improve testing of strictFuncs and views, and
prevent regressions like #16873 (resolved by 0b01eddace).
We previously only explicitly tested strictFuncs and views with a
smaller number of stdlib modules, mostly in:
- tests/effects/tstrict_funcs.nim
- tests/views/tcan_compile_nim.nim
Note that this commit leaves the `pegs` module commented out; it
cannot currently be compiled with `--experimental:views` (see #16892).
Note also that this commit is not sufficient to test strictFuncs and
views, but it does detect a subset of problems.
* minor improvements
* IC: added the required logic for compilerProcs
* LazySym ftw
* we need this testing logic
* reimplement the old way we use for module package creation
* fixes a regression; don't pick module names if you can avoid it
* link similar compiler option proc together
* fixup links
* fix formatting and links
* example formatting
* drop declared
* link to compilesettings
* only link define pragmas once
* drop another declared
* backlink to compileOptions from compilesettings
* remove newline
* fix#16885
* Fixup nimdoc for the CSS filter change
* Use the same Nim devel versions
* Revert "Use the same Nim devel versions"
This reverts commit 8559308f9b.
* Revert "Fixup nimdoc for the CSS filter change"
This reverts commit 99ec00a4bd.
* Fixup nimdoc.out.css
Co-authored-by: zetashift <rishi2@laptop.localdomain>
Previously, compiling a file containing just `import critbits` with
`nim c --experimental:strictFuncs` would produce the following error:
critbits.nim(529, 6) Error: 'toCritBitTree' can have side effects
This was introduced by 2aed418698 (#16564).
Fixes: #16873
* penalizes the quality score of deprecated symbols
* uses quality more pervasively in order to reflect deprecation impact
* impacts both sug and con
additional notes:
* linux i386 CI was failing
* this is because the suggested results differ slightly in their sort
* 64 bit tables.getOrDefault:441 was returned, while 32 bit returned 422
* for now simply removing the last line is good enough
* A new request should always have a new content-length
In [my last PR](https://github.com/nim-lang/Nim/pull/16618) I made a mistake by assuming that the client.headers were cleared on every request, like the Python version. So, due to the fact that Nim keeps the client headers, we need to clear the Content-Length header on each request (which makes sense because you almost never want to use the same Content-Length twice, but you may want to reuse other headers)
* Move content-length to newHeaders instead of in the global client headers
* Use single backticks
* removed dead code
* we need even more laziness for the generic caches
* make it bootstrap on older Nims
* wrote more deserialization code
* IC: replay required methods information
* IC: dead code elimination pass
* preparations for a different codegen strategy
* added documentation to the newly written code
* IC: backend code
* IC: backend adjustments
* optimized the compiler a bit
* IC: yet another massive refactoring
* fixes regressions
* cleanups
* fix#16185
* fix test
* fix comment
* fix comment
* better approach
* Add more tests and move sameLocation to injectdestructors
* Better and more strict sameLocation
* Small cleanup and preliminary spec clarification
* Fix
* Fix doc
* Expand test
Co-authored-by: Andrey R (cooldome) <ariabushenko@gmail.com>
* Improve documentation for packedsets
Add more runnableExamples
Add deprecated pragma to intsets
Replace intsets with packedsets in lib.rst
* Apply suggested changes
* Add tests and fix extra newlines in body
* Fixes per comments
* Slight rephrase per comments
* Improvements per comments
* Add getSocket to reduce test flakiness per comment
* Remove unused lines from header
* Add doc comment to getSocket per comment
* Apply witchcraft to replace `discard Future`
* Return HTTP 400 on bad encoding in request
* Fix runnable example for getSocket
* Fix import to fix runnable examples
* Even more imports for the example
* Better self documenting runnable example
* Add missing import
* Import from module with correct signature
* Resolve port type mismatch
* code cleanups
* refactorings for IC
* more refactorings for IC
* IC: attach the 'nil' type to its module
* IC: refactorings and improvements
* IC: progress
* IC: more serialization fixes
* IC: embarrassing omission
* code cleanups
* Update openssl.nim
Fix issue # 16308
* Update openssl.nim
These are also related to Issues [#16308](https://github.com/nim-lang/Nim/issues/16308)
* Update openssl.nim
* Add files via upload
SSL PEM_read_RSAPUBKEY check
* Delete topenssl_rsa_private_key.pem
* Delete topenssl_rsa_public_key.pem
* Delete topenssl.nim
* Add files via upload
* Update topenssl.nim
This test makes me dizzy. Variables such as' PRSA 'must be declared in advance, otherwise they will run incorrectly. The argument uses a cString, and string also makes an error.
* Update topenssl.nim
```
lhf@lhf-pc:/media/lhf/D$ cat -e ./topenssl.nim
import std/wordwrap$
import openssl$
```
* Update topenssl.nim
* dos2unix tests/stdlib/topenssl.nim
Co-authored-by: lihaifeng <lihaifeng@wxm.com>
In case of malformed query string where there is `=` on the value, handle
this character as part of the value instead of throwing an error.
The following query string should no longer crash a program:
key=value&key2=x=1
It will be interpreted as [("key", "value"), ("key2", "x=1")]
This is correct according to latest WhatWG's HTML5 specification
recarding the urlencoded parser:
https://url.spec.whatwg.org/#concept-urlencoded-parser
Older behavior can be restored using the -d:nimLegacyParseQueryStrict
flag.
* removed dead code
* beginnings of a rodfile reader
* IC: record global VM state changes and pragma state changes
* IC: replay pragmas and VM state changes
* implemented rod load file simuation for easier, extensive testing
* critical bugfix
* IC: stress test logic; should also help with recursive module dependencies; WIP
* IC: loading from .rod files begins to work reliably
* removed ugly hacks
* yet another silly mistake
* Allow passing Uri instead of strings
* Teach httpclient about 308
* Deprecate request proc where httpMethod is string
* More use of HttpMethod enum
Also fix handling of 308, I forgot to add the hunk to the previous
commit.
* Well behaved redirect handler
* Also remove Transfer-Encoding
* Removed unused proc
* Secure redirection rules
Strip sensitive headers for cross-domain redirects.
* Allow httpMethod to be a string again
This way unknown http verbs can be used without any problem.
* Respect user-specified Host header
* Missed multipart argument.
* Try another method
* add changelog
* Fix hidden deprecation warning, parseEnum failing
* This is wrong
* Have to do it manually, parseEnum is not suitable
* Review comments
* update
Co-authored-by: LemonBoy <thatlemon@gmail.com>
Co-authored-by: Dominik Picheta <dominikpicheta@googlemail.com>
* DELETE requests should always have a content-length header
Not having DELETE in this list is causing hanging when trying to close webdriver sessions in [halonium](https://github.com/halonium/halonium/issues/10) and likely any other implementation of the webdriver protocol. Both at least chromedriver and geckodriver are affected by this issue.
* Change the content length calculation to match the http spec
For reference:
https://www.w3.org/Protocols/HTTP/1.0/draft-ietf-http-spec.html#Entity-Body
* cleanups
* ast.nim: cleanups
* IC: no more sym.tab field, stored externally in the module graph
* nimble compiles again
* rodfiles: store bitwidth of integers and the endianness in the cookie because we serialize 'int' directly
* rodfiles: added compilerproc and export sections
* rodfiles: added all the missing sections
* rodfiles: track the missing information
* IC: architecture for lazy loading of proc bodies
* make tests green again
* completed the lazy loading of proc bodies
* symbol lookup integration, part 1
* symbol lookup integration, part 2
* symbol lookup integration, part 3
* make tcompilerapi work again
* rodfiles: fixed config change handling
I dislike this example a lot (busy looping for FDs to be closed is a very
poor waste of resources) but at least with these changes it's a little bit
better.
nimsuggest outline should account for includes, now it does:
- the module prefix will be of the module doing the including
- the filename will be of the module that was included
- adds a test case for it
* Improve documentation for complex
Add missing doc comments
* Add runnableExample
Add links for principal values
Optimize `-`
Change var to let
* Use std prefix for imports
* Improve documentation for algorithm
Remove unused import in algorithm tests
Improve formatting
* Reapply fix for reverse on empty openArray
* Use 3rd person singular
Add more explanations.
* reworked ID handling
* the packed AST now has its own ID mechanism
* basic serialization code works
* extract rodfiles to its own module
* rodfiles: store and compare configs
* rodfiles: store dependencies
* store config at the end
* precise dependency tracking
* dependency tracking for rodfiles
* completed loading of PSym, PType, etc
* removed dead code
* bugfix: do not realloc seqs when taking addr into an element
* make IC opt-in for now
* makes tcompilerapi green again
* final cleanups
Co-authored-by: Andy Davidoff <github@andy.disruptek.com>
* init
* support strutils
* more
* better
* Call len once per string/cstring
* Change var to let
* Compare ternary on first char
* More appropriate param name
* fix
* better
* one test
* impl
* more efficient
* minor
Co-authored-by: Clyybber <darkmine956@gmail.com>
These fixes were primarily developed to assist in nimsuggest debugging. There
is nothing intentionally specific done for nimsuggest, but beyond the automated
tests all practical testing was done with nimsuggest. Undoubltedly these will
also assist in other debugging scenarios.
The current nim-dbg.py script was broken in a few ways:
- failed to provide detailed value information for common types (see below)
- was not passing existing tests
- could not produce type summary information
Broken types now working somewhat better:
- sequences with ref types like strings
- sequences with value types like ints
- arrays with ref types like strings
- tables with int or string keys
Other improvements:
- slightly more test coverage
Future considerations:
- this, data used by it, should be something the compiler can generates
- account for different memory layouts ([arc/orc differ](https://github.com/nim-lang/Nim/pull/16479#issuecomment-751469536))
Attempts at improving nim-gdb.py
More tests, few fixes for seq and type printing
Tables debugging fixed added further tests
Fixed type printing
* fix dots interfering with static:echo
* add tests
* fix hintProcessing dots for hintCC
* improve trunner tests
* fix bug: readLineFromStdin now writes prompt to stdout, consistent with linenoise and rdstdin
* disable a failing test for windows
* improve turi tests: js, vm; merge tdecodequery.nim
* improve test
* add test in js, improve test
* remove matrix: "--styleCheck:hint --panics:on"
* fixup
* Nil checking
* Enable current older not nil checking again, run new checking only under flag, skip our test
* Enable tests, work on try/except and bugs, fix notnil tests
* Enable strictNotNil tests (currently with lowercase category) and add some expected output
* Work on try/except/finally: still some things unclear and a lot of code can raise out of try
* Fix the notnil build by going back to the old version of a test which I shouldn't have changed
* Fix test : use action compile
* Work on mutation and aliasing: not finished
* Render var parititions graph, try to understand it, fix a nilcheck if bug
* Rebase, progress on working with partitions
* Improve time logic
* Fix some bugs, use graph indices instead of symbol in nil map
* Fix bugs, test simpler ident aliasing for now, support two mutation levels
* Support ContentMutation and ReAssignment: for now just detect possible re assignment for var parameters of calls
* Enable several simple passing tests
* Cleanup a bit, fix condition/branch infix-related bug
* Remove some files, address some comments by Araq
* Use internalError and no quit for now
* Separate tests with expected warnings and with expected ok, fix a bug with if with a single branch related to copyMap
* Fix new data structures, bugs: make tests pass, disable some for now
* Work on fixing errors with non-sym nodes, aliasing: tests fail
* Work on alias support: simple set-based logic, todo more tests and ref sets?
* Use ref sets: TODO can we think of handle seq-s similar to varpartitions' Araq ones
* Handle defers in one place, stop raising in reverse to make an async test compile with strictNotNil, add a commented out test
* Dot expressions: call/reassignment. Other refactorings and distinct, SeqOfDistinct support. Checkout an older varpartitions
* Work on field tracking
* Backup : trying to fix bugs when running some stdlib stuff for running an async test
* Start a section about strict not nil checking in experimental manual
* Fix experimental strict not nil manual section and move it to another file based on Araq feedback
* Fix unstructured flow and double warning problems, fix manual, cleanup
* Fix if/elif/else : take in account structure according to Araq feedback
* Refactor a bit
* Work on bracket expr support, re-enable tests, clarify in manual/tests/implementation static index support for now
* Work on compiling stdlib and compiler with strictNotNil
* Small fixes to the manual for strictNotNil
* Fix idgen for strict check nil rebase
* Enable some simple tests, remove old stuff, comment out code/print
* Copy the original varpartitions source instead of my changes
* Remove some files
A number of nimsuggest tests were disabled for various reasons, sometimes due
to brittleness. These tests have been fixed where needed and most have are now
enabled -- details below. The updates are meant to provide better regression
coverage for future nimsuggest improvements. To avoid brittleness some tests
were refactored.
Impact:
* test coverage has now increased
* faster execution of the test suite
* tests are less likely to break due to stdlib changes
Re-enabled Test & Test Description:
* `tchk1.nim`: check (chk) via nimsuggest works at end of file
* `tdot4.nim`: prioritize already used completion
* `tinclude.nim`: definition lookup (def) with includes
* `tstrutils.nim` -> `tdef2.nim`: test template definition lookup (def)
* `tsug_regression.nim`: regression test for [nimsuggest #52](https://github.com/nim-lang/nimsuggest/issues/52)
* `ttemplate_highlight.nim`: per the file name
* `twithin_macro_prefix.nim`: suggest within a macro with a prefix
Tests Not Re-Enabled:
* `twithin_macro.nim` still disabled as it doesn't provide a good test signal
* EPC highlight tests remain disabled -- requires out of scope tester changes
Additional Notes:
* todos added in comments for follow-up work
* add sequtils to prelude
i would argue that sequtils is used just as often as the other imports in prelude, and it'd be nice for it to be included.
* updated doc comment to add sequtils
* added sequtils import to changelog
* O(1) concatenation of singly- and doubly linked lists.
There is also new `toSinglyLinkedList` and `toDoublyLinkedList`
functions for conversion from `openArray`s, similarly
to `toHashSet` or `toTable`.
* Add `sequtils` import to runnable examples with `toSeq`.
* Added missing call to runnable examples.
* Add .since annotation, changelog, and tests.
* Rename `lists.concat` as an overload to `lists.append`.
* Renamed `append` to `add` in lists.
* Remove faulty `add` for `DoublyLinkedList`s.
* Improved tests for lists.
* `lists.add` moves the second list; added `lists.copy` for shallow copy.
* More tests for `lists.add` and `lists.copy`.
* More compact tests for lists with templates.
* List concatenation with copying (`add`) and moving (tentatively `addMove`)
* Renamed `addMove` to `addMoved`; renamed arguments according to the style guide.
* Added extended example to `lists.copy`.
* Corrected .since annotations to 1.6
* Add .since annotation, changelog, and tests.
* Rename `lists.concat` as an overload to `lists.append`.
* Renamed `append` to `add` in lists.
* Remove faulty `add` for `DoublyLinkedList`s.
* `lists.add` moves the second list; added `lists.copy` for shallow copy.
* More tests for `lists.add` and `lists.copy`.
* List concatenation with copying (`add`) and moving (tentatively `addMove`)
* Renamed `addMove` to `addMoved`; renamed arguments according to the style guide.
* Since declarations changed to (1,5,1).
* Add .since annotation, changelog, and tests.
* Rename `lists.concat` as an overload to `lists.append`.
* Renamed `append` to `add` in lists.
* Remove faulty `add` for `DoublyLinkedList`s.
* `lists.add` moves the second list; added `lists.copy` for shallow copy.
* More tests for `lists.add` and `lists.copy`.
* List concatenation with copying (`add`) and moving (tentatively `addMove`)
* Renamed `addMove` to `addMoved`; renamed arguments according to the style guide.
* Changelog update.
* Fix rebasing errors.
* Self-adding with `lists.addMove` results in a cycle now.
Added some extra tests.
* Make 'echo' raise IOError when fwrite/fflush fail
* Fix fwrite return value comparison
* Add test for echo raising error and don't fail to release locks in echo
* Fix exitcode expectation
* Make 'echo' raise IOError on Windows if it fails
* Add nimLegacyEchoNoRaise for prior no-IOError echo behavior
* Use checkErrMaybe template
* added ic specific Nim code; WIP
* make the symbol import mechanism lazy; WIP
* ensure that modules can be imported multiple times
* ambiguity checking
* handle converters and TR macros properly
* make 'enum' test category green again
* special logic for semi-pure enums
* makes nimsuggest tests green again
* fixes nimdata
* makes nimpy green again
* makes more important packages work
'Rebuilding the Compiler' and a few other sections required syntax fixes:
* new lines before and after lists to fix rendering
* use internal reference instead of Markdown style link
* fix bullet/enumarated lists with many blank lines
* fix enumerated list parsing
* fix parse failure when next line after list empty
* implement arbitrary start of enumerator
* check that enumerators are in order
* remove redundant start=x if x=1 or a
* add some doc on implemented features
* update start in rst_examples.rst
* allow upper-case letters + more docs
* fix#16265: cgen now does not line wrap string litterals which, in combination with other hacks, caused a really obscure looking bug
* fix#13999; nimhcr_integration.nim now works for osx
* try to make appveyor CI disappear
* disable openbsd + add diagnostic for openbsd
* enable for openbsd
* PTEMP
* re-disable openbsd
* IPv6 text representation according to RFC 5952
* Revert IPv6 text representation according to RFC 5952
* fix#14259#15621fix#14259#15621
* Update lib/system/io.nim
* reverted IoHandle removal
* adaptation of types for WinAPI
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Added Python to highlite module.
* Added the keywords for Python
* Refactored the 'pythonLikeNextToken' into 'nimNextToken':
- `lang` property added to GeneralTokenizer object, is set in `getNextToken`.
- `nimNextToken` accepts `keywords` parameter, used for languages different
from Nim.
- Multiline comment available only for `langNim`.
The default HTML template for nimdoc currently initializes the dark mode switch and pragma dots when the onload event is fired. But since the onload event does not fire until all external resources (images, stylesheets, fonts, etc.) have been loaded, the light theme is shown for a brief moment before the document is fully loaded, and it switches to the dark theme. This is quite jarring, especially on slower internet connections. So let's instead initialize these things on the DOMContentLoaded event, which is fired right after the document has been parsed and the initial DOM structure is ready. This means that we now display the dark mode immediately, without having to wait for external resources to load first.
For reference, see:
- https://developer.mozilla.org/en-US/docs/Web/API/Window/load_event
- https://developer.mozilla.org/en-US/docs/Web/API/Window/DOMContentLoaded_event
I have updated the snapshot tests in `nimdoc/`, and done some manual testing of both the theme switch and the pragma dots, to confirm that this does not break anything. Please let me know if I've missed anything.
* fix#15939, fix#15464 VM now supports `addr(mystring[ind])` (index + index assignment), var char return etc
* cleanups
* cstring tests
* add test for bug #15464
* improve test coverage
* Fixes#16219, `hasArgOfName` ignoring argument sets.
* Fix test and simplify ident traversal.
* Moved test into a block and removed some boilerplate.
* Fix some argument formatting.
* use ..<
* Change the preceding line too
Co-authored-by: Clyybber <darkmine956@gmail.com>
* try to fix#16206
* merge two parsecfg tests into one
* Revert "fix"
This reverts commit 668bdec2c4.
* Revert "try to fix#16206"
This reverts commit c399cc2153.
With this commit, we no longer see an error if we pass
`--styleCheck:error` when compiling a file that contains `import sugar`
or `import std/with`.
The problem was that those modules (and only those modules) import
`std/private/underscored_calls`, which contained a styleCheck issue:
its spelling of `nnkArgList` didn't match the `nnkArglist` spelling in
`macros.nim`.
This commit fixes the issue by renaming `nnkArgList` to `nnkArglist`
repo-wide. The other way around would be a breaking change for code that
used `nnkArglist` and `--styleCheck:error`.
Fixes: #16174
* [docs minor]better comparisons docs
* switch from PRNG to random module
* apply suggestions
* not compile
* Revert "switch from PRNG to random module"
This reverts commit 83b4d8946d.
* small style changes and clarify clamp
* fix#15958
* also cover openArray and VarArgs
* more tests
* cover even more types
* cover even more types
* Trigger build
* Trigger build
* cover sets passed as arrays
* ORC: prepare for another patent-pending optimization
* bugfix
* '=copy' for refs can take a cyclic parameter for more ORC optimizations
* ORC: exploit the common 'it = it.next' pattern
* can't hurt to check for nil
* use an algorithm that is not obviously broken
* restore the test case
* final cleanups for --gc:orc
* Do not read the whole file to compute SHA1 hash (fixes 15997)
* Update lib/std/sha1.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Update lib/std/sha1.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Directly break from loop
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
[backport:1.2] [backport:1.4]
* attempt to make asynchttpserver better; fixes#15925; [backport:1.0]
* better documentation
* fixes 'nim doc'
* makes test green again
* ported to FreeRTOS
* fixes the doc rendering
* Make IntSet an ordinal set OrdSet[A: Ordinal]
Backward compatibility with IntSet is maintained.
IntSet is an alias for OrdSet[int]
* move ordsets to new file, intsets exports it
* ordset, move to lib/std folder
* Fix `$` for ordsets and test cleanup
* Fix ordsets compilation in doc example
* Rename ordsets to packedsets
* Fix#8404 JS backend doesn't handle float->int type conversion
* handle conv to uint as cast, discard other cases
* limit to int32, times use int64
* toInt including tyInt64 break times timezones lib, ignore for now
* also affect to vm
* move to tests/misc/t8404.nim
* Update installer.ini
Add support for powerpc64 little endian
* Update buildsh.nimf
Add support for powerpc64 little endian
* Update makefile.nimf
Add support for freebsd/powerpc64 little endian
* doAssertRaises now correctly handles foreign exceptions; now shows which exception is raised on mismatch
* nimscript now handles `Exception as e`
* remove catch-all doAssertRaises overload from this PR
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* fix#14127 from int to int casting
* add test for #14127
* use template for test, also test uint2int
* move to tests/types/t14127_cast_number.nim targets:c cpp js
* new: `nim -i cmd`
* rename -i to -e (for eval); consistent with majority of other programing languages
* `nim e -e:cmd` now works; bugfix: `echo cmd | nim e -` now works
* honor --betterRun
* address comments
* --eval alias for -e (replaces undocumented --eval which was a noop)
* --eval now defaults to e (nimscript) instead of r
* address comment: remove -e, only keep --eval
* address comment
* fixup
* Update compiler/nimconf.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
Add a macro `enumLen` which is used to determine the number of items in
an enumeration type to the `typetraits.nim` module. Also, add unit tests
for it in the `ttypetraits.nim` module.
Related to nimlang/Nim#15824
* nimgrep: speed up by threads and Channels
* nimgrep: add --bin, --text, --count options
* nimgrep: add --sortTime option
* allow Peg in all matches
including --includeFile, --excludeFile, --excludeDir
* add --match and --noMatch options
* add --includeDir option
* add --limit (-m) and --onlyAscii (-o) options
* fix performance regression
introduced in nimgrep improvements #12779
* better error handling
* add option --fit
* fix groups in --replace
* fix flushing, --replace, improve --count
* use "." as the default directory, not full path
* fix --fit for Windows
* force target to C for macosx
* validate non-negative int input for options #15318
* switch nimgrep to using --gc:orc
* address review: implement cropping in matches,...
* implement stdin/pipe & revise --help
* address stylistic review & add limitations
Make `requiresInit` pragma to work for distinct types in addition to
objects. Tagging of distinct types with `requiresInit` pragma was
already supported, but its impact wasn't applied. Now its behavior when
applied on distinct types is as follows.
Given the following distinct type definitions:
```nim
type
DistinctObject {.requiresInit, borrow: `.`.} = distinct MyObject
DistinctString {.requiresInit.} = distinct string
```
The following code blocks will fail to compile:
```nim
var foo: DistinctFoo
foo.x = "test"
doAssert foo.x == "test"
```
```nim
var s: DistinctString
s = "test"
doAssert s == "test"
```
But these ones will compile successfully:
```nim
let foo = DistinctFoo(Foo(x: "test"))
doAssert foo.x == "test"
```
```nim
let s = "test"
doAssert s == "test"
```
* add parseEnumRange
* fix runnable example
* update changelog
* use parseEnumRange in compiler
* reorganise code
* add changelog, make single normalizer argument
* Fixed not handling blob correctly in sqlite
* Fixed setLen commented by mistake
* Added binary example as db_sqlite doc
* Added tests for sqlite binary data
* add global pragma support for js backend
* globalThis
* add support for threadvar
* more tests
* Update compiler/jsgen.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* update c_malloc's to csize_t
fix for broken --os:ios
* I'm an idiot sorry
* Create talgorithm.nim
* workaround for #10456
I don't understand the intricacies of how lambdalifting and template expansions interact with lent, so i don't know how to fix the real problem, but this sidesteps whatever issue that is.
* working test, use typeof rather than auto
* * Add handle to dup and dup2 posix as duplicate and duplicateTo in std/ioutils.
* Added small test & changelog entry
* Fixed import in tioutils
removed when isMainModule
* * Nest test inside block. Rename proc var -> let in captureStdout
* Renamed tmpfile to iotuils.txt
* Added block: # duplicate, duplicateTo
* Improved docstring
* Clean non-idiomatic code
* Added runnable examples
* rm 2 trailing space in expected output
* Made syntax prettier
* Runnable example: file in getTempDir()
* Tmp -> Temp
* Fixed runnableExamples on windows
* add test for reject action
* highlight that a compilation failure is expected
* add the converse test for action=reject
* add trailing newline
* fix wording
* add criterion to important packages
* use a special nimscript for criterion tests
* fix criterion speed differently
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
When calling procs from Nim in Nimscript you could hit the VM iteration limit even though the code is functioning properly. This resolves that by making the iteration limit reset eachtime you call a proc.
* refactoring: idents don't need inheritance
* refactoring: adding an IdGenerator (part 1)
* refactoring: adding an IdGenerator (part 2)
* refactoring: adding an IdGenerator (part 3)
* refactoring: adding an IdGenerator (part 4)
* refactoring: adding an IdGenerator (part 5)
* refactoring: adding an IdGenerator (part 5)
* IdGenerator must be a ref type; hello world works again
* make bootstrapping work again
* progress: add back the 'exactReplica' ideas
* added back the missing exactReplica hacks
* make tcompilerapi work again
* make important packages green
* attempt to fix the build for 32 bit machines (probably need a better solution here)
* fix in the net.`$` to print zeros that are not in the compressed group
* Update lib/pure/net.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Update net.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Use cligens release version
* Rework important_packages main loop
* Fix
* Fix
* Create pkgs dir
* Don't use nimble develop
since it doesn't work for binary only packages, and always install head
* Use git to get the latest release/tag instead
* Tackle the root cause
* Reduce diff
* Cleanup
Resolved#473
I am removing this bit because this advice to not throw on recoverable-from cases like a file failing to open is actually not respected by Nim standard library. `readFile` and `readLines` both throw and exceptions must be used as a method of control flow for the recovery from that. There are alternatives, like opening a file handle instead of using these helpers, but that's less convenient than these helper methods for cases where you really want to just slurp up a file to memory and use a fallback value if it doesn't exist or is for whatever reason not readable.
* trigger valgrind failure on memory leak
* remove non-malloc tests
* remove ORC test
is redundant because we already have an ARC test
* only run valgrind tests on 64-bit Linux
* disable freebsd and openbsd
* Remove tleak_refc
As to not test implementation details (or bug)
* Fix test failures by removing redundant test
Since this tests/shoulfail/tvalgrind.nim was specified here to fail this test
itself fails since it will be skipped on non-linux CI
* Remove test, reason detailed in the previous commit
* Remove redundant disables
* Revert removing disables
* Add and use valgrind: leaks
* Fix
Co-authored-by: Clyybber <darkmine956@gmail.com>
Co-authored-by: n5m
* add test for #15584
* Rename userlocks.nim to trlocks.nim
* add bug comment
* improve cmd
* reference bugfix, not bug
* add test that runs rlocks
* disallow joining
joining with other test cases (e.g., a test case that invokes `RLock.initRLock()`) may cause this test to compile, when the goal is to test if these lines can be compiled in isolation
The FreeBSD is/was failing, due to a conflict with installing Git.
Git is guaranteed to be in the base image, so this removes that package from the package list. It also reverts back to the built-in `packages` tag since it's officially supported.
Should the build fail in the future, the best place to go is the #sr.ht channel on freenode.
* change SysLockType_Reentrant
fix edge case where using SysLockType_Reentrant doesn't trigger an #include pthread.h
* syslocktype_reentrant now a var
* remove nodecl to remove empty system_syslocks.c
* let is better than var.
in reality SysLockType = enum, maybe that would be a better fix
Since #8296, fgSetColor is no longer a global. These commands were
probably left out from the change as an oversight, so some tests have
been added to make sure this won't happen again.
* changelog.md: Group the new `to` procs [ci skip]
This also moves the `critbits.toCritBitTree` entry from the "Language
Changes" section to the "Standard library additions and changes"
section.
* changelog.md: Remove extra space
* docgen: improve alignment of comments (still not perfect)
* fix error message text in `tunknown_named_parameter`
Co-authored-by: narimiran <narimiran@disroot.org>
* implements https://github.com/nim-lang/RFCs/issues/258
* don't be too strict with custom pragma blocks
* cast pragmas: documentation
* added most missing inference query procs to effecttraits.nim
* group procs of the same name in TOC
* correctly show `sink` parameters in TOC
* no need to reinvent the wheel - `mgetorPut` exists
* better setting of text color [ci skip]
* fix CSS for better alignment
On 32-bit system the mask would have a size of 32-bit, which is smaller
than the BiggestInt (usually 64-bit) it was masked against.
For some reason this only affect 32-bit Windows but not 32-bit Linux.
Might just be a difference in how gcc handle out of bound shifts for
Windows and Linux.
* spec for view types
* spec additions
* refactoring; there are two different kinds of views
* refactorings and spec additions
* enforce that view types are initialized
* enforce borrowing from the first formal parameter
* enforce lifetimes for borrowing of locals
* typo in the manual
* clarify in the implementation what a borrow operation really is
#14357 changed from sending 'val', an int, to a pointer to int, which is understandable, but not how SQLSetEnvAttr works.
"Depending on the value of Attribute, ValuePtr will be a 32-bit integer value or point to a null-terminated character string"
* nimStackTraceOverride: enable stack traces in exceptions
This is a two-step stack trace collection scheme, because re-raised
exceptions will collect multiple stack traces but use them rarely, when
printing info about an uncaught exception, so it makes sense to only do
the cheap stack unwinding all the time and the relatively expensive
debugging information collection on-demand.
`asyncfutures` implements its own `$` proc for printing
`seq[StackTraceEntry]`, so we have to add the debugging info there, just
like we do for the private `$` proc in `system/excpt`.
* cleaned up PR #15284
Co-authored-by: Ștefan Talpalaru <stefantalpalaru@yahoo.com>
NetBSD was switched to getApplFreebsd() in #15359, however the proc was
not made available for the said target.
This commit exposes `getApplFreebsd()` to NetBSD.
* Add missing attributes and methods to dom.Navigator
* Add missing attributes and methods to dom.Navigator
* Add missing attributes and methods to dom.Navigator
* Fixing issue #15302 -- lwip doesn't support signals
* Adding test to catch issue #15302 -- lwip/freertos net library
don't try to build / run on windows, it'll compile only but not run
Fixing issue #15302 -- reworking test to compile on other platforms
* Add some enhancements to `jsonutils.nim`
* Use `jsonutils.nim` hookable API to add a possibility to deserialize
JSON arrays directly to `HashSet` and `OrderedSet` types and
respectively to serialize those types to JSON arrays.
* Also add a possibility to deserialize JSON `null` objects to Nim
option objects and respectively to serialize Nim option object to JSON
object if some or to JSON `null` object if none.
* Move serialization/deserialization functionality for `Table` and
`OrderedTable` types from `jsonutils.nim` to `tables.nim` via the
hookable API.
* Add object `jsonutils.Joptions` and parameter from its type to
`jsonutils.fromJson` procedure to control whether to allow
deserializing JSON objects to Nim objects when the JSON has some
extra or missing keys.
* Add unit tests for the added functionalities to `tjsonutils.nim`.
* improve fromJsonFields
* Add changelog entry for the jsonutils enhancements
* Add TODO in `jsonutils.nim`
* Added an entry to "Future directions" section in `jsonutils.nim` as
suggestion for future support of serialization and de-serialization of
nested variant objects.
* Added currently disabled test case in `tjsonutils.nim` for testing
serialization and de-serialization of nested variant objects.
* Move JSON hooks to `jsonutils.nim`
Move `fromJsonHook` and `toJsonHook` procedures for different types to
`jsonutils.nim` module to avoid a dependency of collections modules to
the `json.nim` module.
The hooks are removed from the following modules:
* `tables.nim`
* `sets.nim`
* `options.nim`
* `strtabs.nim`
* Add some tests about `StringTableRef`
Add tests for `StringTableRef`'s `fromJsonHook` and `toJsonHook` to
`tjsonutils.nim`.
* Disable a warning in `jsonutils.nim`
Mark `fun` template in `jsonutils` module with `{.used.}` pragma in
order to disable `[XDeclaredButNotUsed]` hint. The template is actually
used by the `initCaseObject` macro in the same module.
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
* refactoring: move procs to typeallowed.nim
* frontend preparations for first class openArray support
* prepare the code generator for first class openArray
* code generation for first class openArray; WIP
* code generation for open arrays, progress
* added isViewType proc
* preparations for borrow checking
* added borrow checking to the front end
* Expand hoisted default params in sem
Introduce ast.newTree{I,IT}
Add test for default params in procs
* Cleanup
* Simplify hoist transformation and expand test
* Changes for FreeRTOS/LwIP Port for the ESP32 (ESP-IDF)
Adding FreeRTOS/LwIP to compiler:
* adding freertos option
* dyncalls for freertos
* add freertos to posix os list
* adding lwip option
Setting up networking FreeRTOS/LwIP Port:
* setting up lwip network for freertos
* fixing posix / networking for freertos
* disable setInheritable for freerots
* using lwip for net control items
* Fix builds by ignoring lib/posix/posix_freertos_consts.nim similar to lib/posix/posix_other_consts.nim
* Added more SSL documentation to `net` module.
* Changed two of the net.nim doc refs to links.
* Update lib/pure/net.nim doc wording.
Co-authored-by: Dominik Picheta <dominikpicheta@googlemail.com>
* Update lib/pure/net.nim - added space to doc URI
Co-authored-by: alaviss <leorize+oss@disroot.org>
* Fixed another doc URI in net module.
* For net module doc added warning to connect procedure.
* Update net.nim
Co-authored-by: Dominik Picheta <dominikpicheta@googlemail.com>
Co-authored-by: alaviss <leorize+oss@disroot.org>
* Add test coverage for atomics
Signed-off-by: Elijah Shaw-Rutschman <elijahr@gmail.com>
* Fix compareExchange bugs for non-trivial objects
Bugs fixed:
1. compareExchange would not set the desired value in the success case.
2. compareExchange would not set var expected to the found value in the failure case.
3. withLock would spin forever running the unit tests. try..body..finally prevents this. Not sure why this makes a difference, since an exception wasn’t being raised, but clearing the guard in a finally block seems correct anyways.
Signed-off-by: Elijah Shaw-Rutschman <elijahr@gmail.com>
* gc_regions: withRegion nows return the modified MemRegion
* gc_regions: make withScratchRegion dealloc correctly
* tests/gc: add tregionleak test
This test checks if memory within regions are freed properly.
The closed flag isn't a good design by any means, but let's have this
working first before I get rid of the flag and potentially create a
non-backportable commit.
client code since Linux `inotify` is much like Linux `getdents64`.
Expanding on "almost always"..The only time that this `iterator` logic
is ***not*** needed on the output of a `read` from inotify fd's is when
one passes a length to `read` *guaranteed* to only pass one event struct
in the buffer. That unusual circumstance requires (at least!) knowing
the length of the delivered filename before an event occurs, and the
filename itself is optional for some event types.
It is *far* more common to not know lengths in advance which means one
passes a buffer big enough for at least one maximum length directory
entry (256 bytes) which is then also big enough for *many* "typical"
length entries and therefore many events. In such more common scenarios
this iterator logic is definitely needed.
Further, not using this logic, yet treating the return from read as "the
whole answer" can test ok on "thin" event streams (e.g. 1 event per ms),
hiding a latent bug of processing only the first event.
This commit polishes the new proc introduced by d9ed816b10.
Changes:
- Rename to `toDeque` for more consistency with well-known procs like
`toHashSet` and `toTable`.
- Rename the `openArray` parameter. The name `arr` was potentially less
clear given that the proc can be used with a seq (or string).
- Add a `since` annotation.
- Reword the doc comment, and clarify that ordering is preserved.
- Add runnableExamples.
- Add "see also" cross linking between `initDeque` and `toDeque`.
- Remove duplicate `nextPowerOfTwo`. The `initImpl` template already
includes it.
- Implement the proc using the `items` iterator, rather than indexing.
This matches the implementation of `sets.toHashSet` and
`tables.toTable`.
- Add a test within `when isMainModule`.
- Add a changelog entry.
* Add ability to initialize a deque with a sequence
Example:
var dq = initDeque[char](@['a', 'b', 'c'])
* Update deques.nim
* Optimized deque initialization
* Sequence replaced by open array in deque initialization
These don't seem to make sense for the purpose of the procs and lead
to errors when the `--experimental:strictFuncs` feature is enabled.
See also https://github.com/nim-lang/Nim/issues/15142
* net: allow close() to ignore SSL failures due to disconnections
Comes with this PR is also a SIGPIPE handling contraption.
* net: don't do selectSigpipe() on macOS
macOS sockets have SO_NOSIGPIPE set, so an EPIPE doesn't necessary mean
that a SIGPIPE happened.
* net: fix alreadyBlocked logic
* net: WSAESHUTDOWN is also a disconnection error
* asyncnet, net: don't attempt SSL_shutdown if a fatal error occurred
Per TLS standard and SSL_shutdown(3ssl). This should prevent errors
coming from a close() after a bad event (ie. the other end of the pipe
is closed before shutdown can be negotiated).
Ref #9867
* tssl: try sending until an error occur
* tssl: cleanup
* tssl: actually run the test
I forgot to make the test run :P
* tssl: run the test on ARC, maybe then it'll be happy
* tssl: turns off ARC, switch tlsEmulation on for freebsd
* tssl: document why tlsEmulation is employed
* net: move SafeDisconn handling logic to socketError
avoid future implementation mischief. (Maybe not. Sometimes, general
distrust of theory leads people to distrust simple reasoning over times
from CPUs trying as hard as possible to mask DRAM latency via pre-fetch.)
request. This can be conceived as an alternate, more capable resolution of
https://github.com/nim-lang/Nim/issues/12200
than
https://github.com/nim-lang/Nim/pull/12208
The code re-org idea here is to upgrade tablimpl.nim:`delImpl`/`delImplIdx`
to abstract client code conventions for cell emptiness & cell hashing via
three new template arguments - `makeEmpty`, `cellEmpty`, `cellHash` which
all take a single integer argument and clear a cell, test if clear or
produce the hash of the key stored at that index in `.data[]`.
Then we update the 3 call sites (`Table`, `CountTable`, `SharedTable`) of
`delImpl`/`delImplIdx` by defining define those arguments just before the
first invocation as non-exported templates.
Because `CountTable` does not save hash() outputs as `.hcode`, it needs a
new tableimpl.nim:`delImplNoHCode` which simply in-lines the hash search
when no `.hcode` field is available for "prefix compare" acceleration.
It is conceivable this new template could be used by future variants, such
as one optimized for integer keys where `hash()` and `==` are fast and
`.hcode` is both wasted space & time (though a small change to interfaces
there for a sentinel key meaning "empty" is needed for maximum efficiency).
We also eliminate the old O(n) `proc remove(CountTable...)` in favor of
simply invoking the new `delImpl*` templates and take care to correctly
handle the case where `val` is either zero for non-existent keys in `inc`
or evolves to zero over time in `[]=` or `inc`.
The only user-visible changes from the +-42 delta here are speed, iteration
order post deletes, and relaxing the `Positive` constraint on `val` in
`proc inc` again, as indicated in the `changelog.md` entry.
* fix#11352 strutil.insertSep handle negtive number
* test for #11352
* optimize
* not parts string var
* Update lib/pure/strutils.nim
Thanks!
Co-authored-by: alaviss <leorize+oss@disroot.org>
* need to be countdown
Co-authored-by: alaviss <leorize+oss@disroot.org>
* fix#14698 nkRecWhen caused internalAssert in semConstructFields when generic type not mentioned in fields
* address comment
* Update compiler/semtypinst.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* azure-pipelines: cache csources to speed up build
Building csources takes about 2-4 mins, and since it hasn't changed for
a long time, employ some caching to cut the time spent.
* azure-pipelines: remove ppa avoidance configs
Testing shows that there aren't any difference between having this and
not having it, so removing this to simplify the code.
* readLine: Unicode support for Windows console
When input is read from the Windows console, input encoding is UTF16. This is translated internally to UTF8.
* readLine: Remove recursive imports
* readLine: Fix issues with --gc:arc
**--gc:arc** defines **nimv2**. This changes the definition of **WideCStringObj**.
Also an empty string should be returned in case of EOF.
Fixes#15003.
This is a serious bug which occurs when data cannot be read/sent
immediately and there are a bunch of other read/write events
pending. What happens is that the new events are dropped which
results in the case of the reported bug resulted in some data not
being sent (!).
* Fix#14906 by wrapping outputStream with PipeOutStream
* Fix compile error when ./build_all.sh
* Use PipeOutStream on posix
* Fix compile error when build_all.sh
* Use ptr UncheckedArray
* Replace copyRefObj
* Remove tmp buffer from posPeekData
* Add more tests for outputStream
* Add comments about PipeOutStream.buffer
* Fix bug in posReadLine
* Move implementation of newPipeOutStream to streamwrapper module
* WIP: an optimizer for ARC
* do not optimize away destructors in 'finally' if unstructured control flow is involved
* optimized the optimizer
* minor code cleanup
* first steps to .cursor inference
* cursor inference: big steps to a working solution
* baby steps
* better .cursor inference
* new feature: expandArc for easy inspection of the AST after ARC transformations
* added topt_cursor test
* adapt tests
* cleanups, make tests green
* optimize common traversal patterns
* moved test case
* fixes .cursor inference so that npeg compiles once again
* cursor inference: more bugfixes
Co-authored-by: Clyybber <darkmine956@gmail.com>
* fix#14475; make unittest work with -d:nodejs
* fixup
* fixup
* disable inim, delaunay which failed after unittest.require got fixed
* re-enable tests that have been fixed
* Crude VM profiler
* Added --profileVM flag, refactoring
* fixed FileLine hash
* Use TLineInfo instead of own FileLine, updated formatting
* Refactoring, moved PStackFrame to vmdefs for cleaner data structure
* Moved vmprofiler to separate file
* Simplified TLineInfo hash, use toFileLineCol for output
* Hash
* Moved profile data into Config, dump only once at end of run
* Changed profile output header to show '#instr' instead of 'count'
* Do not accumulate instrcount for non-top frames
Co-authored-by: Ico Doornekamp <git@zevv.nl>
* add debug format string
* remove try except
* add changelog
* add docs and more tests
* Update lib/pure/strformat.nim
Co-authored-by: Juan Carlos <juancarlospaco@gmail.com>
* minor
* add testcase
Co-authored-by: Juan Carlos <juancarlospaco@gmail.com>
* add debug format string
* remove try except
* add changelog
* add docs and more tests
* Update lib/pure/strformat.nim
Co-authored-by: Juan Carlos <juancarlospaco@gmail.com>
* minor
Co-authored-by: Juan Carlos <juancarlospaco@gmail.com>
* remove a condition that table size must be passed as power of 2
* remove power-of-2 condition from sets and sharedtables
* remove power-of-2 condition from deques
* use 'correctSize' for both branches
* prettify changelog.md and fix typos
* add a changelog entry
* fix double-call of 'right-size'
* fix the same thing in sets.nim
* introduce a new internal proc `slotsNeeded`
Deprecate the public proc `rightSize`, which is not needed anymore.
Now it is an identity function, allowing the old code to work
correctly and without extra allocations.
The `smallest` and `largest` procs for `CountTable` returned a tuple
with named fields, but the same procs for `CountTableRef` returned an
anonymous tuple.
This commit makes those `CountTableRef` procs more consistent, and adds
a test.
Fixes: #14918
* typetraits: add support for nnkTypeOfExpr
* typetraits: don't wrap typedesc symbols in StaticParam
* typetraits: add nested generics support to genericParams
* typetraits: make genericParams understand array[I, T] whackiness
Also moved tests to ttypetraits
* typetraits: clarify comment on genericParams
* Fix asyncdispatch drain behavior (#14820)
* Changed test to use asyncCheck instead of discard after code review (#14820)
* Added some debug statements to help understand what is happening in Azure.
* Removed debug statements and increased timeouts by 1 order of magnitude to account for slow Azure VMs
Co-authored-by: Ray Imber <ray@crankuptheamps.com>
* koch: add --localdocs to allow building only local docs
This flag also make koch doc use the passed arguments when building
the offline docs.
This is useful when generating nightlies as we would want to use
--doccmd:skip and also skipping a pass of docgen speed things up
drastically (for non-native targets).
This flag superseded the undocumented --docslocal.
* kochdocs: filter google analytics code from the arg list instead
This commit introduce a small PEG expression to filter out the google
analytics code before building local docs when --localdocs is not
specified. This lets us keep any arguments unrelated to google analytics
when building local docs, useful for use with --doccmd:skip
* Enable fidget in important_packages.
Fidget now works with `nimble test` and there is a CI: https://github.com/treeform/fidget/commits/master
* Add libx11-dev to make fidget compile.
* try libxcursor-dev
* try xorg-dev
* I don't care about observable stores
* enforce explicit initializations
* cleaner code for the stdlib
* stdlib: use explicit initializations
* make tests green
* algorithm.nim: set result explicitly
* remove out parameters and bring the PR into a mergable state
* updated the changelog
This is a temporary remedy for time_t transition to 64 bit on newer
Linux libc (musl >= 1.2.0, glibc >= 2.32).
In the future we might want to move away from libc, or figure out a way
to reliably detect the real size of C types at compile time, both of
which are difficult.
This commit indents the contents of a `code-block` in `httpclient.nim`
so that it displays correctly. The bug was introduced by 42a64245f8.
I did a quick search for other `code-block`s that are broken in the same
way, but the only other one I found (in `pegs.nim`) is not included in
the generated documentation.
Fix an issue reported on IRC: using encodings with --dynlibOverrideAll
result in duplicated iconv definitions, causing compile errors.
This commit remove the `var` wrapper of iconv and go all out on
pointers, as it should due to how the API accepts nil. Also corrected
the API to resemble iconv(3p).
* Clarify the use of the backwards index operator (^N) in tut1
For consistency:
- Do `[a .. ^b]` (notice spaces on both sides of `..`)
- Do `[c ..< d]` (notice spaces on both sides of `..<`)
Fixes https://github.com/nim-lang/Nim/issues/14671.
* tut1: Add a note that ^ template calls can be saved to consts
* fix#14142: no more clash with: import os + use of existsDir/dirExists/existsFile/fileExists/findExe in config.nims
* remove a comment
* Revert "fixes the regression #12860 caused; hotfix"
This reverts commit 3d2459bdc0.
* Revert "Undefine `paramCount` & `paramStr` in nimscript.nim for *.nims (#12860)"
This reverts commit d38853c504.
* noNimScript => noWeirdTarget + noNimJs
* Unwind just the "pseudorandom probing" (whole hash-code-keyed variable
stride double hashing) part of recent sets & tables changes (which has
still been causing bugs over a month later (e.g., two days ago
https://github.com/nim-lang/Nim/issues/13794) as well as still having
several "figure this out" implementation question comments in them (see
just diffs of this PR).
This topic has been discussed in many places:
https://github.com/nim-lang/Nim/issues/13393https://github.com/nim-lang/Nim/pull/13418https://github.com/nim-lang/Nim/pull/13440https://github.com/nim-lang/Nim/issues/13794
Alternative/non-mandatory stronger integer hashes (or vice-versa opt-in
identity hashes) are a better solution that is more general (no illusion
of one hard-coded sequence solving all problems) while retaining the
virtues of linear probing such as cache obliviousness and age-less tables
under delete-heavy workloads (still untested after a month of this change).
The only real solution for truly adversarial keys is a hash keyed off of
data unobservable to attackers. That all fits better with a few families
of user-pluggable/define-switchable hashes which can be provided in a
separate PR more about `hashes.nim`.
This PR carefully preserves the better (but still hard coded!) probing
of the `intsets` and other recent fixes like `move` annotations, hash
order invariant tests, `intsets.missingOrExcl` fixing, and the move of
`rightSize` into `hashcommon.nim`.
* Fix `data.len` -> `dataLen` problem.
* Add neglected API call `find` to heapqueue.
* Add a changelog.md entry, `since` annotation and rename parameter to be
`heap` like all the other procs for consistency.
* Add missing import.
* json custom serialization; application for strtabs
* serialize using nesting
* make toJson more feature complete
* add since
* Revert "Improve JSON serialisation of strtabs (#14549)"
This reverts commit 7cb4ef26ad.
* better approach via mixin
* toJson, jsonTo
* fix test
* address comments
* move to jsonutils
* doc
* cleanups
* also test for js
* also test for vm
Sometimes the analysis might get funky and decide that the if-expression
below is not an if-expression. Details of how this can happen is largely
unknown, but it's easy to prevent so we will just go forward with that.
Fix#14591
This procedure is not no-op for older LibreSSL, and the ABI is kept for
newer versions, so there's no harm in enabling it unconditionally for
all LibreSSL versions.
Previously, the `net` module use the blanket "ALL" as the default cipher
list. This list may contain security ciphers that are weak and/or outdated
according to the current standard.
This commit introduces a new module `ssl_config` that contains the
latest OpenSSL configurations as recommended by Mozilla OpSec, and
make the `net` module use the cipher list targeting `intermediate`
compatibility level as the default.
Per SSL_get_error(3):
The current thread's error queue must be empty before the TLS/SSL I/O
operation is attempted, or SSL_get_error() will not work reliably.
There has been records of not clearing the error queue causing weird SSL
errors when there shouldn't be any, see:
https://github.com/openssl/openssl/issues/11889
The error we're looking for is "certificate verify failed". The routine
that reports this will be different between openssl versions, so it
makes no sense to track the routine name as well.
Closing a socket clears the error queue of the entire thread, which
seems to be a bit too invasive.
Also I don't find any reason in the PR that added this.
* tfdleak_multiple: introduce stress tester for tfdleak
Imported from #14548 and tweaked for consumption by testament.
This test seems to be really good at bringing out the flakyness of
tfdleadk.
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
* tfdleak: increase accuracy of the test on Windows
This commit implements a new testing strategy for Windows:
1. We duplicate the handle that will be tested and enable inheritance.
This duplicate will serve as a reference handle.
2. In addition to checking whether the handle is valid, we also verify
whether the handle is the same as the reference. This gives us
complete certainty on whether the handle in question is inherited
from the parent.
A side effect is that this uses Windows 10+ APIs. But since
this is just for the test, we don't have to be picky about it.
Ideally we would want to do something like this for other POSIX-based
system, but most of them lack a facility to do this, and as of writing
there isn't any false positive for them, so we won't need the additional
checks.
MemFile.fHandle will also no longer be tested, as this handle defaults
to being invalid.
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
* SuccessX `out` now works with --compileOnly and jsonscript; fix bugs in jsonscript
* several bug fixes; eg: `nim doc lib/system/io` now is sane
* dummy edit to force docs CI
* update doc CI filter to include the files mostly likely to require doc rebuild
* remove code duplication in ./config/nimdoc.cfg; show link to compiler docs, various fixes
* walkDirRecFilter, factor nativeToUnixPath workaround
* glob for getRst2html
* docslocal: 40s to build all docs
* revert code dedup in github actions which did not work alas...
* fixups
When --compileOnly is on, extraCmds are not added to JsonBuildInstructions.
```
$ echo 'echo 123'>test.nim
$ nim c --debuginfo --nimcache:cache test
$ ls
cache test test.dSYM test.nim
$ tail -n3 cache/test.json
"extraCmds": ["dsymutil /Users/khronos31/src/tmp/test"],
"stdinInput": false
}
```
```
$ echo 'echo 123'>test.nim
$ nim c --debuginfo --nimcache:cache --compileOnly test
$ nim jsonscript --nimcache:cache test
$ ls
cache test test.nim
$ tail -n3 cache/test.json
"extraCmds": [],
"stdinInput": false
}
```
Removed phrase "However, this is no real restriction because
Nim's syntax is flexible enough anyway." from the manual - I find it
very subjective, and I sometimes *do* find myself restricted by Nim's
syntax when writing DSLs
* Change `UnpackError` with `UnpackDefect`
The deprecation warning for `UnpackError` exception raised by some
`inline` procedures in the Nim standard library propagates to the user
code. If the user code has a requirement for building without warnings
this is a problem for the successful execution of the tests. In order
to resolve this, all occurrences of `UnpackError` in the Nim code base
are changed to `UnpackDefect`. Only the type alias is retained to not
break other people's user code since `UnpackError` is exported type.
* Remove the catching of `UnpackDefect`
Defect exceptions should not be cached, because they indicate problem in
the API usage. The code in `nimblesocket.nim` is rewritten to first
check whether there is a value set into the `knownDomain` variable from
the `Option` type before usage.
* add bindParams to db_sqlite
* no need typeinfo
* remove extro spaces
* reduce bindParams to two branches,raise DbError
* Update lib/impure/db_sqlite.nim
* change bindParams to macro,accept varargs[untyped] as params
* change bind blob val to openArray[byte]
* remove unused err type
* explicitly using i32 param
* using import std/private/since
* SQLITE_OK to right hand
* bindParam val int using bindParam overload
* copy data by default
* change exec to template
* remove SqlPrepared procs unused varargs
* fix setupquery for prepared,reset first for exec prepared,add bindNull for literal nil
Co-authored-by: alaviss <leorize+oss@disroot.org>
* add insert,tryInsert unify for postgres that need pk name
* add ReadDbEffect to new procs
* add .since and changelog
* change since to 1.3
* Update lib/impure/db_postgres.nim
Co-authored-by: bung87 <crc32@qq.com>
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
Co-authored-by: alaviss <leorize+oss@disroot.org>
* use check
* trunner now works with cpp
* cleanup: move compiler/unittest_light => stdtest/unittest_light
* fix tests/readme.md
* remove deadcode references to rodfiles
* fix for windows
* Improve nimeval, changes some defaults
This improves nimeval to make it easier to use NimScript as an embedded
scripting languages. It does change some of the defaults, so in case
anything used the old version and depended on the old behaviour these
would have to be changed.
* Remove dependency on nimhcr for nimscript
* Allow let to not have value when using importc
This allows a let statement with the `{.importc.}` pragma to not be
initialised with a value. This allows us to declare C constants as Nim
lets without putting the value in the Nim code (which can lead to
errors, and requires us to go looking for the value). Fixes#14253
* Proper fix and documentation + changelog entry
* Improve testcase with one from timotheecour
* Add test to verify it working with macros
`if expressions` are similar to ternary operators in other languages.
In order to make this easier to find in the manual, I've added a
sentence about it.
* do not track 'raise Defect' in the .raises: [] clause anymore
* --panics:on maps 'raise Defect' to an unrecoverable fatal error
* make tests green again
* update the documentation too
* `nim doc --backend:js|cpp...`
`nim doc --doccmd:'-d:foo --threads:on'`
`nim r --backend:cpp...` (implies --run --usenimcache)
* --usenimcache works with all targets
* --docCmd:skip now skips compiling snippets; 50X speedup for doc/manual.rst
* * fix regression: -d:nimHasLibFFI was not being tested anymore,
in part because testament was silently treating some errors as easy to overlook messages
* turned that message into an error
* -d:nimHasLibFFI is now being tested with nim cpp
* use correct signatures for importc procs
* workaround for openbsd to unblock ctffi testing
* added bit operations based on bit slices, clarified documentation, made non-mutating versions of mask ops
* Added since annotations, some runnable examples
* Added mask()/masked() functions, changed internal workings of mask ops to use new bit* funcs
* Changelog updated for new bitops improvements
* Reorganization, added runnable examples
* Documentation adjustments
* Add incltrl for since annotation
* Fix masked() impl
* Fix mask() return type
* Don't call toUnsigned on already unsigned types
* Remove improper `var T` for flipMasked()
* Fix return types for flipMasked()
* Slight syntactic cleanup for *masked ops
* Added tests for bitslice operations, new mask() operation, non-mutating mask ops
* Fix setmasked() var T issue
* More comprehensive tests
* Fix runnable example for bitsliced()
* Fix runnable example for mask()
* Add posix_memalign()
* Add linux-specific open() flags
O_TMPFILE: since Linux 3.11
O_PATH: since Linux 2.6.39
O_NOATIME: since Linux 2.6.8
O_DIRECT: since Linux 2.4.10
* Fix Stat type
* Fix POSIX AF_INET* const generation
* fix https://github.com/timotheecour/Nim/issues/152 `^[[0m` is inserted in stderr for `echo code | nim c -`
* resetAttributes not even needed, already handled in styledWriteLine
* simplify tests in tests/trunner.nim thanks to this fix
* added high level sendTo and recvFrom to std/asyncnet; tests were also added.
* add .since annotation, a changelog entry and fixed to standard library style guide.
* fixes net.recvFrom to work correctly with IPv6
* raise if domain is not AF_INET or AF_INET6
* renamed template to adaptRecvFromToDomain()
* added high level sendTo and recvFrom to std/asyncnet; tests were also added.
* add .since annotation, a changelog entry and fixed to standard library style guide.
* Improved asserts msgs and added notes for use with UDP sockets
* pointers removed in parameters and fixes
* added .since annotation
* minor fixes
* many bugfixes for js
fixes#12672, fixes#14153, closes#14123, closes#11331, fixes#11783, fixes#13966, fixes#14087, fixes#14117, closes#12256.
mostly fixes the fact that it was allowed to assign to newly created temp variables. additionally attempts to get rid of null initialized seqs/strings (though they might pop up here and there); this simplifies a lot of things and makes code size smaller. even if null seqs/strings pop up here and there it's still better than all those bugs existing.
* formatting fixes
* CI fixes
* more CI fixes
* Error -> Defect for defects
The distinction between Error and Defect is subjective,
context-dependent and somewhat arbitrary, so when looking at an
exception, it's hard to guess what it is - this happens often when
looking at a `raises` list _without_ opening the corresponding
definition and digging through layers of inheritance.
With the help of a little consistency in naming, it's at least possible
to start disentangling the two error types and the standard lib can set
a good example here.
* fix https://github.com/timotheecour/Nim/issues/133; $(a: float) works in nim js like in other backends
* fix tests
* fix test for windows that prints 1.1e17 differently than other OS
* cycle collector: new implementation
* cycle collector: make self-adaptive based on its previous effectiveness
* cycle collector: added Lins's jump stack to improve traversal from 3*N to 2*N
* cycle collector: make tests green
* API extensions and bugfixes
* code cleanup and use --gc:orc for tasyncawait
* added high level sendTo and recvFrom to std/asyncnet; tests were also added.
* add .since annotation, a changelog entry and fixed to standard library style guide.
* Improved asserts msgs and added notes for use with UDP sockets
* -d:checkabi obsolete (ABI check now enforced); add `addTypeHeader` helper
* cleanups
* import sizeof at CT for {.completeType.}
* address comments; revert default enabling of -d:checkAbi for now
* mimportc_size_check.nim => msizeof5.nim; merge mabi_check.nim into msizeof5.nim; refactor
* all pragmas in errmsgs should be written: '.importc' (un-ambiguous and less verbose than {.importc.})
* Added LTO in nim.cfg, added /link in extccomp.nim and other fixes
* Fix line endings
* Fix line endings, for real this time. Almost certainly. Like, 95% certain.
* Removed /MD from extccom.nim VCC comiler
* fix#14064 xmltree should allow create text node with raw text(non-escaped) eg. html style element's text
* change xnRawText to VerbatimText,newRawText to newVerbatimText ,add since anotation
* change changelog_1_2_0.md latest date
* move change log
Co-authored-by: bung87 <crc32@qq.com>
* Make debugSend/debugRecv procs public. Fixes#12189
* Make checkReply proc public. Part of #12189
* Add doc comments for debugSend,debugRecv and checkReply
* Add the ability to pass title case headers to an HTTP server
* Remove unnecessary type spec of titleCase
* Replace convert member proc by isTitleCase
Co-authored-by: wonderix <wonderix@googlemail.com>
* base `parseEnum` on a case statement, fixes#14030
* apply simplifactions / clean up, remove `norm` node, use strVal
* export `normalize` in json.nim
* cmp using nimIdentNormalize, error at CT if ambiguous enum found
`nimIdentNormalize` provided by @cooldome.
We track all names of the branches we have created so far and error if
a duplicate is found.
Dummy change to make github react...
* fix docstring of `nimIdentNormalize`
* make `typ` arg `typedesc`, add lineinfo, call norm. only once
Path with spaces should be added as is, quoting them makes utilities
treat the quotes as part of the path. This makes `nim` unable to be used
from the command line even if it appears to be added to user's Path
environment variable.
Even more confusing, Windows 10's PATH editor shows the path without any
quotes, you only see them when you use "Edit text". Took me a good 15
minutes to figure out why couldn't I run `nim` despite it being in Path.
* Support detection in docker container.
* Get only ID information in os-release.
* Add test to distros module.
* Fix Linux OS detection in Windows.
* Fix OS detection for FreeBSD and OpenBSD.
* * relativePath(foo) now works
* relativePath(rel, abs) and relativePath(abs, rel) now work (fixes#13222)
* relativePath, absolutePath, getCurrentDir now available in more targets (eg: vm, nodejs etc)
* fix bug: isAbsolutePath now works with -d:js; add tests
* workaround https://github.com/nim-lang/Nim/issues/13469
* remove `relativePath(path)` overload for now
* add back changelog after rebase
* Add deques.peekFirst/Last(var Deque[T]) -> var T
* Add changelog entry for deques.peekFirst/Last var T overloads
* Add since annotation to peekFirst/peekLast
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Working on OpenBSD CI
* Condense steps into 2 steps to make output easier to follow.
* Move up one directory after csources build.
* Remove FreeBSD build manifest and add OpenBSD test ignores for coroutines and hot code reloading.
* If runCI fails, run the test results script.
* Add email trigger for build failure
* Remove .git from repository URL
* Disable SFML test on OpenBSD
* Disable tgetaddrinfo on OpenBSD as only UDP and TCP protocols are supported.
* Remove getFilePermissions as it causes CI test failures with NimScript.
* Set clang as cc in nim.cfg and use gmake to build csources.
* Add getCurrentDir to nimscript.
* Remove duplicate getCurrentDir and check for not weirdTarget.
* Add CI badge for OpenBSD.
* Disable tests which allocate lots of memory for OpenBSD.
* Use `CORO_BACKEND_SETJMP` on OpenBSD rather than ucontext.
* Simplify building of koch
* Disable t8657 on OpenBSD. See issue #13760.
* Fix#12142 - tarray_of_channels fails on OpenBSD
* Disable thhtpclient_ssl and tosprocterminate on OpenBSD. These tests can be enabled at a later date after fixing them.
* Install libffi.
* Set path to libc for openbsd.
* Disable tevalffi for now.
* Remove tevalffi.nim.
* Use ncpuonline sysctl rather than ncpu.
* Disable tacceptcloserace and tasynchttpserver on OpenBSD.
* Enable tacceptcloserace and tasynchttpserver.
* Fix#13775 as suggested by @alaviss - use /bin/cat on OpenBSD rather than /bin/sh.
* Enable test on OpenBSD.
* Disable tflowvar on OpenBSD.
* fix mapIt issues #12625 & #12639:
1. fallback to call `map` when the result of `op` is a closure;
2. use `items(s)` in the for loop.
* fix test errors.
* add comments and InType is moved.
* fix ident.
As the async httpclient is almost certainly the first async example beginners will want to try, we OWE it to them to give them a real example.
Example repeated here for clarity:
```nim
import asyncdispatch, httpclient
proc asyncProc(): Future[string] {.async.} =
var client = newAsyncHttpClient()
return await client.getContent("http://example.com")
echo waitFor asyncProc()
```
This is my first Nim contribution, please let me know if the code is right. (it runs on my machine, but may not be the best example)
* io: make file descriptors non-inheritable by default
This prevents file descriptors/handles leakage to child processes
that might cause issues like running out of file descriptors, or potential
security issues like leaking a file descriptor to a restricted file.
While this breaks backward compatibility, I'm rather certain that not
many programs (if any) actually make use of this implementation detail.
A new API `setInheritable` is provided for the few that actually want to
use this functionality.
* io: disable inheritance at file creation time for supported platforms
Some platforms provide extension to fopen-family of functions to allow
for disabling descriptor inheritance atomically during File creation.
This guards against possible leaks when a child process is spawned
before we managed to disable the file descriptor inheritance
(ie. in a multi-threaded program).
* net, nativesockets: make sockets non inheritable by default
With this commit, sockets will no longer leak to child processes when
you don't want it to. Should solves a lot of "address in use" that might
occur when your server has just restarted.
All APIs that create sockets in these modules now expose a `inheritable`
flag that allow users to toggle inheritance for the resulting sockets.
An implementation of `setInheritance()` is also provided for SocketHandle.
While atomically disabling inheritance at creation time is supported on
Windows, it's only implemented by native winsock2, which is too much for
now. This support can be implemented in a future patch.
* posix: add F_DUPFD_CLOEXEC
This command duplicates file descriptor with close-on-exec flag set.
Defined in POSIX.1-2008.
* ioselectors_kqueue: don't leak file descriptors
File descriptors internally used by ioselectors on BSD/OSX are now
shielded from leakage.
* posix: add O_CLOEXEC
This flag allows file descriptors to be open() with close-on-exec flag
set atomically.
This flag is specified in POSIX.1-2008
* tfdleak: test for selectors leakage
Also simplified the test by using handle-type agnostic APIs to test for
validity.
* ioselectors_epoll: mark all fd created close-on-exec
File descriptors from ioselectors should no longer leaks on Linux.
* tfdleak: don't check for selector leakage on Windows
The getFd proc for ioselectors_select returns a hardcoded -1
* io: add NoInheritFlag at compile time
* io: add support for ioctl-based close-on-exec
This allows for the flag to be set/unset in one syscall. While the
performance gains might be negliable, we have one less failure point
to deal with.
* tfdleak: add a test for setInheritable
* stdlib: add nimInheritHandles to restore old behaviors
* memfiles: make file handle not inheritable by default for posix
* io: setInheritable now operates on OS file handle
On Windows, the native handle is the only thing that's inheritable, thus
we can assume that users of this function will already have the handle
available to them. This also allows users to pass down file descriptors
from memfiles on Windows with ease, should that be desired.
With this, nativesockets.setInheritable can be made much simpler.
* changelog: clarify
* nativesockets: document setInheritable return value
* posix_utils: atomically disable fd inheritance for mkstemp
* Update code example to match new sdl2.nim syntax
Signed-off-by: Hieu Luu Danh <hieu@vivu.asia>
* Modify on recommendation of @alaviss
- Removed trailing whitespaces
- Detailed how to compile libnimhcr and libnimrtl
- Fixed some logic in example code
* Modify following recommendations of @alaviss
- Rewording so that it conforms to Windows/Linux/MacOS
Signed-off-by: Hieu Luu Danh <hieu@vivu.asia>
* Unwind just the "pseudorandom probing" (whole hash-code-keyed variable
stride double hashing) part of recent sets & tables changes (which has
still been causing bugs over a month later (e.g., two days ago
https://github.com/nim-lang/Nim/issues/13794) as well as still having
several "figure this out" implementation question comments in them (see
just diffs of this PR).
This topic has been discussed in many places:
https://github.com/nim-lang/Nim/issues/13393https://github.com/nim-lang/Nim/pull/13418https://github.com/nim-lang/Nim/pull/13440https://github.com/nim-lang/Nim/issues/13794
Alternative/non-mandatory stronger integer hashes (or vice-versa opt-in
identity hashes) are a better solution that is more general (no illusion
of one hard-coded sequence solving all problems) while retaining the
virtues of linear probing such as cache obliviousness and age-less tables
under delete-heavy workloads (still untested after a month of this change).
The only real solution for truly adversarial keys is a hash keyed off of
data unobservable to attackers. That all fits better with a few families
of user-pluggable/define-switchable hashes which can be provided in a
separate PR more about `hashes.nim`.
This PR carefully preserves the better (but still hard coded!) probing
of the `intsets` and other recent fixes like `move` annotations, hash
order invariant tests, `intsets.missingOrExcl` fixing, and the move of
`rightSize` into `hashcommon.nim`.
* Fix `data.len` -> `dataLen` problem.
* This is an alternate resolution to https://github.com/nim-lang/Nim/issues/13393
(which arguably could be resolved outside the stdlib).
Add version1 of Wang Yi's hash specialized to 8 byte integers. This gives
simple help to users having trouble with overly colliding hash(key)s. I.e.,
A) `import hashes; proc hash(x: myInt): Hash = hashWangYi1(int(x))`
in the instantiation context of a `HashSet` or `Table`
or
B) more globally, compile with `nim c -d:hashWangYi1`.
No hash can be all things to all use cases, but this one is A) vetted to
scramble well by the SMHasher test suite (a necessarily limited but far
more thorough test than prior proposals here), B) only a few ALU ops on
many common CPUs, and C) possesses an easy via "grade school multi-digit
multiplication" fall back for weaker deployment contexts.
Some people might want to stampede ahead unbridled, but my view is that a
good plan is to
A) include this in the stdlib for a release or three to let people try it
on various key sets nim-core could realistically never access/test
(maybe mentioning it in the changelog so people actually try it out),
B) have them report problems (if any),
C) if all seems good, make the stdlib more novice friendly by adding
`hashIdentity(x)=x` and changing the default `hash() = hashWangYi1`
with some `when defined` rearranging so users can `-d:hashIdentity`
if they want the old behavior back.
This plan is compatible with any number of competing integer hashes if
people want to add them. I would strongly recommend they all *at least*
pass the SMHasher suite since the idea here is to become more friendly to
novices who do not generally understand hashing failure modes.
* Re-organize to work around `when nimvm` limitations; Add some tests; Add
a changelog.md entry.
* Add less than 64-bit CPU when fork.
* Fix decl instead of call typo.
* First attempt at fixing range error on 32-bit platforms; Still do the
arithmetic in doubled up 64-bit, but truncate the hash to the lower
32-bits, but then still return `uint64` to be the same. So, type
correct but truncated hash value. Update `thashes.nim` as well.
* A second try at making 32-bit mode CI work.
* Use a more systematic identifier convention than Wang Yi's code.
* Fix test that was wrong for as long as `toHashSet` used `rightSize` (a
very long time, I think). `$a`/`$b` depend on iteration order which
varies with table range reduced hash order which varies with range for
some `hash()`. With 3 elements, 3!=6 is small and we've just gotten
lucky with past experimental `hash()` changes. An alternate fix here
would be to not stringify but use the HashSet operators, but it is not
clear that doesn't alter the "spirit" of the test.
* Fix another stringified test depending upon hash order.
* Oops - revert the string-keyed test.
* Fix another stringify test depending on hash order.
* Add a better than always zero `defined(js)` branch.
* It turns out to be easy to just work all in `BigInt` inside JS and thus
guarantee the same low order bits of output hashes (for `isSafeInteger`
input numbers). Since `hashWangYi1` output bits are equally random in
all their bits, this means that tables will be safely scrambled for table
sizes up to 2**32 or 4 gigaentries which is probably fine, as long as the
integer keys are all < 2**53 (also likely fine). (I'm unsure why the
infidelity with C/C++ back ends cut off is 32, not 53 bits.)
Since HashSet & Table only use the low order bits, a quick corollary of
this is that `$` on most int-keyed sets/tables will be the same in all
the various back ends which seems a nice-to-have trait.
* These string hash tests fail for me locally. Maybe this is what causes
the CI hang for testament pcat collections?
* Oops. That failure was from me manually patching string hash in hashes. Revert.
* Import more test improvements from https://github.com/nim-lang/Nim/pull/13410
* Fix bug where I swapped order when reverting the test. Ack.
* Oh, just accept either order like more and more hash tests.
* Iterate in the same order.
* `return` inside `emit` made us skip `popFrame` causing weird troubles.
* Oops - do Windows branch also.
* `nimV1hash` -> multiply-mnemonic, type-scoped `nimIntHash1` (mnemonic
resolutions are "1 == identity", 1 for Nim Version 1, 1 for
first/simplest/fastest in a series of possibilities. Should be very
easy to remember.)
* Re-organize `when nimvm` logic to be a strict `when`-`else`.
* Merge other changes.
* Lift constants to a common area.
* Fall back to identity hash when `BigInt` is unavailable.
* Increase timeout slightly (probably just real-time perturbation of CI
system performance).
* drnim: tiny progress
* refactoring complete
* drnim: prove .ensures annotations
* Moved code around to avoid code duplication
* drnim: first implementation of the 'old' property
* drnim: be precise about the assignment statement
* first implementation of --assumeUnique
* progress on forall/exists handling
* posix: add full Haiku support
This commit provides a posix_haiku derived from posix_other, with types
following Haiku's definition. This fixes cases where the compiler
generates type check for the wrong types (ie. checks where generated for
an int-derived type but it's actually implemented as an uint instead).
* tools/kochdocs: welcome posix_haiku to the blacklist
This fixes at least a couple of issues:
* Procs loaded from the DLL being used even when the pointer is nil.
* The actual issue (#13903) which appeared to cause stack corruption on
Android 7.1.1 with OpenSSL 1.1.1f. The change that fixed this was the
move to loading the procs in `sslSym`.
description:"Create a new bug report. Have you found an unexpected behavior? Use this form."
title:"Think about the title, twice."
labels:["unconfirmed"]
body:
- type:markdown
attributes:
value:|
- **Please provide a minimal code example that reproduces the Bug!** :bug:
Reports with a reproducible example and descriptive detailed information will likely receive fixes faster.
- type:textarea
id:description
attributes:
label:Description
description:|
Use DETAILED DESCRIPTIVE information about the problem.
Here, you go into more details about your Bug report. This section can be a few paragraphs long.
placeholder:Bug reports with reproducible code and detailed information will be fixed faster.
validations:
required:true
- type:textarea
id:nim-version
attributes:
label:Nim Version
description:Copy and paste the output of `nim -v` on the command line. For development versions, make sure to include the commit hash.
validations:
required:true
- type:textarea
id:current-logs
attributes:
label:Current Output
description:Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
placeholder:Bug reports with reproducible code and detailed information will be fixed faster.
render:text
- type:textarea
id:expected-logs
attributes:
label:Expected Output
description:Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
placeholder:Bug reports with reproducible code and detailed information will be fixed faster.
render:text
- type:textarea
id:possible-solution
attributes:
label:Possible Solution
description:Propose a possible solution.
validations:
required:false
- type:textarea
id:extra-info
attributes:
label:Additional Information
description:Any additional relevant information.
validations:
required:false
- type:markdown
attributes:
value:|
- Thanks for your contributions!, your Bug report will receive feedback from the community soon...
- Please check whether the problem still exists in the devel branch, see [rebuilding the compiler](https://nim-lang.github.io/Nim/intern.html#rebuilding-the-compiler).
- Consider writing a PR targetting devel branch after filing this, see [contributing](https://nim-lang.github.io/Nim/contributing.html).
- If it's a pre-existing compiler bug, see [Debugging the compiler](https://nim-lang.github.io/Nim/intern.html#debugging-the-compiler)
which should give more context on a compiler crash.
- If it's a regression, you can help us by identifying which version introduced the bug,
see [Bisecting for regressions](https://nim-lang.github.io/Nim/intern.html#bisecting-for-regressions),
or at least try known past releases (eg `choosenim 1.2.0`).
- [Please, consider a Donation for the Nim project.](https://nim-lang.org/donate.html)
- `strformat.fmt` and `strformat.&` support `specifier =`. `fmt"{expr=}"` now
expands to `fmt"expr={expr}"`.
- Deprecations: instead of `os.existsDir` use `dirExists`, instead of `os.existsFile` use `fileExists`.
- Added the `jsre` module, [Regular Expressions for the JavaScript target.](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions).
- Made `maxLines` argument `Positive` in `logging.newRollingFileLogger`,
because negative values will result in a new file being created for each logged
line which doesn't make sense.
- Changed `log` in `logging` to use proper log level for JavaScript,
e.g. `debug` uses `console.debug`, `info` uses `console.info`, `warn` uses `console.warn`, etc.
- Tables, HashSets, SharedTables and deques don't require anymore that the passed
initial size must be a power of two - this is done internally.
Proc `rightSize` for Tables and HashSets is deprecated, as it is not needed anymore.
`CountTable.inc` takes `val: int` again not `val: Positive`; i.e. it can "count down" again.
- Removed deprecated symbols from `macros` module, some of which were deprecated already in `0.15`.
- Removed `sugar.distinctBase`, deprecated since `0.19`. Use `typetraits.distinctBase`.
- `asyncdispatch.PDispatcher.handles` is exported so that an external low-level libraries can access it.
- `std/with`, `sugar.dup` now support object field assignment expressions:
```nim
import std/with
type Foo = object
x, y: int
var foo = Foo()
with foo:
x = 10
y = 20
echo foo
```
- Proc `math.round` is no longer deprecated. The advice to use `strformat` instead
cannot be applied to every use case. The limitations and the (lack of) reliability
of `round` are well documented.
- Added `getprotobyname` to `winlean`. Added `getProtoByname` to `nativesockets` which returns a protocol code
from the database that matches the protocol `name`.
- Added missing attributes and methods to `dom.Navigator` like `deviceMemory`, `onLine`, `vibrate()`, etc.
- Added `strutils.indentation` and `strutils.dedent` which enable indented string literals:
```nim
import strutils
echo dedent """
This
is
cool!
"""
```
- Added `initUri(isIpv6: bool)` to `uri` module, now `uri` supports parsing ipv6 hostname.
- Added `readLines(p: Process)` to `osproc`.
- Added the below `toX` procs for collections. The usage is similar to procs such as
`sets.toHashSet` and `tables.toTable`. Previously, it was necessary to create the
respective empty collection and add items manually.
* `critbits.toCritBitTree`, which creates a `CritBitTree` from an `openArray` of
items or an `openArray` of pairs.
* `deques.toDeque`, which creates a `Deque` from an `openArray`.
* `heapqueue.toHeapQueue`, which creates a `HeapQueue` from an `openArray`.
* `intsets.toIntSet`, which creates an `IntSet` from an `openArray`.
- Added `progressInterval` argument to `asyncftpclient.newAsyncFtpClient` to control the interval
at which progress callbacks are called.
- Added `os.copyFileToDir`.
## Language changes
- The `=destroy` hook no longer has to reset its target, as the compiler now automatically inserts
`wasMoved` calls where needed.
- The `=` hook is now called `=copy` for clarity. The old name `=` is still available so there
is no need to update your code. This change was backported to 1.2 too so you can use the
more readable `=copy` without loss of compatibility.
- In the newruntime it is now allowed to assign to the discriminator field
without restrictions as long as the case object doesn't have a custom destructor.
The discriminator value doesn't have to be a constant either. If you have a
custom destructor for a case object and you do want to freely assign discriminator
fields, it is recommended to refactor the object into 2 objects like this:
```nim
type
MyObj = object
case kind: bool
of true: y: ptr UncheckedArray[float]
of false: z: seq[int]
proc `=destroy`(x: MyObj) =
if x.kind and x.y != nil:
deallocShared(x.y)
```
Refactor into:
```nim
type
MySubObj = object
val: ptr UncheckedArray[float]
MyObj = object
case kind: bool
of true: y: MySubObj
of false: z: seq[int]
proc `=destroy`(x: MySubObj) =
if x.val != nil:
deallocShared(x.val)
```
- `getImpl` on enum type symbols now returns field syms instead of idents. This helps
with writing typed macros. The old behavior for backwards compatibility can be restored
with `--useVersion:1.0`.
- The typed AST for proc headers will now have the arguments be syms instead of idents.
This helps with writing typed macros. The old behaviour for backwards compatibility can
be restored with `--useVersion:1.0`.
- ``let`` statements can now be used without a value if declared with
- Added `jscore.debugger` to [call any available debugging functionality, such as breakpoints](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/debugger).
- Added `copyWithin` [for `seq` and `array` for JS targets](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/copyWithin).
- In `std/dom`, `Interval` is now a `ref object`, same as `Timeout`.
Definitions of `setTimeout`, `clearTimeout`, `setInterval`, `clearInterval` were updated.
- `--gc:orc` is now 10% faster than previously for common workloads.
If you have trouble with its changed behavior, compile with `-d:nimOldOrc`.
- The `--gc:orc` algorithm was refined so that custom container types can participate in the
cycle collection process. See the documentation of `=trace` for more details.
- On embedded devices `malloc` can now be used instead of `mmap` via `-d:nimAllocPagesViaMalloc`.
This is only supported for `--gc:orc` or `--gc:arc`.
Compatibility notes:
- `--newruntime` and `--refchecks` are deprecated,
use `--gc:arc`, `--gc:orc`, or `--gc:none` as appropriate instead.
## Docgen
- docgen: RST files can now use single backticks instead of double backticks and
correctly render in both `nim rst2html` (as before) as well as common tools rendering
RST directly (e.g. GitHub).
This is done by adding the `default-role:: code` directive inside the RST file
(which is now handled by `nim rst2html`).
- Source+Edit links now appear on top of every docgen'd page when
`nim doc --git.url:url ...` is given.
- Latex doc generation is revised: output `.tex` files should be compiled
by `xelatex` (not by `pdflatex` as before). Now default Latex settings
provide support for Unicode and better avoid margin overflows.
The minimum required version is TeXLive 2018 (or an equivalent MikTeX version).
- The RST parser now supports footnotes, citations, admonitions, and short style
references with symbols.
- The RST parser now supports Markdown table syntax.
Known limitations:
- cell alignment is not supported, i.e. alignment annotations in a delimiter
row (`:---`, `:--:`, `---:`) are ignored
- every table row must start with `|`, e.g. `| cell 1 | cell 2 |`.
- Implemented `doc2tex` compiler command which converts documentation in
`.nim` files to Latex.
- docgen now supports syntax highlighting for inline code.
- docgen now supports same-line doc comments:
```nim
func fn*(a: int): int = 42 ## Doc comment
```
- docgen now renders `deprecated` and other pragmas.
- `runnableExamples` now works with templates and nested templates.
- `runnableExamples: "-r:off"` now works for examples that should compile but not run.
- `runnableExamples` now renders code verbatim, and produces correct code in all cases.
- docgen now shows correct, canonical import paths in docs.
- docgen now shows all routines in sidebar, and the proc signature is now shown in sidebar.
## Effects and checks
- Significant improvement to error messages involving effect mismatches
- There is a new `cast` section `{.cast(uncheckedAssign).}: body` that disables some
compiler checks regarding `case objects`. This allows serialization libraries
to avoid ugly, non-portable solutions. See RFC
[#407](https://github.com/nim-lang/RFCs/issues/407) for more details.
Compatibility notes:
- Fixed effect tracking for borrowed procs (see [#18882](https://github.com/nim-lang/Nim/pull/18882)).
One consequence is that, under some circumstances, Nim could previously permit a procedure with side effects to be written with `func` - you may need to change some occurrences of `func` to `proc`.
To illustrate, Nim versions before 1.6.0 compile the below without error
```nim
proc print(s: string) =
echo s
type
MyString = distinct string
proc print(s: MyString) {.borrow.}
func foo(s: MyString) =
print(s)
```
but Nim 1.6.0 produces the error
```
Error: 'foo' can have side effects
```
similar to how we expect that
```nim
func print(s: string) =
echo s
```
produces
```
Error: 'print' can have side effects
```
## Tools
- Major improvements to `nimgrep`, see PR [#15612
](https://github.com/nim-lang/Nim/pull/15612).
- `fusion` is now un-bundled from Nim, `./koch fusion` will
install it via Nimble at a fixed hash.
- `testament`: added `nimoutFull: bool` spec to compare full output of compiler
instead of a subset; many bugfixes to testament.
## Misc/cleanups
- Deprecated `TaintedString` and `--taintmode`.
- Deprecated `--nilseqs` which is now a noop.
- Added `-d:nimStrictMode` in CI in several places to ensure code doesn't have
-`httpclient.contentLength` default to `-1` if the Content-Length header is not set in the response. It follows Apache HttpClient(Java), http(go) and .Net HttpWebResponse(C#) behavior. Previously it raised `ValueError`.
-`addr` is now available for all addressable locations,
`unsafeAddr` is now deprecated and an alias for `addr`.
- Certain definitions from the default `system` module have been moved to
the following new modules:
-`std/syncio`
-`std/assertions`
-`std/formatfloat`
-`std/objectdollar`
-`std/widestrs`
-`std/typedthreads`
-`std/sysatomics`
In the future, these definitions will be removed from the `system` module,
and their respective modules will have to be imported to use them.
Currently, to make these imports required, the `-d:nimPreviewSlimSystem` option
may be used.
- Enabling `-d:nimPreviewSlimSystem` also removes the following deprecated
symbols in the `system` module:
- Aliases with `Error` suffix to exception types that have a `Defect` suffix
(see [exceptions](https://nim-lang.github.io/Nim/exceptions.html)):
- `foo a = b` now means `foo(a = b)` rather than `foo(a) = b`. This is consistent
with the existing behavior of `foo a, b = c` meaning `foo(a, b = c)`.
This decision was made with the assumption that the old syntax was used rarely;
if your code used the old syntax, please be aware of this change.
- [Overloadable enums](https://nim-lang.github.io/Nim/manual.html#overloadable-enum-value-names) and Unicode Operators
are no longer experimental.
- Removed the `nimIncrSeqV3` define.
- `macros.getImpl` for `const` symbols now returns the full definition node
(as `nnkConstDef`) rather than the AST of the constant value.
- Lock levels are deprecated, now a noop.
- ORC is now the default memory management strategy. Use
`--mm:refc` for a transition period.
- `strictEffects` are no longer experimental.
Use `legacy:laxEffects` to keep backward compatibility.
- The `gorge`/`staticExec` calls will now return a descriptive message in the output
if the execution fails for whatever reason. To get back legacy behaviour use `-d:nimLegacyGorgeErrors`.
- Pointer to `cstring` conversion now triggers a `[PtrToCstringConv]` warning.
This warning will become an error in future versions! Use a `cast` operation
like `cast[cstring](x)` instead.
- `logging` will default to flushing all log level messages. To get the legacy behaviour of only flushing Error and Fatal messages, use `-d:nimV1LogFlushBehavior`.
- Redefining templates with the same signature was previously
allowed to support certain macro code. To do this explicitly, the
`{.redefine.}` pragma has been added. Note that this is only for templates.
Implicit redefinition of templates is now deprecated and will give an error in the future.
- Using an unnamed break in a block is deprecated. This warning will become an error in future versions! Use a named block with a named break instead.
- Several Standard libraries are moved to nimble packages, use `nimble` to install them:
- `std/punycode` => `punycode`
- `std/asyncftpclient` => `asyncftpclient`
- `std/smtp` => `smtp`
- `std/db_common` => `db_connector/db_common`
- `std/db_sqlite` => `db_connector/db_sqlite`
- `std/db_mysql` => `db_connector/db_mysql`
- `std/db_postgres` => `db_connector/db_postgres`
- `std/db_odbc` => `db_connector/db_odbc`
- Previously, calls like `foo(a, b): ...` or `foo(a, b) do: ...` where the final argument of
`foo` had type `proc ()` were assumed by the compiler to mean `foo(a, b, proc () = ...)`.
This behavior is now deprecated. Use `foo(a, b) do (): ...` or `foo(a, b, proc () = ...)` instead.
- If no exception or any exception deriving from Exception but not Defect or CatchableError given in except, a `warnBareExcept` warning will be triggered.
- The experimental strictFuncs feature now disallows a store to the heap via a `ref` or `ptr` indirection.
- Underscores (`_`) as routine parameters are now ignored and cannot be used in the routine body.
The following code now does not compile:
```nim
proc foo(_: int): int = _ + 1
echo foo(1)
```
Instead, the following code now compiles:
```nim
proc foo(_, _: int): int = 123
echo foo(1, 2)
```
- Underscores (`_`) as generic parameters are not supported and cannot be used.
Generics that use `_` as parameters will no longer compile requires you to replace `_` with something else:
```nim
proc foo[_](t: typedesc[_]): string = "BAR" # Can not compile
proc foo[T](t: typedesc[T]): string = "BAR" # Can compile
```
- - Added the `--legacy:verboseTypeMismatch` switch to get legacy type mismatch error messages.
## Standard library additions and changes
[//]: # "Changes:"
- OpenSSL 3 is now supported.
- `macros.parseExpr` and `macros.parseStmt` now accept an optional
filename argument for more informative errors.
- Module `colors` expanded with missing colors from the CSS color standard.
`colPaleVioletRed` and `colMediumPurple` have also been changed to match the CSS color standard.
- Fixed `lists.SinglyLinkedList` being broken after removing the last node ([#19353](https://github.com/nim-lang/Nim/pull/19353)).
- The `md5` module now works at compile time and in JavaScript.
- Changed `mimedb` to use an `OrderedTable` instead of `OrderedTableRef` to support `const` tables.
- `strutils.find` now uses and defaults to `last = -1` for whole string searches,
making limiting it to just the first char (`last = 0`) valid.
- `random.rand` now works with `Ordinal`s.
- Undeprecated `os.isvalidfilename`.
- `std/oids` now uses `int64` to store time internally (before it was int32).
- `std/uri.Uri` dollar `$` improved, precalculates the `string` result length from the `Uri`.
- `std/uri.Uri.isIpv6` is now exported.
- `std/logging.ConsoleLogger` and `FileLogger` now have a `flushThreshold` attribute to set what log message levels are automatically flushed. For Nim v1 use `-d:nimFlushAllLogs` to automatically flush all message levels. Flushing all logs is the default behavior for Nim v2.
- `std/net.IpAddress` dollar `$` improved, uses a fixed capacity for the `string` result based from the `IpAddressFamily`.
- `std/jsfetch.newFetchOptions` now has default values for all parameters
- `std/jsformdata` now accepts `Blob` data type.
- `std/sharedlist` and `std/sharedtables` are now deprecated, see RFC [#433](https://github.com/nim-lang/RFCs/issues/433).
- New compile flag (`-d:nimNoGetRandom`) when building `std/sysrand` to remove dependency on linux `getrandom` syscall.
This compile flag only affects linux builds and is necessary if either compiling on a linux kernel version < 3.17, or if code built will be executing on kernel < 3.17.
On linux kernels < 3.17 (such as kernel 3.10 in RHEL7 and CentOS7), the `getrandom` syscall was not yet introduced. Without this, the `std/sysrand` module will not build properly, and if code is built on a kernel >= 3.17 without the flag, any usage of the `std/sysrand` module will fail to execute on a kernel < 3.17 (since it attempts to perform a syscall to `getrandom`, which isn't present in the current kernel). A compile flag has been added to force the `std/sysrand` module to use /dev/urandom (available since linux kernel 1.3.30), rather than the `getrandom` syscall. This allows for use of a cryptographically secure PRNG, regardless of kernel support for the `getrandom` syscall.
When building for RHEL7/CentOS7 for example, the entire build process for nim from a source package would then be:
```sh
$ yum install devtoolset-8 # Install GCC version 8 vs the standard 4.8.5 on RHEL7/CentOS7. Alternatively use -d:nimEmulateOverflowChecks. See issue #13692 for details
$ scl enable devtoolset-8 bash # Run bash shell with default toolchain of gcc 8
$ sh build.sh # per unix install instructions
$ bin/nim c koch # per unix install instructions
$ ./koch boot -d:release # per unix install instructions
$ ./koch tools -d:nimNoGetRandom # pass the nimNoGetRandom flag to compile std/sysrand without support for getrandom syscall
```
This is necessary to pass when building nim on kernel versions < 3.17 in particular to avoid an error of "SYS_getrandom undeclared" during the build process for stdlib (sysrand in particular).
[//]: # "Additions:"
- Added ISO 8601 week date utilities in `times`:
- Added `IsoWeekRange`, a range type for weeks in a week-based year.
- Added `IsoYear`, a distinct type for a week-based year in contrast to a regular year.
- Added a `initDateTime` overload to create a datetime from an ISO week date.
- Added `getIsoWeekAndYear` to get an ISO week number and week-based year from a datetime.
- Added `getIsoWeeksInYear` to return the number of weeks in a week-based year.
- Added new modules which were part of `std/os`:
- Added `std/oserrors` for OS error reporting. Added `std/envvars` for environment variables handling.
- Added `std/paths`, `std/dirs`, `std/files`, `std/symlinks` and `std/appdirs`.
- Added `std/cmdline` for reading command line parameters.
- Added `sep` parameter in `std/uri` to specify the query separator.
- Added bindings to [`Array.shift`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift)
and [`queueMicrotask`](https://developer.mozilla.org/en-US/docs/Web/API/queueMicrotask)
in `jscore` for JavaScript targets.
- Added `UppercaseLetters`, `LowercaseLetters`, `PunctuationChars`, `PrintableChars` sets to `std/strutils`.
- Added `complex.sgn` for obtaining the phase of complex numbers.
- Added `capacity` for `string` and `seq` to return the current capacity, see https://github.com/nim-lang/RFCs/issues/460
- Added `openArray[char]` overloads for `std/parseutils` allowing more code reuse.
- Added `openArray[char]` overloads for `std/unicode` allowing more code reuse.
- Added `safe` parameter to `base64.encodeMime`.
[//]: # "Deprecations:"
- Deprecated `selfExe` for Nimscript.
- Deprecated `std/sums`.
- Deprecated `std/base64.encode` for collections of arbitrary integer element type.
Now only `byte` and `char` are supported.
[//]: # "Removals:"
- Removed deprecated module `parseopt2`.
- Removed deprecated module `sharedstrings`.
- Removed deprecated module `dom_extensions`.
- Removed deprecated module `LockFreeHash`.
- Removed deprecated module `events`.
- Removed deprecated `oids.oidToString`.
- Removed define `nimExperimentalAsyncjsThen` for `std/asyncjs.then` and `std/jsfetch`.
- Removed deprecated `jsre.test` and `jsre.toString`.
- Removed deprecated `math.c_frexp`.
- Removed deprecated `` httpcore.`==` ``.
- Removed deprecated `std/posix.CMSG_SPACE` and `std/posix.CMSG_LEN` that takes wrong argument types.
- Removed deprecated `osproc.poDemon`, symbol with typo.
- Removed deprecated `tables.rightSize`.
- Removed deprecated `posix.CLONE_STOPPED`.
## Language changes
- [Tag tracking](https://nim-lang.github.io/Nim/manual.html#effect-system-tag-tracking) supports the definition of forbidden tags by the `.forbids` pragma
which can be used to disable certain effects in proc types.
- [Case statement macros](https://nim-lang.github.io/Nim/manual.html#macros-case-statement-macros) are no longer experimental,
meaning you no longer need to enable the experimental switch `caseStmtMacros` to use them.
- Full command syntax and block arguments i.e. `foo a, b: c` are now allowed
for the right-hand side of type definitions in type sections. Previously
they would error with "invalid indentation".
- Compile-time define changes:
- `defined` now accepts identifiers separated by dots, i.e. `defined(a.b.c)`.
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.
- [Define pragmas for constants](https://nim-lang.github.io/Nim/manual.html#implementation-specific-pragmas-compileminustime-define-pragmas)
now support a string argument for qualified define names.
```nim
# -d:package.FooBar=42
const FooBar {.intdefine: "package.FooBar".}: int = 5
echo FooBar # 42
```
This was added to help disambiguate similar define names for different packages.
In older versions, this could only be achieved with something like the following:
```nim
const FooBar = block:
const `package.FooBar` {.intdefine.}: int = 5
`package.FooBar`
```
- A generic `define` pragma for constants has been added that interprets
the value of the define based on the type of the constant value.
See the [experimental manual](https://nim-lang.github.io/Nim/manual_experimental.html#generic-define-pragma)
- A new form of type inference called [top-down inference](https://nim-lang.github.io/Nim/manual_experimental.html#topminusdown-type-inference)
has been implemented for a variety of basic cases. For example, code like the following now compiles:
```nim
let foo: seq[(float, byte, cstring)] = @[(1, 2, "abc")]
```
- `cstring` is now accepted as a selector in `case` statements, removing the
need to convert to `string`. On the JS backend, this is translated directly
to a `switch` statement.
- Nim now supports `out` parameters and ["strict definitions"](https://nim-lang.github.io/Nim/manual_experimental.html#strict-definitions-and-nimout-parameters).
- Nim now offers a [strict mode](https://nim-lang.github.io/Nim/manual_experimental.html#strict-case-objects) for `case objects`.
- IBM Z architecture and macOS m1 arm64 architecture are supported.
- `=wasMoved` can be overridden by users.
## Compiler changes
- The `gc` switch has been renamed to `mm` ("memory management") in order to reflect the
reality better. (Nim moved away from all techniques based on "tracing".)
- Defines the `gcRefc` symbol which allows writing specific code for the refc GC.
- `nim` can now compile version 1.4.0 as follows: `nim c --lib:lib --stylecheck:off compiler/nim`,
without requiring `-d:nimVersion140` which is now a noop.
- `--styleCheck`, `--hintAsError` and `--warningAsError` now only apply to the current package.
- The switch `--nimMainPrefix:prefix` has been added to add a prefix to the names of `NimMain` and
related functions produced on the backend. This prevents conflicts with other Nim
static libraries.
- When compiling for Release the flag `-fno-math-errno` is used for GCC.
## Tool changes
- Nim now ships Nimble version 0.14 which added support for lock-files. Libraries are stored in `$nimbleDir/pkgs2` (it was `$nimbleDir/pkgs`).
# `--no-merges` is needed to avoid merge commits which occur for PR's.
# $(Build.SourceVersionMessage) is not helpful
# nor is `github.event.head_commit.message` for github actions.
# Note: `[skip ci]` is now handled automatically for github actions, see https://github.blog/changelog/2021-02-08-github-actions-skip-pull-request-and-push-workflows-with-skip-ci/
# bug #19013: Alias information is not enough, we need to check for potential
# "overlaps". I claim the problem can only happen by reading again from a location
# that materialized which is only possible if a variable that contains a `ref`
# is involved.
returnfalse
result=true
ofnkIfStmt,nkIfExpr:
foritinn:
result=checkIsolate(it.lastSon)
ifnotresult:break
ofnkCaseStmt:
foriin1..<n.len:
result=checkIsolate(n[i].lastSon)
ifnotresult:break
ofnkObjConstr:
result=true
foriin1..<n.len:
result=checkIsolate(n[i].lastSon)
ifnotresult:break
ofnkBracket,nkTupleConstr,nkPar:
foritinn:
result=checkIsolate(it)
ifnotresult:break
ofnkHiddenStdConv,nkHiddenSubConv,nkCast,nkConv:
result=checkIsolate(n[1])
ofnkObjUpConv,nkObjDownConv,nkDotExpr:
result=checkIsolate(n[0])
ofnkStmtList,nkStmtListExpr:
ifn.len>0:
result=checkIsolate(n[^1])
else:
result=false
else:
# unanalysable expression:
result=false
else:
# no ref, no cry:
result=true
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.