[Vm-dev] Pharo.image and the VM simulator
Alistair Grant
akgrant0710 at gmail.com
Mon Oct 8 06:18:42 UTC 2018
Hi Everyone,
I'm trying to get a Pharo image running in the VM simulator (as part of
working towards writing a FileAttributesPluginSimulator). My image
happens to use UnixOSProcessPlugin>>getCurrentWorkingDirectory during
startup, and this isn't yet supported in the simulator (there's no
UnixOSProcessPluginSimulator class).
For reference, the method is:
UnixIOProcessPlugin>>primitiveGetCurrentWorkingDirectory
"Answer a string containing the current working directory."
| cwd cwdString bufferSize incrementBy maxSize buffer |
<export: true>
<var: 'buffer' type: #'char *'>
<var: 'cwd' type: #'char *'>
bufferSize := 100.
incrementBy := 100.
maxSize := 5000.
[cwdString := interpreterProxy
instantiateClass: interpreterProxy classString
indexableSize: bufferSize.
buffer := interpreterProxy arrayValueOf: cwdString.
cwd := self get: buffer cwd: bufferSize. "getcwd(buffer, bufferSize)"
(cwd = 0
and: [bufferSize < maxSize])]
whileTrue:
[bufferSize := bufferSize + incrementBy].
cwd = 0
ifTrue:
[interpreterProxy primitiveFail]
ifFalse:
[cwdString := self stringFromCString: cwd.
interpreterProxy pop: 1 thenPush: cwdString]
In the simulator, cwdString and buffer are both SmallIntegers (the
Oop and begining of the string data respectively).
How can I write the contents of the string in to buffer as part of
the #get:cwd: simulation?
For reference I'd also like to have the answer given the oop
(cwdString).
>From Clement's answer to Ben in
http://forum.world.st/Exploring-the-simulator-was-Re-REPL-image-for-simulation-td4896870.html
it seems like it may not be possible. In that case I'd have to re-write
the primitive to avoid this type of code.
The only other similar code I could find used an uninitialised buffer on
the stack, so had something like:
self cCode: '' inSmalltalk:[ buffer := ByteArray new: 256 ].
and so passed the actual object to the function simulation.
Thanks,
Alistair
More information about the Vm-dev
mailing list