public void Add(Type type) { var foreignClass = new ForeignClass(type); classes.Add(foreignClass.Name, foreignClass); source.AppendLine(foreignClass.Source); }
/// <summary> /// Automatically maps the given types to make their marked interfaces accessible from Wren. /// If the module name is the <see cref="WrenVM.InterpetModule"/>, the code will be interpreted immediately. /// </summary> /// <param name="vm">The <see cref="WrenVM"/> to make the types available to.</param> /// <param name="moduleName">The name of the module to place the types into.</param> /// <param name="targets">The types to map.</param> public static void AutoMap(this WrenVM vm, string moduleName, params Type[] targets) { checkInitialization(vm); if (moduleName == WrenVM.InterpetModule) { var classes = mainModuleClasses.GetValue(vm, _ => null); foreach (var target in targets) { var foreignClass = new ForeignClass(target); classes.Add(foreignClass.Name, foreignClass); vm.Interpret(foreignClass.Source); } return; } var modules = generatedModules.GetValue(vm, _ => null); ForeignModule module; if (modules.ContainsKey(moduleName)) { module = modules[moduleName]; if (module.Used && TreatModificationAfterLoadAsError) { throw new LoadedModuleModifiedException(moduleName); } } else { module = new ForeignModule(); modules.Add(moduleName, module); } foreach (var target in targets) { module.Add(target); } }