# Compute class ancestors types
var mmbv1b = new ClassAncestorBuilder(tc, self)
for c in classes do
- if c isa MMSrcLocalClass then
- for n in c.nodes do
- mmbv1b.visit(n)
- end
- end
+ c.accept_class_visitor(mmbv1b)
c.compute_ancestors
end
if tc.error_count > 0 then exit(1)
# Check class conformity
var mmbv1b = new ClassVerifierVisitor(tc, self)
for c in classes do
- if c isa MMSrcLocalClass then
- for n in c.nodes do
- mmbv1b.visit(n)
- end
- end
+ c.accept_class_visitor(mmbv1b)
end
if tc.error_count > 0 then exit(1)
c.inherit_global_properties
# Global property introduction and redefinition
+ c.accept_class_visitor(mmbv2)
if c isa MMSrcLocalClass then
- for n in c.nodes do
- mmbv2.visit(n)
- end
end
# Note that inherited unredefined property are processed on demand latter
# Property signature analysis and inheritance conformance
var mmbv3 = new PropertyVerifierVisitor(tc, self)
for c in classes do
- if c isa MMSrcLocalClass then
- for n in c.nodes do
- mmbv3.visit(n)
- end
- end
+ c.accept_properties_visitor(mmbv3)
end
# Check inherited local properties
end
end
+redef class MMLocalClass
+ # Accept a class visitor (on class nodes)
+ private meth accept_class_visitor(v: AbsSyntaxVisitor)
+ do
+ end
+
+ # Accept a class visitor (on class properties)
+ private meth accept_properties_visitor(v: AbsSyntaxVisitor)
+ do
+ end
+end
+
redef class MMSrcLocalClass
+ redef meth accept_class_visitor(v)
+ do
+ for n in nodes do
+ v.visit(n)
+ end
+ end
+
+ # Accept a class visitor (on class properties)
+ redef meth accept_properties_visitor(v)
+ do
+ for n in nodes do
+ v.visit(n)
+ end
+
+ for p in src_local_properties do
+ p.accept_property_visitor(v)
+ end
+ end
# Add a source property
# Register it to the class and attach it to global property
private meth add_src_local_property(v: PropertyBuilderVisitor, prop: MMConcreteProperty)
end
end
+redef class MMConcreteProperty
+ private meth accept_property_visitor(v: AbsSyntaxVisitor)
+ do
+ end
+end
# Concrete NIT class specialization relation
class MMSrcAncestor
special MMAncestor
# Import super-modules
var module_names_to_import = new Array[Symbol]
var module_visibility = new HashMap[Symbol, Int]
- var no_import: PImport
+ var no_import: PImport = null
for i in n_imports do
var n = i.module_name
if n != null then
do
var s = prop.signature
for ip in supers do
+ assert ip isa MMConcreteProperty
var isig = ip.signature.adaptation_to(v.local_class.get_type)
if s == null then