Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Atomic inc/dec should use ATOMIC_SEQ_CST #19212

Merged
merged 1 commit into from
Dec 8, 2021
Merged

Atomic inc/dec should use ATOMIC_SEQ_CST #19212

merged 1 commit into from
Dec 8, 2021

Conversation

ringabout
Copy link
Member

@ringabout ringabout commented Dec 4, 2021

It was introduced by 6fbc96f#diff-f533629679edcd5f0af7eef220728c122d4fc577f81590ced7fe8028ea129808
which replaced sync_add_and_fetch with atomicAddFetch(memLoc.addr, x, ATOMIC_RELAXED). However sync_add_and_fetch is close to ATOMIC_SEQ_CST instead of ATOMIC_RELAXED. It is a regression since 2013.

If you need a memory order of std::memory_order_seq_cst (which is probably the closest to the GCC __sync_fetch_and_add),

Ref https://stackoverflow.com/questions/14858770/c11-stdatomic-fetch-add-vs-sync-fetch-and-add

Also it is not correct. We cannot assume ATOMIC_RELAXED order works for all conditions. It should use stricter memory order. For example std/atomics and C++ use ATOMIC_SEQ_CST order which is correct.

operator++(int) and operator++() on atomic types are specified to have the effect of fetch_add(1), which ends up calling the member function with the default memory ordering memory_order_seq_cst.

Ref https://stackoverflow.com/questions/13482751/c-atomic-increment-memory-ordering
Ref

proc fetchAdd*[T: SomeInteger](location: var Atomic[T]; value: T; order: MemoryOrder = moSequentiallyConsistent): T {.inline.} =

This PR intends to make it correct. Thanks to nim-works/nimskull#88

@ringabout ringabout requested a review from Araq December 4, 2021 01:34
@Araq
Copy link
Member

Araq commented Dec 4, 2021

I don't agree with this. atomicInc is not used for "publish message", it's used for counting.

@planetis-m
Copy link
Contributor

@ringabout
Copy link
Member Author

ringabout commented Dec 4, 2021

It may be safe for atomicInc to use relaxed memory order, but atomicDec is not.

proc atomicDec*[T: SomeInteger](location: var Atomic[T]; value: T = 1) {.inline.} =

And std/atomics uses SeqCst too.

It may be easily misused, for instance the example below is wrong.

It is important to enforce any possible access to the object in one thread (through an existing reference) to happen before deleting the object in a different thread. This is achieved by a "release" operation after dropping a reference (any access to the object through this reference must obviously happened before), and an "acquire" operation before deleting the object.

So decRef should not use relaxed memory order.

proc decRef(b: Buffer) {.inline.} =
  if atomicDec(b.refcount) <= 0:
    deallocShared(b)

proc incRef(b: Buffer) {.inline.} =
  atomicInc(b.refcount)

Ref

proc decRef(b: Buffer) {.inline.} =

Ref https://stackoverflow.com/questions/48124031/stdmemory-order-relaxed-atomicity-with-respect-to-the-same-atomic-variable

@ringabout ringabout requested a review from dom96 December 4, 2021 08:38
@ringabout
Copy link
Member Author

atomicInc is not used for "publish message", it's used for counting.

I agree. And I think a typical use of atomicDec is to publish data. And I expect atomcInc, atomcDec should use the same memory order among system/atomics(relaxed), std/atomics(seq_cst) and threading/atomics(seq_cst), which gives the least surprise. Otherwise, the surprise needs to be documented.

@arnetheduck
Copy link
Contributor

arnetheduck commented Dec 6, 2021

What's missing here is a way to control the flag, really - which flag to use depends on your specific use case for incrementing and decrementing.

