redef class MMSrcLocalClass
redef fun accept_class_visitor(v)
do
- for n in nodes do
+ var n = node
+ while n != null do
v.enter_visit(n)
+ n = n.next_node
end
end
# Accept a class visitor (on class properties)
redef fun accept_properties_visitor(v)
do
- for n in nodes do
+ var n = node
+ while n != null do
v.enter_visit(n)
+ n = n.next_node
end
for p in src_local_properties do
var superclass: nullable MMLocalClass = null # This most specific non-mixin superclass (if any)
if supers.length > 1 then
- v.error(nodes.first, "Error: Explicit constructor required in {self} since multiple inheritance of constructor is forbiden. Conflicting classes are {supers.join(", ")}. Costructors are {super_constructors.join(", ")}.")
+ v.error(node, "Error: Explicit constructor required in {self} since multiple inheritance of constructor is forbiden. Conflicting classes are {supers.join(", ")}. Costructors are {super_constructors.join(", ")}.")
return
else if supers.length == 1 then
superclass = supers.first
# Concrete NIT class specialization relation
class MMSrcAncestor
special MMAncestor
- # The related AST node
- readable var _node: ASuperclass
redef readable var _local_class: MMLocalClass
- init(n: ASuperclass, c: MMLocalClass)
+ init(c: MMLocalClass)
do
- _node = n
_local_class = c
end
end
# Visibility level (intrude/public/private)
fun visibility_level: Int is abstract
end
-redef class AImport
+redef class AStdImport
redef fun module_name
do
return n_id.to_symbol
var local_classes = mod.src_local_classes
if (local_classes.has_key(name)) then
local_class = local_classes[name]
- if self isa AClassdef then
+ if self isa AStdClassdef then
# If we are not a special implicit class then rant
- v.error(self, "Error: A class {name} is already defined at line {local_class.nodes.first.first_token.location.line_start}.")
+ v.error(self, "Error: A class {name} is already defined at line {local_class.node.location.line_start}.")
return
end
- local_class.nodes.add(self)
+ # Add the new node after the last node
+ var n = local_class.node
+ while n.next_node != null do n = n.next_node
+ n.next_node = self
else
local_class = new MMSrcLocalClass(mod, name, self, arity)
local_classes[name] = local_class
redef fun is_abstract do return true
end
-redef class AClassdef
+redef class AStdClassdef
redef fun name
do
return n_id.to_symbol
end
end
-class MMSrcTypeFormalParameter
-special MMTypeFormalParameter
- # The associated node
- readable var _node: AFormaldef
-
- init(name: Symbol, pos: Int, local_class: MMLocalClass, n: AFormaldef)
- do
- super(name, pos, local_class)
- _node = n
- end
-end
-
redef class AFormaldef
# The associated formal generic parameter (MM entity)
- var _formal: nullable MMSrcTypeFormalParameter
+ var _formal: nullable MMTypeFormalParameter
redef fun accept_class_builder(v)
do
var name = n_id.to_symbol
- var formal_type = new MMSrcTypeFormalParameter(name, v.local_class_arity, v.local_class, self)
+ var formal_type = new MMTypeFormalParameter(name, v.local_class_arity, v.local_class)
_formal = formal_type
v.local_class_arity = v.local_class_arity + 1
v.local_class.register_formal(formal_type)
super
var c = n_type.get_local_class(v)
if c == null then return
- var ancestor = new MMSrcAncestor(self, c)
+ var ancestor = new MMSrcAncestor(c)
_ancestor = ancestor
v.local_class.add_direct_parent(ancestor)
end