Programmer's Reference
The supported parameter types for the C language are:
- none, void
- This is not a valid parameter type. If used as the return type, the
value nil is returned.
- object
- No conversion is performed. The parameter value is passed directly
to the called function. Returned values are passed directly back to
Smalltalk. The PlatformFunction author must ensure that only
valid IBM Smalltalk objects are returned.
- struct
- Can be used only as a parameter type; for parameters, this is valid
only for byte, word, or long objects and nil. For byte,
word, and long objects, the passed parameter is a pointer to the first
instance variable of the object. For nil, 0 (NULL) is
passed.
- char, char8
- If used as a parameter type, the parameter must be a Character
whose numeric value is between 0 and 255. The parameter is converted to
a C char. If used as a return value, the low 8 bits of the return value
are converted to a Character before returning to Smalltalk.
- char16
- All instances of Character are converted. This means
that the passed-in values will be between 0 and 65535 and the low 16 bits of
the return value are converted to a Character on return.
- float, double, extended
- If used as a parameter type, the parameter must be a
Float. The parameter is converted to the specified size of
float. If used as a return value, the result is converted to an
instance of Float.
- bool, boolean
- For outgoing parameters, only true or false can be
converted. The passed parameter is TRUE for true, FALSE for
false. As a return type, 0 is converted to false,
and all other values are converted to true. The passed value
for true is platform-dependent. The value of !0 in C is
passed.
- int8, int16, 1nt32, uint8, uint16, uint32
- If used as a parameter type, the parameter must be an Integer
that can be represented in 32 bits, Character, Boolean,
or nil (see Passed parameters). Instances of OSObject with
reftype immediate (namely true, false,
nil, Characters, and SmallIntegers) can also
be used (see OSObjects). If used as a return type, the low n (8, 16, 32)
bits of the return value are sign- or zero-extended (signed or unsigned,
respectively) and then converted to a Smalltalk Integer. The
return value in Smalltalk is guaranteed to be within these given ranges:
- int8
- -128...127
- int16
- -32768...32767
- int32
- -2147483648...2147483647
- uint8
- 0...255
- uint16
- 0...65535
- uint32
- 0...4294967295
- pointer
- As a parameter type, this is an amalgamation of the struct,
char, bool, and int type conversions.
If the parameter is a byte, word, or long object or nil, the
struct conversion is performed. If the parameter is
true or false, the bool conversion is
performed. If the parameter is a Character, the
char16 conversion is performed. If the parameter is an
Integer, the uint32 conversion is performed.
Instances of OSObject can also be supplied as the
parameter. If the OSObject reftype is handle, the handle is
dereferenced and the offset is added. All other objects cause the
conversion to fail. If used as a return type, the uint32
conversion is performed.
- safePointer
- As a parameter type, the parameter may be a byte, word or long
object. Instances of OSObject can also be supplied as the
parameter provided they do not have reftype immediate. If
used as a return type, the uint32 conversion is performed.
All values passed to C functions are extended to a 32-bit quantity before
being passed. Signed integers are sign extended; unsigned integers
are zero extended. Because the C compiler does the same thing, it will
be transparent to you.
All of the int types perform the same conversion for when
converting from IBM Smalltalk objects to external language values. For
example, it is legal to pass -1 as a uint32 or a
uint8. Both result in 0xFFFFFFFF being passed.
[ Top of Page | Previous Page | Next Page | Table of Contents | Index ]