serialization: use an inherited constructor
authorAlexis Laferrière <alexis.laf@xymus.net>
Sat, 16 May 2015 14:21:04 +0000 (10:21 -0400)
committerAlexis Laferrière <alexis.laf@xymus.net>
Sun, 17 May 2015 16:30:37 +0000 (12:30 -0400)
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

lib/json_serialization.nit
lib/serialization/serialization.nit
src/frontend/serialization_phase.nit

index e8c76b4..ade8318 100644 (file)
@@ -258,7 +258,7 @@ redef class Array[E]
        end
 
        # Instanciate a new `Array` from its serialized representation.
-       init from_deserializer(v: Deserializer)
+       redef init from_deserializer(v: Deserializer)
        do
                if v isa JsonDeserializer then
                        v.notify_of_creation self
index 31f98f0..5c6e273 100644 (file)
@@ -134,6 +134,11 @@ interface Serializable
        # The subclass change the default behavior, which will accept references,
        # to force to always serialize copies of `self`.
        private fun serialize_to_or_delay(v: Serializer) do v.serialize_reference(self)
+
+       # Create an instance of this class from the `deserializer`
+       #
+       # This constructor is refined by subclasses to correctly build their instances.
+       init from_deserializer(deserializer: Deserializer) do end
 end
 
 # Instances of this class are not delayed and instead serialized immediately
index 976d532..eca090f 100644 (file)
@@ -105,8 +105,9 @@ private class SerializationPhasePreModel
                var npropdefs = nclassdef.n_propdefs
 
                var code = new Array[String]
-               code.add "init from_deserializer(v: Deserializer)"
+               code.add "redef init from_deserializer(v: Deserializer)"
                code.add "do"
+               code.add "      super"
                code.add "      v.notify_of_creation self"
 
                for attribute in npropdefs do if attribute isa AAttrPropdef then