diff options
author | 2018-05-30 09:52:39 +1000 | |
---|---|---|
committer | 2018-05-30 09:52:39 +1000 | |
commit | c7b221458cca9ca3bde977ae042281879af76ca5 (patch) | |
tree | 9f963bea4c9902bc741e04262184354b22dd3392 /docs/release/src/emu/validity.cpp | |
parent | 1c5773d0da60e89ec39ea2723aa7831ba3d13ab9 (diff) |
0.198 Release filestag198
Diffstat (limited to 'docs/release/src/emu/validity.cpp')
-rw-r--r-- | docs/release/src/emu/validity.cpp | 44 |
1 files changed, 26 insertions, 18 deletions
diff --git a/docs/release/src/emu/validity.cpp b/docs/release/src/emu/validity.cpp index 4f4861ac97b..e787d38a72c 100644 --- a/docs/release/src/emu/validity.cpp +++ b/docs/release/src/emu/validity.cpp @@ -1963,7 +1963,7 @@ void validity_checker::validate_devices() // if it's a slot, iterate over possible cards (don't recurse, or you'll stack infinite tee connectors) device_slot_interface *const slot = dynamic_cast<device_slot_interface *>(&device); - if (slot != nullptr && !slot->fixed() && !duplicate) + if (slot && !slot->fixed() && !duplicate) { for (auto &option : slot->option_list()) { @@ -1971,23 +1971,29 @@ void validity_checker::validate_devices() if (slot->default_option() != nullptr && option.first == slot->default_option()) continue; - device_t *const card = m_current_config->device_add(&slot->device(), option.second->name(), option.second->devtype(), option.second->clock()); - - const char *const def_bios = option.second->default_bios(); - if (def_bios) - card->set_default_bios_tag(def_bios); - auto additions = option.second->machine_config(); - if (additions) - additions(card); + device_t *card; + { + machine_config::token const tok(m_current_config->begin_configuration(slot->device())); + card = m_current_config->device_add(option.second->name(), option.second->devtype(), option.second->clock()); + + const char *const def_bios = option.second->default_bios(); + if (def_bios) + card->set_default_bios_tag(def_bios); + auto additions = option.second->machine_config(); + if (additions) + additions(card); + } for (device_slot_interface &subslot : slot_interface_iterator(*card)) { if (subslot.fixed()) { - device_slot_option const *const suboption = subslot.option(subslot.default_option()); + // TODO: make this self-contained so it can apply itself + device_slot_interface::slot_option const *suboption = subslot.option(subslot.default_option()); if (suboption) { - device_t *const sub_card = m_current_config->device_add(&subslot.device(), suboption->name(), suboption->devtype(), suboption->clock()); + machine_config::token const tok(m_current_config->begin_configuration(subslot.device())); + device_t *const sub_card = m_current_config->device_add(suboption->name(), suboption->devtype(), suboption->clock()); const char *const sub_bios = suboption->default_bios(); if (sub_bios) sub_card->set_default_bios_tag(sub_bios); @@ -2011,7 +2017,8 @@ void validity_checker::validate_devices() m_current_device = nullptr; } - m_current_config->device_remove(&slot->device(), option.second->name()); + machine_config::token const tok(m_current_config->begin_configuration(slot->device())); + m_current_config->device_remove(option.second->name()); } } } @@ -2034,9 +2041,10 @@ void validity_checker::validate_device_types() std::unordered_map<std::string, std::add_pointer_t<device_type> > device_name_map, device_shortname_map; machine_config config(GAME_NAME(___empty), m_drivlist.options()); + machine_config::token const tok(config.begin_configuration(config.root_device())); for (device_type type : registered_device_types) { - device_t *const dev = config.device_add(&config.root_device(), "_tmp", type, 0); + device_t *const dev = config.device_add("_tmp", type, 0); char const *name((dev->shortname() && *dev->shortname()) ? dev->shortname() : type.type().name()); std::string const description((dev->source() && *dev->source()) ? util::string_format("%s(%s)", core_filename_extract_base(dev->source()).c_str(), name) : name); @@ -2073,9 +2081,9 @@ void validity_checker::validate_device_types() } else if (!devname.second) { - device_t *const dup = config.device_add(&config.root_device(), "_dup", *devname.first->second, 0); + device_t *const dup = config.device_add("_dup", *devname.first->second, 0); osd_printf_error("Device %s short name is a duplicate of %s(%s)\n", description.c_str(), core_filename_extract_base(dup->source()).c_str(), dup->shortname()); - config.device_remove(&config.root_device(), "_dup"); + config.device_remove("_dup"); } } @@ -2097,9 +2105,9 @@ void validity_checker::validate_device_types() } else if (!devdesc.second) { - device_t *const dup = config.device_add(&config.root_device(), "_dup", *devdesc.first->second, 0); + device_t *const dup = config.device_add("_dup", *devdesc.first->second, 0); osd_printf_error("Device %s name '%s' is a duplicate of %s(%s)\n", description.c_str(), dev->name(), core_filename_extract_base(dup->source()).c_str(), dup->shortname()); - config.device_remove(&config.root_device(), "_dup"); + config.device_remove("_dup"); } } @@ -2121,7 +2129,7 @@ void validity_checker::validate_device_types() if (unemulated & imperfect) osd_printf_error("Device cannot have features that are both unemulated and imperfect (0x%08lX)\n", static_cast<unsigned long>(unemulated & imperfect)); - config.device_remove(&config.root_device(), "_tmp"); + config.device_remove("_tmp"); } // if we had warnings or errors, output |