diff options
-rw-r--r-- | libguile/array-handle.h | 34 | ||||
-rw-r--r-- | libguile/inline.c | 3 | ||||
-rw-r--r-- | libguile/inline.h | 25 |
3 files changed, 35 insertions, 27 deletions
diff --git a/libguile/array-handle.h b/libguile/array-handle.h index 2e8af77b6..0a0b4031b 100644 --- a/libguile/array-handle.h +++ b/libguile/array-handle.h @@ -4,7 +4,7 @@ #define SCM_ARRAY_HANDLE_H /* Copyright (C) 1995, 1996, 1997, 1999, 2000, 2001, 2004, 2006, - * 2008, 2009, 2011 Free Software Foundation, Inc. + * 2008, 2009, 2011, 2013 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -25,6 +25,8 @@ #include "libguile/__scm.h" +#include "libguile/error.h" +#include "libguile/numbers.h" @@ -117,7 +119,35 @@ SCM_API void scm_array_handle_release (scm_t_array_handle *h); SCM_API const SCM* scm_array_handle_elements (scm_t_array_handle *h); SCM_API SCM* scm_array_handle_writable_elements (scm_t_array_handle *h); -/* See inline.h for scm_array_handle_ref and scm_array_handle_set */ + +SCM_INLINE SCM scm_array_handle_ref (scm_t_array_handle *h, ssize_t pos); +SCM_INLINE void scm_array_handle_set (scm_t_array_handle *h, ssize_t pos, SCM val); + +#if SCM_CAN_INLINE || defined SCM_INLINE_C_IMPLEMENTING_INLINES +/* Either inlining, or being included from inline.c. */ + +SCM_INLINE_IMPLEMENTATION SCM +scm_array_handle_ref (scm_t_array_handle *h, ssize_t p) +{ + if (SCM_UNLIKELY (p < 0 && ((size_t)-p) > h->base)) + /* catch overflow */ + scm_out_of_range (NULL, scm_from_ssize_t (p)); + /* perhaps should catch overflow here too */ + return h->impl->vref (h, h->base + p); +} + +SCM_INLINE_IMPLEMENTATION void +scm_array_handle_set (scm_t_array_handle *h, ssize_t p, SCM v) +{ + if (SCM_UNLIKELY (p < 0 && ((size_t)-p) > h->base)) + /* catch overflow */ + scm_out_of_range (NULL, scm_from_ssize_t (p)); + /* perhaps should catch overflow here too */ + h->impl->vset (h, h->base + p, v); +} + +#endif + SCM_INTERNAL void scm_init_array_handle (void); diff --git a/libguile/inline.c b/libguile/inline.c index be7670ad7..591679413 100644 --- a/libguile/inline.c +++ b/libguile/inline.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001, 2006, 2008, 2011 Free Software Foundation, Inc. +/* Copyright (C) 2001, 2006, 2008, 2011, 2013 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -23,5 +23,6 @@ #define SCM_IMPLEMENT_INLINES 1 #define SCM_INLINE_C_IMPLEMENTING_INLINES 1 #include "libguile/inline.h" +#include "libguile/array-handle.h" #include "libguile/gc.h" #include "libguile/smob.h" diff --git a/libguile/inline.h b/libguile/inline.h index 6b1cf5e77..88ba7f747 100644 --- a/libguile/inline.h +++ b/libguile/inline.h @@ -4,7 +4,7 @@ #define SCM_INLINE_H /* Copyright (C) 2001, 2002, 2003, 2004, 2006, 2008, 2009, 2010, - * 2011 Free Software Foundation, Inc. + * 2011, 2013 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -41,9 +41,6 @@ #include "libguile/error.h" -SCM_INLINE SCM scm_array_handle_ref (scm_t_array_handle *h, ssize_t pos); -SCM_INLINE void scm_array_handle_set (scm_t_array_handle *h, ssize_t pos, SCM val); - SCM_INLINE int scm_is_pair (SCM x); SCM_INLINE int scm_is_string (SCM x); @@ -61,26 +58,6 @@ SCM_INLINE SCM scm_words (scm_t_bits car, scm_t_uint16 n_words); #if SCM_CAN_INLINE || defined SCM_INLINE_C_IMPLEMENTING_INLINES /* Either inlining, or being included from inline.c. */ -SCM_INLINE_IMPLEMENTATION SCM -scm_array_handle_ref (scm_t_array_handle *h, ssize_t p) -{ - if (SCM_UNLIKELY (p < 0 && ((size_t)-p) > h->base)) - /* catch overflow */ - scm_out_of_range (NULL, scm_from_ssize_t (p)); - /* perhaps should catch overflow here too */ - return h->impl->vref (h, h->base + p); -} - -SCM_INLINE_IMPLEMENTATION void -scm_array_handle_set (scm_t_array_handle *h, ssize_t p, SCM v) -{ - if (SCM_UNLIKELY (p < 0 && ((size_t)-p) > h->base)) - /* catch overflow */ - scm_out_of_range (NULL, scm_from_ssize_t (p)); - /* perhaps should catch overflow here too */ - h->impl->vset (h, h->base + p, v); -} - SCM_INLINE_IMPLEMENTATION int scm_is_pair (SCM x) { |