diff --git a/src/db/db/dbNetlistSpiceReader.cc b/src/db/db/dbNetlistSpiceReader.cc index 59e9f301f..dd3ade0f8 100644 --- a/src/db/db/dbNetlistSpiceReader.cc +++ b/src/db/db/dbNetlistSpiceReader.cc @@ -662,7 +662,7 @@ NetlistSpiceReader::SpiceReaderStream::close () std::pair NetlistSpiceReader::SpiceReaderStream::get_line () { - if (mp_text_stream->at_end ()) { + if (at_end ()) { return std::make_pair (std::string (), false); } @@ -708,7 +708,7 @@ NetlistSpiceReader::SpiceReaderStream::source () const bool NetlistSpiceReader::SpiceReaderStream::at_end () const { - return mp_text_stream->at_end (); + return !m_has_stored_line && mp_text_stream->at_end (); } void diff --git a/src/db/unit_tests/dbNetlistReaderTests.cc b/src/db/unit_tests/dbNetlistReaderTests.cc index 987c432af..514548686 100644 --- a/src/db/unit_tests/dbNetlistReaderTests.cc +++ b/src/db/unit_tests/dbNetlistReaderTests.cc @@ -590,3 +590,24 @@ TEST(15_ContinuationWithBlanks) "end;\n" ); } + +TEST(16_issue898) +{ + db::Netlist nl; + + std::string path = tl::combine_path (tl::combine_path (tl::testdata (), "algo"), "issue-898.cir"); + + db::NetlistSpiceReader reader; + tl::InputStream is (path); + reader.read (is, nl); + + EXPECT_EQ (nl.to_string (), + "circuit .TOP ();\n" + " device RES $1 (A=VDD,B=GND) (R=1000,L=0,W=0,A=0,P=0);\n" + " subcircuit FILLER_CAP '0' (VDD=VDD,GND=GND);\n" + "end;\n" + "circuit FILLER_CAP (VDD=VDD,GND=GND);\n" + " device NMOS '0' (S=GND,G=VDD,D=GND,B=GND) (L=10,W=10,AS=0,AD=0,PS=0,PD=0);\n" + "end;\n" + ); +}