packages feed

Jikka-5.0.11.1: src/Jikka/RestrictedPython/Convert/RemoveUnreachable.hs

-- |
-- Module      : Jikka.RestrictedPython.Convert.RemoveUnreachable
-- Description : removes unreachable statements. / 到達不能な文を削除します。
-- Copyright   : (c) Kimiyuki Onaka, 2021
-- License     : Apache License 2.0
-- Maintainer  : kimiyuki95@gmail.com
-- Stability   : experimental
-- Portability : portable
module Jikka.RestrictedPython.Convert.RemoveUnreachable
  ( run,
  )
where

import Jikka.RestrictedPython.Language.Expr
import Jikka.RestrictedPython.Language.Util

runStatements :: [Statement] -> [Statement]
runStatements stmts = case break doesAlwaysReturn stmts of
  (stmts, []) -> stmts
  (stmts, stmt : _) -> stmts ++ [stmt]

-- | `run` removes unreachable statements after return-statements.
--
-- For example, the following
--
-- > a = 0
-- > if True:
-- >     b = 0
-- >     return b
-- >     b += 1
-- > else:
-- >     return 1
-- > a += 1
--
-- is converted to
--
-- > a = 0
-- > if True:
-- >     b = 0
-- >     return b
-- > else:
-- >     return 1
run :: Program -> Program
run = mapStatements runStatements