diff --git a/src/Convert/Scoper.hs b/src/Convert/Scoper.hs index 3769c84..81ffaaa 100644 --- a/src/Convert/Scoper.hs +++ b/src/Convert/Scoper.hs @@ -361,16 +361,13 @@ evalScoperT declMapper moduleItemMapper genItemMapper stmtMapper topName items = let genItems = map GenModuleItem injected' ++ [genItem''] return $ GenBlock "" genItems scopeGenItemMapper :: GenItem -> ScoperT a m GenItem - scopeGenItemMapper (GenFor (index, a) b c (GenBlock name genItems)) = do - enterScope name index - genItems' <- mapM fullGenItemMapper genItems - exitScope name index - return $ GenFor (index, a) b c (GenBlock name genItems') scopeGenItemMapper (GenFor (index, a) b c genItem) = do - enterScope "" index - genItem' <- fullGenItemMapper genItem - exitScope "" index + genItem' <- scopeGenItemBranchMapper index genItem return $ GenFor (index, a) b c genItem' + scopeGenItemMapper (GenIf cond thenItem elseItem) = do + thenItem' <- scopeGenItemBranchMapper "" thenItem + elseItem' <- scopeGenItemBranchMapper "" elseItem + return $ GenIf cond thenItem' elseItem' scopeGenItemMapper (GenBlock name genItems) = do enterScope name "" genItems' <- mapM fullGenItemMapper genItems @@ -381,6 +378,18 @@ evalScoperT declMapper moduleItemMapper genItemMapper stmtMapper topName items = scopeGenItemMapper genItem = traverseSinglyNestedGenItemsM fullGenItemMapper genItem + scopeGenItemBranchMapper :: Identifier -> GenItem -> ScoperT a m GenItem + scopeGenItemBranchMapper index (GenBlock name genItems) = do + enterScope name index + genItems' <- mapM fullGenItemMapper genItems + exitScope name index + return $ GenBlock name genItems' + scopeGenItemBranchMapper index genItem = do + enterScope "" index + genItem' <- fullGenItemMapper genItem + exitScope "" index + return genItem' + partScoper :: MapperM (Scoper a) Decl -> MapperM (Scoper a) ModuleItem diff --git a/test/basic/generate_if_scope.sv b/test/basic/generate_if_scope.sv new file mode 100644 index 0000000..3e9ea28 --- /dev/null +++ b/test/basic/generate_if_scope.sv @@ -0,0 +1,9 @@ +module top; + parameter WIDTH = 5; + logic [WIDTH-1:0] x, y; + if (WIDTH > 0) + initial + x = WIDTH'(0); + initial + y = WIDTH'(0); +endmodule diff --git a/test/basic/generate_if_scope.v b/test/basic/generate_if_scope.v new file mode 100644 index 0000000..2dffd9b --- /dev/null +++ b/test/basic/generate_if_scope.v @@ -0,0 +1,9 @@ +module top; + parameter WIDTH = 5; + reg [WIDTH-1:0] x, y; + if (WIDTH > 0) + initial + x = 0; + initial + y = 0; +endmodule