diff --git a/src/db/db/dbNetlistDeviceClasses.cc b/src/db/db/dbNetlistDeviceClasses.cc
index 57c9bd1f1..90993cadd 100644
--- a/src/db/db/dbNetlistDeviceClasses.cc
+++ b/src/db/db/dbNetlistDeviceClasses.cc
@@ -502,8 +502,9 @@ DeviceClassResistor::DeviceClassResistor ()
{ "M", "" }, // drop
// apply scaling if available
{ "R", "(R||$)/M" },
+ { "L", "L*M" },
+ { "W", "W" },
{ "A", "A*M" },
- { "W", "W*M" },
{ "P", "P*M" }
};
diff --git a/src/db/db/dbNetlistSpiceWriter.cc b/src/db/db/dbNetlistSpiceWriter.cc
index f91c2c962..cb7eb95b8 100644
--- a/src/db/db/dbNetlistSpiceWriter.cc
+++ b/src/db/db/dbNetlistSpiceWriter.cc
@@ -99,7 +99,7 @@ void NetlistSpiceWriterDelegate::write_device (const db::Device &dev) const
const db::DeviceClass *dc = dev.device_class ();
const db::DeviceClass::SpiceProfile &profile = dc->spice_profile (mp_writer->profile ());
- if (! profile.element.empty ()) {
+ if (! profile.outgoing_parameters.empty ()) {
write_device_profile (dev, profile);
} else {
write_device_default (dev);
@@ -113,7 +113,6 @@ void NetlistSpiceWriterDelegate::write_device_profile (const db::Device &dev, co
os << profile.element;
os << format_name (dev.expanded_name ());
os << format_terminals_with_order (dev, profile.terminal_order);
- os << " ";
if (! dev.device_class ()->name ().empty ()) {
os << " ";
os << format_name (dev.device_class ()->name ());
@@ -152,7 +151,7 @@ void NetlistSpiceWriterDelegate::write_device_default (const db::Device &dev) co
os << format_name (dev.device_class ()->name ());
}
- os << format_params (dev, db::DeviceClassCapacitor::param_id_C);
+ os << format_params (dev, db::DeviceClassCapacitor::param_id_C, true);
} else if (ind) {
@@ -165,7 +164,7 @@ void NetlistSpiceWriterDelegate::write_device_default (const db::Device &dev) co
os << " ";
os << format_name (dev.device_class ()->name ());
}
- os << format_params (dev, db::DeviceClassInductor::param_id_L);
+ os << format_params (dev, db::DeviceClassInductor::param_id_L, true);
} else if (res || res3) {
@@ -178,7 +177,7 @@ void NetlistSpiceWriterDelegate::write_device_default (const db::Device &dev) co
os << " ";
os << format_name (dev.device_class ()->name ());
}
- os << format_params (dev, db::DeviceClassResistor::param_id_R);
+ os << format_params (dev, db::DeviceClassResistor::param_id_R, true);
} else if (diode) {
@@ -270,9 +269,12 @@ std::string NetlistSpiceWriterDelegate::format_terminals_with_order (const db::D
return os.str ();
}
-std::string NetlistSpiceWriterDelegate::format_params (const db::Device &dev, size_t without_id) const
+std::string NetlistSpiceWriterDelegate::format_params (const db::Device &dev, size_t without_id, bool only_primary) const
{
- bool only_primary = ! m_write_all_parameters;
+ if (m_write_all_parameters) {
+ only_primary = false;
+ }
+
std::ostringstream os;
const std::vector
+ The "nil" value shortcuts numerical expressions the following way: +
+ ++nil + x -> nil +x + nil -> x +nil + nil -> nil ++ +
+ The same applies to the other binary operators "*", "/", "-", "&" "|", "<< and ">>". +
+ ++ The unary operators "-" and "~" deliver "nil" when used with a "nil" argument. +
+ ++ The logical binary operators "||" and "&&" behave this way: +
+ ++x || y -> x if x is not "nil" or "false", y otherwise +x || nil -> x +nil || x -> x +nil || nil -> nil +x && y -> y if x is not "nil" or "false", x otherwise +x && nil -> nil +nil && x -> nil +nil && nil -> nil ++