Allow setting stack size and locals number for each method.
[hs-java.git] / TestGen.hs
index a42fa052c64ee8e058ad68b17c4707dc13eb3315..886751ddc2eb81e9b9a3fb263409aa1508829113 100644 (file)
@@ -2,27 +2,26 @@
 
 import qualified Data.ByteString.Lazy as B
 
-import JVM.Types
 import JVM.ClassFile
 import JVM.Converter
 import JVM.Assembler
-import JVM.Generator
-import JVM.Generator.Instructions
+import JVM.Builder
 
 import qualified Java.Lang
 import qualified Java.IO
 
-hello :: NameType Method
-hello = NameType "hello" $ MethodSignature [IntType] ReturnsVoid
-
 test :: Generate ()
 test = do
   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
@@ -39,13 +38,16 @@ test = do
       pop
       i0 RETURN
 
-  newMethod [ACC_PUBLIC, ACC_STATIC] "main" [Array Nothing Java.Lang.stringClass] ReturnsVoid $ do
+  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