Does any body besides me think the following code should output an empty string?
    
    
    import memfiles
    var memSlice: MemSlice
    echo '"', memSlice, '"'
    
    
    Run

instead of the following error:
    
    
    /Users/dennismisener/work/Nim/test.nim(3) test
    
/Users/dennismisener/.choosenim/toolchains/nim-2.0.8/lib/pure/memfiles.nim(420) 
$
    
/Users/dennismisener/.choosenim/toolchains/nim-2.0.8/lib/system/fatal.nim(53) 
sysFatag
    Error: unhandled exception: index out of bounds, the container is empty 
[IndexDefect]
    Error: execution of an external program failed: 
'/Users/dennismisener/.cache/nim/test_d/test_4F44913C0CDB58A8455A8925F2E5EF9B25FCDE0E'
    
    
    Run

The reported code in `/lib/pure/memfiles.nim` is:
    
    
    proc `$`*(ms: MemSlice): string {.inline.} =
      ## Return a Nim string built from a MemSlice.
      result.setLen(ms.size)
      copyMem(addr(result[0]), ms.data, ms.size)
    
    
    Run

Perhaps replacing the last line with:
    
    
      copyMem(cast[pointer](result.cstring), ms.data, ms.size)
    
    Run

would be more _forgiving_?

This is appears to be triggered by trying to determine the starting address of 
an empty Nim string ( _unless of course bound checking is disabled_ )

I've noticed there are similar constructs throughout the Nim codebase which 
might also be problematic.

Reply via email to