From 9516ee8489589fad3656c746dfa56582695cd6f4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alexis=20Laferri=C3=A8re?= Date: Sat, 16 May 2015 10:21:04 -0400 Subject: [PATCH] serialization: use an inherited constructor MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Alexis Laferrière --- lib/json_serialization.nit | 2 +- lib/serialization/serialization.nit | 5 +++++ src/frontend/serialization_phase.nit | 3 ++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/json_serialization.nit b/lib/json_serialization.nit index e8c76b4..ade8318 100644 --- a/lib/json_serialization.nit +++ b/lib/json_serialization.nit @@ -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 diff --git a/lib/serialization/serialization.nit b/lib/serialization/serialization.nit index 31f98f0..5c6e273 100644 --- a/lib/serialization/serialization.nit +++ b/lib/serialization/serialization.nit @@ -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 diff --git a/src/frontend/serialization_phase.nit b/src/frontend/serialization_phase.nit index 976d532..eca090f 100644 --- a/src/frontend/serialization_phase.nit +++ b/src/frontend/serialization_phase.nit @@ -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 -- 1.7.9.5