sclass DynModuleRef { S moduleID; transient O module; *() {} *(S *moduleID) {} void _doneLoading() { resolve(); } void resolve { if (module == null && moduleID != null) { module = dm_getModule(moduleID); //print("Module ID " + moduleID + " resolved to " + className(module)); } } O get() { resolve(); ret module; } void set(S moduleID) { this.moduleID = moduleID; module = null; } toString { ret moduleID == null ? "-" : moduleID + " (" + shortClassName(module) + ")"; } public int hashCode() { ret _hashCode(moduleID); } public bool equals(O o) { ret o instanceof DynModuleRef && eq(moduleID, o/DynModuleRef.moduleID); } }