diff dyncallback/dyncall_args.h @ 533:71c884e610f0

- integration of patches from Raphael Luba, Thekla, Inc.: * integration of aggregate-by-value (struct, union) support patch for x64 (win and sysv) * windows/x64 asm additions to specify how stack unwinds (help for debuggers, exception handling, etc.) * see Changelog for details - new calling convention modes for thiscalls (platform agnostic, was specific before) * new signature character for platform agnostic thiscalls ('*' / DC_SIGCHAR_CC_THISCALL) - dcCallF(), dcVCallF(), dcArgF() and dcVArgF(): * added support for aggregates-by-value (wasn't part of patch) * change that those functions don't implicitly call dcReset() anymore, which was unflexible (breaking change) - added macros to feature test implementation for aggregate-by-value and syscall support - changed libdyncall_s.lib and libdyncallback_s.lib order in callback test makefiles, as some toolchains are picky about order - doc: * man page updates to describe aggregate interface * manual overview changes to highlight platforms with aggregate-by-value support - test/plain: replaced tests w/ old/stale sctruct interface with new aggregate one
author Tassilo Philipp
date Thu, 21 Apr 2022 13:35:47 +0200
parents f5577f6bf97a
children 111236b31c75
line wrap: on
line diff
--- a/dyncallback/dyncall_args.h	Sat Apr 16 15:00:58 2022 +0200
+++ b/dyncallback/dyncall_args.h	Thu Apr 21 13:35:47 2022 +0200
@@ -6,7 +6,7 @@
  Description: Callback's Arguments VM - Interface
  License:
 
-   Copyright (c) 2007-2018 Daniel Adler <dadler@uni-goettingen.de>,
+   Copyright (c) 2007-2022 Daniel Adler <dadler@uni-goettingen.de>,
                            Tassilo Philipp <tphilipp@potion-studios.com>
 
    Permission to use, copy, modify, and distribute this software for any
@@ -37,6 +37,8 @@
 
 #include "dyncall.h"
 
+#include "dyncall_value.h"
+
 
 #ifdef __cplusplus
 extern "C" {
@@ -44,23 +46,30 @@
 
 typedef struct DCArgs DCArgs;
 
-DC_API DCbool      dcbArgBool     (DCArgs*);
-DC_API DCchar      dcbArgChar     (DCArgs*);
-DC_API DCshort     dcbArgShort    (DCArgs*);
-DC_API DCint       dcbArgInt      (DCArgs*);
-DC_API DClong      dcbArgLong     (DCArgs*);
-DC_API DClonglong  dcbArgLongLong (DCArgs*);
-DC_API DCuchar     dcbArgUChar    (DCArgs*);
-DC_API DCushort    dcbArgUShort   (DCArgs*);
-DC_API DCuint      dcbArgUInt     (DCArgs*);
-DC_API DCulong     dcbArgULong    (DCArgs*);
-DC_API DCulonglong dcbArgULongLong(DCArgs*);
-DC_API DCfloat     dcbArgFloat    (DCArgs*);
-DC_API DCdouble    dcbArgDouble   (DCArgs*);
-DC_API DCpointer   dcbArgPointer  (DCArgs*);
+/* functions to retrieve callback's params in callback handler */
+DC_API DCbool      dcbArgBool     (DCArgs* p);
+DC_API DCchar      dcbArgChar     (DCArgs* p);
+DC_API DCshort     dcbArgShort    (DCArgs* p);
+DC_API DCint       dcbArgInt      (DCArgs* p);
+DC_API DClong      dcbArgLong     (DCArgs* p);
+DC_API DClonglong  dcbArgLongLong (DCArgs* p);
+DC_API DCuchar     dcbArgUChar    (DCArgs* p);
+DC_API DCushort    dcbArgUShort   (DCArgs* p);
+DC_API DCuint      dcbArgUInt     (DCArgs* p);
+DC_API DCulong     dcbArgULong    (DCArgs* p);
+DC_API DCulonglong dcbArgULongLong(DCArgs* p);
+DC_API DCfloat     dcbArgFloat    (DCArgs* p);
+DC_API DCdouble    dcbArgDouble   (DCArgs* p);
+DC_API DCpointer   dcbArgPointer  (DCArgs* p);
+DC_API void        dcbArgAggr     (DCArgs* p, DCpointer target);
+
+/* function helper to put a to be returned struct-by-value into the 'result'
+   param of the callback handler, in order to return it */
+DC_API void dcbReturnAggr(DCArgs *args, DCValue *result, DCpointer ret);
 
 #ifdef __cplusplus
 }
 #endif
 
 #endif /* DYNCALL_ARGS_H */
+