Rearrange modules.
[hs-java.git] / TestGen.hs
1 {-# LANGUAGE OverloadedStrings #-}
2
3 import qualified Data.ByteString.Lazy as B
4
5 import JVM.ClassFile
6 import JVM.Converter
7 import JVM.Assembler
8 import JVM.Builder
9
10 import qualified Java.Lang
11 import qualified Java.IO
12
13 hello :: NameType Method
14 hello = NameType "hello" $ MethodSignature [IntType] ReturnsVoid
15
16 test :: Generate ()
17 test = do
18   newMethod [ACC_PUBLIC] "<init>" [] ReturnsVoid $ do
19       aload_ I0
20       invokeSpecial Java.Lang.object Java.Lang.objectInit
21       i0 RETURN
22
23   hello <- newMethod [ACC_PUBLIC, ACC_STATIC] "hello" [IntType] ReturnsVoid $ do
24       getStaticField Java.Lang.system Java.IO.out
25       loadString "Здравствуй, мир!"
26       invokeVirtual Java.IO.printStream Java.IO.println
27       getStaticField Java.Lang.system Java.IO.out
28       loadString "Argument: %d\n"
29       iconst_1
30       allocArray Java.Lang.object
31       dup
32       iconst_0
33       iload_ I0
34       invokeStatic Java.Lang.integer Java.Lang.valueOfInteger
35       aastore
36       invokeVirtual Java.IO.printStream Java.IO.printf
37       pop
38       i0 RETURN
39
40   newMethod [ACC_PUBLIC, ACC_STATIC] "main" [Array Nothing Java.Lang.stringClass] ReturnsVoid $ do
41       iconst_5
42       invokeStatic "Test" hello
43       i0 RETURN
44
45   return ()
46
47 testClass = generate "Test" test
48
49 main = do
50   B.writeFile "Test.class" (encodeClass testClass)
51