hs-java: upgrade to 0.3.1
[mate.git] / Mate.hs
diff --git a/Mate.hs b/Mate.hs
index b787c260d3a432a72bb9de885e8f5f6b59a5a673..911c1dbd1c1ef1b892a511c65835f3e3c73537e9 100644 (file)
--- a/Mate.hs
+++ b/Mate.hs
@@ -1,32 +1,46 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE OverloadedStrings #-}
+#include "debug.h"
 module Main where
 
 import System.Environment
+import Data.Char
+import Data.List
+import qualified Data.ByteString.Lazy as B
 
+#ifdef DEBUG
 import Text.Printf
-
-import JVM.Converter
-import JVM.Dump
+#endif
+import JVM.ClassFile
 
 import Mate.BasicBlocks
-import Mate.X86CodeGen
 import Mate.MethodPool
+import Mate.Types
+import Mate.ClassPool
+import Mate.X86TrapHandling
 
 main ::  IO ()
 main = do
   args <- getArgs
   register_signal
-  initMethodPool
   case args of
     [clspath] -> do
-      cls <- parseClassFile clspath
-      dumpClass cls
+      let bclspath = B.pack $ map (fromIntegral . ord) clspath
+      cls <- getClassFile bclspath
       hmap <- parseMethod cls "main"
-      printMapBB hmap
       case hmap of
         Just hmap' -> do
-          entry <- compileBB hmap' cls "main"
-          printf "executing `main' now:\n"
-          executeFuncPtr entry
+          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
+              entry <- compileBB hmap' mi
+              addMethodRef entry mi [bclspath]
+#ifdef DEBUG
+              printf "executing `main' now:\n"
+#endif
+              executeFuncPtr entry
+            Nothing -> error "main not found"
         Nothing -> error "main not found"
     _ -> error "Usage: mate <class-file>"