That said, +1 for SEQ_CST as default in general, with an option to "relax" it - there is no case where SEQ_CST yields an invalid result - conversely, there are some cases where inc without SEQ_CST does produce a hard-to-debug, invalid result (the fact that you can implement smart pointers in one particular way with a relaxed inc is a lucky/clever outcome of that special case - in that particular implementation, you can also relax atomicDec "a little": you don't need full SEQ_CST (you can do a release decrease followed by an acquire fence, then deallocate the instance - splitting these up allows a "cheaper" dec in some cases)

@ringabout
Copy link
Member Author

ringabout commented Dec 6, 2021

That said, +1 for SEQ_CST as default in general, with an option to "relax" it - there is no case where SEQ_CST yields an invalid result - conversely, there are some cases where inc without SEQ_CST does produce a hard-to-debug, invalid result (the fact that you can implement smart pointers in one particular way with a relaxed inc is a lucky/clever outcome of that special case - in that particular implementation, you can also relax atomicDec "a little": you don't need full SEQ_CST (you can do a release decrease followed by an acquire fence, then deallocate the instance - splitting these up allows a "cheaper" dec in some cases)

In that case atomicAddFetch, atomicSubFetch should be used instead. They are exported procs and support memory orders. There is no need to add an option to AtomicInc and AtomicDec which are just simple wrappers for forementioned procs.

Similiar operator can be found in C++ (no extra option)

operator++(int) and operator++() on atomic types are specified to have the effect of fetch_add(1), which ends up calling the member function with the default memory ordering memory_order_seq_cst.

@arnetheduck
Copy link
Contributor

They are exported procs

So are atomicInc and atomicDec - in C++ though, you get a nice and safe "shortcut" way of writing it (++) - in nim, the closest operator would be += or possibly inc - once you call them atomicInc, it's no reason to use it really, over atomicAddFetch.. another good option is simply to deprecate them since they're already incorrect for the intended use case (reference counting) and don't provide any clear advantage of a simple add, clarity-wise.

@Araq
Copy link
Member

Araq commented Dec 6, 2021

IIRC atomicInc predated C++'s memory model for threading, so it's no surprise we have something here which makes little sense. That said, the primary use case was reference counting and for that the "relaxed" mode makes more sense. (You need a "full" memory barrier before the delete but only after the last RC decrement, you don't need to have the barrier for every decrement.)

@ringabout
Copy link
Member Author

ringabout commented Dec 6, 2021

That said, the primary use case was reference counting and for that the "relaxed" mode makes more sense. (You need a "full" memory barrier before the delete but only after the last RC decrement, you don't need to have the barrier for every decrement.)

@Araq so the code of std/sharedstring should be changed into something below?

proc decRef(b: Buffer) {.inline.} =
  if atomicDec(b.refcount) <= 0:
    fence() # seq_cst
    deallocShared(b)

proc incRef(b: Buffer) {.inline.} =
  atomicInc(b.refcount)

Ref

proc decRef(b: Buffer) {.inline.} =

@Araq
Copy link
Member

Araq commented Dec 6, 2021

@Araq so the code of std/sharedstring should be changed into something below?

Correct. But let's also ask @planetis-m and @mratsim on this matter.

@planetis-m
Copy link
Contributor

planetis-m commented Dec 6, 2021

Probably the best explanation about atomic reference counting is in Herb Sutter - atomic Weapons 2 of 2 talk. (what Arne already said)

@Araq
Copy link
Member

Araq commented Dec 6, 2021

That means I'm wrong, doesn't it?

@Araq
Copy link
Member

Araq commented Dec 6, 2021

Or maybe I'm right, see https://youtu.be/M15UKpNlpeM?t=2962

@ringabout
Copy link
Member Author

ringabout commented Dec 8, 2021

I added a "help wanted" label. If someone is familiar with atomics, please explain to me why
#19212 (comment) is correct/wrong. Thanks!

IMO, considering all platforms (not just x86), supposing there is a thread A changed the content of the shared string; thread A needs to release the result to the last thread which would free the shared string. With atomicDec (relaxed order), thread A may not release the result to store buffer. If there is only a fence for the last thread, the last thread may see an old value before freeing the shared string.

@Araq
Copy link
Member

Araq commented Dec 8, 2021

If there is only a fence for the last thread, the last thread may see an old value before freeing the shared string.

Well the last thread has a "acquire" fence, so how would this be possible? Hans Boehm claimed it works in 2016, see my link. (Argument by authority.)

@ringabout
Copy link
Member Author

ringabout commented Dec 8, 2021

Well this is an example of boost:

#include <boost/intrusive_ptr.hpp>
#include <boost/atomic.hpp>

class X {
public:
  typedef boost::intrusive_ptr<X> pointer;
  X() : refcount_(0) {}

private:
  mutable boost::atomic<int> refcount_;
  friend void intrusive_ptr_add_ref(const X * x)
  {
    x->refcount_.fetch_add(1, boost::memory_order_relaxed);
  }
  friend void intrusive_ptr_release(const X * x)
  {
    if (x->refcount_.fetch_sub(1, boost::memory_order_release) == 1) { // why it is not omitted
      boost::atomic_thread_fence(boost::memory_order_acquire);
      delete x;
    }
  }
};

Ref https://www.boost.org/doc/libs/1_77_0/doc/html/atomic/usage_examples.html

It uses release order though the last thread does have acquire fence. So I'm not sure.

@Araq
Copy link
Member

Araq commented Dec 8, 2021

https://github.com/llvm-mirror/libcxx/blob/master/include/memory#L3390 also uses relaxed for the inc operation. So at least let the inc use relaxed.

@ringabout
Copy link
Member Author

ringabout commented Dec 8, 2021

also uses relaxed for the inc operation.

I agree atomicInc can use relaxed order in many situations.

However

the non-default orderings are meant for experts

(it drives me mad :)

So I still prefer the solutions below

  • deprecate atomcInc and atomicDec and document the memory order
  • default atomcInc and atomicDec to seq_cst

I can make following up PRs to replace them with atomicAddFetch and atomicSubFecth in stdlib for efficiency.

BTW relaxed order implies acq_rel in x86 architects, so it still has some penalties compared to that on ARM.

Ref https://stackoverflow.com/questions/28049976/x86-relaxed-ordering-performance

@Araq
Copy link
Member

Araq commented Dec 8, 2021

Alright.

@Araq Araq merged commit 0992854 into devel Dec 8, 2021
@Araq Araq deleted the xflywind-patch-1 branch December 8, 2021 07:40
@ringabout
Copy link
Member Author

ringabout commented Dec 8, 2021

Thank you!

planetis-m added a commit to planetis-m/threading that referenced this pull request Dec 8, 2021
Consume was used in the original pr nim-lang/Nim#10485, haven't questioned before nim-lang/Nim#19212
@mratsim
Copy link
Collaborator

mratsim commented Dec 10, 2021

That said, the primary use case was reference counting and for that the "relaxed" mode makes more sense. (You need a "full" memory barrier before the delete but only after the last RC decrement, you don't need to have the barrier for every decrement.)

@Araq so the code of std/sharedstring should be changed into something below?

proc decRef(b: Buffer) {.inline.} =
  if atomicDec(b.refcount) <= 0:
    fence() # seq_cst
    deallocShared(b)

proc incRef(b: Buffer) {.inline.} =
  atomicInc(b.refcount)

Ref

proc decRef(b: Buffer) {.inline.} =

I think it's a bad idea to use {.inline.} with atomics that are not sequentially consistent.
Because there is usually an assumption that function calls with side-effect are not reordered, it would make spotting a memory ordering issue really hard.

This atomic refcounting has been well tested:

https://github.com/mratsim/weave/blob/71dc2d700d6f509c71e5b659ab4c5e9cb4020dde/weave/cross_thread_com/flow_events.nim#L176-L201

# Refcounting is started from 0 and we avoid fetchSub with release semantics
# in the common case of only one reference being live.

proc `=destroy`*(event: var FlowEvent) =
  if event.e.isNil:
    return

  let count = event.e.refCount.load(moRelaxed)
  fence(moAcquire)
  if count == 0:
    # We have the last reference
    if not event.e.isNil:
      if event.e.kind == Iteration:
        wv_free(event.e.union.iter.singles)
      # Return memory to the memory pool
      recycle(event.e)
  else:
    discard fetchSub(event.e.refCount, 1, moRelease)
  event.e = nil

proc `=sink`*(dst: var FlowEvent, src: FlowEvent) {.inline.} =
  # Don't pay for atomic refcounting when compiler can prove there is no ref change
  `=destroy`(dst)
  system.`=sink`(dst.e, src.e)

proc `=`*(dst: var FlowEvent, src: FlowEvent) {.inline.} =
  `=destroy`(dst)
  discard fetchAdd(src.e.refCount, 1, moRelaxed)
  dst.e = src.e

This is a common pattern:
Acquire loading, check if we have the last reference and in that case, no need for atomics anymore. Otherwise use release ordering.

Ultimately, having formally verified code would dispel all doubt (M Thread Collider is long overdue) but you can at least try with threadsanitizer.

@arnetheduck
Copy link
Contributor

I think it's a bad idea to use {.inline.} with atomics that are not sequentially consistent.

tbh, I don't see what one thing has to do with the other - {.inline.} for a private function in nim is a mostly a no-op - for non-private functions, it merely spams the function into all C sources.

atomics and fences on the other hand have special meaning to the C compiler which explicitly prevents reordering - the two things are unrelated.

@Araq
Copy link
Member

Araq commented Dec 11, 2021

Your = is wrong though, you need to change the order to:

proc `=`*(dst: var FlowEvent, src: FlowEvent) {.inline.} =
  discard fetchAdd(src.e.refCount, 1, moRelaxed)
  `=destroy`(dst)
  dst.e = src.e

in order to correctly deal with self-assignments.

@mratsim
Copy link
Collaborator

mratsim commented Dec 13, 2021

I think it's a bad idea to use {.inline.} with atomics that are not sequentially consistent.

tbh, I don't see what one thing has to do with the other - {.inline.} for a private function in nim is a mostly a no-op - for non-private functions, it merely spams the function into all C sources.

atomics and fences on the other hand have special meaning to the C compiler which explicitly prevents reordering - the two things are unrelated.

A C compiler will never reorder function calls. One of the goal of atomics is telling the compiler which instruction can be reordered and not. An inlined function can be reordered.

@arnetheduck
Copy link
Contributor

arnetheduck commented Dec 13, 2021

An inlined function can be reordered.

The inline keyword in nim has nothing to do with whether a function gets inlined or not in the final assembly - it controls whether the function is copy-pasted to every C source as a C static function or not - neither does the inline keyword in C - the C compiler is free to not inline functions marked inline and vice versa. The inline keyword is a linking directive, first and foremost - it controls whether inlining is possible under certain conditions and whether the linker also has to provide a non-inlined version of the function in the final executable / library (in addition to any inlined versions of it).

As a consequence of the above, functions in general have nothing to do with with reordering - reordering is done in later stages typically, to hoist variables from loops and to provide efficient pipelining based on the CPU architecture.

The C compiler is free to inline anything it wants unless explicitly prohibited, and reorder anything it wants unless explicitly prohibited as long as it maintains an as-if guarantee under single-threaded conditions.

Atomic instructions do two things, as commonly understood:

  • they ensure that the entire operation is performed atomically (for example that 64 bits get written in one go, and cannot be observed "partially" written, for example as would happen with two 32-bit writes) - "relaxed" atomic operations provide only this guarantee
  • they provide fences that prevent reordering under specific conditions, depending on the fence type

These special prohibitions are done both at a compiler and at a hardware level (preventing the compiler from reordering and adding fences and locks to instructions so that the CPU itself doesn't reorder them).

Clyybber pushed a commit to Clyybber/nimskull that referenced this pull request Feb 25, 2022
Concerns these changes:
nim-lang/Nim@727c637...340b5a1

Excluded changes are:
nim-lang/Nim#18963
nim-lang/Nim#19003
nim-lang/Nim#19043
nim-lang/Nim#19055
nim-lang/Nim#19053
nim-lang/Nim#19064
nim-lang/Nim#18642
nim-lang/Nim#19062
nim-lang/Nim#19082
nim-lang/Nim#19090
nim-lang/Nim#19077
nim-lang/Nim#19021
nim-lang/Nim#19100
nim-lang/Nim#19102
nim-lang/Nim#19111
nim-lang/Nim#19115
nim-lang/Nim#19133
nim-lang/Nim#19142
nim-lang/Nim#19158
nim-lang/Nim#19129
nim-lang/Nim#19137
nim-lang/Nim#19168
nim-lang/Nim#19156
nim-lang/Nim#19147
nim-lang/Nim#19180
nim-lang/Nim#19183
nim-lang/Nim#19182
nim-lang/Nim#19187
nim-lang/Nim#19179
nim-lang/Nim#19209
nim-lang/Nim#19210
nim-lang/Nim#19207
nim-lang/Nim#19219
nim-lang/Nim#19195
nim-lang/Nim#19212
nim-lang/Nim#19134
nim-lang/Nim#19235
nim-lang/Nim#19252
nim-lang/Nim#19196
nim-lang/Nim#19295
nim-lang/Nim#19301
nim-lang/Nim#19181
nim-lang/Nim#17223
nim-lang/Nim#19370
nim-lang/Nim#19385
nim-lang/Nim#19307
nim-lang/Nim#19394
nim-lang/Nim#19399
nim-lang/Nim#19390
nim-lang/Nim#19407
nim-lang/Nim#19419
nim-lang/Nim#19421
nim-lang/Nim#19363
nim-lang/Nim#19406
nim-lang/Nim#19431
nim-lang/Nim#19455
nim-lang/Nim#19461
nim-lang/Nim@cb894c7
nim-lang/Nim#19462
nim-lang/Nim#19442
nim-lang/Nim#19437
nim-lang/Nim#19433
nim-lang/Nim#19512
nim-lang/Nim#19487
nim-lang/Nim#19543

Excluded changes include major changes which require more consideration
and changes which don't apply to the current code anymore but could be
worth porting over still.

Excluded changes which only change the identifier casing in tests
or only concern code removed in nimskull aren't listed.

Begin commit listing:

use two underscores for easy demangling [backport:1.6] (#19028)

Add Elbrus 2000 architecture (#19024)

* Add Elbrus 2000 architecture

* Add e2k to niminst

* Update compiler/installer.ini

Co-authored-by: Andreas Rumpf <[email protected]>

remove exception (#18906)

allow converting static vars to `openArray` (#19035)

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.

use the correct header for TIOCGWINSZ on Solaris (#19037)

Minor update to terminal docs (#19056)

* 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 <[email protected]>

* Update lib/pure/terminal.nim

Co-authored-by: konsumlamm <[email protected]>

* Added back f: file to cursor movement

* Removed unnecessary comments

Co-authored-by: konsumlamm <[email protected]>

fix a tiny formating issue in doc/destructors.rst (#19058)

fix a tiny code snippet formatting issue in `doc/constructors.rst`, again (#19065)

Fix nimIdentNormalize, fixes #19067 (#19068)

* Make nimIdentNormalize return "" when passed ""; fixes #19067

Fixes #19067

* Add tests for nimIdentNormalize

fix #18971 (#19070) [backport:1.6]

since the example code return value from global variable, instead
of first argument, the `n.len` is 1 which causes compiler crashes.

fixes #19000 (#19032)

* fixes #19000

* progress

fix #18410 (Errors initializing an object of RootObj with the C++ backend) [backport] (#18836)

* fix #18410

* one line comment

* typo

* typo

* cover cpp

update numbers of lifetime-tracking hooks in doc/destructors.rst (#19088)

bootstrapping Nim compiler with `cpp --gc:orc` (#19087)

libs/impore/re: Add note about the requirement of `matches` to be pre-allocated (#19081)

Add few runnableExamples for `findBounds` for clarity.

Fixes nim-lang/Nim#18775

Add test for issue 15435 (#19079)

* Add test for issue 15435

Closes nim-lang/Nim#15435.

* Specify bug # in comment

Addresses nim-lang/Nim#19079 (comment)

manual: Document the use of `static` as a proc call (#19084)

* manual: Document the use of `static` as a proc call

Also adds tests.

Fixes nim-lang/Nim#16987 .

* Update doc/manual.rst

Co-authored-by: konsumlamm <[email protected]>

* Use the "bug #NNNN" comment syntax for consistency

Ref:
https://nim-lang.github.io/Nim/contributing.html#writing-tests-stdlib

> Always refer to a GitHub issue using the following exact syntax: bug
for tooling.

* manual: Undocument usage of foo.static

foo.static and foo.static() are not expected to work.

Ref: https://github.com/nim-lang/Nim/pull/19084/files#r741203578

Co-authored-by: konsumlamm <[email protected]>

manual: Document that comma propagates the default values of parameters (#19080)

* manual: Document that comma propagates the default values of parameters

Fixes nim-lang/Nim#15949.

* Use the "bug #NNNN" comment syntax for consistency

Ref:
https://nim-lang.github.io/Nim/contributing.html#writing-tests-stdlib

> Always refer to a GitHub issue using the following exact syntax: bug
for tooling.

fixes #19011 [backport:1.6] (#19114)

Add deprecation pragmas in lib/deprecated/pure (#19113)

Deprecate `std/sharedlist` and `std/sharedtables` (#19112)

fix nimindexterm in rst2tex/doc2tex [backport] (#19106)

* fix nimindexterm (rst2tex/doc2tex) [backport]

* Add support for indexing in rst

Call {.cursor.} a pragma. (#19116)

* 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.

Remove tlsEmulation enabled from Windows + GCC config (#19119) [backport:1.6]

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 nim-lang/Nim#18146 (comment) for discussion and perf impact. [backport:1.6]

Add security tip for setCookie (#19117)

* Add security tip for setCookie

* Update lib/pure/cookies.nim

Co-authored-by: Dominik Picheta <[email protected]>

* Update lib/pure/cookies.nim

Co-authored-by: konsumlamm <[email protected]>

Co-authored-by: Andreas Rumpf <[email protected]>
Co-authored-by: Dominik Picheta <[email protected]>
Co-authored-by: konsumlamm <[email protected]>

correct cookie docs (#19122)

refactoring: orc can use getThreadId() (#19123)

* refactoring: orc can use getThreadId()

* progress

fixed colorNames sorting mistake (#19125) [backport]

update manual (#19130) [backport]

Merge file size fields correctly on Windows (#19141)

* 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

Fix punycode.decode function (#19136)

* 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 <[email protected]>

Fix undeclared 'SYS_getrandom' on emscripten (#19144)

wrong spaces (3 => 2) (#19145)

`caseStmtMacros` no longer experimental, experimental manual refactor (#19173)

* `caseStmtMacros` no longer experimental, experimental manual refactor

* Update doc/manual.rst

* apply review suggestions

* apply review

Co-authored-by: Andreas Rumpf <[email protected]>

fix inline syntax highlighting in system.nim (#19184)

swap port to correct port order (#19177)

Co-authored-by: Jaremy Creechley <[email protected]>

feat: TLS-ALPN wrappers for OpenSSL (#19202)

Co-authored-by: Iced Quinn <[email protected]>

misc bugfixes [backport:1.2] (#19203)

treat do with pragmas but no parens as proc (#19191)

fixes #19188

[format minor] remove unnecessary spaces (#19216)

Making TCC work again on Windows --cpu:amd64 - fix #16326 (#19221)

* fix #16326

* removing comments

fixes a converter handling regression that caused private converters to leak into client modules; fixes #19213; [backport:1.6] (#19229)

Add support for LoongArch (#19223)

* Add support for LoongArch

* Update compiler/installer.ini

Co-authored-by: Andreas Rumpf <[email protected]>

remove `std/sharedstrings` (#19228)

* remove std/sharedstrings

it has been broken since 0.18.0

* rephrase the changelog entry

add comments to spawn and pinnedSpawn (#19230)

`spawn` uses `nimSpawn3` internally and `pinnedSpawn` uses `nimSpawn4` internally. I comment it in order to help contributors get the gist of its functionality.

fixes an old ARC bug: the produced copy/sink operations don't copy the hidden type field for objects with enabled inheritance; fixes #19205 [backport:1.6] (#19232)

nimRawSetjmp: support Windows (#19197)

* 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: status-im/nimbus-eth2#3121

Also add "nimBuiltinSetjmp" - mostly for benchmarking.

* fix for Apple's Clang++

Revert "swap port to correct port order (#19177)" (#19234)

This reverts commit 0d0c249.

move toDeque to after addLast (#19233) [backport:1.0]

Changes the order of procs definitions in order to avoid calling an undefined proc.

let Nim support Nimble 0.14 with lock-file support [backport:1.6] (#19236)

nimc.rst: fix table markup (#19239)

Various std net improvements (#19132)

* 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 <[email protected]>

- 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 <[email protected]>

fix bug #14468 zero-width split (#19248)

basicopt.txt: Unify the format (#19251)

fix: fixes bug in CVerifyPeerUseEnvVars (#19247)

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

suggestion to respect typedarray type (#19257)

* suggestion to respect typedarray

* Update jssys.nim

Co-authored-by: Sven Keller <[email protected]>

fix #19244 - solves the problem of the InAddr object constructor in Windows. (#19259)

* Update winlean.nim

* Update tnet_ll.nim

Fixed typo in manual.rst unsafeAssign->uncheckedAssign. Fixes part 1 of #19266 (#19267)

use uppercase "type" for Proxy-Authorization header (#19273)

Some servers will reject authorization requests with a lowercase "basic" type. Changing to "Basic" seems to solve these issues.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Proxy-Authorization

Update colors.nim (#19274)

* 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.

Extract runnables that specify `doccmd` (#19275) [backport:1.6]

Fix build on FreeBSD/powerpc (#19282)

It's currently misdetected as powerpc64.

Fix #19107 (#19286) [backport]

fixes grammar typos [backport] (#19289)

fix 19292 (#19293)

Fix #19297 - fixing broken list after adding empty list (#19299)

* 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.

fixes #16617 [backport] (#19300)

Update JS and nimscript import tests (#19306)

* add new modules, except experimental ones
* remove deprecated modules mersenne and sharedlist
* better describe why some modules fail and some modules don't

add compile time option for POSIX sigwait on Illumos/Solaris (#19296)

* add compile time option for POSIX sigwait on Illumos/Solaris

* fix link to documentation of `sigwait` on Illumos/Solaris

[docs] clarify the raised exception (#19308)

* [docs] clarify the raised exception

Lest developers wanna know what the exception is.

* Apply suggestions from @konsumlamm

Co-authored-by: konsumlamm <[email protected]>

Co-authored-by: konsumlamm <[email protected]>

docs: Fix typo in tut1.rst (#19309)

Fix #19314 - fixing broken `DoublyLinkedList` after adding empty `DoublyLinkedList` (#19315) [backport]

* Update lists.nim

* Update tlists.nim

fixed typos (#19316)

devel: style fix (#19318)

this allows "--styleCheck:usages --styleCheck:error"

docs: Fix typo in tut1.rst (#19324)

correct the comments (#19322)

--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 std/private/win_getsysteminfo; refactor the usage of `GetSystemInfo` (#19310)

* add std/private/win_getsysteminfo

* import at the top level

* wrappers follow nep1 too

* follow review comment

Update net.nim (#19327) [backport]

Fix #19038 - making the Nim compiler work again on Windows XP (#19331)

* Update osenv.nim

* Update win_setenv.nim

* Update lib/pure/includes/osenv.nim

* Update lib/pure/includes/osenv.nim

* fixing cstring

Co-authored-by: Andreas Rumpf <[email protected]>

fix nim-lang#19343 (#19344) [backport]

Ensure HttpClient onProgress is called once per second
Ensure that reported speed is accurate

stylecheck usages part two: stdlib cleanup (#19338)

* stylecheck usages part two: stdlib cleanup

typeinfo.nim: importCompilerProc => importcompilerproc

nre.nim: newLineFlags => newlineFlags

system.nim: JSRoot => JsRoot

ref #19319

* prefer importCompilerProc

added filemode docs (#19346)

Fix `remove` on last node of singly-linked list [backport:1.6] (#19353)

fix stylecheck error with asyncdispatch (#19350)

* 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

remove spaces between an identifier and a star (#19355)

It makes search easier by searching `+`* instead of `+` which filter lots of unexported versions.

Follow nim-lang/Nim#18681

bitsets.nim: cleanup (#19361)

make rst thread safe (#19369)

split for the convenience of review

docs: Mention `import foo {.all.}` syntax (#19377)

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 <[email protected]>

update copyright year (#19381)

docs: Fix broken cross references to `rfind` in strutils (#19382) [backport]

Fixes three broken cross references to `rfind` in strutils.
Breakage due to signature changes of the `rfind` methods.

Co-authored-by: adigitoleo <[email protected]>

move type operation section and remove deepcopy document (#19389)

ref #19173; because deepcopy is not fit for ORC/ARC which was used for spawn and spawn will be removed from compiler

deprecate unsafeAddr; extend addr (#19373)

* 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 ab83c99c507048a8396e636bf22d55fdd84d7d1c.

* doc changes; thanks to @konsumlamm

Co-authored-by: konsumlamm <[email protected]>

Co-authored-by: konsumlamm <[email protected]>

improve changelog a bit (#19400)

mangle names in nimbase.h using cppDefine (#19395) [backport]

mangle names in nimbase.h
fix comments

Optimize lent in JS [backport:1.6] (#19393)

* Optimize lent in JS [backport:1.6]

* addr on lent doesn't work anymore, don't use it

* use unsafeAddr  in test again for older versions

update deprecated example (#19415)

`toNimIdent` proc is deprecated, so I replaced it with `ident` proc

Improve Zshell completion (#19354)

fix stricteffects (nimsuggest/sexp) (#19405)

* fix stricteffects (nimsuggest/sexp)

* Update tstrict_effects3.nim

* Update tests/effects/tstrict_effects3.nim

suppress deprecated warnings (#19408)

* suppress deprecated warnings

once bump version to 1.7.3 enable deprecated messages

* deprecate later

add an example to setControlCHook (#19416)

* add an example to setControlCHook

* [skip CI] format example for setControlCHook

Co-authored-by: Nathan Blaxall <[email protected]>

fix term rewriting with sideeffect (#19410)

* fix term rewriting with sideeffect

fix #6217

* add tests

* Update tests/template/template_various.nim

Resolve cross file resolution errors in atomics (#19422) [backport:1.6]

* Resolve call undeclared routine testAndSet

* Fix undeclared field atomicType

Fix #11923 (#19427)

* Apply commit nim-lang/Nim@5da931f that was never merged (was part of a bigger PR). Should fix issue #11932

* add a generic object for custom pragma

os: faster getFileSize (#19438)

Use "stat" rather than "open", "seek", and "close" system calls.
The Windows implementation remains the same.

bugfix: varargs count as open arrays (#19447)

update outdated link (#19465)

Ref nim-lang/Nim#19463

Update jsfetch with latest API and fix missing bindings (#19473)

* 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 <[email protected]>

* Update lib/std/jsfetch.nim

Co-authored-by: Juan Carlos <[email protected]>

* remove experimental flag

Co-authored-by: Juan Carlos <[email protected]>

No longer segfault when using a typeclass with a self referencing type (#19467)

Clonkk fix2 11923 (#19451)

* fix nnkBracketExpr not compiling for getImpl on customPragmaNode

* fix test import

* fix alias not working with hasCustomPragmas

fix parseEnum cannot parse enum with const fields (#19466)

fix #19463

Add compilers and hints to default nim.cfg (#18424)

don't use a temp for addr [backport: 1.6] (#19503)

* don't use a temp for addr

fix #19497

* Update compiler/ccgcalls.nim

Co-authored-by: konsumlamm <[email protected]>

* add a test

Co-authored-by: konsumlamm <[email protected]>

fixes #19404 by protecting the memory we borrow from. this replaces crashes with minor memory leaks which seems to be acceptable. In the longer run we need a better VM that didn't grow hacks over a decade. (#19515)

Co-authored-by: flywind <[email protected]>

Remove backslash in glob pattern (#19524)

use OrderedTable instead of OrderedTableRef for mimedb (#19522)

* use OrderedTable instead of OrderedTableRef for mimedb

Signed-off-by: David Krause <[email protected]>

* added changelog entry for mimedb change

Signed-off-by: David Krause <[email protected]>

Remove Deprecated oids.oidsToString (#19519)

* Remove deprecated oids.oidToString

* Remove deprecated oids.oidToString

Remove deprecated math.c_frexp (#19518)

* Remove Deprecated math proc

* Remove Deprecated math proc

* Remove Deprecated math proc

[testcase] genSym fails to make unique identifier for ref object types (#19506)

close #15118

Documentation: Fix word usage (#19529)

Update chcks.nim (#19540)

keep casing of noinit and noreturn pragmas consistently documented (#19535)

compile pragma: cache the result sooner (#19554)

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.
Clyybber pushed a commit to Clyybber/nimskull that referenced this pull request Feb 25, 2022
Concerns these changes:
nim-lang/Nim@727c637...340b5a1

Excluded changes are:
nim-lang/Nim#18963
nim-lang/Nim#19003
nim-lang/Nim#19043
nim-lang/Nim#19055
nim-lang/Nim#19053
nim-lang/Nim#19064
nim-lang/Nim#18642
nim-lang/Nim#19062
nim-lang/Nim#19082
nim-lang/Nim#19090
nim-lang/Nim#19077
nim-lang/Nim#19021
nim-lang/Nim#19100
nim-lang/Nim#19102
nim-lang/Nim#19111
nim-lang/Nim#19115
nim-lang/Nim#19133
nim-lang/Nim#19142
nim-lang/Nim#19158
nim-lang/Nim#19129
nim-lang/Nim#19137
nim-lang/Nim#19168
nim-lang/Nim#19156
nim-lang/Nim#19147
nim-lang/Nim#19180
nim-lang/Nim#19183
nim-lang/Nim#19182
nim-lang/Nim#19187
nim-lang/Nim#19179
nim-lang/Nim#19209
nim-lang/Nim#19210
nim-lang/Nim#19207
nim-lang/Nim#19219
nim-lang/Nim#19195
nim-lang/Nim#19212
nim-lang/Nim#19134
nim-lang/Nim#19235
nim-lang/Nim#19252
nim-lang/Nim#19196
nim-lang/Nim#19295
nim-lang/Nim#19301
nim-lang/Nim#19181
nim-lang/Nim#17223
nim-lang/Nim#19370
nim-lang/Nim#19385
nim-lang/Nim#19307
nim-lang/Nim#19394
nim-lang/Nim#19399
nim-lang/Nim#19390
nim-lang/Nim#19407
nim-lang/Nim#19419
nim-lang/Nim#19421
nim-lang/Nim#19363
nim-lang/Nim#19406
nim-lang/Nim#19431
nim-lang/Nim#19455
nim-lang/Nim#19461
nim-lang/Nim@cb894c7
nim-lang/Nim#19462
nim-lang/Nim#19442
nim-lang/Nim#19437
nim-lang/Nim#19433
nim-lang/Nim#19512
nim-lang/Nim#19487
nim-lang/Nim#19543

Excluded changes include major changes which require more consideration
and changes which don't apply to the current code anymore but could be
worth porting over still.

Excluded changes which only change the identifier casing in tests
or only concern code removed in nimskull aren't listed.

Begin commit listing:

use two underscores for easy demangling [backport:1.6] (#19028)

Add Elbrus 2000 architecture (#19024)

* Add Elbrus 2000 architecture

* Add e2k to niminst

* Update compiler/installer.ini

Co-authored-by: Andreas Rumpf <[email protected]>

remove exception (#18906)

allow converting static vars to `openArray` (#19035)

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.

use the correct header for TIOCGWINSZ on Solaris (#19037)

Minor update to terminal docs (#19056)

* 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 <[email protected]>

* Update lib/pure/terminal.nim

Co-authored-by: konsumlamm <[email protected]>

* Added back f: file to cursor movement

* Removed unnecessary comments

Co-authored-by: konsumlamm <[email protected]>

fix a tiny formating issue in doc/destructors.rst (#19058)

fix a tiny code snippet formatting issue in `doc/constructors.rst`, again (#19065)

Fix nimIdentNormalize, fixes #19067 (#19068)

* Make nimIdentNormalize return "" when passed ""; fixes #19067

Fixes #19067

* Add tests for nimIdentNormalize

fix #18971 (#19070) [backport:1.6]

since the example code return value from global variable, instead
of first argument, the `n.len` is 1 which causes compiler crashes.

fixes #19000 (#19032)

* fixes #19000

* progress

fix #18410 (Errors initializing an object of RootObj with the C++ backend) [backport] (#18836)

* fix #18410

* one line comment

* typo

* typo

* cover cpp

update numbers of lifetime-tracking hooks in doc/destructors.rst (#19088)

bootstrapping Nim compiler with `cpp --gc:orc` (#19087)

libs/impore/re: Add note about the requirement of `matches` to be pre-allocated (#19081)

Add few runnableExamples for `findBounds` for clarity.

Fixes nim-lang/Nim#18775

Add test for issue 15435 (#19079)

* Add test for issue 15435

Closes nim-lang/Nim#15435.

* Specify bug # in comment

Addresses nim-lang/Nim#19079 (comment)

manual: Document the use of `static` as a proc call (#19084)

* manual: Document the use of `static` as a proc call

Also adds tests.

Fixes nim-lang/Nim#16987 .

* Update doc/manual.rst

Co-authored-by: konsumlamm <[email protected]>

* Use the "bug #NNNN" comment syntax for consistency

Ref:
https://nim-lang.github.io/Nim/contributing.html#writing-tests-stdlib

> Always refer to a GitHub issue using the following exact syntax: bug
for tooling.

* manual: Undocument usage of foo.static

foo.static and foo.static() are not expected to work.

Ref: https://github.com/nim-lang/Nim/pull/19084/files#r741203578

Co-authored-by: konsumlamm <[email protected]>

manual: Document that comma propagates the default values of parameters (#19080)

* manual: Document that comma propagates the default values of parameters

Fixes nim-lang/Nim#15949.

* Use the "bug #NNNN" comment syntax for consistency

Ref:
https://nim-lang.github.io/Nim/contributing.html#writing-tests-stdlib

> Always refer to a GitHub issue using the following exact syntax: bug
for tooling.

fixes #19011 [backport:1.6] (#19114)

Add deprecation pragmas in lib/deprecated/pure (#19113)

Deprecate `std/sharedlist` and `std/sharedtables` (#19112)

fix nimindexterm in rst2tex/doc2tex [backport] (#19106)

* fix nimindexterm (rst2tex/doc2tex) [backport]

* Add support for indexing in rst

Call {.cursor.} a pragma. (#19116)

* 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.

Remove tlsEmulation enabled from Windows + GCC config (#19119) [backport:1.6]

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 nim-lang/Nim#18146 (comment) for discussion and perf impact. [backport:1.6]

Add security tip for setCookie (#19117)

* Add security tip for setCookie

* Update lib/pure/cookies.nim

Co-authored-by: Dominik Picheta <[email protected]>

* Update lib/pure/cookies.nim

Co-authored-by: konsumlamm <[email protected]>

Co-authored-by: Andreas Rumpf <[email protected]>
Co-authored-by: Dominik Picheta <[email protected]>
Co-authored-by: konsumlamm <[email protected]>

correct cookie docs (#19122)

refactoring: orc can use getThreadId() (#19123)

* refactoring: orc can use getThreadId()

* progress

fixed colorNames sorting mistake (#19125) [backport]

update manual (#19130) [backport]

Merge file size fields correctly on Windows (#19141)

* 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

Fix punycode.decode function (#19136)

* 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 <[email protected]>

Fix undeclared 'SYS_getrandom' on emscripten (#19144)

wrong spaces (3 => 2) (#19145)

`caseStmtMacros` no longer experimental, experimental manual refactor (#19173)

* `caseStmtMacros` no longer experimental, experimental manual refactor

* Update doc/manual.rst

* apply review suggestions

* apply review

Co-authored-by: Andreas Rumpf <[email protected]>

fix inline syntax highlighting in system.nim (#19184)

swap port to correct port order (#19177)

Co-authored-by: Jaremy Creechley <[email protected]>

feat: TLS-ALPN wrappers for OpenSSL (#19202)

Co-authored-by: Iced Quinn <[email protected]>

misc bugfixes [backport:1.2] (#19203)

treat do with pragmas but no parens as proc (#19191)

fixes #19188

[format minor] remove unnecessary spaces (#19216)

Making TCC work again on Windows --cpu:amd64 - fix #16326 (#19221)

* fix #16326

* removing comments

fixes a converter handling regression that caused private converters to leak into client modules; fixes #19213; [backport:1.6] (#19229)

Add support for LoongArch (#19223)

* Add support for LoongArch

* Update compiler/installer.ini

Co-authored-by: Andreas Rumpf <[email protected]>

remove `std/sharedstrings` (#19228)

* remove std/sharedstrings

it has been broken since 0.18.0

* rephrase the changelog entry

add comments to spawn and pinnedSpawn (#19230)

`spawn` uses `nimSpawn3` internally and `pinnedSpawn` uses `nimSpawn4` internally. I comment it in order to help contributors get the gist of its functionality.

fixes an old ARC bug: the produced copy/sink operations don't copy the hidden type field for objects with enabled inheritance; fixes #19205 [backport:1.6] (#19232)

nimRawSetjmp: support Windows (#19197)

* 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: status-im/nimbus-eth2#3121

Also add "nimBuiltinSetjmp" - mostly for benchmarking.

* fix for Apple's Clang++

Revert "swap port to correct port order (#19177)" (#19234)

This reverts commit 0d0c249.

move toDeque to after addLast (#19233) [backport:1.0]

Changes the order of procs definitions in order to avoid calling an undefined proc.

let Nim support Nimble 0.14 with lock-file support [backport:1.6] (#19236)

nimc.rst: fix table markup (#19239)

Various std net improvements (#19132)

* 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 <[email protected]>

- 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 <[email protected]>

fix bug #14468 zero-width split (#19248)

basicopt.txt: Unify the format (#19251)

fix: fixes bug in CVerifyPeerUseEnvVars (#19247)

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

suggestion to respect typedarray type (#19257)

* suggestion to respect typedarray

* Update jssys.nim

Co-authored-by: Sven Keller <[email protected]>

fix #19244 - solves the problem of the InAddr object constructor in Windows. (#19259)

* Update winlean.nim

* Update tnet_ll.nim

Fixed typo in manual.rst unsafeAssign->uncheckedAssign. Fixes part 1 of #19266 (#19267)

use uppercase "type" for Proxy-Authorization header (#19273)

Some servers will reject authorization requests with a lowercase "basic" type. Changing to "Basic" seems to solve these issues.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Proxy-Authorization

Update colors.nim (#19274)

* 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.

Extract runnables that specify `doccmd` (#19275) [backport:1.6]

Fix build on FreeBSD/powerpc (#19282)

It's currently misdetected as powerpc64.

Fix #19107 (#19286) [backport]

fixes grammar typos [backport] (#19289)

fix 19292 (#19293)

Fix #19297 - fixing broken list after adding empty list (#19299)

* 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.

fixes #16617 [backport] (#19300)

Update JS and nimscript import tests (#19306)

* add new modules, except experimental ones
* remove deprecated modules mersenne and sharedlist
* better describe why some modules fail and some modules don't

add compile time option for POSIX sigwait on Illumos/Solaris (#19296)

* add compile time option for POSIX sigwait on Illumos/Solaris

* fix link to documentation of `sigwait` on Illumos/Solaris

[docs] clarify the raised exception (#19308)

* [docs] clarify the raised exception

Lest developers wanna know what the exception is.

* Apply suggestions from @konsumlamm

Co-authored-by: konsumlamm <[email protected]>

Co-authored-by: konsumlamm <[email protected]>

docs: Fix typo in tut1.rst (#19309)

Fix #19314 - fixing broken `DoublyLinkedList` after adding empty `DoublyLinkedList` (#19315) [backport]

* Update lists.nim

* Update tlists.nim

fixed typos (#19316)

devel: style fix (#19318)

this allows "--styleCheck:usages --styleCheck:error"

docs: Fix typo in tut1.rst (#19324)

correct the comments (#19322)

--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 std/private/win_getsysteminfo; refactor the usage of `GetSystemInfo` (#19310)

* add std/private/win_getsysteminfo

* import at the top level

* wrappers follow nep1 too

* follow review comment

Update net.nim (#19327) [backport]

Fix #19038 - making the Nim compiler work again on Windows XP (#19331)

* Update osenv.nim

* Update win_setenv.nim

* Update lib/pure/includes/osenv.nim

* Update lib/pure/includes/osenv.nim

* fixing cstring

Co-authored-by: Andreas Rumpf <[email protected]>

fix nim-lang#19343 (#19344) [backport]

Ensure HttpClient onProgress is called once per second
Ensure that reported speed is accurate

stylecheck usages part two: stdlib cleanup (#19338)

* stylecheck usages part two: stdlib cleanup

typeinfo.nim: importCompilerProc => importcompilerproc

nre.nim: newLineFlags => newlineFlags

system.nim: JSRoot => JsRoot

ref #19319

* prefer importCompilerProc

added filemode docs (#19346)

Fix `remove` on last node of singly-linked list [backport:1.6] (#19353)

fix stylecheck error with asyncdispatch (#19350)

* 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

remove spaces between an identifier and a star (#19355)

It makes search easier by searching `+`* instead of `+` which filter lots of unexported versions.

Follow nim-lang/Nim#18681

bitsets.nim: cleanup (#19361)

make rst thread safe (#19369)

split for the convenience of review

docs: Mention `import foo {.all.}` syntax (#19377)

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 <[email protected]>

update copyright year (#19381)

docs: Fix broken cross references to `rfind` in strutils (#19382) [backport]

Fixes three broken cross references to `rfind` in strutils.
Breakage due to signature changes of the `rfind` methods.

Co-authored-by: adigitoleo <[email protected]>

move type operation section and remove deepcopy document (#19389)

ref #19173; because deepcopy is not fit for ORC/ARC which was used for spawn and spawn will be removed from compiler

deprecate unsafeAddr; extend addr (#19373)

* 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 ab83c99c507048a8396e636bf22d55fdd84d7d1c.

* doc changes; thanks to @konsumlamm

Co-authored-by: konsumlamm <[email protected]>

Co-authored-by: konsumlamm <[email protected]>

improve changelog a bit (#19400)

mangle names in nimbase.h using cppDefine (#19395) [backport]

mangle names in nimbase.h
fix comments

Optimize lent in JS [backport:1.6] (#19393)

* Optimize lent in JS [backport:1.6]

* addr on lent doesn't work anymore, don't use it

* use unsafeAddr  in test again for older versions

update deprecated example (#19415)

`toNimIdent` proc is deprecated, so I replaced it with `ident` proc

Improve Zshell completion (#19354)

fix stricteffects (nimsuggest/sexp) (#19405)

* fix stricteffects (nimsuggest/sexp)

* Update tstrict_effects3.nim

* Update tests/effects/tstrict_effects3.nim

suppress deprecated warnings (#19408)

* suppress deprecated warnings

once bump version to 1.7.3 enable deprecated messages

* deprecate later

add an example to setControlCHook (#19416)

* add an example to setControlCHook

* [skip CI] format example for setControlCHook

Co-authored-by: Nathan Blaxall <[email protected]>

fix term rewriting with sideeffect (#19410)

* fix term rewriting with sideeffect

fix #6217

* add tests

* Update tests/template/template_various.nim

Resolve cross file resolution errors in atomics (#19422) [backport:1.6]

* Resolve call undeclared routine testAndSet

* Fix undeclared field atomicType

Fix #11923 (#19427)

* Apply commit nim-lang/Nim@5da931f that was never merged (was part of a bigger PR). Should fix issue #11932

* add a generic object for custom pragma

os: faster getFileSize (#19438)

Use "stat" rather than "open", "seek", and "close" system calls.
The Windows implementation remains the same.

bugfix: varargs count as open arrays (#19447)

update outdated link (#19465)

Ref nim-lang/Nim#19463

Update jsfetch with latest API and fix missing bindings (#19473)

* 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 <[email protected]>

* Update lib/std/jsfetch.nim

Co-authored-by: Juan Carlos <[email protected]>

* remove experimental flag

Co-authored-by: Juan Carlos <[email protected]>

No longer segfault when using a typeclass with a self referencing type (#19467)

Clonkk fix2 11923 (#19451)

* fix nnkBracketExpr not compiling for getImpl on customPragmaNode

* fix test import

* fix alias not working with hasCustomPragmas

fix parseEnum cannot parse enum with const fields (#19466)

fix #19463

Add compilers and hints to default nim.cfg (#18424)

don't use a temp for addr [backport: 1.6] (#19503)

* don't use a temp for addr

fix #19497

* Update compiler/ccgcalls.nim

Co-authored-by: konsumlamm <[email protected]>

* add a test

Co-authored-by: konsumlamm <[email protected]>

fixes #19404 by protecting the memory we borrow from. this replaces crashes with minor memory leaks which seems to be acceptable. In the longer run we need a better VM that didn't grow hacks over a decade. (#19515)

Co-authored-by: flywind <[email protected]>

Remove backslash in glob pattern (#19524)

use OrderedTable instead of OrderedTableRef for mimedb (#19522)

* use OrderedTable instead of OrderedTableRef for mimedb

Signed-off-by: David Krause <[email protected]>

* added changelog entry for mimedb change

Signed-off-by: David Krause <[email protected]>

Remove Deprecated oids.oidsToString (#19519)

* Remove deprecated oids.oidToString

* Remove deprecated oids.oidToString

Remove deprecated math.c_frexp (#19518)

* Remove Deprecated math proc

* Remove Deprecated math proc

* Remove Deprecated math proc

[testcase] genSym fails to make unique identifier for ref object types (#19506)

close #15118

Documentation: Fix word usage (#19529)

Update chcks.nim (#19540)

keep casing of noinit and noreturn pragmas consistently documented (#19535)

compile pragma: cache the result sooner (#19554)

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.
Clyybber pushed a commit to Clyybber/nimskull that referenced this pull request Feb 25, 2022
Concerns these changes:
nim-lang/Nim@727c637...340b5a1

Excluded changes are:
nim-lang/Nim#18963
nim-lang/Nim#19003
nim-lang/Nim#19043
nim-lang/Nim#19055
nim-lang/Nim#19053
nim-lang/Nim#19064
nim-lang/Nim#18642
nim-lang/Nim#19062
nim-lang/Nim#19082
nim-lang/Nim#19090
nim-lang/Nim#19077
nim-lang/Nim#19021
nim-lang/Nim#19100
nim-lang/Nim#19102
nim-lang/Nim#19111
nim-lang/Nim#19115
nim-lang/Nim#19133
nim-lang/Nim#19142
nim-lang/Nim#19158
nim-lang/Nim#19129
nim-lang/Nim#19137
nim-lang/Nim#19168
nim-lang/Nim#19156
nim-lang/Nim#19147
nim-lang/Nim#19180
nim-lang/Nim#19183
nim-lang/Nim#19182
nim-lang/Nim#19187
nim-lang/Nim#19179
nim-lang/Nim#19209
nim-lang/Nim#19210
nim-lang/Nim#19207
nim-lang/Nim#19219
nim-lang/Nim#19195
nim-lang/Nim#19212
nim-lang/Nim#19134
nim-lang/Nim#19235
nim-lang/Nim#19252
nim-lang/Nim#19196
nim-lang/Nim#19295
nim-lang/Nim#19301
nim-lang/Nim#19181
nim-lang/Nim#17223
nim-lang/Nim#19370
nim-lang/Nim#19385
nim-lang/Nim#19307
nim-lang/Nim#19394
nim-lang/Nim#19399
nim-lang/Nim#19390
nim-lang/Nim#19407
nim-lang/Nim#19419
nim-lang/Nim#19421
nim-lang/Nim#19363
nim-lang/Nim#19406
nim-lang/Nim#19431
nim-lang/Nim#19455
nim-lang/Nim#19461
nim-lang/Nim@cb894c7
nim-lang/Nim#19462
nim-lang/Nim#19442
nim-lang/Nim#19437
nim-lang/Nim#19433
nim-lang/Nim#19512
nim-lang/Nim#19487
nim-lang/Nim#19543

Excluded changes include major changes which require more consideration
and changes which don't apply to the current code anymore but could be
worth porting over still.

Excluded changes which only change the identifier casing in tests
or only concern code removed in nimskull aren't listed.

Begin commit listing:

use two underscores for easy demangling [backport:1.6] (#19028)

Add Elbrus 2000 architecture (#19024)

* Add Elbrus 2000 architecture

* Add e2k to niminst

* Update compiler/installer.ini

Co-authored-by: Andreas Rumpf <[email protected]>

remove exception (#18906)

allow converting static vars to `openArray` (#19035)

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.

use the correct header for TIOCGWINSZ on Solaris (#19037)

Minor update to terminal docs (#19056)

* 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 <[email protected]>

* Update lib/pure/terminal.nim

Co-authored-by: konsumlamm <[email protected]>

* Added back f: file to cursor movement

* Removed unnecessary comments

Co-authored-by: konsumlamm <[email protected]>

fix a tiny formating issue in doc/destructors.rst (#19058)

fix a tiny code snippet formatting issue in `doc/constructors.rst`, again (#19065)

Fix nimIdentNormalize, fixes #19067 (#19068)

* Make nimIdentNormalize return "" when passed ""; fixes #19067

Fixes #19067

* Add tests for nimIdentNormalize

fix #18971 (#19070) [backport:1.6]

since the example code return value from global variable, instead
of first argument, the `n.len` is 1 which causes compiler crashes.

fixes #19000 (#19032)

* fixes #19000

* progress

fix #18410 (Errors initializing an object of RootObj with the C++ backend) [backport] (#18836)

* fix #18410

* one line comment

* typo

* typo

* cover cpp

update numbers of lifetime-tracking hooks in doc/destructors.rst (#19088)

bootstrapping Nim compiler with `cpp --gc:orc` (#19087)

libs/impore/re: Add note about the requirement of `matches` to be pre-allocated (#19081)

Add few runnableExamples for `findBounds` for clarity.

Fixes nim-lang/Nim#18775

Add test for issue 15435 (#19079)

* Add test for issue 15435

Closes nim-lang/Nim#15435.

* Specify bug # in comment

Addresses nim-lang/Nim#19079 (comment)

manual: Document the use of `static` as a proc call (#19084)

* manual: Document the use of `static` as a proc call

Also adds tests.

Fixes nim-lang/Nim#16987 .

* Update doc/manual.rst

Co-authored-by: konsumlamm <[email protected]>

* Use the "bug #NNNN" comment syntax for consistency

Ref:
https://nim-lang.github.io/Nim/contributing.html#writing-tests-stdlib

> Always refer to a GitHub issue using the following exact syntax: bug
for tooling.

* manual: Undocument usage of foo.static

foo.static and foo.static() are not expected to work.

Ref: https://github.com/nim-lang/Nim/pull/19084/files#r741203578

Co-authored-by: konsumlamm <[email protected]>

manual: Document that comma propagates the default values of parameters (#19080)

* manual: Document that comma propagates the default values of parameters

Fixes nim-lang/Nim#15949.

* Use the "bug #NNNN" comment syntax for consistency

Ref:
https://nim-lang.github.io/Nim/contributing.html#writing-tests-stdlib

> Always refer to a GitHub issue using the following exact syntax: bug
for tooling.

fixes #19011 [backport:1.6] (#19114)

Add deprecation pragmas in lib/deprecated/pure (#19113)

Deprecate `std/sharedlist` and `std/sharedtables` (#19112)

fix nimindexterm in rst2tex/doc2tex [backport] (#19106)

* fix nimindexterm (rst2tex/doc2tex) [backport]

* Add support for indexing in rst

Call {.cursor.} a pragma. (#19116)

* 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.

Remove tlsEmulation enabled from Windows + GCC config (#19119) [backport:1.6]

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 nim-lang/Nim#18146 (comment) for discussion and perf impact. [backport:1.6]

Add security tip for setCookie (#19117)

* Add security tip for setCookie

* Update lib/pure/cookies.nim

Co-authored-by: Dominik Picheta <[email protected]>

* Update lib/pure/cookies.nim

Co-authored-by: konsumlamm <[email protected]>

Co-authored-by: Andreas Rumpf <[email protected]>
Co-authored-by: Dominik Picheta <[email protected]>
Co-authored-by: konsumlamm <[email protected]>

correct cookie docs (#19122)

refactoring: orc can use getThreadId() (#19123)

* refactoring: orc can use getThreadId()

* progress

fixed colorNames sorting mistake (#19125) [backport]

update manual (#19130) [backport]

Merge file size fields correctly on Windows (#19141)

* 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

Fix punycode.decode function (#19136)

* 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 <[email protected]>

Fix undeclared 'SYS_getrandom' on emscripten (#19144)

wrong spaces (3 => 2) (#19145)

`caseStmtMacros` no longer experimental, experimental manual refactor (#19173)

* `caseStmtMacros` no longer experimental, experimental manual refactor

* Update doc/manual.rst

* apply review suggestions

* apply review

Co-authored-by: Andreas Rumpf <[email protected]>

fix inline syntax highlighting in system.nim (#19184)

swap port to correct port order (#19177)

Co-authored-by: Jaremy Creechley <[email protected]>

feat: TLS-ALPN wrappers for OpenSSL (#19202)

Co-authored-by: Iced Quinn <[email protected]>

misc bugfixes [backport:1.2] (#19203)

treat do with pragmas but no parens as proc (#19191)

fixes #19188

[format minor] remove unnecessary spaces (#19216)

Making TCC work again on Windows --cpu:amd64 - fix #16326 (#19221)

* fix #16326

* removing comments

fixes a converter handling regression that caused private converters to leak into client modules; fixes #19213; [backport:1.6] (#19229)

Add support for LoongArch (#19223)

* Add support for LoongArch

* Update compiler/installer.ini

Co-authored-by: Andreas Rumpf <[email protected]>

remove `std/sharedstrings` (#19228)

* remove std/sharedstrings

it has been broken since 0.18.0

* rephrase the changelog entry

add comments to spawn and pinnedSpawn (#19230)

`spawn` uses `nimSpawn3` internally and `pinnedSpawn` uses `nimSpawn4` internally. I comment it in order to help contributors get the gist of its functionality.

fixes an old ARC bug: the produced copy/sink operations don't copy the hidden type field for objects with enabled inheritance; fixes #19205 [backport:1.6] (#19232)

nimRawSetjmp: support Windows (#19197)

* 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: status-im/nimbus-eth2#3121

Also add "nimBuiltinSetjmp" - mostly for benchmarking.

* fix for Apple's Clang++

Revert "swap port to correct port order (#19177)" (#19234)

This reverts commit 0d0c249.

move toDeque to after addLast (#19233) [backport:1.0]

Changes the order of procs definitions in order to avoid calling an undefined proc.

let Nim support Nimble 0.14 with lock-file support [backport:1.6] (#19236)

nimc.rst: fix table markup (#19239)

Various std net improvements (#19132)

* 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 <[email protected]>

- 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 <[email protected]>

fix bug #14468 zero-width split (#19248)

basicopt.txt: Unify the format (#19251)

fix: fixes bug in CVerifyPeerUseEnvVars (#19247)

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

suggestion to respect typedarray type (#19257)

* suggestion to respect typedarray

* Update jssys.nim

Co-authored-by: Sven Keller <[email protected]>

fix #19244 - solves the problem of the InAddr object constructor in Windows. (#19259)

* Update winlean.nim

* Update tnet_ll.nim

Fixed typo in manual.rst unsafeAssign->uncheckedAssign. Fixes part 1 of #19266 (#19267)

use uppercase "type" for Proxy-Authorization header (#19273)

Some servers will reject authorization requests with a lowercase "basic" type. Changing to "Basic" seems to solve these issues.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Proxy-Authorization

Update colors.nim (#19274)

* 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.

Extract runnables that specify `doccmd` (#19275) [backport:1.6]

Fix build on FreeBSD/powerpc (#19282)

It's currently misdetected as powerpc64.

Fix #19107 (#19286) [backport]

fixes grammar typos [backport] (#19289)

fix 19292 (#19293)

Fix #19297 - fixing broken list after adding empty list (#19299)

* 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.

fixes #16617 [backport] (#19300)

Update JS and nimscript import tests (#19306)

* add new modules, except experimental ones
* remove deprecated modules mersenne and sharedlist
* better describe why some modules fail and some modules don't

add compile time option for POSIX sigwait on Illumos/Solaris (#19296)

* add compile time option for POSIX sigwait on Illumos/Solaris

* fix link to documentation of `sigwait` on Illumos/Solaris

[docs] clarify the raised exception (#19308)

* [docs] clarify the raised exception

Lest developers wanna know what the exception is.

* Apply suggestions from @konsumlamm

Co-authored-by: konsumlamm <[email protected]>

Co-authored-by: konsumlamm <[email protected]>

docs: Fix typo in tut1.rst (#19309)

Fix #19314 - fixing broken `DoublyLinkedList` after adding empty `DoublyLinkedList` (#19315) [backport]

* Update lists.nim

* Update tlists.nim

fixed typos (#19316)

devel: style fix (#19318)

this allows "--styleCheck:usages --styleCheck:error"

docs: Fix typo in tut1.rst (#19324)

correct the comments (#19322)

--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 std/private/win_getsysteminfo; refactor the usage of `GetSystemInfo` (#19310)

* add std/private/win_getsysteminfo

* import at the top level

* wrappers follow nep1 too

* follow review comment

Update net.nim (#19327) [backport]

Fix #19038 - making the Nim compiler work again on Windows XP (#19331)

* Update osenv.nim

* Update win_setenv.nim

* Update lib/pure/includes/osenv.nim

* Update lib/pure/includes/osenv.nim

* fixing cstring

Co-authored-by: Andreas Rumpf <[email protected]>

fix nim-lang#19343 (#19344) [backport]

Ensure HttpClient onProgress is called once per second
Ensure that reported speed is accurate

stylecheck usages part two: stdlib cleanup (#19338)

* stylecheck usages part two: stdlib cleanup

typeinfo.nim: importCompilerProc => importcompilerproc

nre.nim: newLineFlags => newlineFlags

system.nim: JSRoot => JsRoot

ref #19319

* prefer importCompilerProc

added filemode docs (#19346)

Fix `remove` on last node of singly-linked list [backport:1.6] (#19353)

fix stylecheck error with asyncdispatch (#19350)

* 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

remove spaces between an identifier and a star (#19355)

It makes search easier by searching `+`* instead of `+` which filter lots of unexported versions.

Follow nim-lang/Nim#18681

bitsets.nim: cleanup (#19361)

make rst thread safe (#19369)

split for the convenience of review

docs: Mention `import foo {.all.}` syntax (#19377)

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 <[email protected]>

update copyright year (#19381)

docs: Fix broken cross references to `rfind` in strutils (#19382) [backport]

Fixes three broken cross references to `rfind` in strutils.
Breakage due to signature changes of the `rfind` methods.

Co-authored-by: adigitoleo <[email protected]>

move type operation section and remove deepcopy document (#19389)

ref #19173; because deepcopy is not fit for ORC/ARC which was used for spawn and spawn will be removed from compiler

deprecate unsafeAddr; extend addr (#19373)

* 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 ab83c99c507048a8396e636bf22d55fdd84d7d1c.

* doc changes; thanks to @konsumlamm

Co-authored-by: konsumlamm <[email protected]>

Co-authored-by: konsumlamm <[email protected]>

improve changelog a bit (#19400)

mangle names in nimbase.h using cppDefine (#19395) [backport]

mangle names in nimbase.h
fix comments

Optimize lent in JS [backport:1.6] (#19393)

* Optimize lent in JS [backport:1.6]

* addr on lent doesn't work anymore, don't use it

* use unsafeAddr  in test again for older versions

update deprecated example (#19415)

`toNimIdent` proc is deprecated, so I replaced it with `ident` proc

Improve Zshell completion (#19354)

fix stricteffects (nimsuggest/sexp) (#19405)

* fix stricteffects (nimsuggest/sexp)

* Update tstrict_effects3.nim

* Update tests/effects/tstrict_effects3.nim

suppress deprecated warnings (#19408)

* suppress deprecated warnings

once bump version to 1.7.3 enable deprecated messages

* deprecate later

add an example to setControlCHook (#19416)

* add an example to setControlCHook

* [skip CI] format example for setControlCHook

Co-authored-by: Nathan Blaxall <[email protected]>

fix term rewriting with sideeffect (#19410)

* fix term rewriting with sideeffect

fix #6217

* add tests

* Update tests/template/template_various.nim

Resolve cross file resolution errors in atomics (#19422) [backport:1.6]

* Resolve call undeclared routine testAndSet

* Fix undeclared field atomicType

Fix #11923 (#19427)

* Apply commit nim-lang/Nim@5da931f that was never merged (was part of a bigger PR). Should fix issue #11932

* add a generic object for custom pragma

os: faster getFileSize (#19438)

Use "stat" rather than "open", "seek", and "close" system calls.
The Windows implementation remains the same.

bugfix: varargs count as open arrays (#19447)

update outdated link (#19465)

Ref nim-lang/Nim#19463

Update jsfetch with latest API and fix missing bindings (#19473)

* 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 <[email protected]>

* Update lib/std/jsfetch.nim

Co-authored-by: Juan Carlos <[email protected]>

* remove experimental flag

Co-authored-by: Juan Carlos <[email protected]>

No longer segfault when using a typeclass with a self referencing type (#19467)

Clonkk fix2 11923 (#19451)

* fix nnkBracketExpr not compiling for getImpl on customPragmaNode

* fix test import

* fix alias not working with hasCustomPragmas

fix parseEnum cannot parse enum with const fields (#19466)

fix #19463

Add compilers and hints to default nim.cfg (#18424)

don't use a temp for addr [backport: 1.6] (#19503)

* don't use a temp for addr

fix #19497

* Update compiler/ccgcalls.nim

Co-authored-by: konsumlamm <[email protected]>

* add a test

Co-authored-by: konsumlamm <[email protected]>

fixes #19404 by protecting the memory we borrow from. this replaces crashes with minor memory leaks which seems to be acceptable. In the longer run we need a better VM that didn't grow hacks over a decade. (#19515)

Co-authored-by: flywind <[email protected]>

Remove backslash in glob pattern (#19524)

use OrderedTable instead of OrderedTableRef for mimedb (#19522)

* use OrderedTable instead of OrderedTableRef for mimedb

Signed-off-by: David Krause <[email protected]>

* added changelog entry for mimedb change

Signed-off-by: David Krause <[email protected]>

Remove Deprecated oids.oidsToString (#19519)

* Remove deprecated oids.oidToString

* Remove deprecated oids.oidToString

Remove deprecated math.c_frexp (#19518)

* Remove Deprecated math proc

* Remove Deprecated math proc

* Remove Deprecated math proc

[testcase] genSym fails to make unique identifier for ref object types (#19506)

close #15118

Documentation: Fix word usage (#19529)

Update chcks.nim (#19540)

keep casing of noinit and noreturn pragmas consistently documented (#19535)

compile pragma: cache the result sooner (#19554)

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.
bors bot added a commit to nim-works/nimskull that referenced this pull request Feb 26, 2022
240: Merge upstream changes r=Clyybber a=Clyybber

Concerns these changes:
nim-lang/Nim@727c637...340b5a1

Excluded changes are:
nim-lang/Nim#18963
nim-lang/Nim#19003
nim-lang/Nim#19043
nim-lang/Nim#19055
nim-lang/Nim#19053
nim-lang/Nim#19064
nim-lang/Nim#18642
nim-lang/Nim#19062
nim-lang/Nim#19082
nim-lang/Nim#19090
nim-lang/Nim#19077
nim-lang/Nim#19021
nim-lang/Nim#19100
nim-lang/Nim#19102
nim-lang/Nim#19111
nim-lang/Nim#19115
nim-lang/Nim#19133
nim-lang/Nim#19142
nim-lang/Nim#19158
nim-lang/Nim#19129
nim-lang/Nim#19137
nim-lang/Nim#19168
nim-lang/Nim#19156
nim-lang/Nim#19147
nim-lang/Nim#19180
nim-lang/Nim#19183
nim-lang/Nim#19182
nim-lang/Nim#19187
nim-lang/Nim#19179
nim-lang/Nim#19209
nim-lang/Nim#19210
nim-lang/Nim#19207
nim-lang/Nim#19219
nim-lang/Nim#19195
nim-lang/Nim#19212
nim-lang/Nim#19134
nim-lang/Nim#19235
nim-lang/Nim#19252
nim-lang/Nim#19196
nim-lang/Nim#19295
nim-lang/Nim#19301
nim-lang/Nim#19181
nim-lang/Nim#17223
nim-lang/Nim#19370
nim-lang/Nim#19385
nim-lang/Nim#19307
nim-lang/Nim#19394
nim-lang/Nim#19399
nim-lang/Nim#19390
nim-lang/Nim#19407
nim-lang/Nim#19419
nim-lang/Nim#19421
nim-lang/Nim#19363
nim-lang/Nim#19406
nim-lang/Nim#19431
nim-lang/Nim#19455
nim-lang/Nim#19461
nim-lang/Nim@cb894c7
nim-lang/Nim#19462
nim-lang/Nim#19442
nim-lang/Nim#19437
nim-lang/Nim#19433
nim-lang/Nim#19512
nim-lang/Nim#19487
nim-lang/Nim#19543

Excluded changes include major changes which require more consideration
and changes which don't apply to the current code anymore but could be
worth porting over still.

Excluded changes which only change the identifier casing in tests
or only concern code removed in nimskull aren't listed.

Commit listing is in the commit message

Co-authored-by: The Nim Contributors <>
PMunch pushed a commit to PMunch/Nim that referenced this pull request Mar 28, 2022
narimiran pushed a commit that referenced this pull request Apr 24, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants