On 15/01/2016 16:13, Phil Clayton wrote:
The functions getX and setX in Foreign.Memory take an offset as a Word.word. I'm finding that it is possible to have a negative offset by negating the word offset, e.g. get8 (p, ~ 0w1) Is that guaranteed work generally?
Given that Word.wordSize = 63 SysWord.wordSize = 64 I wouldn't have expected this to work for get8/set8 but it does.
Phil
P.S. My efforts to inspect the source didn't get far as these functions go straight to run-time calls and I'm not familiar with internal representations in Poly/ML...
The intention is that they should work correctly for negative offsets. It seemed more useful that way. Word.toIntX does imply that the basis library understands signed word values.
Currently these functions end up in the assembly code, in the case of getX as cmem_load_asm_8, where it uses an arithmetic shift to detag. I'm currently working on incorporating them into the code-generator which will much improve efficiency but that will have to wait for the next release.
David