| /* | |
| Copyright 2019 Alain Dargelas | |
| Licensed under the Apache License, Version 2.0 (the "License"); | |
| you may not use this file except in compliance with the License. | |
| You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software | |
| distributed under the License is distributed on an "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| See the License for the specific language governing permissions and | |
| limitations under the License. | |
| */ | |
| /* | |
| * File: SLAPI.cpp | |
| * Author: alain | |
| * | |
| * Created on May 13, 2017, 4:42 PM | |
| */ | |
| #include <string> | |
| #include <vector> | |
| #include "../ErrorReporting/Waiver.h" | |
| #include "../ErrorReporting/ErrorDefinition.h" | |
| #include "../SourceCompile/SymbolTable.h" | |
| #include "../ErrorReporting/ErrorContainer.h" | |
| #include "../Utils/StringUtils.h" | |
| #include "../CommandLine/CommandLineParser.hpp" | |
| #include "../SourceCompile/CompilationUnit.h" | |
| #include "../SourceCompile/PreprocessFile.h" | |
| #include "../SourceCompile/CompileSourceFile.h" | |
| #include "../SourceCompile/Compiler.h" | |
| #include "../SourceCompile/ParseFile.h" | |
| #include "../SourceCompile/PythonListen.h" | |
| #include "../Design/FileContent.h" | |
| #include "../Testbench/ClassDefinition.h" | |
| #include <cstdlib> | |
| #include <iostream> | |
| #include "antlr4-runtime.h" | |
| using namespace std; | |
| using namespace antlr4; | |
| using namespace SURELOG; | |
| #include "../parser/SV3_1aLexer.h" | |
| #include "../parser/SV3_1aParser.h" | |
| #include "../parser/SV3_1aParserBaseListener.h" | |
| #include "SV3_1aPythonListener.h" | |
| #include "../Utils/ParseUtils.h" | |
| #include "../Utils/FileUtils.h" | |
| #include "PythonAPI.h" | |
| #include "SLAPI.h" | |
| void SURELOG::SLsetWaiver(const char* messageId, const char* fileName, | |
| unsigned int line, const char* objectName) { | |
| if (fileName == 0 && line == 0 && objectName == 0) { | |
| Waiver::setWaiver(messageId, "", 0, ""); | |
| } else if (line == 0 && objectName == 0) { | |
| Waiver::setWaiver(messageId, "", 0, fileName); | |
| } else if (objectName == 0) { | |
| Waiver::setWaiver(messageId, fileName, line, ""); | |
| } else { | |
| Waiver::setWaiver(messageId, fileName, line, objectName); | |
| } | |
| } | |
| void SURELOG::SLregisterNewErrorType(const char* messageId, const char* text, | |
| const char* secondLine) { | |
| //[WARNI:PP0103] | |
| std::string errorId = messageId; | |
| errorId = StringUtils::rtrim(errorId, ']'); | |
| errorId = StringUtils::ltrim(errorId, '['); | |
| ErrorDefinition::ErrorType type = ErrorDefinition::getErrorType(messageId); | |
| ErrorDefinition::ErrorSeverity severity = | |
| ErrorDefinition::getErrorSeverity(errorId.substr(0, 5)); | |
| ErrorDefinition::ErrorCategory category = | |
| ErrorDefinition::getCategory(errorId.substr(6, 2)); | |
| ErrorDefinition::rec(type, severity, category, text, secondLine); | |
| } | |
| void SURELOG::SLoverrideSeverity(const char* messageId, const char* severity) { | |
| ErrorDefinition::setSeverity(ErrorDefinition::getErrorType(messageId), | |
| ErrorDefinition::getErrorSeverity(severity)); | |
| } | |
| void SURELOG::SLaddError(ErrorContainer* errors, const char* messageId, | |
| const char* fileName, unsigned int line, | |
| unsigned int col, const char* objectName) { | |
| if (errors == NULL) return; | |
| SymbolTable* symbolTable = errors->getSymbolTable(); | |
| SymbolId fileId = 0; | |
| if (fileName && (strcmp(fileName, ""))) | |
| fileId = symbolTable->registerSymbol(fileName); | |
| SymbolId objectId = 0; | |
| if (objectName && (strcmp(objectName, ""))) | |
| objectId = symbolTable->registerSymbol(objectName); | |
| Location loc(fileId, line, col, objectId); | |
| ErrorDefinition::ErrorType type = ErrorDefinition::getErrorType(messageId); | |
| Error err(type, loc); | |
| errors->addError(err, false, false); | |
| } | |
| void SURELOG::SLaddMLError(ErrorContainer* errors, const char* messageId, | |
| const char* fileName1, unsigned int line1, | |
| unsigned int col1, const char* objectName1, | |
| const char* fileName2, unsigned int line2, | |
| unsigned int col2, const char* objectName2) { | |
| if (errors == NULL) return; | |
| SymbolTable* symbolTable = errors->getSymbolTable(); | |
| SymbolId fileId1 = 0; | |
| if (fileName1 && (strcmp(fileName1, ""))) | |
| fileId1 = symbolTable->registerSymbol(fileName1); | |
| SymbolId objectId1 = 0; | |
| if (objectName1 && (strcmp(objectName1, ""))) | |
| objectId1 = symbolTable->registerSymbol(objectName1); | |
| Location loc1(fileId1, line1, col1, objectId1); | |
| SymbolId fileId2 = 0; | |
| if (fileName2 && (strcmp(fileName2, ""))) | |
| fileId2 = symbolTable->registerSymbol(fileName2); | |
| SymbolId objectId2 = 0; | |
| if (objectName2 && (strcmp(objectName2, ""))) | |
| objectId2 = symbolTable->registerSymbol(objectName2); | |
| Location loc2(fileId2, line2, col2, objectId2); | |
| ErrorDefinition::ErrorType type = ErrorDefinition::getErrorType(messageId); | |
| Error err(type, loc2, loc2); | |
| errors->addError(err, false, false); | |
| } | |
| void SURELOG::SLaddErrorContext(SV3_1aPythonListener* prog, | |
| ParserRuleContext* context, | |
| const char* messageId, const char* objectName, | |
| bool printColumn) { | |
| SV3_1aPythonListener* listener = (SV3_1aPythonListener*)prog; | |
| ParserRuleContext* ctx = (ParserRuleContext*)context; | |
| ErrorContainer* errors = | |
| listener->getPythonListen()->getCompileSourceFile()->getErrorContainer(); | |
| std::pair<int, int> lineCol = | |
| ParseUtils::getLineColumn(listener->getTokenStream(), ctx); | |
| ErrorDefinition::ErrorType type = ErrorDefinition::getErrorType(messageId); | |
| Location loc( | |
| listener->getPythonListen()->getParseFile()->getFileId(lineCol.first), | |
| listener->getPythonListen()->getParseFile()->getLineNb(lineCol.first), | |
| printColumn ? lineCol.second : 0, | |
| listener->getPythonListen() | |
| ->getCompileSourceFile() | |
| ->getSymbolTable() | |
| ->registerSymbol(objectName)); | |
| Error err(type, loc); | |
| errors->addError(err, false, false); | |
| } | |
| void SURELOG::SLaddMLErrorContext(SV3_1aPythonListener* prog, | |
| ParserRuleContext* context1, | |
| ParserRuleContext* context2, | |
| const char* messageId, | |
| const char* objectName1, | |
| const char* objectName2, bool printColumn) { | |
| SV3_1aPythonListener* listener = (SV3_1aPythonListener*)prog; | |
| ParserRuleContext* ctx1 = (ParserRuleContext*)context1; | |
| ParserRuleContext* ctx2 = (ParserRuleContext*)context2; | |
| ErrorContainer* errors = | |
| listener->getPythonListen()->getCompileSourceFile()->getErrorContainer(); | |
| std::pair<int, int> lineCol1 = | |
| ParseUtils::getLineColumn(listener->getTokenStream(), ctx1); | |
| std::pair<int, int> lineCol2 = | |
| ParseUtils::getLineColumn(listener->getTokenStream(), ctx2); | |
| ErrorDefinition::ErrorType type = ErrorDefinition::getErrorType(messageId); | |
| Location loc1( | |
| listener->getPythonListen()->getParseFile()->getFileId(lineCol1.first), | |
| listener->getPythonListen()->getParseFile()->getLineNb(lineCol1.first), | |
| printColumn ? lineCol1.second : 0, | |
| listener->getPythonListen() | |
| ->getCompileSourceFile() | |
| ->getSymbolTable() | |
| ->registerSymbol(objectName1)); | |
| Location loc2( | |
| listener->getPythonListen()->getParseFile()->getFileId(lineCol2.first), | |
| listener->getPythonListen()->getParseFile()->getLineNb(lineCol2.first), | |
| printColumn ? lineCol2.second : 0, | |
| listener->getPythonListen() | |
| ->getCompileSourceFile() | |
| ->getSymbolTable() | |
| ->registerSymbol(objectName2)); | |
| Error err(type, loc1, loc2); | |
| errors->addError(err, false, false); | |
| } | |
| std::string SURELOG::SLgetFile(SV3_1aPythonListener* prog, | |
| ParserRuleContext* context) { | |
| SV3_1aPythonListener* listener = (SV3_1aPythonListener*)prog; | |
| std::string file = | |
| listener->getPythonListen()->getParseFile()->getFileName(0); | |
| return file; | |
| } | |
| int SURELOG::SLgetLine(SV3_1aPythonListener* prog, ParserRuleContext* context) { | |
| SV3_1aPythonListener* listener = (SV3_1aPythonListener*)prog; | |
| ParserRuleContext* ctx = (ParserRuleContext*)context; | |
| std::pair<int, int> lineCol = | |
| ParseUtils::getLineColumn(listener->getTokenStream(), ctx); | |
| return lineCol.first; | |
| } | |
| int SURELOG::SLgetColumn(SV3_1aPythonListener* prog, | |
| ParserRuleContext* context) { | |
| SV3_1aPythonListener* listener = (SV3_1aPythonListener*)prog; | |
| ParserRuleContext* ctx = (ParserRuleContext*)context; | |
| std::pair<int, int> lineCol = | |
| ParseUtils::getLineColumn(listener->getTokenStream(), ctx); | |
| return lineCol.second; | |
| } | |
| std::string SURELOG::SLgetText(SV3_1aPythonListener* /*prog*/, | |
| ParserRuleContext* context) { | |
| ParserRuleContext* ctx = (ParserRuleContext*)context; | |
| std::vector<Token*> tokens = ParseUtils::getFlatTokenList(ctx); | |
| std::string text; | |
| for (auto token : tokens) { | |
| text += token->getText() + " "; | |
| } | |
| return text; | |
| } | |
| std::vector<std::string> SURELOG::SLgetTokens(SV3_1aPythonListener* prog, | |
| ParserRuleContext* context) { | |
| ParserRuleContext* ctx = (ParserRuleContext*)context; | |
| std::vector<Token*> tokens = ParseUtils::getFlatTokenList(ctx); | |
| std::vector<std::string> body_tokens; | |
| for (auto token : tokens) { | |
| body_tokens.push_back(token->getText()); | |
| } | |
| return body_tokens; | |
| } | |
| ParserRuleContext* SURELOG::SLgetParentContext(SV3_1aPythonListener* prog, | |
| ParserRuleContext* context) { | |
| ParserRuleContext* ctx = (ParserRuleContext*)context; | |
| return (ParserRuleContext*)ctx->parent; | |
| } | |
| std::vector<ParserRuleContext*> SURELOG::SLgetChildrenContext( | |
| SV3_1aPythonListener* prog, ParserRuleContext* context) { | |
| ParserRuleContext* ctx = (ParserRuleContext*)context; | |
| std::vector<ParserRuleContext*> children; | |
| for (unsigned int i = 0; i < ctx->children.size(); i++) { | |
| // Get the i-th child node of `parent`. | |
| tree::ParseTree* child = ctx->children[i]; | |
| tree::TerminalNode* node = dynamic_cast<tree::TerminalNode*>(child); | |
| if (node) { | |
| // Terminal node | |
| } else { | |
| // Rule | |
| children.push_back((ParserRuleContext*)child); | |
| } | |
| } | |
| return children; | |
| } | |
| NodeId SURELOG::SLgetRootNode(FileContent* fC) { | |
| if (!fC) return 0; | |
| return fC->getRootNode(); | |
| } | |
| std::string SURELOG::SLgetFile(FileContent* fC, NodeId id) { | |
| if (!fC) return ""; | |
| return fC->getSymbolTable()->getSymbol(fC->getFileId(id)); | |
| } | |
| unsigned int SURELOG::SLgetType(FileContent* fC, NodeId id) { | |
| if (!fC) return 0; | |
| return fC->Type(id); | |
| } | |
| NodeId SURELOG::SLgetChild(FileContent* fC, NodeId index) { | |
| if (!fC) return 0; | |
| return fC->Child(index); | |
| } | |
| NodeId SURELOG::SLgetSibling(FileContent* fC, NodeId index) { | |
| if (!fC) return 0; | |
| return fC->Sibling(index); | |
| } | |
| NodeId SURELOG::SLgetParent(FileContent* fC, NodeId index) { | |
| if (!fC) return 0; | |
| return fC->Parent(index); | |
| } | |
| unsigned int SURELOG::SLgetLine(FileContent* fC, NodeId index) { | |
| if (!fC) return 0; | |
| return fC->Line(index); | |
| } | |
| std::string SURELOG::SLgetName(FileContent* fC, NodeId index) { | |
| if (!fC) return ""; | |
| return fC->SymName(index); | |
| } | |
| NodeId SURELOG::SLgetChild(FileContent* fC, NodeId parent, unsigned int type) { | |
| if (!fC) return 0; | |
| return fC->sl_get(parent, (VObjectType)type); | |
| } | |
| NodeId SURELOG::SLgetParent(FileContent* fC, NodeId parent, unsigned int type) { | |
| if (!fC) return 0; | |
| return fC->sl_parent(parent, (VObjectType)type); | |
| } | |
| std::vector<unsigned int> SURELOG::SLgetAll(FileContent* fC, NodeId parent, | |
| unsigned int type) { | |
| if (!fC) return {}; | |
| return fC->sl_get_all(parent, (VObjectType)type); | |
| } | |
| std::vector<unsigned int> SURELOG::SLgetAll(FileContent* fC, NodeId parent, | |
| std::vector<unsigned int> types) { | |
| if (!fC) return {}; | |
| std::vector<VObjectType> vtypes; | |
| for (auto type : types) vtypes.push_back((VObjectType)type); | |
| return fC->sl_get_all(parent, vtypes); | |
| } | |
| NodeId SURELOG::SLcollect(FileContent* fC, NodeId parent, unsigned int type) { | |
| if (!fC) return {}; | |
| return fC->sl_collect(parent, (VObjectType)type); | |
| } | |
| std::vector<unsigned int> SURELOG::SLcollectAll(FileContent* fC, NodeId parent, | |
| unsigned int type, bool first) { | |
| if (fC) | |
| return fC->sl_collect_all(parent, (VObjectType)type, first); | |
| else | |
| return {}; | |
| } | |
| std::vector<unsigned int> SURELOG::SLcollectAll(FileContent* fC, NodeId parent, | |
| std::vector<unsigned int> types, | |
| bool first) { | |
| if (!fC) return {}; | |
| std::vector<VObjectType> vtypes; | |
| for (auto type : types) vtypes.push_back((VObjectType)type); | |
| return fC->sl_collect_all(parent, vtypes, first); | |
| } | |
| std::vector<unsigned int> SURELOG::SLcollectAll( | |
| FileContent* fC, NodeId parent, std::vector<unsigned int> types, | |
| std::vector<unsigned int> stopPoints, bool first) { | |
| if (!fC) return {}; | |
| std::vector<VObjectType> vtypes; | |
| for (auto type : types) vtypes.push_back((VObjectType)type); | |
| std::vector<VObjectType> vstops; | |
| for (auto type : stopPoints) vstops.push_back((VObjectType)type); | |
| return fC->sl_collect_all(parent, vtypes, vstops, first); | |
| } | |
| unsigned int SURELOG::SLgetnModuleDefinition(Design* design) { | |
| if (!design) return 0; | |
| return design->getModuleDefinitions().size(); | |
| } | |
| unsigned int SURELOG::SLgetnProgramDefinition(Design* design) { | |
| if (!design) return 0; | |
| return design->getProgramDefinitions().size(); | |
| } | |
| unsigned int SURELOG::SLgetnPackageDefinition(Design* design) { | |
| if (!design) return 0; | |
| return design->getPackageDefinitions().size(); | |
| } | |
| unsigned int SURELOG::SLgetnClassDefinition(Design* design) { | |
| if (!design) return 0; | |
| return design->getUniqueClassDefinitions().size(); | |
| } | |
| unsigned int SURELOG::SLgetnTopModuleInstance(Design* design) { | |
| if (!design) return 0; | |
| return design->getTopLevelModuleInstances().size(); | |
| } | |
| ModuleDefinition* SURELOG::SLgetModuleDefinition(Design* design, | |
| unsigned int index) { | |
| if (!design) return 0; | |
| ModuleNameModuleDefinitionMap::iterator itr = | |
| design->getModuleDefinitions().begin(); | |
| for (unsigned int i = 0; i < index; i++) itr++; | |
| return (*itr).second; | |
| } | |
| Program* SURELOG::SLgetProgramDefinition(Design* design, unsigned int index) { | |
| if (!design) return 0; | |
| ProgramNameProgramDefinitionMap::iterator itr = | |
| design->getProgramDefinitions().begin(); | |
| for (unsigned int i = 0; i < index; i++) itr++; | |
| return (*itr).second; | |
| } | |
| Package* SURELOG::SLgetPackageDefinition(Design* design, unsigned int index) { | |
| if (!design) return 0; | |
| PackageNamePackageDefinitionMultiMap::iterator itr = | |
| design->getPackageDefinitions().begin(); | |
| for (unsigned int i = 0; i < index; i++) itr++; | |
| return (*itr).second; | |
| } | |
| ClassDefinition* SURELOG::SLgetClassDefinition(Design* design, | |
| unsigned int index) { | |
| if (!design) return 0; | |
| ClassNameClassDefinitionMap::iterator itr = | |
| design->getUniqueClassDefinitions().begin(); | |
| for (unsigned int i = 0; i < index; i++) itr++; | |
| return (*itr).second; | |
| } | |
| ModuleInstance* SURELOG::SLgetTopModuleInstance(Design* design, | |
| unsigned int index) { | |
| if (!design) return 0; | |
| return design->getTopLevelModuleInstances()[index]; | |
| } | |
| std::string SURELOG::SLgetModuleName(ModuleDefinition* module) { | |
| if (!module) return ""; | |
| return module->getName(); | |
| } | |
| std::string SURELOG::SLgetModuleFile(ModuleDefinition* module) { | |
| if (!module) return ""; | |
| if (module->getFileContents().size()) | |
| return module->getFileContents()[0]->getFileName(module->getNodeIds()[0]); | |
| else | |
| return ""; | |
| } | |
| unsigned int SURELOG::SLgetModuleLine(ModuleDefinition* module) { | |
| if (!module) return 0; | |
| if (module->getFileContents().size()) | |
| return module->getFileContents()[0]->Line(module->getNodeIds()[0]); | |
| else | |
| return 0; | |
| } | |
| VObjectType SURELOG::SLgetModuleType(ModuleDefinition* module) { | |
| if (!module) return VObjectType::slNoType; | |
| return module->getType(); | |
| } | |
| FileContent* SURELOG::SLgetModuleFileContent(ModuleDefinition* module) { | |
| if (!module) return NULL; | |
| if (module->getFileContents().size()) | |
| return module->getFileContents()[0]; | |
| else | |
| return NULL; | |
| } | |
| NodeId SURELOG::SLgetModuleRootNode(ModuleDefinition* module) { | |
| if (!module) return 0; | |
| if (module->getFileContents().size()) | |
| return module->getNodeIds()[0]; | |
| else | |
| return 0; | |
| } | |
| std::string SURELOG::SLgetClassName(ClassDefinition* module) { | |
| if (!module) return ""; | |
| return module->getName(); | |
| } | |
| std::string SURELOG::SLgetClassFile(ClassDefinition* module) { | |
| if (!module) return ""; | |
| if (module->getFileContents().size() && module->getFileContents()[0]) | |
| return module->getFileContents()[0]->getFileName(module->getNodeIds()[0]); | |
| else | |
| return ""; | |
| } | |
| unsigned int SURELOG::SLgetClassLine(ClassDefinition* module) { | |
| if (!module) return 0; | |
| if (module->getFileContents().size() && module->getFileContents()[0]) | |
| return module->getFileContents()[0]->Line(module->getNodeIds()[0]); | |
| else | |
| return 0; | |
| } | |
| VObjectType SURELOG::SLgetClassType(ClassDefinition* module) { | |
| if (!module) return VObjectType::slNoType; | |
| return module->getType(); | |
| } | |
| FileContent* SURELOG::SLgetClassFileContent(ClassDefinition* module) { | |
| if (!module) return 0; | |
| if (module->getFileContents().size() && module->getFileContents()[0]) | |
| return module->getFileContents()[0]; | |
| else | |
| return NULL; | |
| } | |
| NodeId SURELOG::SLgetClassRootNode(ClassDefinition* module) { | |
| if (!module) return 0; | |
| if (module->getFileContents().size() && module->getFileContents()[0]) | |
| return module->getNodeIds()[0]; | |
| else | |
| return 0; | |
| } | |
| std::string SURELOG::SLgetPackageName(Package* module) { | |
| if (!module) return ""; | |
| return module->getName(); | |
| } | |
| std::string SURELOG::SLgetPackageFile(Package* module) { | |
| if (!module) return ""; | |
| if (module->getFileContents().size()) | |
| return module->getFileContents()[0]->getFileName(module->getNodeIds()[0]); | |
| else | |
| return ""; | |
| } | |
| unsigned int SURELOG::SLgetPackageLine(Package* module) { | |
| if (!module) return 0; | |
| if (module->getFileContents().size()) | |
| return module->getFileContents()[0]->Line(module->getNodeIds()[0]); | |
| else | |
| return 0; | |
| } | |
| VObjectType SURELOG::SLgetPackageType(Package* module) { | |
| if (!module) return VObjectType::slNoType; | |
| return module->getType(); | |
| } | |
| FileContent* SURELOG::SLgetPackageFileContent(Package* module) { | |
| if (!module) return 0; | |
| if (module->getFileContents().size()) | |
| return module->getFileContents()[0]; | |
| else | |
| return NULL; | |
| } | |
| NodeId SURELOG::SLgetPackageRootNode(Package* module) { | |
| if (!module) return 0; | |
| if (module->getFileContents().size()) | |
| return module->getNodeIds()[0]; | |
| else | |
| return 0; | |
| } | |
| std::string SURELOG::SLgetProgramName(Program* module) { | |
| if (!module) return ""; | |
| return module->getName(); | |
| } | |
| std::string SURELOG::SLgetProgramFile(Program* module) { | |
| if (!module) return ""; | |
| if (module->getFileContents().size()) | |
| return module->getFileContents()[0]->getFileName(module->getNodeIds()[0]); | |
| else | |
| return ""; | |
| } | |
| unsigned int SURELOG::SLgetProgramLine(Program* module) { | |
| if (!module) return 0; | |
| if (module->getFileContents().size()) | |
| return module->getFileContents()[0]->Line(module->getNodeIds()[0]); | |
| else | |
| return 0; | |
| } | |
| VObjectType SURELOG::SLgetProgramType(Program* module) { | |
| if (!module) return VObjectType::slNoType; | |
| return module->getType(); | |
| } | |
| FileContent* SURELOG::SLgetProgramFileContent(Program* module) { | |
| if (!module) return 0; | |
| if (module->getFileContents().size()) | |
| return module->getFileContents()[0]; | |
| else | |
| return NULL; | |
| } | |
| NodeId SURELOG::SLgetProgramRootNode(Program* module) { | |
| if (!module) return 0; | |
| if (module->getFileContents().size()) | |
| return module->getNodeIds()[0]; | |
| else | |
| return 0; | |
| } | |
| VObjectType SURELOG::SLgetInstanceType(ModuleInstance* instance) { | |
| if (!instance) return VObjectType::slNoType; | |
| return instance->getType(); | |
| } | |
| VObjectType SURELOG::SLgetInstanceModuleType(ModuleInstance* instance) { | |
| if (!instance) return VObjectType::slNoType; | |
| return instance->getModuleType(); | |
| } | |
| std::string SURELOG::SLgetInstanceName(ModuleInstance* instance) { | |
| if (!instance) return ""; | |
| return instance->getInstanceName(); | |
| } | |
| std::string SURELOG::SLgetInstanceFullPathName(ModuleInstance* instance) { | |
| if (!instance) return ""; | |
| return instance->getFullPathName(); | |
| } | |
| std::string SURELOG::SLgetInstanceModuleName(ModuleInstance* instance) { | |
| if (!instance) return ""; | |
| return instance->getModuleName(); | |
| } | |
| DesignComponent* SURELOG::SLgetInstanceDefinition(ModuleInstance* instance) { | |
| if (!instance) return NULL; | |
| return instance->getDefinition(); | |
| } | |
| std::string SURELOG::SLgetInstanceFileName(ModuleInstance* instance) { | |
| if (!instance) return ""; | |
| return instance->getFileContent()->getFileName(instance->getNodeId()); | |
| } | |
| FileContent* SURELOG::SLgetInstanceFileContent(ModuleInstance* instance) { | |
| if (!instance) return NULL; | |
| return instance->getFileContent(); | |
| } | |
| NodeId SURELOG::SLgetInstanceNodeId(ModuleInstance* instance) { | |
| if (!instance) return 0; | |
| return instance->getNodeId(); | |
| } | |
| unsigned int SURELOG::SLgetInstanceLine(ModuleInstance* instance) { | |
| if (!instance) return 0; | |
| return instance->getLineNb(); | |
| } | |
| unsigned int SURELOG::SLgetnInstanceChildren(ModuleInstance* instance) { | |
| if (!instance) return 0; | |
| return instance->getNbChildren(); | |
| } | |
| ModuleInstance* SURELOG::SLgetInstanceChildren(ModuleInstance* instance, | |
| unsigned int i) { | |
| if (!instance) return NULL; | |
| return instance->getChildren(i); | |
| } | |
| ModuleInstance* SURELOG::SLgetInstanceParent(ModuleInstance* instance) { | |
| if (!instance) return NULL; | |
| return instance->getParent(); | |
| } |