X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=Mate.hs;h=eb3c8733bab63d9261cc54f6247888e244220fbc;hb=db7df0e27df2007718446df7b369801d46abd26b;hp=a4e2a97c258b0e8d687db652da39b49fd6b5a9f1;hpb=496288a6ff9de79049f177ed8ab5fc1c77e8bac3;p=mate.git diff --git a/Mate.hs b/Mate.hs index a4e2a97..eb3c873 100644 --- a/Mate.hs +++ b/Mate.hs @@ -8,6 +8,7 @@ import Data.Char import Data.List import Data.List.Split import qualified Data.ByteString.Lazy as B +import Control.Monad #ifdef DEBUG import Text.Printf @@ -29,7 +30,7 @@ main = do parseArgs :: [String] -> Bool -> IO () parseArgs ("-jar":jarpath:_) stdcp = do - if not stdcp then addClassPath "./" else return () + unless stdcp $ addClassPath "./" addClassPathJAR jarpath res <- readMainClass jarpath case res of @@ -52,7 +53,7 @@ parseArgs ("-classpath":xs) _ = parseArgs ("-":xs) True -- usage parseArgs (('-':_):_) _ = error "Usage: mate [-cp|-classpath ] [ | -jar ]" -- first argument which isn't prefixed by '-' should be a class file parseArgs (clspath:_) stdcp = do - if not stdcp then addClassPath "./" else return () + unless stdcp $ addClassPath "./" let bclspath = B.pack $ map (fromIntegral . ord) clspath cls <- getClassFile bclspath executeMain bclspath cls @@ -61,14 +62,13 @@ parseArgs _ _ = parseArgs ["-"] False executeMain :: B.ByteString -> Class Direct -> IO () executeMain bclspath cls = do - hmap <- parseMethod cls "main" - case hmap of - Just hmap' -> do - let methods = classMethods cls; methods :: [Method Direct] - let method = find (\x -> methodName x == "main") methods - case method of - Just m -> do - let mi = MethodInfo "main" bclspath $ methodSignature m + let methods = classMethods cls; methods :: [Method Direct] + case find (\x -> methodName x == "main") methods of + Just m -> do + let mi = MethodInfo "main" bclspath $ methodSignature m + hmap <- parseMethod cls "main" $ methodSignature m + case hmap of + Just hmap' -> do entry <- compileBB hmap' mi addMethodRef entry mi [bclspath] #ifdef DEBUG