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

make implicit cstring conversions explicit #19488

Merged
merged 1 commit into from
Aug 19, 2022

Commits on Aug 14, 2022

  1. make implicit cstring conversions explicit

    The Nim manual says that an implicit conversion to cstring will
    eventually not be allowed [1]:
    
        A Nim `string` is implicitly convertible to `cstring` for convenience.
    
        [...]
    
        Even though the conversion is implicit, it is not *safe*: The garbage collector
        does not consider a `cstring` to be a root and may collect the underlying
        memory. For this reason, the implicit conversion will be removed in future
        releases of the Nim compiler. Certain idioms like conversion of a `const` string
        to `cstring` are safe and will remain to be allowed.
    
    And from Nim 1.6.0, such a conversion triggers a warning [2]:
    
        A dangerous implicit conversion to `cstring` now triggers a `[CStringConv]` warning.
        This warning will become an error in future versions! Use an explicit conversion
        like `cstring(x)` in order to silence the warning.
    
    However, some files in this repo produced such a warning. For example,
    before this commit, compiling `parsejson.nim` would produce:
    
        /foo/Nim/lib/pure/parsejson.nim(221, 37) Warning: implicit conversion to 'cstring' from a non-const location: my.buf; this will become a compile time error in the future [CStringConv]
        /foo/Nim/lib/pure/parsejson.nim(231, 39) Warning: implicit conversion to 'cstring' from a non-const location: my.buf; this will become a compile time error in the future [CStringConv]
    
    This commit resolves the most visible `CStringConv` warnings, making the
    cstring conversions explicit.
    
    [1] https://github.com/nim-lang/Nim/blob/d2318d9ccfe6/doc/manual.md#cstring-type
    [2] https://github.com/nim-lang/Nim/blob/d2318d9ccfe6/changelogs/changelog_1_6_0.md#type-system
    ee7 committed Aug 14, 2022
    Configuration menu
    Copy the full SHA
    75186fb View commit details
    Browse the repository at this point in the history