// TODO: use weak reference to live value - or make each of them only once static SimpleLiveValue dm_fieldLiveValue(DynModule module default dm_current_mandatory(), S fieldName) { lock module.lock; temp module.enter(); // for dm_watchField Class type = getFieldType(module, fieldName); final SimpleLiveValue value = new(type, get(module, fieldName)); dm_watchField(fieldName, r { ifdef dm_fieldLiveValue_debug print("dm_fieldLiveValue: setting " + fieldName); endifdef O o = get(module, fieldName); ifdef dm_fieldLiveValue_debug print("dm_fieldLiveValue: setting " + fieldName + " = " + o); endifdef value.set(o); ifdef dm_fieldLiveValue_debug print("dm_fieldLiveValue: setting " + fieldName + " done"); printStackTrace(); endifdef }); value.onChange(r { ifdef dm_fieldLiveValue_debug print("dm_fieldLiveValue: setting 2 " + fieldName + " = " + value!); endifdef module.setField(fieldName, value!); ifdef dm_fieldLiveValue_debug print("dm_fieldLiveValue: setting 2 " + fieldName + " done"); endifdef }); ret value; } static SimpleLiveValue dm_fieldLiveValue(S fieldName, DynModule module) { ret dm_fieldLiveValue(module, fieldName); }