--- a/ExternalLibraryFunction.st Thu Aug 25 11:28:17 2016 +0100
+++ b/ExternalLibraryFunction.st Wed Aug 31 22:45:49 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
"
COPYRIGHT (c) 2004 by eXept Software AG
All Rights Reserved
@@ -76,11 +78,11 @@
extern ffi_type *__get_ffi_type_double();
extern ffi_type *__get_ffi_type_void();
extern ffi_type *__get_ffi_type_pointer();
- extern INTFUNC __get_ffi_prep_cif();
- extern INTFUNC __get_ffi_call();
+ extern INTLFUNC __get_ffi_prep_cif();
+ extern INTLFUNC __get_ffi_call();
# ifdef _MINGW__
# define ffi_prep_cif (*(__get_ffi_prep_cif()))
-# define ffi_call (*(__get_ffi_call()))
+# define ffi_call (*(__get_ffi_call()))
# endif
# endif
@@ -227,7 +229,7 @@
Synchronous vs. Asynchronous calls:
by default, foreign function calls are synchronous, effectively blocking the whole ST/X system
- (that is by purpose,because most C-code is not prepared for being interrupted, and also, normal
+ (that is by purpose,´because most C-code is not prepared for being interrupted, and also, normal
code is not prepared for a garbage collector to move objects around, while another C thread might
access the data...).
Therefore, the following will block all ST/X activity for 10 seconds
@@ -323,15 +325,15 @@
dllMappingAt:baseLibname put:aNameOrPath
"allows for dll's to be replaced,
for example, if you want to use the mozilla sqlite dll
- C:\Program Files\Mozilla Firefox\mozsqlite3.dll
+ C:\Program Files\Mozilla Firefox\mozsqlite3.dll
for the sqlite3, execute:
- ExternalLibraryFunction
- dllMappingAt:'sqlite3'
- put: 'C:\Program Files\Mozilla Firefox\mozsqlite3.dll'
+ ExternalLibraryFunction
+ dllMappingAt:'sqlite3'
+ put: 'C:\Program Files\Mozilla Firefox\mozsqlite3.dll'
for mingw:
- ExternalLibraryFunction
- dllMappingAt:'sqlite3'
- put:'C:\mingw64\opt\bin\libsqlite3-0.dll'
+ ExternalLibraryFunction
+ dllMappingAt:'sqlite3'
+ put:'C:\mingw64\opt\bin\libsqlite3-0.dll'
"
self dllMapping at:baseLibname put: aNameOrPath
@@ -354,25 +356,25 @@
DLLPATH isNil ifTrue:[
DLLPATH := #('.').
+ ].
%{
#ifndef __SCHTEAM__
- @global(FLAG_VIRTUAL) = __MKSMALLINT(__EXTL_FLAG_VIRTUAL); // a virtual c++ call
- @global(FLAG_NONVIRTUAL) = __MKSMALLINT(__EXTL_FLAG_NONVIRTUAL); // a non-virtual c++ call
- @global(FLAG_OBJECTIVEC) = __MKSMALLINT(__EXTL_FLAG_OBJECTIVEC); // an objectiveC message send
- @global(FLAG_UNLIMITEDSTACK) = __MKSMALLINT(__EXTL_FLAG_UNLIMITEDSTACK); // unlimitedstack under unix
- @global(FLAG_ASYNC) = __MKSMALLINT(__EXTL_FLAG_ASYNC); // async under win32
- @global(FLAG_RETVAL_IS_CONST) = __MKSMALLINT(__EXTL_FLAG_RETVAL_IS_CONST); // retvalue is not to be registered for finalization
+ @global(FLAG_VIRTUAL) = __MKSMALLINT(__EXTL_FLAG_VIRTUAL); // a virtual c++ call
+ @global(FLAG_NONVIRTUAL) = __MKSMALLINT(__EXTL_FLAG_NONVIRTUAL); // a non-virtual c++ call
+ @global(FLAG_OBJECTIVEC) = __MKSMALLINT(__EXTL_FLAG_OBJECTIVEC); // an objectiveC message send
+ @global(FLAG_UNLIMITEDSTACK) = __MKSMALLINT(__EXTL_FLAG_UNLIMITEDSTACK); // unlimitedstack under unix
+ @global(FLAG_ASYNC) = __MKSMALLINT(__EXTL_FLAG_ASYNC); // async under win32
+ @global(FLAG_RETVAL_IS_CONST) = __MKSMALLINT(__EXTL_FLAG_RETVAL_IS_CONST); // retvalue is not to be registered for finalization
- @global(CALLTYPE_API) = __MKSMALLINT(__EXTL_CALLTYPE_API); // WINAPI-call (win32 only)
- @global(CALLTYPE_C) = __MKSMALLINT(__EXTL_CALLTYPE_C); // regular C-call (the default)
- @global(CALLTYPE_V8) = __MKSMALLINT(__EXTL_CALLTYPE_V8); // v8 call (sparc only)
- @global(CALLTYPE_V9) = __MKSMALLINT(__EXTL_CALLTYPE_V9); // v9 call (sparc only)
- @global(CALLTYPE_UNIX64) = __MKSMALLINT(__EXTL_CALLTYPE_UNIX64); // unix64 call (alpha only)
+ @global(CALLTYPE_API) = __MKSMALLINT(__EXTL_CALLTYPE_API); // WINAPI-call (win32 only)
+ @global(CALLTYPE_C) = __MKSMALLINT(__EXTL_CALLTYPE_C); // regular C-call (the default)
+ @global(CALLTYPE_V8) = __MKSMALLINT(__EXTL_CALLTYPE_V8); // v8 call (sparc only)
+ @global(CALLTYPE_V9) = __MKSMALLINT(__EXTL_CALLTYPE_V9); // v9 call (sparc only)
+ @global(CALLTYPE_UNIX64) = __MKSMALLINT(__EXTL_CALLTYPE_UNIX64); // unix64 call (alpha only)
- @global(CALLTYPE_MASK) = __MKSMALLINT(__EXTL_CALLTYPE_MASK);
+ @global(CALLTYPE_MASK) = __MKSMALLINT(__EXTL_CALLTYPE_MASK);
#endif
-%}
- ].
+%}.
"
self initialize
@@ -898,46 +900,47 @@
|handle moduleNameUsed functionName|
name isNumber ifTrue:[
- self isCPPFunction ifTrue:[
- "/ no need to load a dll.
- ^ self
- ]
+ self isCPPFunction ifTrue:[
+ "/ no need to load a dll.
+ ^ self
+ ]
].
"/ in some other smalltalks, there is no moduleName in the ffi-spec;
"/ instead, the class provides the libraryName...
(moduleNameUsed := moduleName) isNil ifTrue:[
- owningClass isNil ifTrue:[
- self error:'Missing moduleName'.
- ].
- moduleNameUsed := owningClass theNonMetaclass libraryName asSymbol.
+ owningClass isNil ifTrue:[
+ self error:'Missing moduleName'.
+ ].
+ moduleNameUsed := owningClass theNonMetaclass libraryName asSymbol.
].
moduleHandle isNil ifTrue:[
- "/ speedup. in 95% of all calls, the same moduleName is resolved here
- (LastModuleHandleHolder isNil
- or:[ (handle := LastModuleHandleHolder at:1) isNil
- or:[ LastModuleHandleName ~= moduleNameUsed ]]) ifTrue:[
+ "/ speedup. in 95% of all calls, the same moduleName is resolved here
+ (LastModuleHandleHolder isNil
+ or:[ (handle := LastModuleHandleHolder at:1) isNil
+ or:[ LastModuleHandleName ~= moduleNameUsed ]]) ifTrue:[
- handle := self loadLibrary:moduleNameUsed.
- handle isNil ifTrue:[
- self error:('Cannot find or load dll/module: "%1"' bindWith: moduleNameUsed).
- ].
- LastModuleHandleHolder := WeakArray with:handle.
- LastModuleHandleName := moduleNameUsed.
- ].
- moduleHandle := handle.
+ handle := self loadLibrary:moduleNameUsed.
+ (handle isNil or:[handle = -1]) ifTrue:[
+ self error:('Cannot find or load dll/module: "%1"' bindWith: moduleNameUsed).
+ ].
+ LastModuleHandleHolder := WeakArray with:handle.
+ LastModuleHandleName := moduleNameUsed.
+ ].
+ moduleHandle := handle.
].
name isNumber ifFalse:[
- functionName := name.
- (moduleHandle getFunctionAddress:functionName into:self) isNil ifTrue:[
- (moduleHandle getFunctionAddress:('_', functionName) into:self) isNil ifTrue:[
- moduleHandle := nil.
- self error:'Missing function: ', name, ' in module: ', moduleNameUsed.
- ].
- ].
+ functionName := name.
+ (moduleHandle getFunctionAddress:functionName into:self) isNil ifTrue:[
+ (moduleHandle getFunctionAddress:('_', functionName) into:self) isNil ifTrue:[
+ moduleHandle := nil.
+ LastModuleHandleHolder := LastModuleHandleName := nil.
+ self error:'Missing function: ', name, ' in module: ', moduleNameUsed.
+ ].
+ ].
].
- "Modified: / 10-04-2012 / 12:12:44 / cg"
+ "Modified: / 26-08-2016 / 17:43:34 / cg"
!
loadLibrary:dllName
@@ -1070,36 +1073,36 @@
virtual := self isVirtualCPP.
objectiveC := self isObjectiveC.
(virtual "or:[self isNonVirtualCPP]") ifTrue:[
- aReceiverOrNil isNil ifTrue:[
- "/ must have a c++ object instance
- self primitiveFailed.
- ].
+ aReceiverOrNil isNil ifTrue:[
+ "/ must have a c++ object instance
+ self primitiveFailed.
+ ].
- "/ and it must be a kind of ExternalStructure !!
- (aReceiverOrNil isKindOf:ExternalStructure) ifFalse:[
- self primitiveFailed.
- ].
- virtual ifTrue:[
- vtOffset := name.
- (vtOffset between:0 and:10000) ifFalse:[
- self primitiveFailed.
- ]
- ].
+ "/ and it must be a kind of ExternalStructure !!
+ (aReceiverOrNil isKindOf:ExternalStructure) ifFalse:[
+ self primitiveFailed.
+ ].
+ virtual ifTrue:[
+ vtOffset := name.
+ (vtOffset between:0 and:10000) ifFalse:[
+ self primitiveFailed.
+ ]
+ ].
] ifFalse:[
- objectiveC ifTrue:[
- aReceiverOrNil isNil ifTrue:[
- "/ must have an objective-c object instance
- self primitiveFailed.
- ].
- (aReceiverOrNil isObjectiveCObject) ifFalse:[
- self primitiveFailed
- ]
- ] ifFalse:[
- aReceiverOrNil notNil ifTrue:[
- "/ must NOT have a c++/objectiveC object instance
- self primitiveFailed.
- ]
- ].
+ objectiveC ifTrue:[
+ aReceiverOrNil isNil ifTrue:[
+ "/ must have an objective-c object instance
+ self primitiveFailed.
+ ].
+ (aReceiverOrNil isObjectiveCObject) ifFalse:[
+ self primitiveFailed
+ ]
+ ] ifFalse:[
+ aReceiverOrNil notNil ifTrue:[
+ "/ must NOT have a c++/objectiveC object instance
+ self primitiveFailed.
+ ]
+ ].
].
async := self isAsync.
unlimitedStack := self isUnlimitedStack.
@@ -1146,14 +1149,14 @@
int __numFloatOrDoubleArgs = 0;
union u {
- INT iVal;
- float fVal;
- double dVal;
- void *pointerVal;
+ INT iVal;
+ float fVal;
+ double dVal;
+ void *pointerVal;
# if 0 && defined(HAS_LONGLONG)
- long long longLongVal;
+ long long longLongVal;
# else
- __int64__ longLongVal;
+ __int64__ longLongVal;
# endif
};
union u __argValuesIncludingThis[MAX_ARGS+1];
@@ -1165,34 +1168,34 @@
int __numArgs, __numArgsIncludingThis;
static INT null = 0;
int i = -1;
- VOIDFUNC codeAddress = (VOIDFUNC)__INST(code_);
+ voidFUNC codeAddress = (voidFUNC)__INST(code_);
int __numArgsWanted;
# define __FAIL__(fcode) \
{ \
- failureCode = fcode; failureArgNr = __mkSmallInteger(i+1); goto getOutOfHere; \
+ failureCode = fcode; failureArgNr = __mkSmallInteger(i+1); goto getOutOfHere; \
}
if (argumentsOrNil == nil) {
- __numArgs = 0;
+ __numArgs = 0;
} else if (__isArray(argumentsOrNil)) {
- __numArgs = __arraySize(argumentsOrNil);
+ __numArgs = __arraySize(argumentsOrNil);
} else {
- __FAIL__(@symbol(BadArgumentVector))
+ __FAIL__(@symbol(BadArgumentVector))
}
if (argTypeSymbols == nil) {
- __numArgsWanted = 0;
+ __numArgsWanted = 0;
} else if (__isArray(argTypeSymbols)) {
- __numArgsWanted = __arraySize(argTypeSymbols);
+ __numArgsWanted = __arraySize(argTypeSymbols);
} else {
- __FAIL__(@symbol(BadArgumentTypeVector))
+ __FAIL__(@symbol(BadArgumentTypeVector))
}
if (__numArgs != __numArgsWanted) {
- __FAIL__(@symbol(ArgumentCountMismatch))
+ __FAIL__(@symbol(ArgumentCountMismatch))
}
if (__numArgs > MAX_ARGS) {
- __FAIL__(@symbol(TooManyArguments))
+ __FAIL__(@symbol(TooManyArguments))
}
/*
@@ -1201,611 +1204,616 @@
__returnValuePointer = &__returnValue;
if (returnTypeSymbol == @symbol(voidPointer)) {
- returnTypeSymbol = @symbol(handle);
+ returnTypeSymbol = @symbol(handle);
} else if (returnTypeSymbol == @symbol(hresult)) {
- returnTypeSymbol = @symbol(uint32);
+ returnTypeSymbol = @symbol(uint32);
}
if (returnTypeSymbol == @symbol(int)) {
- __returnType = TYPE_SINT;
+ __returnType = TYPE_SINT;
} else if (returnTypeSymbol == @symbol(uint)) {
- __returnType = TYPE_UINT;
+ __returnType = TYPE_UINT;
} else if (returnTypeSymbol == @symbol(uint8)) {
- __returnType = TYPE_UINT8;
+ __returnType = TYPE_UINT8;
} else if (returnTypeSymbol == @symbol(uint16)) {
- __returnType = TYPE_UINT16;
+ __returnType = TYPE_UINT16;
} else if (returnTypeSymbol == @symbol(uint32)) {
- __returnType = TYPE_UINT32;
+ __returnType = TYPE_UINT32;
} else if (returnTypeSymbol == @symbol(uint64)) {
- __returnType = TYPE_UINT64;
+ __returnType = TYPE_UINT64;
} else if (returnTypeSymbol == @symbol(sint)) {
- __returnType = TYPE_SINT;
+ __returnType = TYPE_SINT;
} else if (returnTypeSymbol == @symbol(sint8)) {
- __returnType = TYPE_SINT8;
+ __returnType = TYPE_SINT8;
} else if (returnTypeSymbol == @symbol(sint16)) {
- __returnType = TYPE_SINT16;
+ __returnType = TYPE_SINT16;
} else if (returnTypeSymbol == @symbol(sint32)) {
- __returnType = TYPE_SINT32;
+ __returnType = TYPE_SINT32;
} else if (returnTypeSymbol == @symbol(sint64)) {
- __returnType = TYPE_SINT64;
+ __returnType = TYPE_SINT64;
} else if (returnTypeSymbol == @symbol(long)) {
- if (sizeof(long) == 4) {
- returnTypeSymbol = @symbol(sint32);
- __returnType = TYPE_SINT32;
- } else if (sizeof(long) == 8) {
- returnTypeSymbol = @symbol(sint64);
- __returnType = TYPE_SINT64;
- } else {
- __FAIL__(@symbol(UnknownReturnType))
- }
+ if (sizeof(long) == 4) {
+ returnTypeSymbol = @symbol(sint32);
+ __returnType = TYPE_SINT32;
+ } else if (sizeof(long) == 8) {
+ returnTypeSymbol = @symbol(sint64);
+ __returnType = TYPE_SINT64;
+ } else {
+ __FAIL__(@symbol(UnknownReturnType))
+ }
} else if (returnTypeSymbol == @symbol(ulong)) {
- if (sizeof(long) == 4) {
- returnTypeSymbol = @symbol(uint32);
- __returnType = TYPE_UINT32;
- }else if (sizeof(long) == 8) {
- returnTypeSymbol = @symbol(uint64);
- __returnType = TYPE_UINT64;
- } else {
- __FAIL__(@symbol(UnknownReturnType))
- }
+ if (sizeof(long) == 4) {
+ returnTypeSymbol = @symbol(uint32);
+ __returnType = TYPE_UINT32;
+ }else if (sizeof(long) == 8) {
+ returnTypeSymbol = @symbol(uint64);
+ __returnType = TYPE_UINT64;
+ } else {
+ __FAIL__(@symbol(UnknownReturnType))
+ }
} else if (returnTypeSymbol == @symbol(bool)) {
- __returnType = TYPE_UINT;
+ __returnType = TYPE_UINT;
} else if (returnTypeSymbol == @symbol(float)) {
- __returnType = TYPE_FLOAT;
+ __returnType = TYPE_FLOAT;
} else if (returnTypeSymbol == @symbol(double)) {
- __returnType = TYPE_DOUBLE;
+ __returnType = TYPE_DOUBLE;
} else if (returnTypeSymbol == @symbol(void)) {
- __returnType = TYPE_VOID;
- __returnValuePointer = NULL;
+ __returnType = TYPE_VOID;
+ __returnValuePointer = NULL;
} else if ((returnTypeSymbol == @symbol(pointer))
- || (returnTypeSymbol == @symbol(handle))
- || (returnTypeSymbol == @symbol(charPointer))
- || (returnTypeSymbol == @symbol(bytePointer))
- || (returnTypeSymbol == @symbol(floatPointer))
- || (returnTypeSymbol == @symbol(doublePointer))
- || (returnTypeSymbol == @symbol(intPointer))
- || (returnTypeSymbol == @symbol(shortPointer))
- || (returnTypeSymbol == @symbol(wcharPointer))) {
- __returnType = TYPE_POINTER;
+ || (returnTypeSymbol == @symbol(handle))
+ || (returnTypeSymbol == @symbol(charPointer))
+ || (returnTypeSymbol == @symbol(bytePointer))
+ || (returnTypeSymbol == @symbol(floatPointer))
+ || (returnTypeSymbol == @symbol(doublePointer))
+ || (returnTypeSymbol == @symbol(intPointer))
+ || (returnTypeSymbol == @symbol(shortPointer))
+ || (returnTypeSymbol == @symbol(wcharPointer))) {
+ __returnType = TYPE_POINTER;
} else {
- if (__isSymbol(returnTypeSymbol)
- && ((returnValueClass = __GLOBAL_GET(returnTypeSymbol)) != nil)) {
- if (! __isBehaviorLike(returnValueClass)) {
- __FAIL__(@symbol(NonBehaviorReturnType))
- }
- if (! __qIsSubclassOfExternalAddress(returnValueClass)) {
- __FAIL__(@symbol(NonExternalAddressReturnType))
- }
- __returnType = TYPE_POINTER;
- returnTypeSymbol = @symbol(pointer);
- } else {
- __FAIL__(@symbol(UnknownReturnType))
- }
+ if (__isSymbol(returnTypeSymbol)
+ && ((returnValueClass = __GLOBAL_GET(returnTypeSymbol)) != nil)) {
+ if (! __isBehaviorLike(returnValueClass)) {
+ __FAIL__(@symbol(NonBehaviorReturnType))
+ }
+ if (! __qIsSubclassOfExternalAddress(returnValueClass)) {
+ __FAIL__(@symbol(NonExternalAddressReturnType))
+ }
+ __returnType = TYPE_POINTER;
+ returnTypeSymbol = @symbol(pointer);
+ } else {
+ __FAIL__(@symbol(UnknownReturnType))
+ }
}
/*
* validate the c++ object
*/
if (aReceiverOrNil != nil) {
- struct cPlusPlusInstance {
- void **vTable;
- };
- struct cPlusPlusInstance *inst;
+ struct cPlusPlusInstance {
+ void **vTable;
+ };
+ struct cPlusPlusInstance *inst;
- if (__isExternalAddressLike(aReceiverOrNil)) {
- inst = (void *)(__externalAddressVal(aReceiverOrNil));
- } else if (__isExternalBytesLike(aReceiverOrNil)) {
- inst = (void *)(__externalBytesVal(aReceiverOrNil));
- } else {
- __FAIL__(@symbol(InvalidInstance))
- }
- __argValues[0].pointerVal = inst;
- __argValuePointersIncludingThis[0] = &(__argValues[0]);
- __argTypes[0] = TYPE_POINTER;
+ if (__isExternalAddressLike(aReceiverOrNil)) {
+ inst = (void *)(__externalAddressVal(aReceiverOrNil));
+ } else if (__isExternalBytesLike(aReceiverOrNil)) {
+ inst = (void *)(__externalBytesVal(aReceiverOrNil));
+ } else {
+ __FAIL__(@symbol(InvalidInstance))
+ }
+ __argValues[0].pointerVal = inst;
+ __argValuePointersIncludingThis[0] = &(__argValues[0]);
+ __argTypes[0] = TYPE_POINTER;
- __argValuePointers = &__argValuePointersIncludingThis[1];
- __argTypes = &__argTypesIncludingThis[1];
- __argValues = &__argValuesIncludingThis[1];
- __numArgsIncludingThis = __numArgs + 1;
+ __argValuePointers = &__argValuePointersIncludingThis[1];
+ __argTypes = &__argTypesIncludingThis[1];
+ __argValues = &__argValuesIncludingThis[1];
+ __numArgsIncludingThis = __numArgs + 1;
- if (virtual == true) {
- if (! __isSmallInteger(vtOffset)) {
- __FAIL__(@symbol(InvalidVTableIndex))
- }
- codeAddress = inst->vTable[__intVal(vtOffset)];
- DEBUGCODE_IF( @global(Verbose), {
- printf("virtual %"_ld_" codeAddress: %"_lx_"\n", (INT)(__intVal(vtOffset)), (INT)codeAddress);
- })
- }
+ if (virtual == true) {
+ if (! __isSmallInteger(vtOffset)) {
+ __FAIL__(@symbol(InvalidVTableIndex))
+ }
+ codeAddress = inst->vTable[__intVal(vtOffset)];
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("virtual %"_ld_" codeAddress: %"_lx_"\n", (INT)(__intVal(vtOffset)), (INT)codeAddress);
+ })
+ }
} else {
- __numArgsIncludingThis = __numArgs;
- DEBUGCODE_IF( @global(Verbose), {
- printf("codeAddress: %"_lx_"\n", (INT)codeAddress);
- })
+ __numArgsIncludingThis = __numArgs;
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("codeAddress: %"_lx_"\n", (INT)codeAddress);
+ })
}
/*
* validate all arg types, map each to an ffi_type, and setup arg-buffers
*/
for (i=0; i<__numArgs; i++) {
- void *argValuePtr;
- OBJ typeSymbol;
- OBJ arg;
+ void *argValuePtr;
+ OBJ typeSymbol;
+ OBJ arg;
- failureInfo = __mkSmallInteger(i+1); /* in case there is one */
+ failureInfo = __mkSmallInteger(i+1); /* in case there is one */
- typeSymbol = __ArrayInstPtr(argTypeSymbols)->a_element[i];
- arg = __ArrayInstPtr(argumentsOrNil)->a_element[i];
+ typeSymbol = __ArrayInstPtr(argTypeSymbols)->a_element[i];
+ arg = __ArrayInstPtr(argumentsOrNil)->a_element[i];
- if (typeSymbol == @symbol(handle)) {
- typeSymbol = @symbol(pointer);
- } else if (typeSymbol == @symbol(voidPointer)) {
- typeSymbol = @symbol(pointer);
- } else if (returnTypeSymbol == @symbol(hresult)) {
- typeSymbol = @symbol(uint32);
- }
+ if (typeSymbol == @symbol(handle)) {
+ typeSymbol = @symbol(pointer);
+ } else if (typeSymbol == @symbol(voidPointer)) {
+ typeSymbol = @symbol(pointer);
+ } else if (returnTypeSymbol == @symbol(hresult)) {
+ typeSymbol = @symbol(uint32);
+ }
- if (typeSymbol == @symbol(long)) {
- if (sizeof(long) == sizeof(int)) {
- typeSymbol = @symbol(sint);
- } else {
- if (sizeof(long) == 4) {
- typeSymbol = @symbol(sint32);
- } else if (sizeof(long) == 8) {
- typeSymbol = @symbol(sint64);
- }
- }
- }
- if (typeSymbol == @symbol(ulong)) {
- if (sizeof(unsigned long) == sizeof(unsigned int)) {
- typeSymbol = @symbol(uint);
- } else {
- if (sizeof(long) == 4) {
- typeSymbol = @symbol(uint32);
- } else if (sizeof(long) == 8) {
- typeSymbol = @symbol(uint64);
- }
- }
- }
+ if (typeSymbol == @symbol(long)) {
+ if (sizeof(long) == sizeof(int)) {
+ typeSymbol = @symbol(sint);
+ } else {
+ if (sizeof(long) == 4) {
+ typeSymbol = @symbol(sint32);
+ } else if (sizeof(long) == 8) {
+ typeSymbol = @symbol(sint64);
+ }
+ }
+ }
+ if (typeSymbol == @symbol(ulong)) {
+ if (sizeof(unsigned long) == sizeof(unsigned int)) {
+ typeSymbol = @symbol(uint);
+ } else {
+ if (sizeof(long) == 4) {
+ typeSymbol = @symbol(uint32);
+ } else if (sizeof(long) == 8) {
+ typeSymbol = @symbol(uint64);
+ }
+ }
+ }
- if (typeSymbol == @symbol(int) || typeSymbol == @symbol(sint)) {
- thisType = TYPE_SINT;
- if (__isSmallInteger(arg)) {
- __argValues[i].iVal = __intVal(arg);
- } else {
- __argValues[i].iVal = __signedLongIntVal(arg);
- if (__argValues[i].iVal == 0) {
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d sint value out of range [%d]\n", i+1, __LINE__);
- })
- __FAIL__(@symbol(InvalidArgument))
- }
- }
- argValuePtr = &(__argValues[i].iVal);
+ if (typeSymbol == @symbol(int) || typeSymbol == @symbol(sint)) {
+ thisType = TYPE_SINT;
+ if (__isSmallInteger(arg)) {
+ __argValues[i].iVal = __intVal(arg);
+ } else {
+ __argValues[i].iVal = __signedLongIntVal(arg);
+ if (__argValues[i].iVal == 0) {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d sint value out of range [%d]\n", i+1, __LINE__);
+ })
+ __FAIL__(@symbol(InvalidArgument))
+ }
+ }
+ argValuePtr = &(__argValues[i].iVal);
- } else if (typeSymbol == @symbol(uint)) {
- thisType = TYPE_UINT;
+ } else if (typeSymbol == @symbol(uint)) {
+ thisType = TYPE_UINT;
- if (__isSmallInteger(arg)) {
- __argValues[i].iVal = __intVal(arg);
- } else {
- __argValues[i].iVal = __unsignedLongIntVal(arg);
- if (__argValues[i].iVal == 0) {
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d uint value out of range [%d]\n", i+1, __LINE__);
- })
- __FAIL__(@symbol(InvalidArgument))
- }
- }
- argValuePtr = &(__argValues[i].iVal);
+ if (__isSmallInteger(arg)) {
+ __argValues[i].iVal = __intVal(arg);
+ } else {
+ __argValues[i].iVal = __unsignedLongIntVal(arg);
+ if (__argValues[i].iVal == 0) {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d uint value out of range [%d]\n", i+1, __LINE__);
+ })
+ __FAIL__(@symbol(InvalidArgument))
+ }
+ }
+ argValuePtr = &(__argValues[i].iVal);
- } else if (typeSymbol == @symbol(uint8)) {
- thisType = TYPE_UINT8;
- if (! __isSmallInteger(arg)) {
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d uint8 value out of range [%d]\n", i+1, __LINE__);
- })
- __FAIL__(@symbol(InvalidArgument))
- }
- __argValues[i].iVal = __intVal(arg);
- if (((unsigned)(__argValues[i].iVal)) > 0xFF) {
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d uint8 value out of range [%d]\n", i+1, __LINE__);
- })
- __FAIL__(@symbol(InvalidArgument))
- }
- argValuePtr = &(__argValues[i].iVal);
+ } else if (typeSymbol == @symbol(uint8)) {
+ thisType = TYPE_UINT8;
+ if (! __isSmallInteger(arg)) {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d uint8 value out of range [%d]\n", i+1, __LINE__);
+ })
+ __FAIL__(@symbol(InvalidArgument))
+ }
+ __argValues[i].iVal = __intVal(arg);
+ if (((unsigned)(__argValues[i].iVal)) > 0xFF) {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d uint8 value out of range [%d]\n", i+1, __LINE__);
+ })
+ __FAIL__(@symbol(InvalidArgument))
+ }
+ argValuePtr = &(__argValues[i].iVal);
- } else if (typeSymbol == @symbol(sint8)) {
- thisType = TYPE_SINT8;
- if (! __isSmallInteger(arg)) {
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d sint8 value out of range [%d]\n", i+1, __LINE__);
- })
- __FAIL__(@symbol(InvalidArgument))
- }
- __argValues[i].iVal = __intVal(arg);
- if (((__argValues[i].iVal) < -0x80) || ((__argValues[i].iVal) > 0x7F)) {
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d sint8 value out of range [%d]\n", i+1, __LINE__);
- })
- __FAIL__(@symbol(InvalidArgument))
- }
- argValuePtr = &(__argValues[i].iVal);
+ } else if (typeSymbol == @symbol(sint8)) {
+ thisType = TYPE_SINT8;
+ if (! __isSmallInteger(arg)) {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d sint8 value out of range [%d]\n", i+1, __LINE__);
+ })
+ __FAIL__(@symbol(InvalidArgument))
+ }
+ __argValues[i].iVal = __intVal(arg);
+ if (((__argValues[i].iVal) < -0x80) || ((__argValues[i].iVal) > 0x7F)) {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d sint8 value out of range [%d]\n", i+1, __LINE__);
+ })
+ __FAIL__(@symbol(InvalidArgument))
+ }
+ argValuePtr = &(__argValues[i].iVal);
- } else if (typeSymbol == @symbol(uint16)) {
- thisType = TYPE_UINT16;
- if (! __isSmallInteger(arg)) {
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d uint16 value out of range [%d]\n", i+1, __LINE__);
- })
- __FAIL__(@symbol(InvalidArgument))
- }
- __argValues[i].iVal = __intVal(arg);
- if (((unsigned)(__argValues[i].iVal)) > 0xFFFF) {
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d uint16 value out of range [%d]\n", i+1, __LINE__);
- })
- __FAIL__(@symbol(InvalidArgument))
- }
- argValuePtr = &(__argValues[i].iVal);
+ } else if (typeSymbol == @symbol(uint16)) {
+ thisType = TYPE_UINT16;
+ if (! __isSmallInteger(arg)) {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d uint16 value out of range [%d]\n", i+1, __LINE__);
+ })
+ __FAIL__(@symbol(InvalidArgument))
+ }
+ __argValues[i].iVal = __intVal(arg);
+ if (((unsigned)(__argValues[i].iVal)) > 0xFFFF) {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d uint16 value out of range [%d]\n", i+1, __LINE__);
+ })
+ __FAIL__(@symbol(InvalidArgument))
+ }
+ argValuePtr = &(__argValues[i].iVal);
- } else if (typeSymbol == @symbol(sint16)) {
- thisType = TYPE_SINT16;
- if (! __isSmallInteger(arg)) {
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d sint16 value out of range [%d]\n", i+1, __LINE__);
- })
- __FAIL__(@symbol(InvalidArgument))
- }
- __argValues[i].iVal = __intVal(arg);
- if (((__argValues[i].iVal) < -0x8000) || ((__argValues[i].iVal) > 0x7FFF)) {
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d sint16 value out of range [%d]\n", i+1, __LINE__);
- })
- __FAIL__(@symbol(InvalidArgument))
- }
- argValuePtr = &(__argValues[i].iVal);
+ } else if (typeSymbol == @symbol(sint16)) {
+ thisType = TYPE_SINT16;
+ if (! __isSmallInteger(arg)) {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d sint16 value out of range [%d]\n", i+1, __LINE__);
+ })
+ __FAIL__(@symbol(InvalidArgument))
+ }
+ __argValues[i].iVal = __intVal(arg);
+ if (((__argValues[i].iVal) < -0x8000) || ((__argValues[i].iVal) > 0x7FFF)) {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d sint16 value out of range [%d]\n", i+1, __LINE__);
+ })
+ __FAIL__(@symbol(InvalidArgument))
+ }
+ argValuePtr = &(__argValues[i].iVal);
- } else if (typeSymbol == @symbol(uint32)) {
- thisType = TYPE_UINT32;
- if (__isSmallInteger(arg)) {
- __argValues[i].iVal = __intVal(arg);
- } else {
- __argValues[i].iVal = __unsignedLongIntVal(arg);
- if (__argValues[i].iVal == 0) {
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d uint32 value out of range [%d]\n", i+1, __LINE__);
- })
- __FAIL__(@symbol(InvalidArgument))
- }
- }
+ } else if (typeSymbol == @symbol(uint32)) {
+ thisType = TYPE_UINT32;
+ if (__isSmallInteger(arg)) {
+ __argValues[i].iVal = __intVal(arg);
+ } else {
+ __argValues[i].iVal = __unsignedLongIntVal(arg);
+ if (__argValues[i].iVal == 0) {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d uint32 value out of range [%d]\n", i+1, __LINE__);
+ })
+ __FAIL__(@symbol(InvalidArgument))
+ }
+ }
# if __POINTER_SIZE__ == 8
- if ((__argValues[i].iVal) < 0) {
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d uint32 value out of range [%d]\n", i+1, __LINE__);
- })
- __FAIL__(@symbol(InvalidArgument))
- }
+ if ((__argValues[i].iVal) < 0) {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d uint32 value out of range [%d]\n", i+1, __LINE__);
+ })
+ __FAIL__(@symbol(InvalidArgument))
+ }
# endif
- argValuePtr = &(__argValues[i].iVal);
+ argValuePtr = &(__argValues[i].iVal);
- } else if (typeSymbol == @symbol(sint32)) {
- thisType = TYPE_SINT32;
- if (__isSmallInteger(arg)) {
- __argValues[i].iVal = __intVal(arg);
- } else {
- __argValues[i].iVal = __signedLongIntVal(arg);
- if (__argValues[i].iVal == 0) {
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d sint32 value out of range [%d]\n", i+1, __LINE__);
- })
- __FAIL__(@symbol(InvalidArgument))
- }
- }
+ } else if (typeSymbol == @symbol(sint32)) {
+ thisType = TYPE_SINT32;
+ if (__isSmallInteger(arg)) {
+ __argValues[i].iVal = __intVal(arg);
+ } else {
+ __argValues[i].iVal = __signedLongIntVal(arg);
+ if (__argValues[i].iVal == 0) {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d sint32 value out of range [%d]\n", i+1, __LINE__);
+ })
+ __FAIL__(@symbol(InvalidArgument))
+ }
+ }
# if __POINTER_SIZE__ == 8
- if (((__argValues[i].iVal) < -0x80000000LL) || ((__argValues[i].iVal) > 0x7FFFFFFFLL)) {
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d sint32 value (%"_lx_") out of range [%d]\n", i+1, __argValues[i].iVal, __LINE__);
- })
- __FAIL__(@symbol(InvalidArgument))
- }
+ if (((__argValues[i].iVal) < -0x80000000LL) || ((__argValues[i].iVal) > 0x7FFFFFFFLL)) {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d sint32 value (%"_lx_") out of range [%d]\n", i+1, __argValues[i].iVal, __LINE__);
+ })
+ __FAIL__(@symbol(InvalidArgument))
+ }
# endif
- argValuePtr = &(__argValues[i].iVal);
+ argValuePtr = &(__argValues[i].iVal);
- } else if (typeSymbol == @symbol(uint64)) {
- thisType = TYPE_UINT64;
- if (__isSmallInteger(arg)) {
- __argValues[i].iVal = __intVal(arg);
- } else {
- __argValues[i].iVal = __unsignedLongIntVal(arg);
- if (__argValues[i].iVal == 0) {
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d uint64 value out of range [%d]\n", i+1, __LINE__);
- })
- __FAIL__(@symbol(InvalidArgument))
- }
- }
- argValuePtr = &(__argValues[i].iVal);
+ } else if (typeSymbol == @symbol(uint64)) {
+ thisType = TYPE_UINT64;
+ if (__isSmallInteger(arg)) {
+ __argValues[i].iVal = __intVal(arg);
+ } else {
+ __argValues[i].iVal = __unsignedLongIntVal(arg);
+ if (__argValues[i].iVal == 0) {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d uint64 value out of range [%d]\n", i+1, __LINE__);
+ })
+ __FAIL__(@symbol(InvalidArgument))
+ }
+ }
+ argValuePtr = &(__argValues[i].iVal);
- } else if (typeSymbol == @symbol(sint64)) {
- thisType = TYPE_SINT64;
- if (__isSmallInteger(arg)) {
- __argValues[i].iVal = __intVal(arg);
- } else {
- __argValues[i].iVal = __signedLongIntVal(arg);
- if (__argValues[i].iVal == 0) {
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d sint64 value out of range [%d]\n", i+1, __LINE__);
- })
- __FAIL__(@symbol(InvalidArgument))
- }
- }
- argValuePtr = &(__argValues[i].iVal);
+ } else if (typeSymbol == @symbol(sint64)) {
+ thisType = TYPE_SINT64;
+ if (__isSmallInteger(arg)) {
+ __argValues[i].iVal = __intVal(arg);
+ } else {
+ __argValues[i].iVal = __signedLongIntVal(arg);
+ if (__argValues[i].iVal == 0) {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d sint64 value out of range [%d]\n", i+1, __LINE__);
+ })
+ __FAIL__(@symbol(InvalidArgument))
+ }
+ }
+ argValuePtr = &(__argValues[i].iVal);
- } else if (typeSymbol == @symbol(float)) {
- thisType = TYPE_FLOAT;
- if (__isSmallInteger(arg)) {
- __argValues[i].fVal = (float)(__intVal(arg));
- } else if (__isFloat(arg)) {
- __argValues[i].fVal = (float)(__floatVal(arg));
- } else if (__isShortFloat(arg)) {
- __argValues[i].fVal = (float)(__shortFloatVal(arg));
- } else {
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d non float value [%d]\n", i+1, __LINE__);
- })
- __FAIL__(@symbol(InvalidArgument))
- }
- argValuePtr = &(__argValues[i].fVal);
- } else if (typeSymbol == @symbol(double)) {
- thisType = TYPE_DOUBLE;
- if (__isSmallInteger(arg)) {
- __argValues[i].dVal = (double)(__intVal(arg));
- } else if (__isFloat(arg)) {
- __argValues[i].dVal = (double)(__floatVal(arg));
- } else if (__isShortFloat(arg)) {
- __argValues[i].dVal = (double)(__shortFloatVal(arg));
- } else {
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d non double value [%d]\n", i+1, __LINE__);
- })
- __FAIL__(@symbol(InvalidArgument))
- }
- argValuePtr = &(__argValues[i].dVal);
+ } else if (typeSymbol == @symbol(float)) {
+ thisType = TYPE_FLOAT;
+ if (__isSmallInteger(arg)) {
+ __argValues[i].fVal = (float)(__intVal(arg));
+ } else if (__isFloat(arg)) {
+ __argValues[i].fVal = (float)(__floatVal(arg));
+ } else if (__isShortFloat(arg)) {
+ __argValues[i].fVal = (float)(__shortFloatVal(arg));
+ } else {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d non float value [%d]\n", i+1, __LINE__);
+ })
+ __FAIL__(@symbol(InvalidArgument))
+ }
+ argValuePtr = &(__argValues[i].fVal);
+ } else if (typeSymbol == @symbol(double)) {
+ thisType = TYPE_DOUBLE;
+ if (__isSmallInteger(arg)) {
+ __argValues[i].dVal = (double)(__intVal(arg));
+ } else if (__isFloat(arg)) {
+ __argValues[i].dVal = (double)(__floatVal(arg));
+ } else if (__isShortFloat(arg)) {
+ __argValues[i].dVal = (double)(__shortFloatVal(arg));
+ } else {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d non double value [%d]\n", i+1, __LINE__);
+ })
+ __FAIL__(@symbol(InvalidArgument))
+ }
+ argValuePtr = &(__argValues[i].dVal);
- } else if (typeSymbol == @symbol(void)) {
- thisType = TYPE_VOID;
- argValuePtr = &null;
+ } else if (typeSymbol == @symbol(void)) {
+ thisType = TYPE_VOID;
+ argValuePtr = &null;
- } else if (typeSymbol == @symbol(charPointer)) {
- thisType = TYPE_POINTER;
- if (__isStringLike(arg)) {
- if (async == true) goto badArgForAsyncCall;
- __argValues[i].pointerVal = (void *)(__stringVal(arg));
- } else if (__isBytes(arg)) {
- if (async == true) goto badArgForAsyncCall;
- __argValues[i].pointerVal = (void *)(__byteArrayVal(arg));
- } else if (__isExternalAddressLike(arg)) {
- __argValues[i].pointerVal = (void *)(__externalAddressVal(arg));
- } else if (__isExternalBytesLike(arg)) {
- __argValues[i].pointerVal = (void *)(__externalBytesVal(arg));
- } else {
- if (arg == nil) {
- __argValues[i].pointerVal = (void *)0;
- } else {
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d non charPointer value [%d]\n", i+1, __LINE__);
- })
- __FAIL__(@symbol(InvalidArgument))
- }
- }
- argValuePtr = &(__argValues[i].pointerVal);;
+ } else if (typeSymbol == @symbol(charPointer)) {
+ thisType = TYPE_POINTER;
+ if (__isStringLike(arg)) {
+ if (async == true) goto badArgForAsyncCall;
+ __argValues[i].pointerVal = (void *)(__stringVal(arg));
+ } else if (__isBytes(arg)) {
+ if (async == true) goto badArgForAsyncCall;
+ __argValues[i].pointerVal = (void *)(__byteArrayVal(arg));
+ } else if (__isExternalAddressLike(arg)) {
+ __argValues[i].pointerVal = (void *)(__externalAddressVal(arg));
+ } else if (__isExternalBytesLike(arg)) {
+ __argValues[i].pointerVal = (void *)(__externalBytesVal(arg));
+ } else {
+ if (arg == nil) {
+ __argValues[i].pointerVal = (void *)0;
+ } else {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d non charPointer value [%d]\n", i+1, __LINE__);
+ })
+ __FAIL__(@symbol(InvalidArgument))
+ }
+ }
+ argValuePtr = &(__argValues[i].pointerVal);;
- } else if (typeSymbol == @symbol(wcharPointer)) {
- thisType = TYPE_POINTER;
- if (__isUnicode16String(arg)) {
- if (async == true) goto badArgForAsyncCall;
- __argValues[i].pointerVal = (void *)(__unicode16StringVal(arg));
- } else if (__isBytes(arg)) {
- if (async == true) goto badArgForAsyncCall;
- __argValues[i].pointerVal = (void *)(__byteArrayVal(arg));
- } else if (__isExternalAddressLike(arg)) {
- __argValues[i].pointerVal = (void *)(__externalAddressVal(arg));
- } else if (__isExternalBytesLike(arg)) {
- __argValues[i].pointerVal = (void *)(__externalBytesVal(arg));
- } else {
- if (arg == nil) {
- __argValues[i].pointerVal = (void *)0;
- } else {
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d non wcharPointer value [%d]\n", i+1, __LINE__);
- })
- __FAIL__(@symbol(InvalidArgument))
- }
- }
- argValuePtr = &(__argValues[i].pointerVal);;
+ } else if (typeSymbol == @symbol(wcharPointer)) {
+ thisType = TYPE_POINTER;
+ if (__isUnicode16String(arg)) {
+ if (async == true) goto badArgForAsyncCall;
+ __argValues[i].pointerVal = (void *)(__unicode16StringVal(arg));
+ } else if (__isBytes(arg)) {
+ if (async == true) goto badArgForAsyncCall;
+ __argValues[i].pointerVal = (void *)(__byteArrayVal(arg));
+ } else if (__isExternalAddressLike(arg)) {
+ __argValues[i].pointerVal = (void *)(__externalAddressVal(arg));
+ } else if (__isExternalBytesLike(arg)) {
+ __argValues[i].pointerVal = (void *)(__externalBytesVal(arg));
+ } else {
+ if (arg == nil) {
+ __argValues[i].pointerVal = (void *)0;
+ } else {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d non wcharPointer value [%d]\n", i+1, __LINE__);
+ })
+ __FAIL__(@symbol(InvalidArgument))
+ }
+ }
+ argValuePtr = &(__argValues[i].pointerVal);;
- } else if (typeSymbol == @symbol(floatPointer)) {
- thisType = TYPE_POINTER;
- if (__isBytes(arg)) {
- if (async == true) goto badArgForAsyncCall;
- __argValues[i].pointerVal = (void *)(__byteArrayVal(arg));
- } else if (__isExternalAddressLike(arg)) {
- __argValues[i].pointerVal = (void *)(__externalAddressVal(arg));
- } else if (__isExternalBytesLike(arg)) {
- __argValues[i].pointerVal = (void *)(__externalBytesVal(arg));
- } else if (__isFloats(arg)) {
- char *p = (char *)(__FloatArrayInstPtr(arg)->f_element);
- int nInstBytes;
- OBJ cls;
+ } else if (typeSymbol == @symbol(floatPointer)) {
+ thisType = TYPE_POINTER;
+ if (__isBytes(arg)) {
+ if (async == true) goto badArgForAsyncCall;
+ __argValues[i].pointerVal = (void *)(__byteArrayVal(arg));
+ } else if (__isExternalAddressLike(arg)) {
+ __argValues[i].pointerVal = (void *)(__externalAddressVal(arg));
+ } else if (__isExternalBytesLike(arg)) {
+ __argValues[i].pointerVal = (void *)(__externalBytesVal(arg));
+ } else if (__isFloats(arg)) {
+ char *p = (char *)(__FloatArrayInstPtr(arg)->f_element);
+ int nInstBytes;
+ OBJ cls;
- if (async == true) goto badArgForAsyncCall;
- cls = __qClass(arg);
- nInstBytes = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
- p = p + nInstBytes;
- __argValues[i].pointerVal = p;
- } else {
- if (arg == nil) {
- __argValues[i].pointerVal = (void *)0;
- } else {
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d non floatPointer value [%d]\n", i+1, __LINE__);
- })
- __FAIL__(@symbol(InvalidArgument))
- }
- }
- argValuePtr = &(__argValues[i].pointerVal);;
+ if (async == true) goto badArgForAsyncCall;
+ cls = __qClass(arg);
+ nInstBytes = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
+ p = p + nInstBytes;
+ __argValues[i].pointerVal = p;
+ } else {
+ if (arg == nil) {
+ __argValues[i].pointerVal = (void *)0;
+ } else {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d non floatPointer value [%d]\n", i+1, __LINE__);
+ })
+ __FAIL__(@symbol(InvalidArgument))
+ }
+ }
+ argValuePtr = &(__argValues[i].pointerVal);;
- } else if (typeSymbol == @symbol(doublePointer)) {
- thisType = TYPE_POINTER;
- if (__isBytes(arg)) {
- if (async == true) goto badArgForAsyncCall;
- __argValues[i].pointerVal = (void *)(__byteArrayVal(arg));
- } else if (__isExternalAddressLike(arg)) {
- __argValues[i].pointerVal = (void *)(__externalAddressVal(arg));
- } else if (__isExternalBytesLike(arg)) {
- __argValues[i].pointerVal = (void *)(__externalBytesVal(arg));
- } else if (__isDoubles(arg)) {
- char *p = (char *)(__DoubleArrayInstPtr(arg)->d_element);
- int nInstBytes;
- OBJ cls;
+ } else if (typeSymbol == @symbol(doublePointer)) {
+ thisType = TYPE_POINTER;
+ if (__isBytes(arg)) {
+ if (async == true) goto badArgForAsyncCall;
+ __argValues[i].pointerVal = (void *)(__byteArrayVal(arg));
+ } else if (__isExternalAddressLike(arg)) {
+ __argValues[i].pointerVal = (void *)(__externalAddressVal(arg));
+ } else if (__isExternalBytesLike(arg)) {
+ __argValues[i].pointerVal = (void *)(__externalBytesVal(arg));
+ } else if (__isDoubles(arg)) {
+ char *p = (char *)(__DoubleArrayInstPtr(arg)->d_element);
+ int nInstBytes;
+ OBJ cls;
- if (async == true) goto badArgForAsyncCall;
- cls = __qClass(arg);
- nInstBytes = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
- p = p + nInstBytes;
+ if (async == true) goto badArgForAsyncCall;
+ cls = __qClass(arg);
+ nInstBytes = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
+ p = p + nInstBytes;
# ifdef __NEED_DOUBLE_ALIGN
- if ((INT)(__DoubleArrayInstPtr(arg)->d_element) & (__DOUBLE_ALIGN-1)) {
- int delta = __DOUBLE_ALIGN - ((INT)p & (__DOUBLE_ALIGN-1));
+ if ((INT)(__DoubleArrayInstPtr(arg)->d_element) & (__DOUBLE_ALIGN-1)) {
+ int delta = __DOUBLE_ALIGN - ((INT)p & (__DOUBLE_ALIGN-1));
- p += delta;
- }
+ p += delta;
+ }
# endif
- __argValues[i].pointerVal = p;
- } else {
- if (arg == nil) {
- __argValues[i].pointerVal = (void *)0;
- } else {
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d non doublePointer value [%d]\n", i+1, __LINE__);
- })
- __FAIL__(@symbol(InvalidArgument))
- }
- }
- argValuePtr = &(__argValues[i].pointerVal);;
+ __argValues[i].pointerVal = p;
+ } else {
+ if (arg == nil) {
+ __argValues[i].pointerVal = (void *)0;
+ } else {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d non doublePointer value [%d]\n", i+1, __LINE__);
+ })
+ __FAIL__(@symbol(InvalidArgument))
+ }
+ }
+ argValuePtr = &(__argValues[i].pointerVal);;
- } else if (typeSymbol == @symbol(pointer)) {
+ } else if (typeSymbol == @symbol(pointer)) {
commonPointerTypeArg: ;
- thisType = TYPE_POINTER;
- if (arg == nil) {
- __argValues[i].pointerVal = NULL;
- } else if (__isExternalAddressLike(arg)) {
- __argValues[i].pointerVal = (void *)(__externalAddressVal(arg));
- } else if (__isExternalBytesLike(arg)) {
- __argValues[i].pointerVal = (void *)(__externalBytesVal(arg));
- } else if (__isByteArrayLike(arg)) {
- if (async == true) goto badArgForAsyncCall;
- __argValues[i].pointerVal = (void *)(__byteArrayVal(arg));
- } else if (__isWordArray(arg) || __isSignedWordArray(arg)
- || __isIntegerArray(arg) || __isSignedIntegerArray(arg)) {
- if (async == true) goto badArgForAsyncCall;
- __argValues[i].pointerVal = (void *)(__integerArrayVal(arg));
- } else if (__isFloatArray(arg)) {
- if (async == true) goto badArgForAsyncCall;
- __argValues[i].pointerVal = (void *)(__FloatArrayInstPtr(arg)->f_element);
- } else if (__isDoubleArray(arg)) {
- if (async == true) goto badArgForAsyncCall;
- __argValues[i].pointerVal = (void *)(__DoubleArrayInstPtr(arg)->d_element);
- } else if (__isStringLike(arg)) {
- if (async == true) {
+ thisType = TYPE_POINTER;
+ if (arg == nil) {
+ __argValues[i].pointerVal = NULL;
+ } else if (__isExternalAddressLike(arg)) {
+ __argValues[i].pointerVal = (void *)(__externalAddressVal(arg));
+ } else if (__isExternalBytesLike(arg)) {
+ __argValues[i].pointerVal = (void *)(__externalBytesVal(arg));
+ } else if (__isByteArrayLike(arg)) {
+ if (async == true) goto badArgForAsyncCall;
+ __argValues[i].pointerVal = (void *)(__byteArrayVal(arg));
+ } else if (__isWordArray(arg) || __isSignedWordArray(arg)
+ || __isIntegerArray(arg) || __isSignedIntegerArray(arg)) {
+ if (async == true) goto badArgForAsyncCall;
+ __argValues[i].pointerVal = (void *)(__integerArrayVal(arg));
+ } else if (__isFloatArray(arg)) {
+ if (async == true) goto badArgForAsyncCall;
+ __argValues[i].pointerVal = (void *)(__FloatArrayInstPtr(arg)->f_element);
+ } else if (__isDoubleArray(arg)) {
+ if (async == true) goto badArgForAsyncCall;
+ __argValues[i].pointerVal = (void *)(__DoubleArrayInstPtr(arg)->d_element);
+ } else if (__isStringLike(arg)) {
+ if (async == true) {
badArgForAsyncCall: ;
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d not allowed for async call [%d]\n", i+1, __LINE__);
- })
- __FAIL__(@symbol(BadArgForAsyncCall))
- }
- __argValues[i].pointerVal = (void *)(__stringVal(arg));
- } else if (__isBytes(arg) || __isWords(arg) || __isLongs(arg)) {
- char *p = (char *)(__byteArrayVal(arg));
- int nInstBytes;
- OBJ cls;
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d not allowed for async call [%d]\n", i+1, __LINE__);
+ })
+ __FAIL__(@symbol(BadArgForAsyncCall))
+ }
+ __argValues[i].pointerVal = (void *)(__stringVal(arg));
+ } else if (__isBytes(arg) || __isWords(arg) || __isLongs(arg)) {
+ char *p = (char *)(__byteArrayVal(arg));
+ int nInstBytes;
+ OBJ cls;
- if (async == true) goto badArgForAsyncCall;
- cls = __qClass(arg);
- nInstBytes = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
- __argValues[i].pointerVal = p + nInstBytes;
- } else {
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d non pointer value [%d]\n", i+1, __LINE__);
- })
- __FAIL__(@symbol(InvalidArgument))
- }
- argValuePtr = &(__argValues[i].pointerVal);;
+ if (async == true) goto badArgForAsyncCall;
+ cls = __qClass(arg);
+ nInstBytes = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
+ __argValues[i].pointerVal = p + nInstBytes;
+ } else {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d non pointer value [%d]\n", i+1, __LINE__);
+ })
+ __FAIL__(@symbol(InvalidArgument))
+ }
+ argValuePtr = &(__argValues[i].pointerVal);;
- } else if (typeSymbol == @symbol(bool)) {
- thisType = TYPE_UINT;
+ } else if (typeSymbol == @symbol(bool)) {
+ thisType = TYPE_UINT;
- if (arg == true) {
- __argValues[i].iVal = 1;
- } else if (arg == false) {
- __argValues[i].iVal = 0;
- } else if (__isSmallInteger(arg)) {
- __argValues[i].iVal = __intVal(arg);
- } else {
- __argValues[i].iVal = __unsignedLongIntVal(arg);
- if (__argValues[i].iVal == 0) {
- DEBUGCODE_IF( @global(Verbose), {
- printf("invalidArgument: arg%d non bool value [%d]\n", i+1, __LINE__);
- })
- __FAIL__(@symbol(InvalidArgument))
- }
- }
- argValuePtr = &(__argValues[i].iVal);
- } else {
- if (__isSymbol(typeSymbol)
- && ((argValueClass = __GLOBAL_GET(typeSymbol)) != nil)) {
- if (! __isBehaviorLike(argValueClass)) {
- __FAIL__(@symbol(NonBehaviorArgumentType))
- }
- if (! __qIsSubclassOfExternalAddress(argValueClass)) {
- __FAIL__(@symbol(NonExternalAddressArgumentType))
- }
- goto commonPointerTypeArg; /* sorry */
- } else {
- __FAIL__(@symbol(UnknownArgumentType))
- }
- }
+ if (arg == true) {
+ __argValues[i].iVal = 1;
+ } else if (arg == false) {
+ __argValues[i].iVal = 0;
+ } else if (__isSmallInteger(arg)) {
+ __argValues[i].iVal = __intVal(arg);
+ } else {
+ __argValues[i].iVal = __unsignedLongIntVal(arg);
+ if (__argValues[i].iVal == 0) {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("invalidArgument: arg%d non bool value [%d]\n", i+1, __LINE__);
+ })
+ __FAIL__(@symbol(InvalidArgument))
+ }
+ }
+ argValuePtr = &(__argValues[i].iVal);
+ } else {
+ if (__isSymbol(typeSymbol)
+ && ((argValueClass = __GLOBAL_GET(typeSymbol)) != nil)) {
+ if (! __isBehaviorLike(argValueClass)) {
+ __FAIL__(@symbol(NonBehaviorArgumentType))
+ }
+ if (! __qIsSubclassOfExternalAddress(argValueClass)) {
+ __FAIL__(@symbol(NonExternalAddressArgumentType))
+ }
+ goto commonPointerTypeArg; /* sorry */
+ } else {
+ __FAIL__(@symbol(UnknownArgumentType))
+ }
+ }
- __argTypes[i] = thisType;
- __argValuePointers[i] = argValuePtr;
+ __argTypes[i] = thisType;
+ __argValuePointers[i] = argValuePtr;
- if ((thisType == TYPE_FLOAT) || (thisType == TYPE_DOUBLE)) {
- __numFloatOrDoubleArgs++;
- }
- DEBUGCODE_IF( @global(Verbose), {
- printf("arg%d: %"_lx_" type:%"_lx_"\n", i+1, (INT)(__argValues[i].iVal), (INT)thisType);
- })
+ if ((thisType == TYPE_FLOAT) || (thisType == TYPE_DOUBLE)) {
+ __numFloatOrDoubleArgs++;
+ }
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("arg%d: %"_lx_" type:%"_lx_"\n", i+1, (INT)(__argValues[i].iVal), (INT)thisType);
+ })
}
failureInfo = nil;
if (callTypeNumber == @global(CALLTYPE_API)) {
# ifdef __MINGW64__
- __callType = FFI_DEFAULT_ABI;
+ __callType = FFI_DEFAULT_ABI;
# else
-# ifdef CALLTYPE_FFI_STDCALL
- __callType = CALLTYPE_FFI_STDCALL;
- DEBUGCODE_IF( @global(Verbose), {
- printf("STDCALL\n");
- })
- failureCode = @symbol(FFICallTypeNotSupported);
- goto getOutOfHere;
+# ifdef CALLTYPE_API
+ __callType = CALLTYPE_API;
+# else
+# ifdef CALLTYPE_FFI_STDCALL
+ __callType = CALLTYPE_FFI_STDCALL;
+# else
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("STDCALL\n");
+ })
+ failureCode = @symbol(FFICallTypeNotSupported);
+ goto getOutOfHere;
+# endif
# endif
# endif
}
@@ -1813,64 +1821,64 @@
// these calltypes are only supported on some systems; others report an error
if (callTypeNumber == @global(CALLTYPE_V8)) {
# ifdef CALLTYPE_FFI_V8
- __callType = CALLTYPE_FFI_V8;
+ __callType = CALLTYPE_FFI_V8;
# else
- failureCode = @symbol(FFICallTypeNotSupported);
- goto getOutOfHere;
+ failureCode = @symbol(FFICallTypeNotSupported);
+ goto getOutOfHere;
# endif
}
if (callTypeNumber == @global(CALLTYPE_V9)) {
# ifdef CALLTYPE_FFI_V9
- __callType = CALLTYPE_FFI_V9;
+ __callType = CALLTYPE_FFI_V9;
# else
- failureCode = @symbol(FFICallTypeNotSupported);
- goto getOutOfHere;
+ failureCode = @symbol(FFICallTypeNotSupported);
+ goto getOutOfHere;
# endif
}
if (callTypeNumber == @global(CALLTYPE_UNIX64)) {
# ifdef CALLTYPE_FFI_UNIX64
- __callType = CALLTYPE_FFI_UNIX64;
+ __callType = CALLTYPE_FFI_UNIX64;
# else
- failureCode = @symbol(FFICallTypeNotSupported);
- goto getOutOfHere;
+ failureCode = @symbol(FFICallTypeNotSupported);
+ goto getOutOfHere;
# endif
}
# ifdef HAVE_FFI
# ifdef VERBOSE
if (@global(Verbose) == true) {
- printf("prep: numargs=%d\n", __numArgsIncludingThis);
+ printf("prep: numargs=%d\n", __numArgsIncludingThis);
}
# endif
if (ffi_prep_cif(&__cif, __callType, __numArgsIncludingThis, __returnType, __argTypesIncludingThis) != FFI_OK) {
- __FAIL__(@symbol(FFIPrepareFailed))
+ __FAIL__(@symbol(FFIPrepareFailed))
}
if (async == true) {
- DEBUGCODE_IF( @global(Verbose), {
- printf("async call 0x%"_lx_"\n", (INT)codeAddress);
- })
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("async call 0x%"_lx_"\n", (INT)codeAddress);
+ })
# ifdef __win32__
- __STX_C_CALL4( "ffi_call", ffi_call, &__cif, codeAddress, __returnValuePointer, __argValuePointersIncludingThis);
+ __STX_C_CALL4( "ffi_call", ffi_call, &__cif, codeAddress, __returnValuePointer, __argValuePointersIncludingThis);
# else
- __BEGIN_INTERRUPTABLE__
- ffi_call(&__cif, codeAddress, __returnValuePointer, __argValuePointersIncludingThis);
- __END_INTERRUPTABLE__
+ __BEGIN_INTERRUPTABLE__
+ ffi_call(&__cif, codeAddress, __returnValuePointer, __argValuePointersIncludingThis);
+ __END_INTERRUPTABLE__
# endif
} else {
- if (unlimitedStack == true) {
- DEBUGCODE_IF( @global(Verbose), {
- printf("UNLIMITEDSTACKCALL call 0x%"_lx_"\n", (INT)codeAddress);
- })
- __UNLIMITEDSTACKCALL4__((OBJFUNC)ffi_call, (INT)(&__cif), (INT)codeAddress, (INT)__returnValuePointer, (INT)__argValuePointersIncludingThis);
- } else {
- DEBUGCODE_IF( @global(Verbose), {
- printf("call 0x%"_lx_"\n", (INT)codeAddress);
- })
- ffi_call(&__cif, codeAddress, __returnValuePointer, __argValuePointersIncludingThis);
- }
+ if (unlimitedStack == true) {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("UNLIMITEDSTACKCALL call 0x%"_lx_"\n", (INT)codeAddress);
+ })
+ __UNLIMITEDSTACKCALL4__((OBJFUNC)ffi_call, (INT)(&__cif), (INT)codeAddress, (INT)__returnValuePointer, (INT)__argValuePointersIncludingThis);
+ } else {
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("call 0x%"_lx_"\n", (INT)codeAddress);
+ })
+ ffi_call(&__cif, codeAddress, __returnValuePointer, __argValuePointersIncludingThis);
+ }
}
# else /* NO FFI */
@@ -1885,615 +1893,615 @@
// pass down separately.
{
- VOIDPTRFUNC fi = (VOIDPTRFUNC)codeAddress;
- DOUBLEFUNC fd = (DOUBLEFUNC)codeAddress;
- int rI[MAX_ARGS], dI[MAX_ARGS];
- int i;
+ VOIDPTRFUNC fi = (VOIDPTRFUNC)codeAddress;
+ DOUBLEFUNC fd = (DOUBLEFUNC)codeAddress;
+ int rI[MAX_ARGS], dI[MAX_ARGS];
+ int i;
- // sort the float/double args into a separate arglist and pass them AFTER the regular args.
- // This is possible, because all doubles are passed in floating-pnt registers,
- // no matter where they are in the arglist.
- int argI = 0, nonDoubleI = 0, doubleI = 0;
+ // sort the float/double args into a separate arglist and pass them AFTER the regular args.
+ // This is possible, because all doubles are passed in floating-pnt registers,
+ // no matter where they are in the arglist.
+ int argI = 0, nonDoubleI = 0, doubleI = 0;
- for (argI=0; argI<__numArgsIncludingThis; argI++) {
+ for (argI=0; argI<__numArgsIncludingThis; argI++) {
# if defined(__x86_64__)
- if ((__argTypesIncludingThis[argI] == TYPE_DOUBLE)
- || (__argTypesIncludingThis[argI] == TYPE_FLOAT)) {
- dI[doubleI++] = argI;
- } else
+ if ((__argTypesIncludingThis[argI] == TYPE_DOUBLE)
+ || (__argTypesIncludingThis[argI] == TYPE_FLOAT)) {
+ dI[doubleI++] = argI;
+ } else
# endif // __x86_64__
- {
- rI[nonDoubleI++] = argI;
- }
- }
- for (i=doubleI; i<__numArgsIncludingThis; i++) dI[doubleI++] = 0;
- for (i=nonDoubleI; i<__numArgsIncludingThis; i++) rI[nonDoubleI++] = 0;
+ {
+ rI[nonDoubleI++] = argI;
+ }
+ }
+ for (i=doubleI; i<__numArgsIncludingThis; i++) dI[doubleI++] = 0;
+ for (i=nonDoubleI; i<__numArgsIncludingThis; i++) rI[nonDoubleI++] = 0;
- DEBUGCODE_IF( @global(Verbose), {
- printf("call %p with %d args (%d regular, %d double)\n", codeAddress, __numArgsIncludingThis,
- nonDoubleI, doubleI);
- })
- if (doubleI == 0) {
- // no double args
- switch (__returnType) {
- case TYPE_FLOAT:
- case TYPE_DOUBLE:
- DEBUGCODE_IF( @global(Verbose), {
- printf("non-double arg; double retval\n");
- })
- switch (__numArgsIncludingThis) {
- case 0:
- __returnValue.dVal = (*fd)();
- break;
- case 1:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal );
- break;
- case 2:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal );
- break;
- case 3:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal );
- break;
- case 4:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal );
- break;
- case 5:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal );
- break;
- case 6:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal );
- break;
- case 7:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal );
- break;
- case 8:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal );
- break;
- case 9:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
- __argValues[rI[8]].pointerVal );
- break;
- case 10:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
- __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal );
- break;
- case 11:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
- __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
- __argValues[rI[10]].pointerVal );
- break;
- case 12:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
- __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
- __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal );
- break;
- case 13:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
- __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
- __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
- __argValues[rI[12]].pointerVal );
- break;
- case 14:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
- __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
- __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
- __argValues[rI[12]].pointerVal, __argValues[rI[13]].pointerVal );
- break;
- case 15:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
- __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
- __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
- __argValues[rI[12]].pointerVal, __argValues[rI[13]].pointerVal,
- __argValues[rI[14]].pointerVal );
- break;
- default:
- failureCode = @symbol(TooManyArguments);
- goto getOutOfHere;
- }
- break;
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("call %p with %d args (%d regular, %d double)\n", codeAddress, __numArgsIncludingThis,
+ nonDoubleI, doubleI);
+ })
+ if (doubleI == 0) {
+ // no double args
+ switch (__returnType) {
+ case TYPE_FLOAT:
+ case TYPE_DOUBLE:
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("non-double arg; double retval\n");
+ })
+ switch (__numArgsIncludingThis) {
+ case 0:
+ __returnValue.dVal = (*fd)();
+ break;
+ case 1:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal );
+ break;
+ case 2:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal );
+ break;
+ case 3:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal );
+ break;
+ case 4:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal );
+ break;
+ case 5:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal );
+ break;
+ case 6:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal );
+ break;
+ case 7:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal );
+ break;
+ case 8:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal );
+ break;
+ case 9:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
+ __argValues[rI[8]].pointerVal );
+ break;
+ case 10:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
+ __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal );
+ break;
+ case 11:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
+ __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
+ __argValues[rI[10]].pointerVal );
+ break;
+ case 12:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
+ __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
+ __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal );
+ break;
+ case 13:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
+ __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
+ __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
+ __argValues[rI[12]].pointerVal );
+ break;
+ case 14:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
+ __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
+ __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
+ __argValues[rI[12]].pointerVal, __argValues[rI[13]].pointerVal );
+ break;
+ case 15:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
+ __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
+ __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
+ __argValues[rI[12]].pointerVal, __argValues[rI[13]].pointerVal,
+ __argValues[rI[14]].pointerVal );
+ break;
+ default:
+ failureCode = @symbol(TooManyArguments);
+ goto getOutOfHere;
+ }
+ break;
- default:
- DEBUGCODE_IF( @global(Verbose), {
- printf("non-double arg; non-double retval\n");
- })
- switch (__numArgsIncludingThis) {
- case 0:
- __returnValue.pointerVal = (*fi)();
- break;
- case 1:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal );
- break;
- case 2:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal );
- break;
- case 3:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal );
- break;
- case 4:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal,
- __argValues[rI[3]].pointerVal );
- break;
- case 5:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal,
- __argValues[rI[3]].pointerVal, __argValues[rI[4]].pointerVal );
- break;
- case 6:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal,
- __argValues[rI[3]].pointerVal, __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal );
- break;
- case 7:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal,
- __argValues[rI[3]].pointerVal, __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal );
- break;
- case 8:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal,
- __argValues[rI[3]].pointerVal, __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal );
- break;
- case 9:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal,
- __argValues[rI[3]].pointerVal, __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal, __argValues[rI[8]].pointerVal );
- break;
- case 10:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal,
- __argValues[rI[3]].pointerVal, __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal, __argValues[rI[8]].pointerVal,
- __argValues[rI[9]].pointerVal );
- break;
- case 11:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal,
- __argValues[rI[3]].pointerVal, __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal, __argValues[rI[8]].pointerVal,
- __argValues[rI[9]].pointerVal, __argValues[rI[10]].pointerVal );
- break;
- case 12:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal,
- __argValues[rI[3]].pointerVal, __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal, __argValues[rI[8]].pointerVal,
- __argValues[rI[9]].pointerVal, __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal );
- break;
- case 13:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal,
- __argValues[rI[3]].pointerVal, __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal, __argValues[rI[8]].pointerVal,
- __argValues[rI[9]].pointerVal, __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
- __argValues[rI[12]].pointerVal );
- break;
- case 14:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal,
- __argValues[rI[3]].pointerVal, __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal, __argValues[rI[8]].pointerVal,
- __argValues[rI[9]].pointerVal, __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
- __argValues[rI[12]].pointerVal, __argValues[rI[13]].pointerVal );
- break;
- case 15:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal,
- __argValues[rI[3]].pointerVal, __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal, __argValues[rI[8]].pointerVal,
- __argValues[rI[9]].pointerVal, __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
- __argValues[rI[12]].pointerVal, __argValues[rI[13]].pointerVal, __argValues[rI[14]].pointerVal );
- break;
- default:
- failureCode = @symbol(TooManyArguments);
- goto getOutOfHere;
- }
- }
- } else {
- // has double args
- switch (__returnType) {
- case TYPE_FLOAT:
- case TYPE_DOUBLE:
- DEBUGCODE_IF( @global(Verbose), {
- printf("double arg(s); double retval\n");
- })
- switch (__numArgsIncludingThis) {
- case 0:
- __returnValue.dVal = (*fd)( );
- break;
- case 1:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal,
- __argValues[dI[0]].dVal );
- break;
- case 2:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal
- );
- break;
- case 3:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal
- );
- break;
- case 4:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal, __argValues[dI[3]].dVal
- );
- break;
- case 5:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
- __argValues[dI[4]].dVal
- );
- break;
- case 6:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
- __argValues[dI[4]].dVal, __argValues[dI[5]].dVal
- );
- break;
- case 7:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
- __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
- __argValues[dI[6]].dVal
- );
- break;
- case 8:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
- __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
- __argValues[dI[6]].dVal, __argValues[dI[7]].dVal
- );
- break;
- case 9:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
- __argValues[rI[8]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
- __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
- __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
- __argValues[dI[8]].dVal
- );
- break;
- case 10:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
- __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
- __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
- __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
- __argValues[dI[8]].dVal, __argValues[dI[9]].dVal
- );
- break;
- case 11:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
- __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
- __argValues[rI[10]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
- __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
- __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
- __argValues[dI[8]].dVal, __argValues[dI[9]].dVal,
- __argValues[dI[10]].dVal
- );
- break;
- case 12:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
- __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
- __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
- __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
- __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
- __argValues[dI[8]].dVal, __argValues[dI[9]].dVal,
- __argValues[dI[10]].dVal, __argValues[dI[11]].dVal
- );
- break;
- case 13:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
- __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
- __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
- __argValues[rI[12]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
- __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
- __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
- __argValues[dI[8]].dVal, __argValues[dI[9]].dVal,
- __argValues[dI[10]].dVal, __argValues[dI[11]].dVal,
- __argValues[dI[12]].dVal
- );
- break;
- case 14:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
- __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
- __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
- __argValues[rI[12]].pointerVal, __argValues[rI[13]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
- __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
- __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
- __argValues[dI[8]].dVal, __argValues[dI[9]].dVal,
- __argValues[dI[10]].dVal, __argValues[dI[11]].dVal,
- __argValues[dI[12]].dVal, __argValues[dI[13]].dVal
- );
- break;
- case 15:
- __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
- __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
- __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
- __argValues[rI[12]].pointerVal, __argValues[rI[13]].pointerVal,
- __argValues[rI[14]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
- __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
- __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
- __argValues[dI[8]].dVal, __argValues[dI[9]].dVal,
- __argValues[dI[10]].dVal, __argValues[dI[11]].dVal,
- __argValues[dI[12]].dVal, __argValues[dI[13]].dVal,
- __argValues[dI[14]].dVal
- );
- break;
- default:
- failureCode = @symbol(TooManyArguments);
- goto getOutOfHere;
- }
- break;
+ default:
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("non-double arg; non-double retval\n");
+ })
+ switch (__numArgsIncludingThis) {
+ case 0:
+ __returnValue.pointerVal = (*fi)();
+ break;
+ case 1:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal );
+ break;
+ case 2:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal );
+ break;
+ case 3:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal );
+ break;
+ case 4:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal,
+ __argValues[rI[3]].pointerVal );
+ break;
+ case 5:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal,
+ __argValues[rI[3]].pointerVal, __argValues[rI[4]].pointerVal );
+ break;
+ case 6:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal,
+ __argValues[rI[3]].pointerVal, __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal );
+ break;
+ case 7:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal,
+ __argValues[rI[3]].pointerVal, __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal );
+ break;
+ case 8:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal,
+ __argValues[rI[3]].pointerVal, __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal );
+ break;
+ case 9:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal,
+ __argValues[rI[3]].pointerVal, __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal, __argValues[rI[8]].pointerVal );
+ break;
+ case 10:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal,
+ __argValues[rI[3]].pointerVal, __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal, __argValues[rI[8]].pointerVal,
+ __argValues[rI[9]].pointerVal );
+ break;
+ case 11:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal,
+ __argValues[rI[3]].pointerVal, __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal, __argValues[rI[8]].pointerVal,
+ __argValues[rI[9]].pointerVal, __argValues[rI[10]].pointerVal );
+ break;
+ case 12:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal,
+ __argValues[rI[3]].pointerVal, __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal, __argValues[rI[8]].pointerVal,
+ __argValues[rI[9]].pointerVal, __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal );
+ break;
+ case 13:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal,
+ __argValues[rI[3]].pointerVal, __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal, __argValues[rI[8]].pointerVal,
+ __argValues[rI[9]].pointerVal, __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
+ __argValues[rI[12]].pointerVal );
+ break;
+ case 14:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal,
+ __argValues[rI[3]].pointerVal, __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal, __argValues[rI[8]].pointerVal,
+ __argValues[rI[9]].pointerVal, __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
+ __argValues[rI[12]].pointerVal, __argValues[rI[13]].pointerVal );
+ break;
+ case 15:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal, __argValues[rI[2]].pointerVal,
+ __argValues[rI[3]].pointerVal, __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal, __argValues[rI[8]].pointerVal,
+ __argValues[rI[9]].pointerVal, __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
+ __argValues[rI[12]].pointerVal, __argValues[rI[13]].pointerVal, __argValues[rI[14]].pointerVal );
+ break;
+ default:
+ failureCode = @symbol(TooManyArguments);
+ goto getOutOfHere;
+ }
+ }
+ } else {
+ // has double args
+ switch (__returnType) {
+ case TYPE_FLOAT:
+ case TYPE_DOUBLE:
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("double arg(s); double retval\n");
+ })
+ switch (__numArgsIncludingThis) {
+ case 0:
+ __returnValue.dVal = (*fd)( );
+ break;
+ case 1:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal,
+ __argValues[dI[0]].dVal );
+ break;
+ case 2:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal
+ );
+ break;
+ case 3:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal
+ );
+ break;
+ case 4:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal, __argValues[dI[3]].dVal
+ );
+ break;
+ case 5:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
+ __argValues[dI[4]].dVal
+ );
+ break;
+ case 6:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
+ __argValues[dI[4]].dVal, __argValues[dI[5]].dVal
+ );
+ break;
+ case 7:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
+ __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
+ __argValues[dI[6]].dVal
+ );
+ break;
+ case 8:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
+ __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
+ __argValues[dI[6]].dVal, __argValues[dI[7]].dVal
+ );
+ break;
+ case 9:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
+ __argValues[rI[8]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
+ __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
+ __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
+ __argValues[dI[8]].dVal
+ );
+ break;
+ case 10:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
+ __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
+ __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
+ __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
+ __argValues[dI[8]].dVal, __argValues[dI[9]].dVal
+ );
+ break;
+ case 11:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
+ __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
+ __argValues[rI[10]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
+ __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
+ __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
+ __argValues[dI[8]].dVal, __argValues[dI[9]].dVal,
+ __argValues[dI[10]].dVal
+ );
+ break;
+ case 12:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
+ __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
+ __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
+ __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
+ __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
+ __argValues[dI[8]].dVal, __argValues[dI[9]].dVal,
+ __argValues[dI[10]].dVal, __argValues[dI[11]].dVal
+ );
+ break;
+ case 13:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
+ __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
+ __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
+ __argValues[rI[12]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
+ __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
+ __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
+ __argValues[dI[8]].dVal, __argValues[dI[9]].dVal,
+ __argValues[dI[10]].dVal, __argValues[dI[11]].dVal,
+ __argValues[dI[12]].dVal
+ );
+ break;
+ case 14:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
+ __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
+ __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
+ __argValues[rI[12]].pointerVal, __argValues[rI[13]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
+ __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
+ __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
+ __argValues[dI[8]].dVal, __argValues[dI[9]].dVal,
+ __argValues[dI[10]].dVal, __argValues[dI[11]].dVal,
+ __argValues[dI[12]].dVal, __argValues[dI[13]].dVal
+ );
+ break;
+ case 15:
+ __returnValue.dVal = (*fd)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
+ __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
+ __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
+ __argValues[rI[12]].pointerVal, __argValues[rI[13]].pointerVal,
+ __argValues[rI[14]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
+ __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
+ __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
+ __argValues[dI[8]].dVal, __argValues[dI[9]].dVal,
+ __argValues[dI[10]].dVal, __argValues[dI[11]].dVal,
+ __argValues[dI[12]].dVal, __argValues[dI[13]].dVal,
+ __argValues[dI[14]].dVal
+ );
+ break;
+ default:
+ failureCode = @symbol(TooManyArguments);
+ goto getOutOfHere;
+ }
+ break;
- default:
- DEBUGCODE_IF( @global(Verbose), {
- printf("double arg(s); non-double retval\n");
- })
- switch (__numArgsIncludingThis) {
- case 0:
- __returnValue.pointerVal = (*fi)( );
- break;
- case 1:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal,
- __argValues[dI[0]].dVal );
- break;
- case 2:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal
- );
- break;
- case 3:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal
- );
- break;
- case 4:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal, __argValues[dI[3]].dVal
- );
- break;
- case 5:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
- __argValues[dI[4]].dVal
- );
- break;
- case 6:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
- __argValues[dI[4]].dVal, __argValues[dI[5]].dVal
- );
- break;
- case 7:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
- __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
- __argValues[dI[6]].dVal
- );
- break;
- case 8:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
- __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
- __argValues[dI[6]].dVal, __argValues[dI[7]].dVal
- );
- break;
- case 9:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
- __argValues[rI[8]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
- __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
- __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
- __argValues[dI[8]].dVal
- );
- break;
- case 10:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
- __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
- __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
- __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
- __argValues[dI[8]].dVal, __argValues[dI[9]].dVal
- );
- break;
- case 11:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
- __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
- __argValues[rI[10]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
- __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
- __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
- __argValues[dI[8]].dVal, __argValues[dI[9]].dVal,
- __argValues[dI[10]].dVal
- );
- break;
- case 12:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
- __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
- __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
- __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
- __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
- __argValues[dI[8]].dVal, __argValues[dI[9]].dVal,
- __argValues[dI[10]].dVal, __argValues[dI[11]].dVal
- );
- break;
- case 13:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
- __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
- __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
- __argValues[rI[12]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
- __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
- __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
- __argValues[dI[8]].dVal, __argValues[dI[9]].dVal,
- __argValues[dI[10]].dVal, __argValues[dI[11]].dVal,
- __argValues[dI[12]].dVal
- );
- break;
- case 14:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
- __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
- __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
- __argValues[rI[12]].pointerVal, __argValues[rI[13]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
- __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
- __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
- __argValues[dI[8]].dVal, __argValues[dI[9]].dVal,
- __argValues[dI[10]].dVal, __argValues[dI[11]].dVal,
- __argValues[dI[12]].dVal, __argValues[dI[13]].dVal
- );
- break;
- case 15:
- __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
- __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
- __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
- __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
- __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
- __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
- __argValues[rI[12]].pointerVal, __argValues[rI[13]].pointerVal,
- __argValues[rI[14]].pointerVal,
- __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
- __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
- __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
- __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
- __argValues[dI[8]].dVal, __argValues[dI[9]].dVal,
- __argValues[dI[10]].dVal, __argValues[dI[11]].dVal,
- __argValues[dI[12]].dVal, __argValues[dI[13]].dVal,
- __argValues[dI[14]].dVal
- );
- break;
- default:
- failureCode = @symbol(TooManyArguments);
- goto getOutOfHere;
- }
- }
- }
+ default:
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("double arg(s); non-double retval\n");
+ })
+ switch (__numArgsIncludingThis) {
+ case 0:
+ __returnValue.pointerVal = (*fi)( );
+ break;
+ case 1:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal,
+ __argValues[dI[0]].dVal );
+ break;
+ case 2:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal
+ );
+ break;
+ case 3:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal
+ );
+ break;
+ case 4:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal, __argValues[dI[3]].dVal
+ );
+ break;
+ case 5:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
+ __argValues[dI[4]].dVal
+ );
+ break;
+ case 6:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
+ __argValues[dI[4]].dVal, __argValues[dI[5]].dVal
+ );
+ break;
+ case 7:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
+ __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
+ __argValues[dI[6]].dVal
+ );
+ break;
+ case 8:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
+ __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
+ __argValues[dI[6]].dVal, __argValues[dI[7]].dVal
+ );
+ break;
+ case 9:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
+ __argValues[rI[8]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
+ __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
+ __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
+ __argValues[dI[8]].dVal
+ );
+ break;
+ case 10:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
+ __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
+ __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
+ __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
+ __argValues[dI[8]].dVal, __argValues[dI[9]].dVal
+ );
+ break;
+ case 11:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
+ __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
+ __argValues[rI[10]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
+ __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
+ __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
+ __argValues[dI[8]].dVal, __argValues[dI[9]].dVal,
+ __argValues[dI[10]].dVal
+ );
+ break;
+ case 12:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
+ __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
+ __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
+ __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
+ __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
+ __argValues[dI[8]].dVal, __argValues[dI[9]].dVal,
+ __argValues[dI[10]].dVal, __argValues[dI[11]].dVal
+ );
+ break;
+ case 13:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
+ __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
+ __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
+ __argValues[rI[12]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
+ __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
+ __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
+ __argValues[dI[8]].dVal, __argValues[dI[9]].dVal,
+ __argValues[dI[10]].dVal, __argValues[dI[11]].dVal,
+ __argValues[dI[12]].dVal
+ );
+ break;
+ case 14:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
+ __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
+ __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
+ __argValues[rI[12]].pointerVal, __argValues[rI[13]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
+ __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
+ __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
+ __argValues[dI[8]].dVal, __argValues[dI[9]].dVal,
+ __argValues[dI[10]].dVal, __argValues[dI[11]].dVal,
+ __argValues[dI[12]].dVal, __argValues[dI[13]].dVal
+ );
+ break;
+ case 15:
+ __returnValue.pointerVal = (*fi)( __argValues[rI[0]].pointerVal, __argValues[rI[1]].pointerVal,
+ __argValues[rI[2]].pointerVal, __argValues[rI[3]].pointerVal,
+ __argValues[rI[4]].pointerVal, __argValues[rI[5]].pointerVal,
+ __argValues[rI[6]].pointerVal, __argValues[rI[7]].pointerVal,
+ __argValues[rI[8]].pointerVal, __argValues[rI[9]].pointerVal,
+ __argValues[rI[10]].pointerVal, __argValues[rI[11]].pointerVal,
+ __argValues[rI[12]].pointerVal, __argValues[rI[13]].pointerVal,
+ __argValues[rI[14]].pointerVal,
+ __argValues[dI[0]].dVal, __argValues[dI[1]].dVal,
+ __argValues[dI[2]].dVal, __argValues[dI[3]].dVal,
+ __argValues[dI[4]].dVal, __argValues[dI[5]].dVal,
+ __argValues[dI[6]].dVal, __argValues[dI[7]].dVal,
+ __argValues[dI[8]].dVal, __argValues[dI[9]].dVal,
+ __argValues[dI[10]].dVal, __argValues[dI[11]].dVal,
+ __argValues[dI[12]].dVal, __argValues[dI[13]].dVal,
+ __argValues[dI[14]].dVal
+ );
+ break;
+ default:
+ failureCode = @symbol(TooManyArguments);
+ goto getOutOfHere;
+ }
+ }
+ }
}
# endif // alternative to FFI
DEBUGCODE_IF( @global(Verbose), {
- printf("retval is %"_ld_" (0x%"_lx_")\n", (INT)(__returnValue.iVal), (INT)(__returnValue.iVal));
+ printf("retval is %"_ld_" (0x%"_lx_")\n", (INT)(__returnValue.iVal), (INT)(__returnValue.iVal));
})
if ((returnTypeSymbol == @symbol(int))
@@ -2501,68 +2509,68 @@
|| (returnTypeSymbol == @symbol(sint8))
|| (returnTypeSymbol == @symbol(sint16))
|| (returnTypeSymbol == @symbol(sint32))) {
- DEBUGCODE_IF( @global(Verbose), {
- printf("return int: %"_lx_"\n", (INT)(__returnValue.iVal));
- })
- RETURN ( __MKINT(__returnValue.iVal) );
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("return int: %"_lx_"\n", (INT)(__returnValue.iVal));
+ })
+ RETURN ( __MKINT(__returnValue.iVal) );
}
if ((returnTypeSymbol == @symbol(uint))
|| (returnTypeSymbol == @symbol(uint8))
|| (returnTypeSymbol == @symbol(uint16))
|| (returnTypeSymbol == @symbol(uint32))) {
- DEBUGCODE_IF( @global(Verbose), {
- printf("return uint: %"_lx_"\n", (INT)(__returnValue.iVal));
- })
- RETURN ( __MKUINT(__returnValue.iVal) );
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("return uint: %"_lx_"\n", (INT)(__returnValue.iVal));
+ })
+ RETURN ( __MKUINT(__returnValue.iVal) );
}
if (returnTypeSymbol == @symbol(bool)) {
- RETURN ( __returnValue.iVal ? true : false );
+ RETURN ( __returnValue.iVal ? true : false );
}
if (returnTypeSymbol == @symbol(float)) {
- RETURN ( __MKFLOAT(__returnValue.fVal ));
+ RETURN ( __MKFLOAT(__returnValue.fVal ));
}
if (returnTypeSymbol == @symbol(double)) {
- RETURN ( __MKFLOAT(__returnValue.dVal ));
+ RETURN ( __MKFLOAT(__returnValue.dVal ));
}
if (returnTypeSymbol == @symbol(void)) {
- RETURN ( nil );
+ RETURN ( nil );
}
if (returnTypeSymbol == @symbol(char)) {
- RETURN ( __MKCHARACTER(__returnValue.iVal & 0xFF) );
+ RETURN ( __MKCHARACTER(__returnValue.iVal & 0xFF) );
}
if (returnTypeSymbol == @symbol(wchar)) {
- RETURN ( __MKUCHARACTER(__returnValue.iVal & 0xFFFF) );
+ RETURN ( __MKUCHARACTER(__returnValue.iVal & 0xFFFF) );
}
if (returnTypeSymbol == @symbol(sint64)) {
# if (__POINTER_SIZE__ == 8)
- DEBUGCODE_IF( @global(Verbose), {
- printf("return sint64: %"_lx_"\n", (INT)(__returnValue.longLongVal));
- })
- RETURN ( __MKINT(__returnValue.longLongVal) );
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("return sint64: %"_lx_"\n", (INT)(__returnValue.longLongVal));
+ })
+ RETURN ( __MKINT(__returnValue.longLongVal) );
# else
- DEBUGCODE_IF( @global(Verbose), {
- printf("return sint64: %lx%08lx\n", __HI32(__returnValue.longLongVal), __LO32(__returnValue.longLongVal));
- })
- RETURN ( __MKINT64(&__returnValue.longLongVal) );
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("return sint64: %lx%08lx\n", __HI32(__returnValue.longLongVal), __LO32(__returnValue.longLongVal));
+ })
+ RETURN ( __MKINT64(&__returnValue.longLongVal) );
# endif
}
if (returnTypeSymbol == @symbol(uint64)) {
# if (__POINTER_SIZE__ == 8)
- DEBUGCODE_IF( @global(Verbose), {
- printf("return uint64: %"_lx_"\n", (unsigned INT)(__returnValue.longLongVal));
- })
- RETURN ( __MKUINT(__returnValue.longLongVal) );
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("return uint64: %"_lx_"\n", (unsigned INT)(__returnValue.longLongVal));
+ })
+ RETURN ( __MKUINT(__returnValue.longLongVal) );
# else
- DEBUGCODE_IF( @global(Verbose), {
- printf("return sint64: %lx%08lx\n", __HI32(__returnValue.longLongVal), __LO32(__returnValue.longLongVal));
- })
- RETURN ( __MKUINT64(&__returnValue.longLongVal) );
+ DEBUGCODE_IF( @global(Verbose), {
+ printf("return sint64: %lx%08lx\n", __HI32(__returnValue.longLongVal), __LO32(__returnValue.longLongVal));
+ })
+ RETURN ( __MKUINT64(&__returnValue.longLongVal) );
# endif
}
DEBUGCODE_IF( @global(Verbose), {
- printf("return pointer: %"_lx_"\n", (INT)(__returnValue.pointerVal));
+ printf("return pointer: %"_lx_"\n", (INT)(__returnValue.pointerVal));
})
if (returnTypeSymbol == @symbol(handle) || returnTypeSymbol == @symbol(pointer)) {
if (__returnValue.pointerVal == NULL) {
@@ -2579,67 +2587,67 @@
}
}
} else if (returnTypeSymbol == @symbol(bytePointer)) {
- returnValue = __MKEXTERNALBYTES(__returnValue.pointerVal);
+ returnValue = __MKEXTERNALBYTES(__returnValue.pointerVal);
} else if (returnTypeSymbol == @symbol(charPointer)) {
- returnValue = __MKSTRING(__returnValue.pointerVal);
+ returnValue = __MKSTRING(__returnValue.pointerVal);
} else if (returnTypeSymbol == @symbol(wcharPointer)) {
- returnValue = __MKU16STRING(__returnValue.pointerVal);
+ returnValue = __MKU16STRING(__returnValue.pointerVal);
} else {
- __FAIL__(@symbol(UnknownReturnType2))
+ __FAIL__(@symbol(UnknownReturnType2))
}
getOutOfHere: ;
%}.
failureCode notNil ifTrue:[
- (failureCode == #UnknownReturnType or:[ failureCode == #UnknownArgumentType ]) ifTrue:[
- oldReturnType := returnType.
- oldArgumentTypes := argumentTypes.
- self adjustTypes.
- ((oldReturnType ~= returnType) or:[oldArgumentTypes ~= argumentTypes]) ifTrue:[
- thisContext restart
- ].
- ].
- (failureCode == #BadArgForAsyncCall) ifTrue:[
- ^ self tryAgainWithAsyncSafeArguments:argumentsOrNil forCPPInstance:aReceiverOrNil
- ].
- (failureCode == #FFINotSupported) ifTrue:[
- self primitiveFailed:'FFI support missing in this build'.
- ].
+ (failureCode == #UnknownReturnType or:[ failureCode == #UnknownArgumentType ]) ifTrue:[
+ oldReturnType := returnType.
+ oldArgumentTypes := argumentTypes.
+ self adjustTypes.
+ ((oldReturnType ~= returnType) or:[oldArgumentTypes ~= argumentTypes]) ifTrue:[
+ thisContext restart
+ ].
+ ].
+ (failureCode == #BadArgForAsyncCall) ifTrue:[
+ ^ self tryAgainWithAsyncSafeArguments:argumentsOrNil forCPPInstance:aReceiverOrNil
+ ].
+ (failureCode == #FFINotSupported) ifTrue:[
+ self primitiveFailed:'FFI support missing in this build'.
+ ].
- self primitiveFailed. "see failureCode and failureInfo for details"
- ^ nil
+ self primitiveFailed. "see failureCode and failureInfo for details"
+ ^ nil
].
returnType isSymbol ifTrue:[
- returnValueClass notNil ifTrue:[
- self isConstReturnValue ifTrue:[
- returnValue changeClassTo:returnValueClass.
- ^ returnValue
- ].
- ^ returnValueClass fromExternalAddress:returnValue.
- ].
+ returnValueClass notNil ifTrue:[
+ self isConstReturnValue ifTrue:[
+ returnValue changeClassTo:returnValueClass.
+ ^ returnValue
+ ].
+ ^ returnValueClass fromExternalAddress:returnValue.
+ ].
] ifFalse:[
- returnType isCPointer ifTrue:[
- returnType baseType isCStruct ifTrue:[
- stClass := Smalltalk classNamed:returnType baseType name.
- stClass notNil ifTrue:[
- self isConstReturnValue ifTrue:[
- returnValue changeClassTo:returnValueClass.
- ^ returnValue
- ].
- ^ stClass fromExternalAddress:returnValue.
- ].
- ].
- returnType baseType isCChar ifTrue:[
- ^ returnValue stringAt:1
- ].
- ].
+ returnType isCPointer ifTrue:[
+ returnType baseType isCStruct ifTrue:[
+ stClass := Smalltalk classNamed:returnType baseType name.
+ stClass notNil ifTrue:[
+ self isConstReturnValue ifTrue:[
+ returnValue changeClassTo:returnValueClass.
+ ^ returnValue
+ ].
+ ^ stClass fromExternalAddress:returnValue.
+ ].
+ ].
+ returnType baseType isCChar ifTrue:[
+ ^ returnValue stringAt:1
+ ].
+ ].
].
^ returnValue
"Created: / 01-08-2006 / 13:56:23 / cg"
- "Modified: / 31-03-2016 / 00:03:03 / cg"
+ "Modified: / 26-08-2016 / 15:36:35 / cg"
"Modified: / 07-07-2015 / 22:21:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!