virtual void visit(AstIfaceRefDType* nodep, AstNUser*) { // Cell: Resolve its filename. If necessary, parse it. UINFO(4,"Link IfaceRef: "<<nodep<<endl); // Use findIdUpward instead of findIdFlat; it doesn't matter for now // but we might support modules-under-modules someday. AstNodeModule* modp = resolveModule(nodep, nodep->ifaceName()); if (modp) { if (modp->castIface()) { // Track module depths, so can sort list from parent down to children new V3GraphEdge(&m_graph, vertex(m_modp), vertex(modp), 1, false); if (!nodep->cellp()) nodep->ifacep(modp->castIface()); } else if (modp->castNotFoundModule()) { // Will error out later } else { nodep->v3error("Non-interface used as an interface: "<<nodep->prettyName()); } } // Note cannot do modport resolution here; modports are allowed underneath generates }