nitlanguage
/
nit.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
test_parser: add option `-x` to output XML
[nit.git]
/
src
/
frontend
/
serialization_phase.nit
diff --git
a/src/frontend/serialization_phase.nit
b/src/frontend/serialization_phase.nit
index
78c8c89
..
0d7e4ec
100644
(file)
--- a/
src/frontend/serialization_phase.nit
+++ b/
src/frontend/serialization_phase.nit
@@
-50,7
+50,7
@@
private class SerializationPhasePreModel
# Add `super Serializable`
var sc = toolcontext.parse_superclass("Serializable")
sc.location = nat.location
# Add `super Serializable`
var sc = toolcontext.parse_superclass("Serializable")
sc.location = nat.location
- nclassdef.n_superclasses.add sc
+ nclassdef.n_propdefs.add sc
generate_serialization_method(nclassdef)
generate_serialization_method(nclassdef)
@@
-97,8
+97,11
@@
private class SerializationPhasePreModel
end
# Add a constructor to the automated nclassdef
end
# Add a constructor to the automated nclassdef
- fun generate_deserialization_init(nclassdef: AClassdef)
+ fun generate_deserialization_init(nclassdef: AStdClassdef)
do
do
+ # Do not generate constructors for abstract classes
+ if nclassdef.n_classkind isa AAbstractClasskind then return
+
var npropdefs = nclassdef.n_propdefs
var code = new Array[String]
var npropdefs = nclassdef.n_propdefs
var code = new Array[String]
@@
-156,7
+159,9
@@
private class SerializationPhasePreModel
for nclassdef in nclassdefs do
var name = nclassdef.n_id.text
for nclassdef in nclassdefs do
var name = nclassdef.n_id.text
- if nclassdef.n_formaldefs.is_empty then
+ if nclassdef.n_formaldefs.is_empty and
+ not nclassdef.n_classkind isa AAbstractClasskind then
+
code.add " if name == \"{name}\" then return new {name}.from_deserializer(self)"
end
end
code.add " if name == \"{name}\" then return new {name}.from_deserializer(self)"
end
end
@@
-179,7
+184,9
@@
private class SerializationPhasePostModel
redef fun process_nmodule(nmodule)
do
for npropdef in nmodule.inits_to_retype do
redef fun process_nmodule(nmodule)
do
for npropdef in nmodule.inits_to_retype do
- var v = new PreciseTypeVisitor(npropdef, npropdef.mpropdef.mclassdef, toolcontext)
+ var mpropdef = npropdef.mpropdef
+ if mpropdef == null then continue # skip error
+ var v = new PreciseTypeVisitor(npropdef, mpropdef.mclassdef, toolcontext)
npropdef.accept_precise_type_visitor v
end
end
npropdef.accept_precise_type_visitor v
end
end