]> gitweb.factorcode.org Git - factor.git/commitdiff
allow serializing wrappers and quotations
authorchris.double <chris.double@double.co.nz>
Wed, 30 Aug 2006 12:15:54 +0000 (12:15 +0000)
committerchris.double <chris.double@double.co.nz>
Wed, 30 Aug 2006 12:15:54 +0000 (12:15 +0000)
contrib/serialize/serialize.factor

index fc3dbcf77fbb8218f1687ed3fb838e9ee530a7ef..29307deb80114008664ea7a098f71156ced18d65 100644 (file)
@@ -88,6 +88,9 @@ M: array (serialize)
 M: vector (serialize)
        "v" (serialize-seq) ;
 
+M: quotation (serialize)
+       "q" (serialize-seq) ;
+
 M: hashtable (serialize)
        dup object-id [
          "o" write (serialize) 2drop
@@ -102,6 +105,10 @@ M: word (serialize)
        dup word-name (serialize)
        word-vocabulary (serialize) ;
 
+M: wrapper (serialize)
+       "W" write
+       wrapped (serialize) ;
+
 DEFER: (deserialize)
 
 : deserialize-false ( -- f )
@@ -125,6 +132,9 @@ DEFER: (deserialize)
 : deserialize-word
        (deserialize) dup (deserialize) lookup dup [ nip ] [ "Unknown word" throw ] if ;
 
+: deserialize-wrapper
+       (deserialize) <wrapper> ;
+
 : deserialize-array ( -- array )
   (deserialize)     
   [ 
@@ -141,6 +151,14 @@ DEFER: (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    
@@ -157,9 +175,11 @@ DEFER: (deserialize)
           { "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 }
         }