collect.beh.html
ProgramBehavior{
void collectBehavior(String behfile)via ClassBehavior bypassing ClassMethods to{ ClassName, AnyClass }{
(@ ClassMethods methods; @)
before ClassBehavior (@ methods = host.get_methods(); @)
before ClassName (@
ClassDef def = Program.prog.findClassDef(host);
if (def == null) {
System.err.println(behfile + ": Error: No such class " +
"\"" + host + "\".");
} else {
def.addBehavior(methods);
}
@)
before AnyClass (@
Program.prog.attachBehaviorToAllClasses(methods);
@)
}
}
Program{
void attachBehaviorToAllClasses(ClassMethods methods)allClassDefs(GlobalBehaviorAttacher);
}
GlobalBehaviorAttacher{
before ClassDef (@ host.addBehavior(methods); @)
}
ClassDef{
(@
void addBehavior(ClassMethods methods) {
if (classmethods == null) classmethods = new ClassMethods();
classmethods.concat(methods.deepCopy());
}
@)
}
ClassMethods{
(@
void concat(ClassMethods added) {
if (added == null || added.methods == null) return;
if (methods == null) methods = new Method_SList();
Enumeration e = added.methods.elements();
while (e.hasMoreElements()) methods.addElement((Method) e.nextElement());
}
@)
}