Mercurial > pub > dyncall > dyncall
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);