mirror of
https://github.com/nim-lang/Nim.git
synced 2026-07-22 00:41:28 +00:00
* fix =#13790 ptr char (+friends) should not implicitly convert to cstring * Apply suggestions from code review * first round; compiles on windows * nimPreviewSlimSystem * conversion is unsafe, cast needed * fixes more tests * fixes asyncnet * another try another error * last one * true * one more * why bugs didn't show at once * add `nimPreviewCstringConversion` switch * typo Co-authored-by: xflywind <43030857+xflywind@users.noreply.github.com>
This commit is contained in:
@@ -42,6 +42,8 @@
|
||||
- Enabling `-d:nimPreviewSlimSystem` removes the import of `channels_builtin` in
|
||||
in the `system` module.
|
||||
|
||||
- Enabling `-d:nimPreviewCstringConversion`, `ptr char`, `ptr array[N, char]` and `ptr UncheckedArray[N, char]` don't support conversion to cstring anymore.
|
||||
|
||||
- The `gc:v2` option is removed.
|
||||
|
||||
- The `mainmodule` and `m` options are removed.
|
||||
|
||||
@@ -6,6 +6,7 @@ define:booting
|
||||
define:nimcore
|
||||
define:nimPreviewFloatRoundtrip
|
||||
define:nimPreviewSlimSystem
|
||||
define:nimPreviewCstringConversion
|
||||
define:nimPreviewRangeDefault
|
||||
threads:off
|
||||
|
||||
|
||||
@@ -1391,16 +1391,18 @@ proc typeRel(c: var TCandidate, f, aOrig: PType,
|
||||
of tyNil: result = f.allowsNil
|
||||
of tyString: result = isConvertible
|
||||
of tyPtr:
|
||||
# ptr[Tag, char] is not convertible to 'cstring' for now:
|
||||
if a.len == 1:
|
||||
let pointsTo = a[0].skipTypes(abstractInst)
|
||||
if pointsTo.kind == tyChar: result = isConvertible
|
||||
elif pointsTo.kind == tyUncheckedArray and pointsTo[0].kind == tyChar:
|
||||
result = isConvertible
|
||||
elif pointsTo.kind == tyArray and firstOrd(nil, pointsTo[0]) == 0 and
|
||||
skipTypes(pointsTo[0], {tyRange}).kind in {tyInt..tyInt64} and
|
||||
pointsTo[1].kind == tyChar:
|
||||
result = isConvertible
|
||||
if isDefined(c.c.config, "nimPreviewCstringConversion"):
|
||||
result = isNone
|
||||
else:
|
||||
if a.len == 1:
|
||||
let pointsTo = a[0].skipTypes(abstractInst)
|
||||
if pointsTo.kind == tyChar: result = isConvertible
|
||||
elif pointsTo.kind == tyUncheckedArray and pointsTo[0].kind == tyChar:
|
||||
result = isConvertible
|
||||
elif pointsTo.kind == tyArray and firstOrd(nil, pointsTo[0]) == 0 and
|
||||
skipTypes(pointsTo[0], {tyRange}).kind in {tyInt..tyInt64} and
|
||||
pointsTo[1].kind == tyChar:
|
||||
result = isConvertible
|
||||
else: discard
|
||||
|
||||
of tyEmpty, tyVoid:
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
switch("styleCheck", "usages")
|
||||
switch("styleCheck", "error")
|
||||
switch("define", "nimPreviewSlimSystem")
|
||||
switch("define", "nimPreviewSlimSystem")
|
||||
switch("define", "nimPreviewCstringConversion")
|
||||
@@ -1 +1,2 @@
|
||||
--d:nimPreviewSlimSystem
|
||||
--d:nimPreviewSlimSystem
|
||||
--d:nimPreviewCstringConversion
|
||||
Reference in New Issue
Block a user