// Idea: Every class loader makes only a single class so they can be // garbage collected more easily. srecord noeq LASMultiClassLoader(ClassLoader parent) is ILASClassLoader { settable bool rememberClassBytes; gettable Map definedClasses = syncMap(); Lock lock = lock(); *(Class parent) { this(parent.getClassLoader()); } public Class defineLASClass(S name, IF0 generateClass) { lock lock; try object definedClasses.get(name); var cl = new InMemoryClassLoader(parent); try { Class c = cl.defineLASClass(name, generateClass); definedClasses.put(name, c); ret c; } catch (ClassNotFoundException e) { print("Generating class " + name); ret defineAClass(name, generateClass!); } } }