| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
| |
fixes #20303; wasMoved expressions with side effects
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* [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>
|
|
|
|
|
|
|
| |
(#19918)
* dec inLoop after exiting the while scope in computeLiveRanges
* add testcase
|
|
|
| |
fix #19862; make widestrs consistent in refc and orc
|
|
|
|
|
|
|
|
|
| |
1.6] (#19723)
* fix #19435; openArray wronyly registers typebounds
* add testcase
* don't create TypeBoundOps for tyOpenArray, tyVarargs
|
|
|
|
|
|
|
|
|
|
|
| |
* [add testcase] arc problems with recursive types
close #9650
* do test
* expand
* Update tests/arc/t9650.nim
|
|
|
|
|
| |
* fix #16458; make useNimRtl compile for --gc:orc/arc
* fix tests
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* don't use a temp for addr
fix #19497
* Update compiler/ccgcalls.nim
Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
* add a test
Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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 <44230978+konsumlamm@users.noreply.github.com>
Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
|
|
|
|
|
| |
* style usages (openArray)
* revert doc changes
|
|
|
|
| |
hidden type field for objects with enabled inheritance; fixes #19205 [backport:1.6] (#19232)
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
[backport] (#18836)
* fix #18410
* one line comment
* typo
* typo
* cover cpp
|
|
|
|
| |
since the example code return value from global variable, instead
of first argument, the `n.len` is 1 which causes compiler crashes.
|
| |
|
|
|
|
|
| |
* fix #16558
* add testcase
|
| |
|
| |
|
|
|
|
|
|
|
| |
* fix #18627
* add testcase
* rename
* another
* remove tyVarargs
|
|
|
|
|
| |
* rename `endswith` to `endsWith`
* rename
|
| |
|
|
|
| |
* fixes #18565
|
|
|
|
|
| |
* fixes #18469
* Update compiler/injectdestructors.nim
|
|
|
|
|
| |
* added switch
* alloc.nim needs page aligned memory blocks
|
|
|
| |
* fixes #17893
|
|
|
|
|
| |
* beneficial refactoring; use system.Endianness
* closes #18433
|
|
|
| |
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>
|
|
|
|
|
|
| |
* ORC refactoring in preparation for further changes (=dispose must die)
* ORC: embrace =destroy, avoid =dispose
* ORC: no need for =dispose
* closes #18421
|
| |
|
|
|
|
|
| |
* ORC: track escaping parameters properly
* fixes #18240
|
| |
|
|
|
|
| |
* ARC: fixes memory leaks with newSeq used in a loop [backport:1.4]
* Update tests/arc/tnewseq_legacy.nim
|
|
|
|
|
|
|
|
|
| |
* enable using dbg: without a context
* Optimally joining first write/last read analysis
* Add test for #18002
* potLastReads -> potentialLastReads
|
|
|
|
|
| |
* fixed a .cursor inference bug
* added a test case
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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>
|
|
|
|
|
| |
* Fixes #17450
* Add missing test output
|
|
|
| |
This reverts commit 5f0c52048970cb7449937bd19191638c9e9f0c8f.
|
|
|
|
|
| |
* Fixes #17450
* Add missing test output
|
|
|
|
|
|
|
| |
* Fix #16437
* Fix
* Small cleanup
|
|
|
|
|
|
| |
* deprecate newruntime
* tests
* Update compiler/commands.nim
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* fixes #17173
* add testcase (#17214)
* Apply suggestions from code review
* fix for newruntime
* Apply suggestions from code review
* Update lib/system.nim
* Update lib/system.nim
* Update lib/system.nim
Co-authored-by: Danil Yarantsev <tiberiumk12@gmail.com>
Co-authored-by: flywind <xzsflywind@gmail.com>
Co-authored-by: Danil Yarantsev <tiberiumk12@gmail.com>
|
| |
|
|
|
|
|
|
|
|
|
| |
* fix #17159 items(cstring) works in VM
* improve test coverage tests/stdlib/tcstring.nim; add helpers: whenRuntimeJs, whenVMorJs
* document items(cstring)
* address comments
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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
|
|
|
|
|
|
|
| |
* fixes #17033 [backport:1.4]
* make test robust against stdlib gensym things
* cleanup assertions.nim to make topt_no_cursor easier to get right
|
|
|
| |
This reverts commit 216be4060a853b3425501318537d598c4842eefc.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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
|