debug: use #ifdef guards
[mate.git] / Mate.hs
diff --git a/Mate.hs b/Mate.hs
index fcd8ffca3d745fdc6bf67ac610ea711279133803..5e6df74f9c77f6925d62ded17039f13676af621b 100644 (file)
--- a/Mate.hs
+++ b/Mate.hs
@@ -1,7 +1,51 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE OverloadedStrings #-}
 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.Dump
+#endif
+import JVM.ClassFile
+
+import Mate.BasicBlocks
 import Mate.X86CodeGen
+import Mate.MethodPool
+import Mate.Types
+import Mate.ClassPool
 
 main ::  IO ()
-main = test_01
+main = do
+  args <- getArgs
+  register_signal
+  initMethodPool
+  case args of
+    [clspath] -> do
+      let bclspath = B.pack $ map (fromIntegral . ord) clspath
+      cls <- getClassFile bclspath
+#ifdef DEBUG
+      dumpClass cls
+#endif
+      hmap <- parseMethod cls "main"
+      case hmap of
+        Just hmap' -> do
+          let methods = classMethods cls; methods :: [Method Resolved]
+          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>"