From 94b2add14e28b9755ac93bd0d5d4e964ae1de6cc Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alexis=20Laferri=C3=A8re?= Date: Fri, 21 Jul 2017 21:08:10 -0400 Subject: [PATCH] a_star: don't crash on deserialization errors and limit static types MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Alexis Laferrière --- lib/a_star.nit | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/lib/a_star.nit b/lib/a_star.nit index cc0cba3..de909db 100644 --- a/lib/a_star.nit +++ b/lib/a_star.nit @@ -211,8 +211,8 @@ class Node do deserializer.notify_of_creation self - var graph = deserializer.deserialize_attribute("graph") - assert graph isa Graph[N, Link] + var graph = deserializer.deserialize_attribute("graph", (new GetName[Graph[N, Link]]).to_s) + if not graph isa Graph[N, Link] then graph = new Graph[N, Link] self.graph = graph end end @@ -247,10 +247,10 @@ class Graph[N: Node, L: Link] super Serializable # Nodes in this graph - var nodes: Set[N] = new HashSet[N] + var nodes = new Set[N] # Links in this graph - var links: Set[L] = new HashSet[L] + var links = new Set[L] # Add a `node` to this graph fun add_node(node: N): N @@ -283,13 +283,17 @@ class Graph[N: Node, L: Link] do deserializer.notify_of_creation self - var nodes = deserializer.deserialize_attribute("nodes") - assert nodes isa HashSet[N] - self.nodes = nodes + var nodes = deserializer.deserialize_attribute("nodes", (new GetName[Set[N]]).to_s) + if deserializer.deserialize_attribute_missing then + deserializer.errors.add new AttributeMissingError(self, "nodes") + end + if nodes isa Set[N] then self.nodes = nodes - var links = deserializer.deserialize_attribute("links") - assert links isa HashSet[L] - for link in links do add_link link + var links = deserializer.deserialize_attribute("links", (new GetName[Set[L]]).to_s) + if deserializer.deserialize_attribute_missing then + deserializer.errors.add new AttributeMissingError(self, "links") + end + if links isa Set[L] then for link in links do add_link link end end -- 1.7.9.5