mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2026-01-15 13:52:16 -08:00
Export the C integer sizes from the FFI package, which is now created in the core.
This commit is contained in:
parent
0e0f7e3e3c
commit
412a56efec
8 changed files with 207 additions and 94 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
25
src/c/main.d
25
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();
|
||||
|
|
|
|||
|
|
@ -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}};
|
||||
|
|
|
|||
|
|
@ -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}};
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
))
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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>")
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue