@@ -645,19 +645,46 @@ class ModuleInstantiation : public StructuralStatement {
645645 ~ModuleInstantiation (){};
646646};
647647
648+ class Declaration : public Node {
649+ public:
650+ std::string decl;
651+ std::variant<std::unique_ptr<Identifier>, std::unique_ptr<Index>,
652+ std::unique_ptr<Slice>, std::unique_ptr<Vector>>
653+ value;
654+
655+ Declaration (std::variant<std::unique_ptr<Identifier>, std::unique_ptr<Index>,
656+ std::unique_ptr<Slice>, std::unique_ptr<Vector>>
657+ value,
658+ std::string decl)
659+ : decl(decl), value(std::move(value)){};
660+
661+ std::string toString ();
662+ virtual ~Declaration () = default ;
663+ };
664+
648665class IfMacro : public StructuralStatement {
649666 virtual std::string getMacroString () = 0;
650667
651668 public:
652669 std::string condition_str;
653- std::vector<std::unique_ptr<StructuralStatement>> true_body;
654- std::vector<std::unique_ptr<StructuralStatement>> else_body;
670+ std::vector<std::variant<std::unique_ptr<StructuralStatement>,
671+ std::unique_ptr<Declaration>>>
672+ true_body;
673+ std::vector<std::variant<std::unique_ptr<StructuralStatement>,
674+ std::unique_ptr<Declaration>>>
675+ else_body;
655676 IfMacro (std::string condition_str,
656- std::vector<std::unique_ptr<StructuralStatement>> true_body)
677+ std::vector<std::variant<std::unique_ptr<StructuralStatement>,
678+ std::unique_ptr<Declaration>>>
679+ true_body)
657680 : condition_str(condition_str), true_body(std::move(true_body)){};
658681 IfMacro (std::string condition_str,
659- std::vector<std::unique_ptr<StructuralStatement>> true_body,
660- std::vector<std::unique_ptr<StructuralStatement>> else_body)
682+ std::vector<std::variant<std::unique_ptr<StructuralStatement>,
683+ std::unique_ptr<Declaration>>>
684+ true_body,
685+ std::vector<std::variant<std::unique_ptr<StructuralStatement>,
686+ std::unique_ptr<Declaration>>>
687+ else_body)
661688 : condition_str(condition_str),
662689 true_body (std::move(true_body)),
663690 else_body(std::move(else_body)){};
@@ -670,12 +697,18 @@ class IfDef : public IfMacro {
670697
671698 public:
672699 IfDef (std::string condition_str,
673- std::vector<std::unique_ptr<StructuralStatement>> body)
700+ std::vector<std::variant<std::unique_ptr<StructuralStatement>,
701+ std::unique_ptr<Declaration>>>
702+ body)
674703 : IfMacro(condition_str, std::move(body)){};
675704 IfDef (std::string condition_str,
676- std::vector<std::unique_ptr<StructuralStatement>> true_body,
677- std::vector<std::unique_ptr<StructuralStatement>> else_body)
678- : IfMacro(condition_str, std::move(true_body), std::move(else_body)){};
705+ std::vector<std::variant<std::unique_ptr<StructuralStatement>,
706+ std::unique_ptr<Declaration>>>
707+ true_body,
708+ std::vector<std::variant<std::unique_ptr<StructuralStatement>,
709+ std::unique_ptr<Declaration>>>
710+ else_body)
711+ : IfMacro(condition_str, std::move(true_body), std::move(else_body)){};
679712 ~IfDef (){};
680713};
681714
@@ -684,32 +717,21 @@ class IfNDef : public IfMacro {
684717
685718 public:
686719 IfNDef (std::string condition_str,
687- std::vector<std::unique_ptr<StructuralStatement>> body)
720+ std::vector<std::variant<std::unique_ptr<StructuralStatement>,
721+ std::unique_ptr<Declaration>>>
722+ body)
688723 : IfMacro(condition_str, std::move(body)){};
689724 IfNDef (std::string condition_str,
690- std::vector<std::unique_ptr<StructuralStatement>> true_body,
691- std::vector<std::unique_ptr<StructuralStatement>> else_body)
725+ std::vector<std::variant<std::unique_ptr<StructuralStatement>,
726+ std::unique_ptr<Declaration>>>
727+ true_body,
728+ std::vector<std::variant<std::unique_ptr<StructuralStatement>,
729+ std::unique_ptr<Declaration>>>
730+ else_body)
692731 : IfMacro(condition_str, std::move(true_body), std::move(else_body)){};
693732 ~IfNDef (){};
694733};
695734
696- class Declaration : public Node {
697- public:
698- std::string decl;
699- std::variant<std::unique_ptr<Identifier>, std::unique_ptr<Index>,
700- std::unique_ptr<Slice>, std::unique_ptr<Vector>>
701- value;
702-
703- Declaration (std::variant<std::unique_ptr<Identifier>, std::unique_ptr<Index>,
704- std::unique_ptr<Slice>, std::unique_ptr<Vector>>
705- value,
706- std::string decl)
707- : decl(decl), value(std::move(value)){};
708-
709- std::string toString ();
710- virtual ~Declaration () = default ;
711- };
712-
713735class Wire : public Declaration {
714736 public:
715737 Wire (std::variant<std::unique_ptr<Identifier>, std::unique_ptr<Index>,
0 commit comments