Hi.
I'm working on http://bugs.squeak.org/view.php?id=7320. Generally, it's been educational. However, I'm a bit stuck.
When you're working in Slang, are there special things I need to be aware of when using arrays?
I suspect that the array is 0-based in C, or 1-based and converted oddly, or something.
The whole method is below, but it won't accept the index into the external objects array that I'm passing it; according to gdb, the primitive fails at the test to check that the object is of class Semaphore.
Is there a modern image with a working version of the InterpreterSimulator around?
Also, I've found that Slang sometimes compiles my code oddly... does it sometimes not give error messages when things are awry?
Thanks, Gulik.
primitiveInputSemaphore "Register the input semaphore. The argument must be an array index into the external objects array, and it must point to a Semaphore instance. " | arg dereferencedArg semaphoreClass xArray xSize xIndex | arg := self stackTop.
" Check that the given argument is an Integer. " (self isIntegerObject: arg) ifFalse: [ self primitiveFail. ^nil ]. xArray := self splObj: ExternalObjectsArray. xSize := self stSizeOf: xArray. xIndex := self integerValueOf: arg. " Check that the argument is a valid array index. " (xIndex > xSize) ifTrue: [ self primitiveFail. ^ nil. ]. (xIndex < 0) ifTrue: [ self primitiveFail. ^ nil ]. " Check that the given argument points to a Semaphore. " dereferencedArg := self fetchPointer: xIndex ofObject: xArray. semaphoreClass := self splObj: ClassSemaphore. ((self fetchClassOf: dereferencedArg) = semaphoreClass) ifFalse: [ self primitiveFail. ^ nil ]. self ioSetInputSemaphore: (self integerValueOf: arg). successFlag ifTrue: [self pop: 1].