-- |A simplified embedded version of original BASIC.
-- Some things work, some things just give utterly mysterious type errors.
--
-- Beware, this is just a fun weekend hack.
module Language.BASIC(module Language.BASIC.Parser, module Language.BASIC.Types, runBASIC, runBASIC') where
import System.TimeIt

import Language.BASIC.Parser hiding (Expr)
import Language.BASIC.Types(Expr(I, S, X, Y, Z, RND, INT, SGN))
import Language.BASIC.Interp
import Language.BASIC.Translate

-- |Run a BASIC program with an interpreter.
runBASIC :: BASIC -> IO ()
runBASIC x = do
    let cmds = getBASIC x
--    putStrLn $ unlines $ map show cmds
    timeIt $ executeBASIC cmds

-- |Run a BASIC program with a compiler.
runBASIC' :: BASIC -> IO ()
runBASIC' x = do
    let cmds = getBASIC x
--    putStrLn $ unlines $ map show cmds
--    executeBASIC cmds
    func <- translateBASIC cmds
    timeIt func