mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-22 07:09:17 +02:00
Added Cyc_is_immutable
This commit is contained in:
parent
cdbf81c56a
commit
4b6b672892
2 changed files with 16 additions and 1 deletions
|
@ -67,7 +67,7 @@ void gc_init_heap(long heap_size);
|
||||||
#define Cyc_verify_mutable(data, obj) { \
|
#define Cyc_verify_mutable(data, obj) { \
|
||||||
if (immutable(obj)) Cyc_immutable_obj_error(data, obj); }
|
if (immutable(obj)) Cyc_immutable_obj_error(data, obj); }
|
||||||
#define Cyc_verify_immutable(data, obj) { \
|
#define Cyc_verify_immutable(data, obj) { \
|
||||||
if (is_object_type(obj) && !immutable(obj)) Cyc_mutable_obj_error(data, obj); }
|
if (boolean_f == Cyc_is_immutable(obj)) Cyc_mutable_obj_error(data, obj); }
|
||||||
#define Cyc_check_type(data, fnc_test, tag, obj) { \
|
#define Cyc_check_type(data, fnc_test, tag, obj) { \
|
||||||
if ((boolean_f == fnc_test(obj))) Cyc_invalid_type_error(data, tag, obj); }
|
if ((boolean_f == fnc_test(obj))) Cyc_invalid_type_error(data, tag, obj); }
|
||||||
#define Cyc_check_type2(data, fnc_test, tag, obj) { \
|
#define Cyc_check_type2(data, fnc_test, tag, obj) { \
|
||||||
|
@ -472,6 +472,7 @@ object Cyc_is_procedure(void *data, object o);
|
||||||
#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_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);
|
||||||
/**@}*/
|
/**@}*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
14
runtime.c
14
runtime.c
|
@ -1877,6 +1877,20 @@ object Cyc_is_procedure(void *data, object o)
|
||||||
// return boolean_f;
|
// return boolean_f;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
object Cyc_is_immutable(object obj)
|
||||||
|
{
|
||||||
|
if (is_object_type(obj) &&
|
||||||
|
(type_of(obj) == pair_tag ||
|
||||||
|
type_of(obj) == vector_tag ||
|
||||||
|
type_of(obj) == bytevector_tag ||
|
||||||
|
type_of(obj) == string_tag
|
||||||
|
) &&
|
||||||
|
!immutable(obj) ) {
|
||||||
|
return boolean_f;
|
||||||
|
}
|
||||||
|
return boolean_t;
|
||||||
|
}
|
||||||
|
|
||||||
object Cyc_set_cell(void *data, object l, object val)
|
object Cyc_set_cell(void *data, object l, object val)
|
||||||
{
|
{
|
||||||
// FUTURE: always use "unsafe" car here, since set-cell is added by cyclone
|
// FUTURE: always use "unsafe" car here, since set-cell is added by cyclone
|
||||||
|
|
Loading…
Add table
Reference in a new issue