+\ ------ Memory ------
+
+100 constant N
+create car-cells N allot
+create car-type-cells N allot
+create cdr-cells N allot
+create cdr-type-cells N allot
+
+variable nextfree
+0 nextfree !
+
+: cons ( car-obj cdr-obj -- pair-obj )
+ cdr-type-cells nextfree @ + !
+ cdr-cells nextfree @ + !
+ car-type-cells nextfree @ + !
+ car-cells nextfree @ + !
+
+ nextfree @ pair-type
+
+ 1 nextfree +!
+;
+
+: car ( pair-obj -- car-obj )
+ drop
+ dup car-cells + @ swap
+ car-type-cells + @
+;
+
+: cdr ( pair-obj -- car-obj )
+ drop
+ dup cdr-cells + @ swap
+ cdr-type-cells + @
+;
+
+: nil 0 nil-type ;
+: nil? nil-type istype? ;
+
+: objvar create 0 , 0 , ;
+
+: value@ ( objvar -- val ) @ ;
+: type@ ( objvar -- type ) 1+ @ ;
+: value! ( newval objvar -- ) ! ;
+: type! ( newtype objvar -- ) 1+ ! ;
+: setobj ( newobj objvar -- ) dup rot swap 1+ ! ! ;
+: fetchobj ( objvar -- obj ) dup @ swap 1+ @ ;
+
+objvar symbol-table
+nil symbol-table setobj
+