From c6cc5cc999b09bdc8e381c78303976f8ec8731f0 Mon Sep 17 00:00:00 2001 From: m0_56903617 Date: Fri, 13 Aug 2021 17:35:24 +0800 Subject: [PATCH] 202108131735 --- parser/verilog_module.c | 31 +++++++++++++++++++++++++++++++ parser/verilog_parsetree.h | 3 +++ 2 files changed, 34 insertions(+) diff --git a/parser/verilog_module.c b/parser/verilog_module.c index 491b064..7bf3589 100644 --- a/parser/verilog_module.c +++ b/parser/verilog_module.c @@ -83,6 +83,32 @@ static const char *verilogmoduleModuleInfo() return "0.3.0-20210428.0952 Verilog moudle"; } +typedef struct _sModuleID { + const char* name; + int type; +}ModuleID; + +static ModuleID* moduleidCreate(const char* name, int type) +{ + ModuleID* id; + id = (ModuleID *)malloc(sizeof(ModuleID)); + if (id == NULL) + return NULL; + id->name = STRDUP(name); + id->type = type; + return id; +} + +static void moduleidDestroy(ModuleID* id) +{ + if (id == NULL) + return; + if (id->name != NULL) + free(id->name); + free(id); +} + + static int verilogmoduleCreate(const PARAMITEM * pParams, int paramcount, HOBJECT * pObject) { sVerilogModule * pobj; @@ -97,6 +123,8 @@ static int verilogmoduleCreate(const PARAMITEM * pParams, int paramcount, HOBJEC VERILOGNODE_VARINIT(pobj, CLSID_VERILOG_MODULE_DECLARATION); INTERFACE_INIT(IVerilogNode, pobj, verilogmodule, verilognode); + pointerarrayInit(&pobj->data.idlist); + pobj->data.attributes = dlistCreate(); pobj->data.module_parameters = dlistCreate(); pobj->data.module_ports = dlistCreate(); @@ -135,6 +163,8 @@ static void verilogmoduleDestroy(HOBJECT object) sVerilogModule * pobj; pobj = (sVerilogModule *)objectThis(object); + pointerarrayDestroy(&pobj->data.idlist, moduleidDestroy); + objectRelease(pobj->data.attributes); objectRelease(pobj->data.module_parameters); objectRelease(pobj->data.module_ports); @@ -637,6 +667,7 @@ static int verilogmodule_verilognode_gencode(HOBJECT object, FILE * pFile, HOBJE } { /*4.always块中赋值语句的左值,如果不是端口则,生成一个ID */ + } fprintf(pFile, "END_IDLIST\n"); diff --git a/parser/verilog_parsetree.h b/parser/verilog_parsetree.h index ec1ba6f..2ce4023 100644 --- a/parser/verilog_parsetree.h +++ b/parser/verilog_parsetree.h @@ -46,6 +46,8 @@ extern "C" { #include "guid.h" +#include "pointerarray.h" + DEFINE_GUID(IID_VERILOG_ROOT, 0xa1fbe4b5, 0xbfb6, 0x41e2, 0xb2, 0xf, 0x5c, 0x14, 0xd1, 0xdf, 0x7c, 0x20); DEFINE_GUID(IID_VERILOG_NODE, 0x88ec245f, 0xff4c, 0x4d5a, 0xb3, 0xe, 0x59, 0x70, 0x85, 0x42, 0x14, 0x20); @@ -478,6 +480,7 @@ typedef struct _s_verilog_Module { IConstStringVar* cell_clsid; IConstStringVar* cell_softlibrary; + PointerArray idlist; IDListVar* attributes; IDListVar* module_parameters; -- GitLab