mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-20 06:09:17 +02:00
Issue #377
This commit is contained in:
parent
64b81aa803
commit
cf6ccc25d9
5 changed files with 24 additions and 1 deletions
1
gc.c
1
gc.c
|
@ -968,6 +968,7 @@ char *gc_copy_obj(object dest, char *obj, gc_thread_data * thd)
|
||||||
case forward_tag:
|
case forward_tag:
|
||||||
return (char *)forward(obj);
|
return (char *)forward(obj);
|
||||||
case eof_tag:
|
case eof_tag:
|
||||||
|
case void_tag:
|
||||||
case primitive_tag:
|
case primitive_tag:
|
||||||
case boolean_tag:
|
case boolean_tag:
|
||||||
case symbol_tag:
|
case symbol_tag:
|
||||||
|
|
|
@ -31,6 +31,12 @@ extern const object quote_void;
|
||||||
*/
|
*/
|
||||||
extern const object Cyc_EOF;
|
extern const object Cyc_EOF;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The void value.
|
||||||
|
* \ingroup objects
|
||||||
|
*/
|
||||||
|
extern const object Cyc_VOID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \ingroup gc_minor
|
* \ingroup gc_minor
|
||||||
*/
|
*/
|
||||||
|
@ -480,6 +486,7 @@ object Cyc_is_procedure(void *data, object o);
|
||||||
//object Cyc_is_opaque(object o);
|
//object Cyc_is_opaque(object o);
|
||||||
#define Cyc_is_macro(o) (make_boolean(is_object_type(o) && ((list) o)->tag == macro_tag))
|
#define Cyc_is_macro(o) (make_boolean(is_object_type(o) && ((list) o)->tag == macro_tag))
|
||||||
#define Cyc_is_eof_object(o) (make_boolean(is_object_type(o) && ((list) o)->tag == eof_tag))
|
#define Cyc_is_eof_object(o) (make_boolean(is_object_type(o) && ((list) o)->tag == eof_tag))
|
||||||
|
#define Cyc_is_void_object(o) (make_boolean(is_object_type(o) && ((list) o)->tag == void_tag))
|
||||||
#define Cyc_is_cvar(o) (make_boolean(is_object_type(o) && ((list) o)->tag == cvar_tag))
|
#define Cyc_is_cvar(o) (make_boolean(is_object_type(o) && ((list) o)->tag == cvar_tag))
|
||||||
#define Cyc_is_opaque(o) (make_boolean(is_object_type(o) && ((list) o)->tag == c_opaque_tag))
|
#define Cyc_is_opaque(o) (make_boolean(is_object_type(o) && ((list) o)->tag == c_opaque_tag))
|
||||||
object Cyc_is_immutable(object obj);
|
object Cyc_is_immutable(object obj);
|
||||||
|
|
|
@ -69,6 +69,7 @@ enum object_tag {
|
||||||
, vector_tag = 20
|
, vector_tag = 20
|
||||||
, complex_num_tag = 21
|
, complex_num_tag = 21
|
||||||
, atomic_tag = 22
|
, atomic_tag = 22
|
||||||
|
, void_tag = 23
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
10
runtime.c
10
runtime.c
|
@ -48,7 +48,8 @@ const char *tag_names[] = {
|
||||||
/*symbol_tag */ , "symbol"
|
/*symbol_tag */ , "symbol"
|
||||||
/*vector_tag */ , "vector"
|
/*vector_tag */ , "vector"
|
||||||
/*complex_num_tag*/ , "complex number"
|
/*complex_num_tag*/ , "complex number"
|
||||||
/*atomic_tag*/ , "atomic"
|
/*atomic_tag*/ , "atomic"
|
||||||
|
/*void_tag*/ , "void"
|
||||||
, "Reserved for future use"
|
, "Reserved for future use"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -190,8 +191,10 @@ int _cyc_argc = 0;
|
||||||
char **_cyc_argv = NULL;
|
char **_cyc_argv = NULL;
|
||||||
|
|
||||||
static symbol_type __EOF = { {0}, eof_tag, ""}; // symbol_type in lieu of custom type
|
static symbol_type __EOF = { {0}, eof_tag, ""}; // symbol_type in lieu of custom type
|
||||||
|
static symbol_type __VOID = { {0}, void_tag, ""}; // symbol_type in lieu of custom type
|
||||||
|
|
||||||
const object Cyc_EOF = &__EOF;
|
const object Cyc_EOF = &__EOF;
|
||||||
|
const object Cyc_VOID = &__VOID;
|
||||||
static ck_hs_t lib_table;
|
static ck_hs_t lib_table;
|
||||||
static ck_hs_t symbol_table;
|
static ck_hs_t symbol_table;
|
||||||
static int symbol_table_initial_size = 4096;
|
static int symbol_table_initial_size = 4096;
|
||||||
|
@ -1033,6 +1036,8 @@ object Cyc_display(void *data, object x, FILE * port)
|
||||||
case eof_tag:
|
case eof_tag:
|
||||||
fprintf(port, "<EOF>");
|
fprintf(port, "<EOF>");
|
||||||
break;
|
break;
|
||||||
|
case void_tag:
|
||||||
|
break;
|
||||||
case port_tag:
|
case port_tag:
|
||||||
fprintf(port, "<port %p>", ((port_type *) x)->fp);
|
fprintf(port, "<port %p>", ((port_type *) x)->fp);
|
||||||
break;
|
break;
|
||||||
|
@ -5857,6 +5862,7 @@ static char *gc_move(char *obj, gc_thread_data * thd, int *alloci, int *heap_gro
|
||||||
case forward_tag:
|
case forward_tag:
|
||||||
return (char *)forward(obj);
|
return (char *)forward(obj);
|
||||||
case eof_tag:
|
case eof_tag:
|
||||||
|
case void_tag:
|
||||||
break;
|
break;
|
||||||
case primitive_tag:
|
case primitive_tag:
|
||||||
break;
|
break;
|
||||||
|
@ -6034,6 +6040,7 @@ int gc_minor(void *data, object low_limit, object high_limit, closure cont,
|
||||||
break;
|
break;
|
||||||
// These types are not heap-allocated
|
// These types are not heap-allocated
|
||||||
case eof_tag:
|
case eof_tag:
|
||||||
|
case void_tag:
|
||||||
case primitive_tag:
|
case primitive_tag:
|
||||||
case symbol_tag:
|
case symbol_tag:
|
||||||
case boolean_tag:
|
case boolean_tag:
|
||||||
|
@ -6100,6 +6107,7 @@ void Cyc_make_shared_object(void *data, object k, object obj)
|
||||||
// symbol_tag = 19
|
// symbol_tag = 19
|
||||||
// closure0_tag = 3
|
// closure0_tag = 3
|
||||||
// eof_tag = 9
|
// eof_tag = 9
|
||||||
|
// void_tag
|
||||||
// macro_tag = 13
|
// macro_tag = 13
|
||||||
// primitive_tag = 17
|
// primitive_tag = 17
|
||||||
|
|
||||||
|
|
|
@ -178,6 +178,7 @@
|
||||||
exact
|
exact
|
||||||
inexact
|
inexact
|
||||||
eof-object
|
eof-object
|
||||||
|
void
|
||||||
syntax-error
|
syntax-error
|
||||||
bytevector-copy
|
bytevector-copy
|
||||||
bytevector-copy!
|
bytevector-copy!
|
||||||
|
@ -1444,6 +1445,11 @@
|
||||||
" return_closcall1(data, k, Cyc_EOF); "
|
" return_closcall1(data, k, Cyc_EOF); "
|
||||||
"(void *data, object ptr)"
|
"(void *data, object ptr)"
|
||||||
" return Cyc_EOF;")
|
" return Cyc_EOF;")
|
||||||
|
(define-c void
|
||||||
|
"(void *data, int argc, closure _, object k)"
|
||||||
|
" return_closcall1(data, k, Cyc_VOID); "
|
||||||
|
"(void *data, object ptr)"
|
||||||
|
" return Cyc_VOID;")
|
||||||
(define-c input-port?
|
(define-c input-port?
|
||||||
"(void *data, int argc, closure _, object k, object port)"
|
"(void *data, int argc, closure _, object k, object port)"
|
||||||
" port_type *p = (port_type *)port;
|
" port_type *p = (port_type *)port;
|
||||||
|
|
Loading…
Add table
Reference in a new issue