37 lines
813 B
C
37 lines
813 B
C
|
typedef long value;
|
||
|
|
||
|
#define Long_val(v) ((v) >> 1)
|
||
|
#define Val_long(n) (((long)(n) << 1) + 1)
|
||
|
#define Int_val(v) ((v) >> 1)
|
||
|
#define Val_int(n) (((n) << 1) + 1)
|
||
|
|
||
|
#define Is_int(v) ((v) & 1)
|
||
|
#define Is_block(v) (((v) & 1) == 0)
|
||
|
|
||
|
typedef unsigned long header_t;
|
||
|
|
||
|
#define Header_val(v) *((header_t *)(v) - 1)
|
||
|
#define Tag_header(h) ((h) & 0xFF)
|
||
|
#define Size_header(h) ((h) >> 11)
|
||
|
#define Tag_val(v) Tag_header(Header_val(v))
|
||
|
#define Size_val(v) Size_header(Header_val(v))
|
||
|
|
||
|
#define Field(v, n) (((value *)(v))[n])
|
||
|
|
||
|
#define Double_val(v) *((double *)(v))
|
||
|
|
||
|
#define No_scan_tag 0xFB
|
||
|
|
||
|
#define Closure_tag 0xFA
|
||
|
#define Double_tag 0xFB
|
||
|
#define String_tag 0xFC
|
||
|
#define Abstract_tag 0xFD
|
||
|
#define Finalized_tag 0xFE
|
||
|
#define Infix_tag 0xFF
|
||
|
|
||
|
#define Modified_mask 0x400
|
||
|
|
||
|
#define Val_false 1
|
||
|
#define Val_true 3
|
||
|
#define Val_unit 1
|