MCPcopy Create free account
hub / github.com/Nic30/hdlConvertor / visitModule_declaration

Method visitModule_declaration

src/svConvertor/moduleParser.cpp:52–155  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

50 }
51}
52void VerModuleParser::visitModule_declaration(
53 sv2017Parser::Module_declarationContext *ctx,
54 vector<unique_ptr<iHdlObj>> &res) {
55 // module_declaration:
56 // KW_EXTERN module_header_common ( list_of_port_declarations )? SEMI
57 // | module_header_common (list_of_port_declarations | (LPAREN DOT MUL RPAREN) )? SEMI
58 // ( timeunits_declaration )? ( module_item )*
59 // KW_ENDMODULE ( COLON identifier | {_input->LA(1) != COLON}? )
60 // ;
61 auto mhc = ctx->module_header_common();
62 auto ent = create_object<HdlModuleDec>(ctx);
63
64 ModuleCtx m_ctx(*ent);
65 visitModule_header_common(mhc, *ent);
66
67 auto lpd = ctx->list_of_port_declarations();
68 if (lpd) {
69 VerPortParser pp(this, m_ctx.non_ANSI_port_groups);
70 auto ps = pp.visitList_of_port_declarations(lpd);
71 for (auto &p : *ps) {
72 ent->ports.push_back(move(p));
73 }
74 } else {
75 if (ctx->MUL()) {
76 auto p = create_object<HdlIdDef>(ctx, ".*", HdlValueSymbol::all(),
77 nullptr);
78 ent->ports.push_back(move(p));
79 }
80 }
81 if (ctx->KW_EXTERN()) {
82 for (auto &o : m_ctx.ent.generics) {
83 if (!o->type) {
84 o->type = HdlValueSymbol::type_auto();
85 }
86 }
87 for (auto &o : m_ctx.ent.ports) {
88 if (!o->type) {
89 o->type = HdlValueSymbol::type_auto();
90 }
91 }
92 res.push_back(move(ent));
93 return;
94 }
95
96 auto arch = create_object<HdlModuleDef>(ctx);
97 m_ctx.arch = arch.get();
98 auto tid = ctx->timeunits_declaration();
99 if (tid) {
100 NotImplementedLogger::print(
101 "ModuleParser.visitModule_declaration.timeunits_declaration",
102 tid);
103 }
104 for (auto mi : ctx->module_item())
105 visitModule_item(mi, arch->objs, m_ctx);
106
107 arch->module_name = make_unique<HdlValueId>(m_ctx.ent.name);
108 arch->dec = move(ent);
109

Callers 2

visitModule_itemMethod · 0.80
visitDescriptionMethod · 0.80

Calls 3

getPortByNameMethod · 0.80

Tested by

no test coverage detected