mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-16 09:17:35 +02:00
Modify storage of chars
This commit is contained in:
parent
24c081b9d4
commit
a37b640737
1 changed files with 20 additions and 11 deletions
|
@ -196,18 +196,27 @@ typedef long tag_type;
|
|||
#define type_of(x) (((list) x)->tag)
|
||||
#define forward(x) (((list) x)->cons_car)
|
||||
|
||||
/* Define value types.
|
||||
Depending on the underlying architecture, compiler, etc these types
|
||||
have extra least significant bits that can be used to mark them as
|
||||
values instead of objects (IE, pointer to a tagged object).
|
||||
On many machines, addresses are multiples of four, leaving the two
|
||||
least significant bits free - from lisp in small pieces.
|
||||
/** Define value types.
|
||||
* Depending on the underlying architecture, compiler, etc these types
|
||||
* have extra least significant bits that can be used to mark them as
|
||||
* values instead of objects (IE, pointer to a tagged object).
|
||||
* On many machines, addresses are multiples of four, leaving the two
|
||||
* least significant bits free - from lisp in small pieces.
|
||||
*
|
||||
* Types:
|
||||
* 0x00 - pointer (an object type)
|
||||
* 0x01 - integer (in progress)
|
||||
* 0x10 - char
|
||||
*/
|
||||
#define obj_is_char(x) ((unsigned long)(x) & (unsigned long)1)
|
||||
#define obj_obj2char(x) (char)((long)(x)>>1)
|
||||
#define obj_char2obj(c) ((void *)((((unsigned long)c)<<1) | 1))
|
||||
#define obj_is_int(x) ((unsigned long)(x) & (unsigned long)1)
|
||||
#define obj_obj2int(x) ((int)(x)>>1)
|
||||
#define obj_int2obj(c) ((void *)((((int)c)<<1) | 1))
|
||||
|
||||
#define is_value_type(x) obj_is_char(x)
|
||||
#define obj_is_char(x) ((unsigned long)(x) & (unsigned long)2)
|
||||
#define obj_obj2char(x) (char)((long)(x)>>2)
|
||||
#define obj_char2obj(c) ((void *)((((unsigned long)c)<<2) | 2))
|
||||
|
||||
#define is_value_type(x) ((unsigned long)(x) | (unsigned long)3)
|
||||
#define is_object_type(x) (x && !is_value_type(x))
|
||||
|
||||
/* Define function type. */
|
||||
|
|
Loading…
Add table
Reference in a new issue