public void forEachClass(Object[] args) { boolean withLoader = false; Callable func = null; switch (args.length) { case 2: { Object b = args[1]; if (b instanceof Boolean) { withLoader = ((Boolean) b).booleanValue(); } } case 1: { Object f = args[0]; if (f instanceof Callable) { func = (Callable) f; } else { return; } } break; default: return; } final Callable finalFunc = func; SystemDictionary sysDict = VM.getVM().getSystemDictionary(); if (withLoader) { sysDict.classesDo( new SystemDictionary.ClassAndLoaderVisitor() { public void visit(Klass kls, Oop loader) { JSJavaKlass jk = factory.newJSJavaKlass(kls); if (jk == null) { return; } JSJavaObject k = jk.getJSJavaClass(); JSJavaObject l = factory.newJSJavaObject(loader); if (k != null) { if (k != null) { try { finalFunc.call(new Object[] {k, l}); } catch (ScriptException exp) { throw new RuntimeException(exp); } } } } }); } else { sysDict.classesDo( new SystemDictionary.ClassVisitor() { public void visit(Klass kls) { JSJavaKlass jk = factory.newJSJavaKlass(kls); if (jk == null) { return; } JSJavaClass k = jk.getJSJavaClass(); if (k != null) { if (k != null) { try { finalFunc.call(new Object[] {k}); } catch (ScriptException exp) { throw new RuntimeException(exp); } } } } }); } }