X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=mate.git;a=blobdiff_plain;f=Mate.hs;h=2231a5818be418b39fd6499043eb15927ab9207a;hp=ee03d8d78ad1b3dfb19f766ae813d062f000c305;hb=HEAD;hpb=e77e74e6bbc04c523f1468d21b14167b7eb910f7 diff --git a/Mate.hs b/Mate.hs index ee03d8d..2231a58 100644 --- a/Mate.hs +++ b/Mate.hs @@ -1,6 +1,4 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-} -#include "debug.h" module Main where import System.Environment @@ -10,9 +8,6 @@ import Data.List.Split import qualified Data.ByteString.Lazy as B import Control.Monad -#ifdef DEBUG -import Text.Printf -#endif import JVM.ClassFile import Java.JAR @@ -20,7 +15,10 @@ import Mate.BasicBlocks import Mate.MethodPool import Mate.Types import Mate.ClassPool -import Mate.NativeMaschine +import Mate.NativeMachine +import Mate.Debug + +import Mate.GC.Boehm main :: IO () main = do @@ -36,13 +34,13 @@ parseArgs ("-jar":jarpath:_) stdcp = do 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 () @@ -54,23 +52,23 @@ parseArgs (('-':_):_) _ = error "Usage: mate [-cp|-classpath ] [ 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 let mi = MethodInfo "main" bclspath $ methodSignature m rawmethod <- parseMethod cls "main" $ methodSignature m - entry <- compileBB rawmethod mi + entry <- compileBB mi rawmethod mi addMethodRef entry mi [bclspath] -#ifdef DEBUG - printf "executing `main' now:\n" -#endif - executeFuncPtr entry + printfInfo "executing `main' now:\n" + executeFuncPtr $ fst entry Nothing -> error "main not found"