| 107 | } |
| 108 | |
| 109 | bool ParseLibraryDef::parseLibraryDefinition(PathId fileId, Library* lib) { |
| 110 | FileSystem* const fileSystem = FileSystem::getInstance(); |
| 111 | m_fileId = fileId; |
| 112 | std::istream& stream = fileSystem->openForRead(m_fileId); |
| 113 | |
| 114 | if (!stream.good()) { |
| 115 | fileSystem->close(stream); |
| 116 | |
| 117 | Location ppfile(fileId); |
| 118 | Error err(ErrorDefinition::PA_CANNOT_OPEN_FILE, ppfile); |
| 119 | m_errors->addError(err); |
| 120 | return false; |
| 121 | } |
| 122 | |
| 123 | Location ppfile(fileId); |
| 124 | Error err(ErrorDefinition::PP_PROCESSING_SOURCE_FILE, ppfile); |
| 125 | m_errors->addError(err); |
| 126 | m_errors->printMessage(err, m_commandLineParser->muteStdout()); |
| 127 | |
| 128 | AntlrLibParserErrorListener* errorListener = |
| 129 | new AntlrLibParserErrorListener(this); |
| 130 | antlr4::ANTLRInputStream* inputStream = new antlr4::ANTLRInputStream(stream); |
| 131 | SV3_1aLexer* lexer = new SV3_1aLexer(inputStream); |
| 132 | lexer->removeErrorListeners(); |
| 133 | lexer->addErrorListener(errorListener); |
| 134 | antlr4::CommonTokenStream* tokens = new antlr4::CommonTokenStream(lexer); |
| 135 | tokens->fill(); |
| 136 | SV3_1aParser* parser = new SV3_1aParser(tokens); |
| 137 | parser->removeErrorListeners(); |
| 138 | parser->addErrorListener(errorListener); |
| 139 | antlr4::tree::ParseTree* m_tree = parser->top_level_library_rule(); |
| 140 | |
| 141 | SVLibShapeListener* listener = new SVLibShapeListener(this, tokens); |
| 142 | m_fileContent = listener->getFileContent(); |
| 143 | |
| 144 | antlr4::tree::ParseTreeWalker::DEFAULT.walk(listener, m_tree); |
| 145 | |
| 146 | if (m_fileContent->getLibrary() == nullptr) { |
| 147 | if (lib) { |
| 148 | m_fileContent->setLibrary(lib); |
| 149 | } else { |
| 150 | m_fileContent->setLibrary(m_librarySet->getLibrary(m_fileId)); |
| 151 | } |
| 152 | } |
| 153 | |
| 154 | if (m_commandLineParser->getDebugAstModel()) { |
| 155 | std::cout << m_fileContent->printObjects(); |
| 156 | } |
| 157 | |
| 158 | // delete m_tree; |
| 159 | delete parser; |
| 160 | delete tokens; |
| 161 | delete lexer; |
| 162 | delete inputStream; |
| 163 | delete listener; |
| 164 | fileSystem->close(stream); |
| 165 | return parseConfigDefinition(); |
| 166 | } |
no test coverage detected