import Mate.ClassPool
import Mate.NativeMachine
+import Mate.GC.Boehm
+
main :: IO ()
main = do
args <- getArgs
case res of
Nothing -> error "JAR: no MainClass entry found. Try to pass the jar file via -cp instead."
Just mc -> do
- let bclspath = B.pack $ map (fromIntegral . ord) mc
+ let bclspath = B.pack . map (fromIntegral . ord) $ mc
cls <- getClassFile bclspath
executeMain bclspath cls
+
parseArgs ("-cp":cps) cpset = parseArgs ("-classpath":cps) cpset
parseArgs ("-classpath":cps:xs) False = do
- let paths = splitOn ":" cps
- mapM_ addStuff paths
+ mapM_ addStuff $ splitOn ":" cps
parseArgs xs True
where
addStuff :: String -> IO ()
-- first argument which isn't prefixed by '-' should be a class file
parseArgs (clspath:_) stdcp = do
unless stdcp $ addClassPath "./"
- let bclspath = B.pack $ map (fromIntegral . ord) clspath
+ let bclspath = B.pack . map (fromIntegral . ord) $ clspath
cls <- getClassFile bclspath
executeMain bclspath cls
parseArgs _ _ = parseArgs ["-"] False
executeMain :: B.ByteString -> Class Direct -> IO ()
-executeMain bclspath cls = do
+executeMain bclspath cls = do
+ initGC --required on some platforms. [todo bernhard: maybe this should be moved somewhere else - maybe at a global place where vm initialization takes place
let methods = classMethods cls; methods :: [Method Direct]
case find (\x -> methodName x == "main") methods of
Just m -> do