Support for loading field/method signatures in Generate monad.
[hs-java.git] / TestGen.hs
index 175e10b1b79a1f8a153baf35058f78d8027edf45..0e5ff90184b7f05fea5e31c167707559e8f24554 100644 (file)
@@ -6,18 +6,28 @@ import JVM.ClassFile
 import JVM.Converter
 import JVM.Assembler
 import JVM.Builder
+import Java.ClassPath
 
 import qualified Java.Lang
 import qualified Java.IO
 
 test :: Generate ()
 test = do
+  withClassPath $ do
+      addDirectory "."
+
+  helloJava <- getClassMethod "./Hello" "hello"
+
   newMethod [ACC_PUBLIC] "<init>" [] ReturnsVoid $ do
+      setStackSize 1
+
       aload_ I0
       invokeSpecial Java.Lang.object Java.Lang.objectInit
       i0 RETURN
 
   hello <- newMethod [ACC_PUBLIC, ACC_STATIC] "hello" [IntType] ReturnsVoid $ do
+      setStackSize 8
+
       getStaticField Java.Lang.system Java.IO.out
       loadString "Здравствуй, мир!"
       invokeVirtual Java.IO.printStream Java.IO.println
@@ -31,19 +41,20 @@ test = do
       invokeStatic Java.Lang.integer Java.Lang.valueOfInteger
       aastore
       invokeVirtual Java.IO.printStream Java.IO.printf
+      invokeStatic "Hello" helloJava
       pop
       i0 RETURN
 
   newMethod [ACC_PUBLIC, ACC_STATIC] "main" [arrayOf Java.Lang.stringClass] ReturnsVoid $ do
+      setStackSize 1
+
       iconst_5
       invokeStatic "Test" hello
       i0 RETURN
 
   return ()
 
-testClass ::  Class Resolved
-testClass = generate "Test" test
-
 main = do
+  testClass <- generate [] "Test" test
   B.writeFile "Test.class" (encodeClass testClass)