[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 17/26: Foreign-call intrinsic boxes errno
From: |
Andy Wingo |
Subject: |
[Guile-commits] 17/26: Foreign-call intrinsic boxes errno |
Date: |
Tue, 26 Jun 2018 11:26:13 -0400 (EDT) |
wingo pushed a commit to branch master
in repository guile.
commit 185d19dfb1a570c3075fa8f1a653334412ae6b85
Author: Andy Wingo <address@hidden>
Date: Tue Jun 26 11:07:17 2018 +0200
Foreign-call intrinsic boxes errno
* libguile/intrinsics.h (SCM_FOR_ALL_VM_INTRINSICS):
* libguile/foreign.c (foreign_call):
* libguile/vm-engine.c (foreign-call): Change foreign-call intrinsic to
handle boxing of errno.
---
libguile/foreign.c | 4 ++--
libguile/intrinsics.h | 4 ++--
libguile/vm-engine.c | 5 ++---
3 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/libguile/foreign.c b/libguile/foreign.c
index 739d459..dcd7f89 100644
--- a/libguile/foreign.c
+++ b/libguile/foreign.c
@@ -1018,7 +1018,7 @@ pack (const ffi_type * type, const void *loc, int
return_value_p)
#define MAX(A, B) ((A) >= (B) ? (A) : (B))
static SCM
-foreign_call (SCM cif_scm, SCM pointer_scm, int *errno_ret,
+foreign_call (SCM cif_scm, SCM pointer_scm, SCM *errno_ret,
const union scm_vm_stack_element *argv)
{
/* FOREIGN is the pair that cif_to_procedure set as the 0th element of the
@@ -1071,7 +1071,7 @@ foreign_call (SCM cif_scm, SCM pointer_scm, int
*errno_ret,
/* off we go! */
errno = 0;
ffi_call (cif, func, rvalue, args);
- *errno_ret = errno;
+ *errno_ret = scm_from_int (errno);
return pack (cif->rtype, rvalue, 1);
}
diff --git a/libguile/intrinsics.h b/libguile/intrinsics.h
index 5b183a6..e9a4fb3 100644
--- a/libguile/intrinsics.h
+++ b/libguile/intrinsics.h
@@ -50,7 +50,7 @@ typedef uint32_t (*scm_t_u32_from_thread_u32_u32_intrinsic)
(scm_i_thread*, uint
typedef void (*scm_t_thread_u32_u32_scm_u8_u8_intrinsic) (scm_i_thread*,
uint32_t,
uint32_t, SCM,
uint8_t,
uint8_t);
-typedef SCM (*scm_t_scm_from_scm_scm_intp_sp_intrinsic) (SCM, SCM, int*,
+typedef SCM (*scm_t_scm_from_scm_scm_scmp_sp_intrinsic) (SCM, SCM, SCM*,
const union
scm_vm_stack_element*);
typedef void (*scm_t_thread_scm_noreturn_intrinsic) (scm_i_thread*, SCM)
SCM_NORETURN;
@@ -102,7 +102,7 @@ typedef void (*scm_t_thread_scm_noreturn_intrinsic)
(scm_i_thread*, SCM) SCM_NOR
M(u32_from_thread_u32_u32, compute_kwargs_npositional,
"compute-kwargs-npositional", COMPUTE_KWARGS_NPOSITIONAL) \
M(thread_u32_u32_scm_u8_u8, bind_kwargs, "bind-kwargs", BIND_KWARGS) \
M(thread, push_interrupt_frame, "push-interrupt-frame",
PUSH_INTERRUPT_FRAME) \
- M(scm_from_scm_scm_intp_sp, foreign_call, "foreign-call", FOREIGN_CALL) \
+ M(scm_from_scm_scm_scmp_sp, foreign_call, "foreign-call", FOREIGN_CALL) \
M(thread_scm_noreturn, reinstate_continuation_x, "reinstate-continuation!",
REINSTATE_CONTINUATION_X) \
/* Add new intrinsics here; also update scm_bootstrap_intrinsics. */
diff --git a/libguile/vm-engine.c b/libguile/vm-engine.c
index dcbd96e..6f2e093 100644
--- a/libguile/vm-engine.c
+++ b/libguile/vm-engine.c
@@ -635,8 +635,7 @@ VM_NAME (scm_i_thread *thread, jmp_buf *registers, int
resume)
VM_DEFINE_OP (11, foreign_call, "foreign-call", OP1 (X8_C12_C12))
{
uint16_t cif_idx, ptr_idx;
- int err = 0;
- SCM closure, cif, pointer, ret;
+ SCM closure, cif, pointer, ret, err;
UNPACK_12_12 (op, cif_idx, ptr_idx);
@@ -650,7 +649,7 @@ VM_NAME (scm_i_thread *thread, jmp_buf *registers, int
resume)
ALLOC_FRAME (3);
SP_SET (1, ret);
- SP_SET (0, scm_vm_intrinsics.s64_to_scm (err));
+ SP_SET (0, err);
NEXT (1);
}
- [Guile-commits] 04/26: Deprecate scm_t_uint8 and similar typedefs, (continued)
- [Guile-commits] 04/26: Deprecate scm_t_uint8 and similar typedefs, Andy Wingo, 2018/06/26
- [Guile-commits] 09/26: Fix intrinsics copyright line and include guards, Andy Wingo, 2018/06/26
- [Guile-commits] 07/26: Eagerly initialize thread VM; remove scm_the_vm, Andy Wingo, 2018/06/26
- [Guile-commits] 06/26: Inline struct scm_vm into struct scm_i_thread, Andy Wingo, 2018/06/26
- [Guile-commits] 03/26: Use ptrdiff_t instead of scm_t_ptrdiff, Andy Wingo, 2018/06/26
- [Guile-commits] 10/26: expand_stack intrinsic takes thread, Andy Wingo, 2018/06/26
- [Guile-commits] 01/26: Start to use C99 stdint in gen-scmconfig, Andy Wingo, 2018/06/26
- [Guile-commits] 08/26: VM gets VP from thread, Andy Wingo, 2018/06/26
- [Guile-commits] 20/26: Add intrinsic for call/cc, Andy Wingo, 2018/06/26
- [Guile-commits] 18/26: Refactor continuation capture in VM, Andy Wingo, 2018/06/26
- [Guile-commits] 17/26: Foreign-call intrinsic boxes errno,
Andy Wingo <=
- [Guile-commits] 25/26: Optimize abort-to-prompt to avoid alloca, Andy Wingo, 2018/06/26
- [Guile-commits] 15/26: Most header files use forward decl for union scm_vm_stack_element, Andy Wingo, 2018/06/26
- [Guile-commits] 14/26: Add intrinsic for foreign-call, Andy Wingo, 2018/06/26
- [Guile-commits] 11/26: Move VM keyword argument parsing to happen via an intrinsic, Andy Wingo, 2018/06/26
- [Guile-commits] 22/26: Add rest-arg-length intrinsic., Andy Wingo, 2018/06/26
- [Guile-commits] 16/26: Reinstating undelimited continuations uses intrinsic, Andy Wingo, 2018/06/26
- [Guile-commits] 24/26: Refactors to abort-to-prompt implementation, Andy Wingo, 2018/06/26
- [Guile-commits] 12/26: Add push-interrupt-frame VM intrinsic, Andy Wingo, 2018/06/26
- [Guile-commits] 13/26: Give multiple-values objects a tc7, Andy Wingo, 2018/06/26
- [Guile-commits] 26/26: Allow abort_to_prompt to avoid a longjmp, Andy Wingo, 2018/06/26