Export the C integer sizes from the FFI package, which is now created in the core.

This commit is contained in:
Juan Jose Garcia Ripoll 2012-06-10 10:29:01 +02:00
parent 0e0f7e3e3c
commit 412a56efec
8 changed files with 207 additions and 94 deletions

View file

@ -52,6 +52,10 @@ ECL 12.2.2:
customize how these interrupts are caught. SET-INTERRUPT-HANDLER runs an
implicit EXT:CATCH-SIGNAL.
- ECL now exports the symbols FFI:C-INT-MAX, FFI:C-INT-MIN, FFI:C-LONG-MAX,
etc, which correspond to the POSIX C constants INT_MAX, INT_MIN, LONG_MAX,
and similar ones.
* Windows:
- ECL guesses whether the input / output / error streams are consoles. If

View file

@ -8,6 +8,7 @@
#define SI_PACKAGE 4
#define EXT_PACKAGE 64
#define GRAY_PACKAGE 32
#define FFI_PACKAGE 128
#define KEYWORD_PACKAGE 8
#define MP_PACKAGE 12
#define CLOS_PACKAGE 16
@ -34,6 +35,8 @@
#define CLOS_SPECIAL CLOS_PACKAGE | SPECIAL_SYMBOL
#define KEYWORD KEYWORD_PACKAGE | CONSTANT_SYMBOL
#define GRAY_ORDINARY GRAY_PACKAGE | ORDINARY_SYMBOL
#define FFI_ORDINARY FFI_PACKAGE | ORDINARY_SYMBOL
#define FFI_CONSTANT FFI_PACKAGE | CONSTANT_SYMBOL
#include "symbols_list.h"
@ -191,6 +194,7 @@ make_this_symbol(int i, cl_object s, int code, const char *name,
#ifdef ECL_CLOS_STREAMS
case GRAY_PACKAGE: package = cl_core.gray_package; break;
#endif
case FFI_PACKAGE: package = cl_core.ffi_package; break;
default: printf("%d\n", code & ~(int)3); ecl_internal_error("Unknown package code in init_all_symbols()");
}
s->symbol.t = t_symbol;

View file

