changeset 536:c0df40c888ac

- dyncallback fixes related to C++ non-trivial aggregates (not final, but fixing most obvious things I missed)
author Tassilo Philipp
date Sat, 23 Apr 2022 15:36:11 +0200
parents d717a5561335
children 804df3409b51
files dyncallback/dyncall_args_x64.c
diffstat 1 files changed, 8 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/dyncallback/dyncall_args_x64.c	Sat Apr 23 15:05:03 2022 +0200
+++ b/dyncallback/dyncall_args_x64.c	Sat Apr 23 15:36:11 2022 +0200
@@ -80,8 +80,8 @@
   DCaggr *ag = *(p->aggrs++);
 
   if(!ag) {
-    /* non-trivial aggr: pass as ptr, user was supposed to make copy */
-    dcbArgPointer(target);
+    /* non-trivial aggr: retrieve as ptr, user is supposed to make copy */
+    target = dcbArgPointer(p);
     return;
   }
 
@@ -143,6 +143,12 @@
   int i;
   DCaggr *ag = *(args->aggrs++);
 
+  if(!ag) {
+    /* non-trivial aggr */
+    result->p = ret;
+    return;
+  }
+
   if (args->aggr_return_register >= 0) {
     DCpointer dest = (DCpointer) args->reg_data.i[args->aggr_return_register];
     memcpy(dest, ret, ag->size);