@teradataprebuilt/fastcall-linux-node-v59
Version:
fastcall - Very fast, asynchronous, dyncall based foreign function interface library for Node.js
67 lines (42 loc) • 1.85 kB
Plain Text
Callback Test Suite 2
---------------------
REQUIREMENTS
- dyncall
- ANSI C compiler
- lua (tested with 5.1)
CONFIGURE SUITE
edit config.lua and run "make config".
DESCRIPTION
Generates a set of callback invokers in C using lua as a preprocessor.
The invokers put up an argument vector using a global Value-Matrix which
holds a specific type-specific value pattern as a function of position.
The Value-Matrix
The value-matrix is a data structure consisting of n x m elements of
type DCValueSet which can store distinct numbers for each type.
It is used in the body of the auto-generated callback invokers (C code).
The Callback Invocation Body
Example:
The body for a signature of type "dpdf)p" at case id 19 is:
void f19(void* addr)
{
Result.p = ((CONFIG_API p(*)(d,p,d,f))addr)(ValueMatrix[0].d,ValueMatrix[1].p,ValueMatrix[2].d,ValueMatrix[3].f);
} ^^^^^^^^^^- calling convention
^^^^^^^^^^^^^- signature
^- return type signature
^- arg signature char 0 (later expected) value
Result (type DCValue) and ValueMatrix (type DCValueSet[MAXARGS]) are globals.
The ValueMatrix is initialized once from main.c for all cominations of types
and argument position.
See env.* files for details.
Reference argument and result value
The value is generated by a pure function GetReferenceValue and
GetReferenceResult (file env.c). They have formals position and type
and are pure without any side-effects (means the function value does only
relay on the input arguments - if called with same arguments it will reveal
the same value.
It defined in env.c.
Tssting for exotic calling conventions on Windows:
Specify 'api' and 'ccprefix' accordingly:
"__stdcall" "_s"
"__fastcall" "_f" for gcc compiler
"_F" for microsoft compiler