1 function process_type(c)
3 if ((c.kind == 'class' || c.kind == 'struct') && !c.isIncomplete) {
4 for each (let base in c.bases)
5 if (isFinal(base.type))
6 error("Class '" + c.name + "' derives from final class '" + base.type.name + "'.", c.loc);
10 function process_function(decl, body)
15 let c = decl.memberOf;
16 if ((c.kind == 'class' || c.kind == 'struct') && !c.isIncomplete) {
17 for each (let base in ancestorTypes(c))
18 for each (let member in base.members)
19 if (member.isFunction && isFinal(member) && member.shortName == decl.shortName)
20 error("Function '" + decl.name + "' overrides final ancestor in '" +
21 base.name + "'.", c.loc);
25 function ancestorTypes(c)
27 for each (let base in c.bases) {
29 for (let bb in ancestorTypes(base.type))
36 return hasAttribute(c, 'NS_final');