@ -291,6 +291,8 @@ ecl_def_ct_base_string(str_cl_user,"CL-USER",7,static,const);
ecl_def_ct_base_string(str_LISP,"LISP",4,static,const);
ecl_def_ct_base_string(str_c,"C",1,static,const);
ecl_def_ct_base_string(str_compiler,"COMPILER",11,static,const);
ecl_def_ct_base_string(str_ffi,"FFI",3,static,const);
ecl_def_ct_base_string(str_uffi,"UFFI",4,static,const);
ecl_def_ct_base_string(str_user,"USER",4,static,const);
ecl_def_ct_base_string(str_keyword,"KEYWORD",7,static,const);
ecl_def_ct_base_string(str_si,"SI",2,static,const);
@ -360,6 +362,7 @@ struct cl_core_struct cl_core = {
#endif
Cnil, /* mp_package */
Cnil, /* c_package */
Cnil, /* ffi_package */
Cnil, /* pathname_translations */
Cnil, /* library_pathname */
@ -592,6 +595,12 @@ cl_boot(int argc, char **argv)
cl_core.gray_package = ecl_make_package(str_gray, Cnil,
CONS(cl_core.lisp_package, Cnil));
#endif
cl_core.ffi_package =
ecl_make_package(str_ffi,
ecl_list1(str_uffi),
cl_list(3,cl_core.lisp_package,
cl_core.system_package,
cl_core.ext_package));
Cnil_symbol->symbol.hpack = cl_core.lisp_package;
cl_import2(Cnil, cl_core.lisp_package);
@ -686,15 +695,15 @@ cl_boot(int argc, char **argv)
ECL_SET(@'*random-state*', ecl_make_random_state(Ct));
ECL_SET(@'si::c-int-max', ecl_make_integer(INT_MAX));
ECL_SET(@'si::c-int-min', ecl_make_integer(INT_MIN));
ECL_SET(@'si::c-long-max', ecl_make_integer(LONG_MAX));
ECL_SET(@'si::c-long-min', ecl_make_integer(LONG_MIN));
ECL_SET(@'si::c-uint-max', ecl_make_unsigned_integer(UINT_MAX));
ECL_SET(@'si::c-ulong-max', ecl_make_unsigned_integer(ULONG_MAX));
ECL_SET(@'ffi::c-int-max', ecl_make_integer(INT_MAX));
ECL_SET(@'ffi::c-int-min', ecl_make_integer(INT_MIN));
ECL_SET(@'ffi::c-long-max', ecl_make_integer(LONG_MAX));
ECL_SET(@'ffi::c-long-min', ecl_make_integer(LONG_MIN));
ECL_SET(@'ffi::c-uint-max', ecl_make_unsigned_integer(UINT_MAX));
ECL_SET(@'ffi::c-ulong-max', ecl_make_unsigned_integer(ULONG_MAX));
#ifdef ecl_long_long_t
ECL_SET(@'si::c-long-long-max', ecl_make_unsigned_integer(LLONG_MAX));
ECL_SET(@'si::c-ulong-long-max', ecl_make_unsigned_integer(ULLONG_MAX));
ECL_SET(@'ffi::c-long-long-max', ecl_make_unsigned_integer(LLONG_MAX));
ECL_SET(@'ffi::c-ulong-long-max', ecl_make_unsigned_integer(ULLONG_MAX));
#endif
init_unixtime();

View file

@ -21,6 +21,7 @@
#define MP_ "MP::"
#define KEY_ ":"
#define GRAY_ "GRAY::"
#define FFI_ "FFI::"
typedef struct {
const char *name, *translation;
} cl_symbol_initializer;
@ -32,6 +33,7 @@ typedef struct {
#define MP_
#define KEY_
#define GRAY_
#define FFI_
#endif
/*
* Conditional addition of functions and symbols. The list of symbols can
@ -1514,26 +1516,6 @@ cl_symbols[] = {
{KEY_ "UNSIGNED-LONG", KEYWORD, NULL, -1, OBJNULL},
{KEY_ "UNSIGNED-LONG-LONG", KEYWORD, NULL, -1, OBJNULL},
{KEY_ "UNSIGNED-SHORT", KEYWORD, NULL, -1, OBJNULL},
{SYS_ "C-CHAR-BIT", SI_CONSTANT, NULL, -1, ecl_make_fixnum(CHAR_BIT)},
{SYS_ "C-CHAR-MAX", SI_CONSTANT, NULL, -1, ecl_make_fixnum(CHAR_MAX)},
{SYS_ "C-CHAR-MIN", SI_CONSTANT, NULL, -1, ecl_make_fixnum(CHAR_MIN)},
{SYS_ "C-INT-MAX", SI_CONSTANT, NULL, -1, OBJNULL}, /* See main.d */
{SYS_ "C-INT-MIN", SI_CONSTANT, NULL, -1, OBJNULL}, /* See main.d */
{SYS_ "C-SHORT-MAX", SI_CONSTANT, NULL, -1, ecl_make_fixnum(SHRT_MAX)},
{SYS_ "C-SHORT-MIN", SI_CONSTANT, NULL, -1, ecl_make_fixnum(SHRT_MIN)},
{SYS_ "C-LONG-MAX", SI_CONSTANT, NULL, -1, OBJNULL}, /* See main.d */
{SYS_ "C-LONG-MIN", SI_CONSTANT, NULL, -1, OBJNULL}, /* See main.d */
{SYS_ "C-LONG-LONG-MAX",SI_CONSTANT,NULL,-1,OBJNULL}, /* See main.d */
{SYS_ "C-UCHAR-MAX", SI_CONSTANT, NULL, -1, ecl_make_fixnum(UCHAR_MAX)},
{SYS_ "C-UINT-MAX", SI_CONSTANT, NULL, -1, OBJNULL}, /* See main.d */
{SYS_ "C-USHORT-MAX", SI_CONSTANT, NULL, -1, ecl_make_fixnum(USHRT_MAX)},
{SYS_ "C-ULONG-MAX", SI_CONSTANT, NULL, -1, OBJNULL}, /* See main.d */
{SYS_ "C-ULONG-LONG-MAX",SI_CONSTANT,NULL,-1,OBJNULL}, /* See main.d */
#ifdef ecl_long_long_t
{SYS_ "C-LONG-LONG-BIT", SI_CONSTANT, NULL, -1, ecl_make_fixnum(ECL_LONG_LONG_BITS)},
#else
{SYS_ "C-LONG-LONG-BIT", SI_CONSTANT, NULL, -1, OBJNULL},
#endif
#ifdef GBC_BOEHM
{EXT_ "GC", EXT_ORDINARY, si_gc, -1, OBJNULL},
@ -2244,5 +2226,83 @@ cl_symbols[] = {
{EXT_ "INSTALL-BYTECODES-COMPILER", EXT_ORDINARY, NULL, -1, OBJNULL},
{EXT_ "INSTALL-C-COMPILER", EXT_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "C-CHAR-BIT", FFI_CONSTANT, NULL, -1, ecl_make_fixnum(CHAR_BIT)},
{FFI_ "C-CHAR-MAX", FFI_CONSTANT, NULL, -1, ecl_make_fixnum(CHAR_MAX)},
{FFI_ "C-CHAR-MIN", FFI_CONSTANT, NULL, -1, ecl_make_fixnum(CHAR_MIN)},
{FFI_ "C-INT-MAX", FFI_CONSTANT, NULL, -1, OBJNULL}, /* See main.d */
{FFI_ "C-INT-MIN", FFI_CONSTANT, NULL, -1, OBJNULL}, /* See main.d */
{FFI_ "C-SHORT-MAX", FFI_CONSTANT, NULL, -1, ecl_make_fixnum(SHRT_MAX)},
{FFI_ "C-SHORT-MIN", FFI_CONSTANT, NULL, -1, ecl_make_fixnum(SHRT_MIN)},
{FFI_ "C-LONG-MAX", FFI_CONSTANT, NULL, -1, OBJNULL}, /* See main.d */
{FFI_ "C-LONG-MIN", FFI_CONSTANT, NULL, -1, OBJNULL}, /* See main.d */
{FFI_ "C-LONG-LONG-MAX",FFI_CONSTANT,NULL,-1,OBJNULL}, /* See main.d */
{FFI_ "C-UCHAR-MAX", FFI_CONSTANT, NULL, -1, ecl_make_fixnum(UCHAR_MAX)},
{FFI_ "C-UINT-MAX", FFI_CONSTANT, NULL, -1, OBJNULL}, /* See main.d */
{FFI_ "C-USHORT-MAX", FFI_CONSTANT, NULL, -1, ecl_make_fixnum(USHRT_MAX)},
{FFI_ "C-ULONG-MAX", FFI_CONSTANT, NULL, -1, OBJNULL}, /* See main.d */
{FFI_ "C-ULONG-LONG-MAX",FFI_CONSTANT,NULL,-1,OBJNULL}, /* See main.d */
#ifdef ecl_long_long_t
{FFI_ "C-LONG-LONG-BIT", FFI_CONSTANT, NULL, -1, ecl_make_fixnum(ECL_LONG_LONG_BITS)},
#else
{FFI_ "C-LONG-LONG-BIT", FFI_CONSTANT, NULL, -1, OBJNULL},
#endif
{FFI_ "*USE-DFFI*", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "+NULL-CSTRING-POINTER+", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "ALLOCATE-FOREIGN-OBJECT", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "ALLOCATE-FOREIGN-STRING", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "C-INLINE", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "CALLBACK", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "CHAR*", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "CHAR-ARRAY-TO-POINTER", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "CLINES", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "CONVERT-FROM-CSTRING", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "CONVERT-FROM-FOREIGN-STRING", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "CONVERT-TO-CSTRING", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "CONVERT-TO-FOREIGN-STRING", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "DEF-ARRAY", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "DEF-ARRAY-POINTER", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "DEF-CONSTANT", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "DEF-ENUM", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "DEF-FOREIGN-TYPE", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "DEF-FOREIGN-VAR", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "DEF-FUNCTION", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "DEF-STRUCT", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "DEF-TYPE", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "DEF-UNION", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "DEFCALLBACK", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "DEFCBODY", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "DEFENTRY", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "DEFINLINE", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "DEFLA", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "DEREF-ARRAY", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "DEREF-POINTER", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "DOUBLE", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "ENSURE-CHAR-CHARACTER", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "ENSURE-CHAR-INTEGER", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "ENSURE-CHAR-STORABLE", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "FIND-FOREIGN-LIBRARY", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "FOREIGN-STRING-LENGTH", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "FREE-CSTRING", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "FREE-FOREIGN-OBJECT", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "GET-SLOT-POINTER", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "GET-SLOT-VALUE", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "INT", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "LOAD-FOREIGN-LIBRARY", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "MAKE-NULL-POINTER", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "MAKE-POINTER", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "NULL-CHAR-P", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "OBJECT", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "POINTER-ADDRESS", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "SIZE-OF-FOREIGN-TYPE", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "VOID", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "WITH-CAST-POINTER", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "WITH-CSTRING", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "WITH-CSTRINGS", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "WITH-FOREIGN-OBJECT", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "WITH-FOREIGN-OBJECTS", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "WITH-FOREIGN-STRING", FFI_ORDINARY, NULL, -1, OBJNULL},
{FFI_ "WITH-FOREIGN-STRINGS", FFI_ORDINARY, NULL, -1, OBJNULL},
/* Tag for end of list */
{NULL, CL_ORDINARY, NULL, -1, OBJNULL}};

View file

@ -21,6 +21,7 @@
#define MP_ "MP::"
#define KEY_ ":"
#define GRAY_ "GRAY::"
#define FFI_ "FFI::"
typedef struct {
const char *name, *translation;
} cl_symbol_initializer;
@ -32,6 +33,7 @@ typedef struct {
#define MP_
#define KEY_
#define GRAY_
#define FFI_
#endif
/*
* Conditional addition of functions and symbols. The list of symbols can
@ -1514,26 +1516,6 @@ cl_symbols[] = {
{KEY_ "UNSIGNED-LONG",NULL},
{KEY_ "UNSIGNED-LONG-LONG",NULL},
{KEY_ "UNSIGNED-SHORT",NULL},
{SYS_ "C-CHAR-BIT",NULL},
{SYS_ "C-CHAR-MAX",NULL},
{SYS_ "C-CHAR-MIN",NULL},
{SYS_ "C-INT-MAX",NULL}, /* See main.d */
{SYS_ "C-INT-MIN",NULL}, /* See main.d */
{SYS_ "C-SHORT-MAX",NULL},
{SYS_ "C-SHORT-MIN",NULL},
{SYS_ "C-LONG-MAX",NULL}, /* See main.d */
{SYS_ "C-LONG-MIN",NULL}, /* See main.d */
{SYS_ "C-LONG-LONG-MAX",NULL}, /* See main.d */
{SYS_ "C-UCHAR-MAX",NULL},
{SYS_ "C-UINT-MAX",NULL}, /* See main.d */
{SYS_ "C-USHORT-MAX",NULL},
{SYS_ "C-ULONG-MAX",NULL}, /* See main.d */
{SYS_ "C-ULONG-LONG-MAX",NULL}, /* See main.d */
#ifdef ecl_long_long_t
{SYS_ "C-LONG-LONG-BIT",NULL},
#else
{SYS_ "C-LONG-LONG-BIT",NULL},
#endif
#ifdef GBC_BOEHM
{EXT_ "GC","si_gc"},
@ -2244,5 +2226,83 @@ cl_symbols[] = {
{EXT_ "INSTALL-BYTECODES-COMPILER",NULL},
{EXT_ "INSTALL-C-COMPILER",NULL},
{FFI_ "C-CHAR-BIT",NULL},
{FFI_ "C-CHAR-MAX",NULL},
{FFI_ "C-CHAR-MIN",NULL},
{FFI_ "C-INT-MAX",NULL}, /* See main.d */
{FFI_ "C-INT-MIN",NULL}, /* See main.d */
{FFI_ "C-SHORT-MAX",NULL},
{FFI_ "C-SHORT-MIN",NULL},
{FFI_ "C-LONG-MAX",NULL}, /* See main.d */
{FFI_ "C-LONG-MIN",NULL}, /* See main.d */
{FFI_ "C-LONG-LONG-MAX",NULL}, /* See main.d */
{FFI_ "C-UCHAR-MAX",NULL},
{FFI_ "C-UINT-MAX",NULL}, /* See main.d */
{FFI_ "C-USHORT-MAX",NULL},
{FFI_ "C-ULONG-MAX",NULL}, /* See main.d */
{FFI_ "C-ULONG-LONG-MAX",NULL}, /* See main.d */
#ifdef ecl_long_long_t
{FFI_ "C-LONG-LONG-BIT",NULL},
#else
{FFI_ "C-LONG-LONG-BIT",NULL},
#endif
{FFI_ "*USE-DFFI*",NULL},
{FFI_ "+NULL-CSTRING-POINTER+",NULL},
{FFI_ "ALLOCATE-FOREIGN-OBJECT",NULL},
{FFI_ "ALLOCATE-FOREIGN-STRING",NULL},
{FFI_ "C-INLINE",NULL},
{FFI_ "CALLBACK",NULL},
{FFI_ "CHAR*",NULL},
{FFI_ "CHAR-ARRAY-TO-POINTER",NULL},
{FFI_ "CLINES",NULL},
{FFI_ "CONVERT-FROM-CSTRING",NULL},
{FFI_ "CONVERT-FROM-FOREIGN-STRING",NULL},
{FFI_ "CONVERT-TO-CSTRING",NULL},
{FFI_ "CONVERT-TO-FOREIGN-STRING",NULL},
{FFI_ "DEF-ARRAY",NULL},
{FFI_ "DEF-ARRAY-POINTER",NULL},
{FFI_ "DEF-CONSTANT",NULL},
{FFI_ "DEF-ENUM",NULL},
{FFI_ "DEF-FOREIGN-TYPE",NULL},
{FFI_ "DEF-FOREIGN-VAR",NULL},
{FFI_ "DEF-FUNCTION",NULL},
{FFI_ "DEF-STRUCT",NULL},
{FFI_ "DEF-TYPE",NULL},
{FFI_ "DEF-UNION",NULL},
{FFI_ "DEFCALLBACK",NULL},
{FFI_ "DEFCBODY",NULL},
{FFI_ "DEFENTRY",NULL},
{FFI_ "DEFINLINE",NULL},
{FFI_ "DEFLA",NULL},
{FFI_ "DEREF-ARRAY",NULL},
{FFI_ "DEREF-POINTER",NULL},
{FFI_ "DOUBLE",NULL},
{FFI_ "ENSURE-CHAR-CHARACTER",NULL},
{FFI_ "ENSURE-CHAR-INTEGER",NULL},
{FFI_ "ENSURE-CHAR-STORABLE",NULL},
{FFI_ "FIND-FOREIGN-LIBRARY",NULL},
{FFI_ "FOREIGN-STRING-LENGTH",NULL},
{FFI_ "FREE-CSTRING",NULL},
{FFI_ "FREE-FOREIGN-OBJECT",NULL},
{FFI_ "GET-SLOT-POINTER",NULL},
{FFI_ "GET-SLOT-VALUE",NULL},
{FFI_ "INT",NULL},
{FFI_ "LOAD-FOREIGN-LIBRARY",NULL},
{FFI_ "MAKE-NULL-POINTER",NULL},
{FFI_ "MAKE-POINTER",NULL},
{FFI_ "NULL-CHAR-P",NULL},
{FFI_ "OBJECT",NULL},
{FFI_ "POINTER-ADDRESS",NULL},
{FFI_ "SIZE-OF-FOREIGN-TYPE",NULL},
{FFI_ "VOID",NULL},
{FFI_ "WITH-CAST-POINTER",NULL},
{FFI_ "WITH-CSTRING",NULL},
{FFI_ "WITH-CSTRINGS",NULL},
{FFI_ "WITH-FOREIGN-OBJECT",NULL},
{FFI_ "WITH-FOREIGN-OBJECTS",NULL},
{FFI_ "WITH-FOREIGN-STRING",NULL},
{FFI_ "WITH-FOREIGN-STRINGS",NULL},
/* Tag for end of list */
{NULL,NULL}};

View file

@ -20,16 +20,16 @@
(defconstant +all-integer-rep-type-pairs+
'((:byte . -8)
(:unsigned-byte . 8)
(:unsigned-short . #.(logcount si::c-ushort-max))
(:short . #.(- (logcount si::c-ushort-max)))
(:unsigned-int . #.(logcount si::c-uint-max))
(:int . #.(logcount si::c-uint-max))
(:unsigned-long . #.(logcount si::c-ulong-max))
(:long . #.(logcount si::c-ulong-max))
(:unsigned-short . #.(logcount ffi:c-ushort-max))
(:short . #.(- (logcount ffi:c-ushort-max)))
(:unsigned-int . #.(logcount ffi:c-uint-max))
(:int . #.(logcount ffi:c-uint-max))
(:unsigned-long . #.(logcount ffi:c-ulong-max))
(:long . #.(logcount ffi:c-ulong-max))
#+long-long
(:unsigned-long-long . #.(logcount si::c-ulong-long-max))
(:unsigned-long-long . #.(logcount ffi:c-ulong-long-max))
#+long-long
(:long-long . #.(logcount si::c-ulong-long-max))
(:long-long . #.(logcount ffi:c-ulong-long-max))
(:cl-index . #.si::cl-fixnum-bits)
(:fixnum . #.(- si::cl-fixnum-bits))
(:uint8-t . 8)
@ -57,32 +57,32 @@
:fixnum
(fixnum "cl_fixnum" "ecl_make_fixnum" "ecl_to_fixnum" "ecl_fixnum")
:int
((integer #.si:c-int-min #.si:c-int-max) "int"
((integer #.ffi:c-int-min #.ffi:c-int-max) "int"
"ecl_make_int" "ecl_to_int" "ecl_to_int")
:unsigned-int
((integer 0 #.si:c-uint-max) "unsigned int"
((integer 0 #.ffi:c-uint-max) "unsigned int"
"ecl_make_uint" "ecl_to_uint" "ecl_to_uint")
:long
((integer #.si:c-long-min #.si:c-long-max) "long" "ecl_make_long" "ecl_to_long"
#.(if (<= si::c-long-min most-negative-fixnum most-positive-fixnum si::c-long-max)
((integer #.ffi:c-long-min #.ffi:c-long-max) "long" "ecl_make_long" "ecl_to_long"
#.(if (<= ffi:c-long-min most-negative-fixnum most-positive-fixnum ffi:c-long-max)
"ecl_fixnum"
"ecl_to_long"))
:unsigned-long
((integer 0 #.si:c-ulong-max) "unsigned long"
((integer 0 #.ffi:c-ulong-max) "unsigned long"
"ecl_make_ulong" "ecl_to_ulong"
#.(if (<= most-positive-fixnum si::c-long-max) "ecl_fixnum" "ecl_to_ulong"))
#.(if (<= most-positive-fixnum ffi:c-long-max) "ecl_fixnum" "ecl_to_ulong"))
:cl-index
((integer 0 #.most-positive-fixnum) "cl_index"
"ecl_make_unsigned_integer" "ecl_to_cl_index" "ecl_fixnum")
#+long-long
:long-long
#+long-long
((signed-byte #.si:c-long-long-bit) "ecl_long_long_t" "ecl_make_long_long"
((signed-byte #.ffi:c-long-long-bit) "ecl_long_long_t" "ecl_make_long_long"
"ecl_to_long_long" "ecl_to_long_long")
#+long-long
:unsigned-long-long
#+long-long
((unsigned-byte #.si:c-long-long-bit) "ecl_ulong_long_t"
((unsigned-byte #.ffi:c-long-long-bit) "ecl_ulong_long_t"
"ecl_make_ulong_Long"
"ecl_to_ulong_Long" "ecl_to_ulong_Long")
:float
@ -161,10 +161,10 @@
#+:uint64-t
((signed-byte 64) "ecl_uint64_t" "ecl_make_uint64_t" "ecl_to_uint64_t" "ecl_to_uint64_t")
:short
((integer #.si:c-short-min #.si:c-short-max) "short"
((integer #.ffi:c-short-min #.ffi:c-short-max) "short"
"ecl_make_short" "ecl_to_short" "ecl_fixnum")
:unsigned-short
((integer 0 #.si:c-ushort-max) "unsigned short"
((integer 0 #.ffi:c-ushort-max) "unsigned short"
"ecl_make_ushort" "ecl_to_ushort" "ecl_fixnum")
))

View file

@ -176,6 +176,7 @@ struct cl_core_struct {
#endif
cl_object mp_package;
cl_object c_package;
cl_object ffi_package;
cl_object pathname_translations;
cl_object library_pathname;

View file

@ -11,36 +11,11 @@
;;;; FFI Symbols used in the foreign function interface
(defpackage "FFI"
(:nicknames "UFFI")
(:export "CLINES" "DEFENTRY" "DEFLA" "DEFCBODY" "DEFINLINE" "C-INLINE"
"DEFCALLBACK" "CALLBACK"
"VOID" "OBJECT" "CHAR*" "INT" "DOUBLE"
"DEF-CONSTANT" "DEF-FOREIGN-TYPE" "DEF-ENUM" "DEF-STRUCT"
"DEF-ARRAY-POINTER" "DEF-FUNCTION" "DEF-UNION" "DEF-ARRAY"
"ALLOCATE-FOREIGN-OBJECT" "FREE-FOREIGN-OBJECT" "MAKE-NULL-POINTER"
"GET-SLOT-VALUE" "GET-SLOT-POINTER" "DEREF-ARRAY" "DEREF-POINTER"
"POINTER-ADDRESS" "SIZE-OF-FOREIGN-TYPE" "DEF-FOREIGN-VAR"
"NULL-CHAR-P" "ENSURE-CHAR-CHARACTER" "ENSURE-CHAR-INTEGER"
"NULL-POINTER-P" "+NULL-CSTRING-POINTER+" "WITH-FOREIGN-OBJECTS"
"MAKE-POINTER" "CHAR-ARRAY-TO-POINTER" "CONVERT-TO-FOREIGN-STRING"
"CONVERT-FROM-FOREIGN-STRING" "ALLOCATE-FOREIGN-STRING"
"WITH-FOREIGN-STRING" "WITH-FOREIGN-STRINGS"
"FOREIGN-STRING-LENGTH" "WITH-FOREIGN-OBJECT"
"FIND-FOREIGN-LIBRARY" "LOAD-FOREIGN-LIBRARY"
"ENSURE-CHAR-STORABLE" "DEF-TYPE"
"WITH-CSTRING" "CONVERT-TO-CSTRING" "CONVERT-FROM-CSTRING" "FREE-CSTRING"
"WITH-CAST-POINTER" "WITH-CSTRINGS"
"*USE-DFFI*"
)
(:import-from "SYS" "NULL-POINTER-P" "GET-SYSPROP" "PUT-SYSPROP"
"FOREIGN-ELT-TYPE-P"))
(in-package "FFI")
(import 'si:null-pointer-p)
(export 'si:null-pointer-p)
#-ecl-min
(clines "#include <string.h>")