summary refs log tree commit diff stats
Commit message (Collapse)AuthorAgeFilesLines
* make default values typed in proc AST same as param sym AST (#24184)metagn2024-09-273-2/+54
| | | | | | fixes #12942, fixes #19118 This is the exact same as #20735 but maybe the situation has improved after #24065.
* fixes #24173; always bundle checksums (#24189)ringabout2024-09-271-7/+6
| | | | | fixes #24173 `cloneDependency` always has its logic to use existing deps
* fix nimsuggest crash with arrow type sugar (#24185)metagn2024-09-273-1/+24
| | | | | | | | | fixes #24179 The original fix made it so calls to `skError`/`skUnknown` (in this case `->`, for some reason `sugar` couldn't be imported) returned an error node, however this breaks tsug_accquote for some reason I don't understand (it even parses as `tsug_accquote.discard`) so I've just added a guard based on the stacktrace.
* render float128 literals (#24182)metagn2024-09-272-0/+12
| | | | | | fixes #23639 Not sure if these are meant to be supported but it's better than crashing.
* only merge valid implicit pragmas to routine AST, include templates (#24171)metagn2024-09-266-6/+48
| | | | | | | | | | | | | fixes #19277, refs #24169, refs #18124 When pragmas are pushed to a routine, if the routine symbol AST isn't nil by the time the pushed pragmas are being processed, the pragmas are implicitly added to the symbol AST. However this is done without restriction on the pragma, if the pushed pragma isn't supposed to apply to the routine, it's still added to the routine. This is why the symbol AST for templates wasn't set before the pushed pragma processing in #18124. Now, the pragmas added to the AST are restricted to ones that apply to the given routine. This means we can set the template symbol AST earlier so that the pragmas get added to the template AST.
* sort modules and added std/setutils (#24168)Alfred Morgan2024-09-261-16/+17
|
* fixes requiresInit for var statements without initialization (#24177)ringabout2024-09-263-4/+18
| | | ref https://forum.nim-lang.org/t/12530
* fixes #24167; {.push deprecated.} for templates (#24170)ringabout2024-09-252-2/+11
| | | fixes #24167
* fix `nil` literal giving itself type `untyped`/`typed` [backport] (#24165)metagn2024-09-232-1/+7
| | | | | | | | | | | | fixes #24164, regression from #20091 The expression `nil` as the default value of template parameter `x: untyped` is typechecked with expected type `untyped` since #20091. The expected type is checked if it matches the `nil` literal with a match better than a subtype match, and the type is set to it if it does. However `untyped` matches with a generic match which is better, so the `nil` literal has type `untyped`. This breaks type matching for the literal. So if the expected type is `untyped` or `typed`, it is now ignored and the `nil` literal just has the `nil` type.
* Fix line info used for `UnunsedImport` from subdirectories (#24158)Jake Leahy2024-09-233-8/+14
| | | | | | | | | | | When importing from subdirectories, the line info used in `UnusedImport` warning would be the `/` node and not the actual module node. More obvious with grouped imports where all unused imports would show the same column ![image](https://github.com/user-attachments/assets/42850130-1e0e-46b9-bd72-54864a1ad41c) Fix is to just use the last child node for infixes when getting the line info
* fix tmarshalsegfault depending on execution time (#24153)metagn2024-09-221-3/+2
| | | | | | | | | | Added in #24119, the test checks if every string produced is equal, but the value of the strings depend on the `now()` timestamp of when they were produced. 30 of them are produced in a for loop in sequence with each other, but the first one is set after the data is marshalled into and unmarshalled from a file. This means the timestamp strings can differ depending on the execution time and causes this test to be flaky. Instead we just make 2 strings from the same data and check if they equal each other.
* fix custom pragma with backticks not working [backport] (#24151)metagn2024-09-222-3/+11
| | | refs https://forum.nim-lang.org/t/12522
* fixes #24147; Copy hook causes an incompatible-pointer-types (#24149)ringabout2024-09-222-4/+23
| | | fixes #24147
* fix `inTypeofContext` leaking after `compiles` raises exception ↵metagn2024-09-223-3/+10
| | | | | | | | | | | | | | | [backport:2.0] (#24152) fixes #24150, refs #22022 An exception is raised in the `semExprWithType` call, which means `dec c.inTypeofContext` is never called, but `compiles` allows compilation to continue. This means `c.inTypeofContext` is left perpetually nonzero, which prevents `compileTime` evaluation for the rest of the program. To fix this, `defer:` is used for the `dec c.inTypeofContext` call, as is done for [`instCounter`](https://github.com/nim-lang/Nim/blob/d51d88700b2fb3bd228d5e8f7385e2e4a2e2880c/compiler/seminst.nim#L374) in other parts of the compiler.
* Implement `removeHandler` in std/logging module (fixes #23757) (#24143)tocariimaa2024-09-201-0/+11
| | | | | | | | | | | | | Since the module allows for a handler to be added multiple times, for the sake of consistency, `removeHandler` only removes the first found instance of the handler in the `handlers` seq. So for n calls of `addHandler` using the same handler, n calls of `removeHandler` are required. fixes #23757 --------- Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Fix incorrect inheritance penalty for some objects (#24144)Ryan McConnell2024-09-201-1/+1
| | | | | | | | | This fixes a logic error in #23870 The inheritance penalty should be -1 if there is no inheritance relationship. Not sure how to write a test case for this one honestly. --------- Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* fixes #24141; Calling algorithm reverse causes a SIGSEGV on ORC (#24142)ringabout2024-09-192-1/+20
| | | fixes #24141
* fix inverted order of resolved `tyFromExpr` match (#24138)metagn2024-09-192-3/+19
| | | | | | | | | | | | fixes #22276 When matching against `tyFromExpr`, the compiler tries to instantiate it then operates on the potentially instantiated type. But the way it does this is inverted, it checks if the instantiated type matches the argument type, not if the argument type matches the instantiated type. This has been the case since https://github.com/nim-lang/Nim/commit/ac271e76b18110bea8046af64ceccd6b804978dd#diff-251afcd01d239369019495096c187998dd6695b6457528953237a7e4a10f7138, which doesn't comment on it, so I'm guessing this isn't intended. I don't know if it would break anything though.
* Create `IPPROTO_NONE` alias & Add test for Unix socket (#24139)tocariimaa2024-09-194-1/+64
| | | closes #24116
* fix segfault in generic param mismatch error, skip typedesc (#24140)metagn2024-09-195-20/+44
| | | | | | | | | | | | | | refs #24010, refs https://github.com/nim-lang/Nim/issues/24125#issuecomment-2358377076 The generic mismatch errors added in #24010 made it possible for `nArg` to be `nil` in the error reporting since it checked the call argument list, not the generic parameter list for the mismatching argument node, which causes a segfault. This is fixed by checking the generic parameter list immediately on any generic mismatch error. Also the `typedesc` type is skipped for the value of the generic params since it's redundant and the generic parameter constraints don't have it.
* fix system for nimscript config files on js backend (#24135)metagn2024-09-193-2/+6
| | | | | | | | | | | fixes #21441 When compiling for JS, nimscript config files have both `defined(js)` and `defined(nimscript)` be true at the same time. This is required so that the nimscript config file knows the current compilation is for the JS backend. However the system module doesn't account for this in some cases, defining JS-specific code or not defining nimscript-specific code when compiling such nimscript files. To fix this, have the `nimscript` define take priority over the `js` one.
* fix typed case range not counting for exhaustiveness (#24136)metagn2024-09-182-0/+9
| | | | | | | | | | | | fixes #22661 Range expressions in `of` branches in `case` statements start off as calls to `..` then become `nkRange` when getting typed. For this reason the compiler leaves `nkRange` alone when type checking the case statements again, but it still does the exhaustiveness checking for the entire case statement, and leaving the range alone means it doesn't count the values of the range for exhaustiveness. So the counting is now also done on `nkRange` nodes in the same way as when typechecking it the first time.
* require `not nil` to be on the same line after a type (#24134)metagn2024-09-183-1/+14
| | | fixes #23565
* make `genericsOpenSym` work at instantiation time, new behavior in `openSym` ↵metagn2024-09-1811-28/+125
| | | | | | | | | | | | | | | | | | | | | | | | | | (#24111) alternative to #24101 #23892 changed the opensym experimental switch so that it has to be enabled in the context of the generic/template declarations capturing the symbols, not the context of the instantiation of the generics/templates. This was to be in line with where the compiler gives the warnings and changes behavior in a potentially breaking way. However `results` [depends on the old behavior](https://github.com/arnetheduck/nim-results/blob/71d404b314479a6205bfd050f4fe5fe49cdafc69/results.nim#L1428), so that the callers of the macros provided by results always take advantage of the opensym behavior. To accomodate this, we change the behavior of the old experimental option that `results` uses, `genericsOpenSym`, so that ignores the information of whether or not symbols are intentionally opened and always gives the opensym behavior as long as it's enabled at instantiation time. This should keep `results` working as is. However this differs from the normal opensym switch in that it doesn't generate `nnkOpenSym`. Before it was just a generics-only version of `openSym` along with `templateOpenSym` which was only for templates. So `templateOpenSym` is removed along with this change, but no one appears to have used it.
* workaround for `strunicode` package no longer needed (#24132)Miran2024-09-181-1/+1
|
* make `var`/pointer types not match if base type has to be converted (#24130)metagn2024-09-187-5/+394
| | | | | | | | | | | | | | | | | | | split again from #24038, fixes https://github.com/status-im/nimbus-eth2/pull/6554#issuecomment-2354977102 `var`/pointer types are no longer implicitly convertible to each other if their element types either: * require an int conversion or another conversion operation as long as it's not to `openarray`, * are subtypes with pointer indirection, Previously any conversion below a subrange match would match if the element type wasn't a pointer type, then it would error later in `analyseIfAddressTaken`. Different from #24038 in that the preview define that made subrange matches also fail to match is removed for a simpler diff so that it can be backported.
* fixes rst parsing Markdown CodeblockFields blocking the loop (#24128)ringabout2024-09-182-1/+13
| | | | | | | | | ```nim import packages/docutils/[rst, rstgen] let message = """```llvm-profdata""" echo rstgen.rstToHtml(message, {roSupportMarkdown}, nil) ```
* revert second argument of `inc` not being generic (#24129)metagn2024-09-173-5/+11
| | | | refs #22328, fixes regression in https://forum.nim-lang.org/t/12465#76998
* fix segfault in effect tracking for sym node with nil type (#24114)metagn2024-09-172-1/+20
| | | | | | | | | | | | | | | | | | | | | | | | | fixes #24112 Sym nodes in templates that could be open are [given `nil` type](https://github.com/nim-lang/Nim/blob/22d2cf217597468ace8ba540d6990b1f6d8a816a/compiler/semtempl.nim#L274) when `--experimentalOpenSym` is disabled so that they can be semchecked to give a warning since #24007. The first nodes of object constructors (in this case) and in type conversions don't replace their first node (the symbol) with a typechecked one, they only call `semTypeNode` on it and leave it as is. Effect tracking checks if the type of a sym node has a destructor to check if the node type should be replaced with the sym type. But this causes a segfault when the type of the node is nil. To fix this, we always set the node type to the sym type if the node type is nil. Alternatively `semObjConstr` and `semConv` could be changed to set the type of their first node to the found type but I'm not sure if this would break anything. They could call `semExprWithType` on the first node but `semTypeNode` would still have to be called (maybe call it before?). This isn't a problem if the sym node has a type but is just nested in `nkOpenSym` or `nkOpenSymChoice` which have nil type instead (i.e. with openSym enabled), so maybe this still is the "most general" solution, I don't know.
* remove nimfrs and varslot (#24126)ringabout2024-09-172-18/+4
| | | | | | | was introduced for debugger https://github.com/nim-lang/Nim/commit/b63f322a466351bc57f8a4593009f0520c348527#diff-abd3a10386cf1ae32bfd3ffae82335a1938cc6c6d92be0ee492fcb44b9f2b552 https://github.com/nim-lang/Nim/blob/b63f322a466351bc57f8a4593009f0520c348527/lib/system/debugger.nim
* make distinct conversions addressable in VM (#24124)metagn2024-09-172-10/+65
| | | | | | | | | | | | | | | | fixes #24097 For `nkConv` addresses where the conversion is between 2 types that are equal between backends, treat assignments the same as assignments to the argument of the conversion. In the VM this seems to be in `genAsgn` and `genAsgnPatch`, as evidenced by the special logic for `nkDerefExpr` etc. This doesn't handle ranges after #24037 because `sameBackendType` is used and not `sameBackendTypeIgnoreRange`. This is so this is backportable without #24037 and another PR can be opened that implements it for ranges and adds tests as well. We can also merge `sameBackendTypeIgnoreRange` with `sameBackendType` since it doesn't seem like anything that uses it would be affected (only cycle checks and the VM), but then we still have to add tests.
* don't match arguments with typeclass type in generics (#24123)metagn2024-09-173-0/+25
| | | | | | | | | | | | | | fixes #24121 Proc arguments can have typeclass type like `Foo | Bar` that `sigmatch` handles specially before matching them to the param type, because they wouldn't match otherwise. Not exactly sure why this existed but matching any typeclass or unresolved type in generic contexts now fails the match so typing the call is delayed until instantiation. Also it turns out default values with `tyFromExpr` type depending on other parameters was never tested, this also needs a patch to make the `tyFromExpr` type `tfNonConstExpr` so it doesn't try to evaluate the other parameter at compile time.
* test case haul before 2.2 (#24119)metagn2024-09-1716-0/+281
| | | | | closes #4774, closes #7385, closes #10019, closes #12405, closes #12732, closes #13270, closes #13799, closes #15247, closes #16128, closes #16175, closes #16774, closes #17527, closes #20880, closes #21346
* Fixes #23624 "nim check crash" (#23625)Juan M Gómez2024-09-163-38/+54
|
* minor improvement (#24113)ringabout2024-09-161-2/+1
|
* disable closure iterator changes in #23787 unless `-d:nimOptIters` is ↵metagn2024-09-165-36/+150
| | | | | | | | | | | | | | enabled (#24108) refs #24094, soft reverts #23787 #23787 turned out to cause issues as described in #24094, but the changes are still positive, so it is now only enabled if compiling with `-d:nimOptIters`. Unfortunately the changes are really interwoven with each other so the checks for this switch in the code are a bit messy, but searching for `nimOptIters` should give the necessary clues to remove the switch properly later on. Locally tested that nimlangserver works but others can also check.
* fixes #24109; gdb.SYMBOL_FUNCTION_DOMAIN (#24110)ringabout2024-09-161-5/+5
| | | fixes #24109
* bumps nimble to `0.16.1` (#24102)Juan M Gómez2024-09-151-1/+1
|
* minor: export dllOverrides (#24106)ringabout2024-09-141-1/+1
|
* fix regression with uint constant losing abstract type (#24105)metagn2024-09-142-1/+7
| | | | | | | | fixes #24104, refs #23955 The line `result.typ = dstTyp` added in #23955 changes the type of `result`, which was the type of `n` due to the argument passed to `newIntNodeT`, to the abstract type skipped `dstTyp`. The line is removed to just keep the type as abstract.
* fix calls to untyped arbitrary expressions in generics (#24100)metagn2024-09-134-5/+50
| | | | | | | | | | | | | | | | | | | | fixes #24099 If an arbitrary expression without a proc type (in this case `tyFromExpr`) is called, the compiler [passes it to overload resolution](https://github.com/nim-lang/Nim/blob/793cee4de1934fd1f6271cf5fed46f01c5abb19b/compiler/semexprs.nim#L1223). But overload resolution also can't handle arbitrary expressions and treats them as not participating at all, matching with the state `csEmpty`. The compiler checks for this and gives an "identifier expected" error. Instead, now if we are in a generic context and an arbitrary expression call matched with `csEmpty`, we now return `csNoMatch` so that `semResolvedCall` can leave it untyped as appropriate. The expression flag `efNoDiagnostics` is replaced with this check. It's not checked anywhere else and the only place that uses it is `handleCaseStmtMacro`. Replacing it with `efNoUndeclared`, we just get `csEmpty` instead of `csNoMatch`, which is handled the same way here. So `efNoDiagnostics` is now removed and `efNoUndeclared` is used instead.
* treat generic body type as atomic in iterOverType (#24096)metagn2024-09-112-1/+15
| | | | | | | | | | | | | | | | | follows up #24095 In #24095 a check was added that used `iterOverType` to check if a type contained unresolved types, with the aim of always treating `tyGenericBody` as resolved. But the body of the `tyGenericBody` is also iterated over in `iterOverType`, so if the body of the type actually used generic parameters (which isn't the case in the test added in #24095, but is now), the check would still count the type as unresolved. This is handled by not iterating over the children of `tyGenericBody`, the only users of `iterOverType` are `containsGenericType` and `containsUnresolvedType`, the first one always returns true for `tyGenericBody` and the second one aims to always return false. Unfortunately this means `iterOverType` isn't as generic of an API anymore but maybe it shouldn't be used anymore for these procs.
* make sigmatch use prepareNode for tyFromExpr (#24095)metagn2024-09-115-5/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | fixes regression remaining after #24092 In #24092 `prepareNode` was updated so it wouldn't try to instantiate generic type symbols (like `Generic` when `type Generic[T] = object`, and `prepareNode` is what `tyFromExpr` uses in most of the compiler. An exception is in sigmatch, which is now changed to use `prepareNode` to make generic type symbols work in the same way as usual. However this requires another change to work: Dot fields and matches to `typedesc` on generic types generate `tyFromExpr` in generic contexts since #24005, including generic type symbols. But this means when we try to instantiate the `tyFromExpr` in sigmatch, which increases `c.inGenericContext` for potentially remaining unresolved expressions, dotcalls stay as `tyFromExpr` and so never match. To fix this, we change the "generic type" check in dot fields and `typedesc` matching to an "unresolved type" check which excludes generic body types; and for generic body types, we only generate `tyFromExpr` if the dot field is a generic parameter of the generic type (so that it gets resolved only at instantiation). Notes for the future: * Sigmatch shouldn't have to `inc c.inGenericContext`, if a `tyFromExpr` can't instantiate it's fine if we just fail the match (i.e. redirect the instantiation errors from `semtypinst` to a match failure). Then again maybe this is the best way to check for inability to instantiate. * The `elif c.inGenericContext > 0 and t.containsUnresolvedType` check in dotfields could maybe be simplified to just checking for `tyFromExpr` and `tyGenericParam`, but I don't know if this is an exhaustive list.
* implement template default values using other params (#24073)metagn2024-09-115-1/+45
| | | | | | | | | | | | | | | | | | | | | | | | | | fixes #23506 #24065 broke compilation of template parameter default values that depended on other template parameters. But this was never implemented anyway, actually attempting to use those default values breaks the compiler as in #23506. So these are now implemented as well as fixing the regression. First, if a default value expression uses any unresolved arguments (generic or normal template parameters) in a template header, we leave it untyped, instead of applying the generic typechecking (fixing the regression). Then, just before the body of the template is about to be explored, the default value expressions are handled in the same manner as the body as well. This captures symbols including the parameters, so the expression is checked again if it contains a parameter symbol, and marked with `nfDefaultRefsParam` if it does (as an optimization to not check it later). Then when the template is being evaluated, when substituting a parameter, if we try to substitute with a node marked `nfDefaultRefsParam`, we also evaluate it as we would the template body instead of passing it as just a copy (the reason why it never worked before). This way we save time if a default value doesn't refer to another parameter and could just be copied regardless.
* don't instantiate generic body type symbols in generic expressions (#24092)metagn2024-09-102-0/+31
| | | | | | | | | | | | | | | fixes #24090 Generic body types are normally a sign of an uninstantiated type, and so give errors when trying to instantiate them. However when instantiating free user expressions like the nodes of `tyFromExpr`, generic default params, static values etc, they can be used as arguments to macros or templates etc (as in the issue). So, we don't try to instantiate generic body type symbols at all in free expressions such as these (but not in for example type nodes), and avoid the error. In the future there should be a "concrete type" check for generic body types different from the check in type instantiation to deal with things like #24091, if we do want to allow this use of them.
* add posix uint changes to changelog + fix Nlink, Dev on FreeBSD (#24088)metagn2024-09-094-4/+27
| | | | | | | refs #24078, refs #24076 Since these changes are potentially breaking, add them to changelog, also add Nlink as mentioned in https://github.com/nim-lang/Nim/issues/24076#issuecomment-2337666555.
* enable closures tests for JS & implement `finished` for JS (#23521)ringabout2024-09-0913-29/+80
|
* Adds an example of using ident to name procedures to the macros tutorial ↵CharlesEnding2024-09-091-0/+30
| | | | | | | | | (#22973) As discussed here: https://forum.nim-lang.org/t/10653 --------- Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com>
* fix: InotifyEvent.name should be UncheckedArray[char] (#23413)Tobias Dély2024-09-091-1/+1
|
* + show the effectsOf pragma (if present) of procs in nimsuggest hints… ↵Nikolay Nikolov2024-09-091-0/+10
| | | | | (#23305) … and compiler messages