diff --git a/src/Convert/Jump.hs b/src/Convert/Jump.hs index cf83ee3..c8666b1 100644 --- a/src/Convert/Jump.hs +++ b/src/Convert/Jump.hs @@ -117,9 +117,10 @@ convertStmts stmts = do return stmts' -pattern SimpleLoopInits :: Type -> Identifier -> Expr +pattern SimpleLoopInits :: String -> Type -> Identifier -> Expr -> Either [Decl] [(LHS, Expr)] -pattern SimpleLoopInits typ var expr = Left [Variable Local typ var [] expr] +pattern SimpleLoopInits msg typ var expr = + Left [CommentDecl msg, Variable Local typ var [] expr] pattern SimpleLoopGuard :: BinOp -> Identifier -> Expr -> Expr pattern SimpleLoopGuard cmp var bound = BinOp cmp (Ident var) bound @@ -177,7 +178,7 @@ convertStmt (Case unique kw expr cases) = do return $ Case unique kw expr cases' convertStmt (For - (inits @ (SimpleLoopInits _ var1 _)) + (inits @ (SimpleLoopInits _ _ var1 _)) (comp @ (SimpleLoopGuard _ var2 _)) (incr @ (SimpleLoopIncrs var3 _ _)) stmt) = diff --git a/test/basic/simple_loop_jump.sv b/test/basic/simple_loop_jump.sv new file mode 100644 index 0000000..87cfd1d --- /dev/null +++ b/test/basic/simple_loop_jump.sv @@ -0,0 +1,15 @@ +module top; + function automatic integer f; + input integer inp; + f = 1; + for (integer idx = 0; idx < inp; idx = idx + 1) begin + if (f == 32) + break; + f = f * 2; + end + endfunction + integer i; + initial + for (i = 0; i < 10; i = i + 1) + $display("f(%0d) = %0d", i, f(i)); +endmodule diff --git a/test/basic/simple_loop_jump.v b/test/basic/simple_loop_jump.v new file mode 100644 index 0000000..e1d90e2 --- /dev/null +++ b/test/basic/simple_loop_jump.v @@ -0,0 +1,13 @@ +module top; + function automatic integer f; + input integer inp; + if (inp > 5) + f = 32; + else + f = 2 ** inp; + endfunction + integer i; + initial + for (i = 0; i < 10; i = i + 1) + $display("f(%0d) = %0d", i, f(i)); +endmodule