-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathobj_pair.c
48 lines (41 loc) · 1.01 KB
/
obj_pair.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include "obj_pair.h"
#include "except.h"
mem_ops_t pair_ops;
extern obj_t make_pair(obj_t car, obj_t cdr)
{
CHECK_OBJ(car);
CHECK_OBJ(cdr);
if (!pair_ops.mo_super)
mem_fixvec_create_ops(&pair_ops, L"pair", 2);
return make_fixvec2(&pair_ops, car, cdr);
}
void pair_set_car_nc(obj_t pair, obj_t car)
{
CHECK_OBJ(pair);
CHECK_OBJ(car);
assert(is_pair(pair));
fixvec2_set_ptr(pair, 0, car);
}
void pair_set_car(obj_t pair, obj_t car)
{
CHECK_OBJ(pair);
CHECK_OBJ(car);
//XXX CHECK(is_mutable(pair), "must be mutable", pair);
CHECK(is_pair(pair), "must be pair", pair);
fixvec2_set_ptr(pair, 0, car);
}
void pair_set_cdr_nc(obj_t pair, obj_t cdr)
{
CHECK_OBJ(pair);
CHECK_OBJ(cdr);
assert(is_pair(pair));
fixvec2_set_ptr(pair, 1, cdr);
}
void pair_set_cdr(obj_t pair, obj_t cdr)
{
CHECK_OBJ(pair);
CHECK_OBJ(cdr);
//XXX CHECK(is_mutable(pair), "must be mutable", pair);
CHECK(is_pair(pair), "must be pair", pair);
fixvec2_set_ptr(pair, 1, cdr);
}