From 412a56efec167237f3fd779f629727c44dafef75 Mon Sep 17 00:00:00 2001 From: Juan Jose Garcia Ripoll Date: Sun, 10 Jun 2012 10:29:01 +0200 Subject: [PATCH] Export the C integer sizes from the FFI package, which is now created in the core. --- src/CHANGELOG | 4 ++ src/c/all_symbols.d | 4 ++ src/c/main.d | 25 +++++++---- src/c/symbols_list.h | 100 +++++++++++++++++++++++++++++++++--------- src/c/symbols_list2.h | 100 +++++++++++++++++++++++++++++++++--------- src/cmp/cmpffi.lsp | 36 +++++++-------- src/h/external.h | 1 + src/lsp/ffi.lsp | 31 ++----------- 8 files changed, 207 insertions(+), 94 deletions(-) diff --git a/src/CHANGELOG b/src/CHANGELOG index 0acb25605..ea534295b 100755 --- a/src/CHANGELOG +++ b/src/CHANGELOG @@ -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 diff --git a/src/c/all_symbols.d b/src/c/all_symbols.d index ba69d482e..c3f1ac3fe 100644 --- a/src/c/all_symbols.d +++ b/src/c/all_symbols.d @@ -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; diff --git a/src/c/main.d b/src/c/main.d index c0ab9682f..4cd7a277d 100644 --- a/src/c/main.d +++ b/src/c/main.d @@ -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(); diff --git a/src/c/symbols_list.h b/src/c/symbols_list.h index 9ec2dc740..22da8bbe9 100755 --- a/src/c/symbols_list.h +++ b/src/c/symbols_list.h @@ -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}}; diff --git a/src/c/symbols_list2.h b/src/c/symbols_list2.h index 0a6829a09..1283fca17 100644 --- a/src/c/symbols_list2.h +++ b/src/c/symbols_list2.h @@ -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}}; diff --git a/src/cmp/cmpffi.lsp b/src/cmp/cmpffi.lsp index f58c3a145..f2ec5e785 100755 --- a/src/cmp/cmpffi.lsp +++ b/src/cmp/cmpffi.lsp @@ -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") )) diff --git a/src/h/external.h b/src/h/external.h index dc6569965..11443ab5f 100755 --- a/src/h/external.h +++ b/src/h/external.h @@ -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; diff --git a/src/lsp/ffi.lsp b/src/lsp/ffi.lsp index 2c07bcf3d..a38288c0c 100644 --- a/src/lsp/ffi.lsp +++ b/src/lsp/ffi.lsp @@ -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 ")