M: vector (serialize)
"v" (serialize-seq) ;
+M: quotation (serialize)
+ "q" (serialize-seq) ;
+
M: hashtable (serialize)
dup object-id [
"o" write (serialize) 2drop
dup word-name (serialize)
word-vocabulary (serialize) ;
+M: wrapper (serialize)
+ "W" write
+ wrapped (serialize) ;
+
DEFER: (deserialize)
: deserialize-false ( -- f )
: deserialize-word
(deserialize) dup (deserialize) lookup dup [ nip ] [ "Unknown word" throw ] if ;
+: deserialize-wrapper
+ (deserialize) <wrapper> ;
+
: deserialize-array ( -- array )
(deserialize)
[
] V{ } make
[ swap serialized get set-nth ] keep ;
+: deserialize-quotation ( -- array )
+ (deserialize)
+ [
+ (deserialize)
+ [ (deserialize) , ] repeat
+ ] [ ] make
+ [ swap serialized get set-nth ] keep ;
+
: deserialize-hashtable ( -- array )
(deserialize)
(deserialize) alist>hash
{ "c" deserialize-complex }
{ "b" deserialize-bignum }
{ "w" deserialize-word }
+ { "W" deserialize-wrapper }
{ "n" deserialize-false }
{ "a" deserialize-array }
{ "v" deserialize-vector }
+ { "q" deserialize-quotation }
{ "h" deserialize-hashtable }
{ "o" deserialize-unknown }
}