From 5520759d9e9043d301a149cf1295bc3f988c3163 Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Sat, 7 Jul 2018 08:02:29 -0400 Subject: [PATCH] Internals: Track dpi import wrapper creation. No functional change. --- src/V3AstNodes.h | 11 +++++++++-- src/V3Task.cpp | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/V3AstNodes.h b/src/V3AstNodes.h index 78a624fc4..0d32427a0 100644 --- a/src/V3AstNodes.h +++ b/src/V3AstNodes.h @@ -28,8 +28,7 @@ //###################################################################### // Standard defines for all AstNode final classes -#define ASTNODE_NODE_FUNCS(name) \ - virtual ~Ast ##name() {} \ +#define ASTNODE_NODE_FUNCS_NO_DTOR(name) \ virtual void accept(AstNVisitor& v) { v.visit(this); } \ virtual AstType type() const { return AstType::at ## name; } \ virtual AstNode* clone() { return new Ast ##name (*this); } \ @@ -38,6 +37,10 @@ Ast ##name * cloneTree(bool cloneNext) { return static_cast(AstNode::cloneTree(cloneNext)); } \ Ast ##name * clonep() const { return static_cast(AstNode::clonep()); } +#define ASTNODE_NODE_FUNCS(name) \ + virtual ~Ast ##name() {} \ + ASTNODE_NODE_FUNCS_NO_DTOR(name) + //###################################################################### //=== Ast* : Specific types // Netlist interconnect @@ -5470,6 +5473,7 @@ private: bool m_dpiExport:1; // From dpi export bool m_dpiExportWrapper:1; // From dpi export; static function with dispatch table bool m_dpiImport:1; // From dpi import + bool m_dpiImportWrapper:1; // Wrapper from dpi import public: AstCFunc(FileLine* fl, const string& name, AstScope* scopep, const string& rtnType="") : AstNode(fl) { @@ -5491,6 +5495,7 @@ public: m_dpiExport = false; m_dpiExportWrapper = false; m_dpiImport = false; + m_dpiImportWrapper = false; } ASTNODE_NODE_FUNCS(CFunc) virtual string name() const { return m_name; } @@ -5548,6 +5553,8 @@ public: void dpiExportWrapper(bool flag) { m_dpiExportWrapper = flag; } bool dpiImport() const { return m_dpiImport; } void dpiImport(bool flag) { m_dpiImport = flag; } + bool dpiImportWrapper() const { return m_dpiImportWrapper; } + void dpiImportWrapper(bool flag) { m_dpiImportWrapper = flag; } // // If adding node accessors, see below emptyBody AstNode* argsp() const { return op1p(); } diff --git a/src/V3Task.cpp b/src/V3Task.cpp index 58b847357..9df3e171e 100644 --- a/src/V3Task.cpp +++ b/src/V3Task.cpp @@ -980,6 +980,7 @@ private: cfuncp->entryPoint (!nodep->dpiImport()); cfuncp->funcPublic (nodep->taskPublic()); cfuncp->dpiExport (nodep->dpiExport()); + cfuncp->dpiImportWrapper(nodep->dpiImport()); cfuncp->isStatic (!(nodep->dpiImport()||nodep->taskPublic())); cfuncp->pure (nodep->pure()); //cfuncp->dpiImport // Not set in the wrapper - the called function has it set