1 {-# LANGUAGE OverloadedStrings #-}
3 import qualified Data.ByteString.Lazy as B
10 import JVM.Generator.Instructions
12 import qualified Java.Lang
13 import qualified Java.IO
15 hello :: NameType Method
16 hello = NameType "hello" $ MethodSignature [IntType] ReturnsVoid
18 valueOf :: NameType Method
19 valueOf = NameType "valueOf" $ MethodSignature [IntType] (Returns Java.Lang.integerClass)
23 newMethod [ACC_PUBLIC] "<init>" [] ReturnsVoid $ do
25 invokeSpecial Java.Lang.object Java.Lang.objectInit
28 newMethod [ACC_PUBLIC, ACC_STATIC] "main" [Array Nothing Java.Lang.stringClass] ReturnsVoid $ do
30 invokeStatic "Test" hello
33 newMethod [ACC_PUBLIC, ACC_STATIC] "hello" [IntType] ReturnsVoid $ do
34 getStaticField Java.Lang.system Java.IO.out
35 loadString "Здравствуй, мир!"
36 invokeVirtual Java.IO.printStream Java.IO.println
37 getStaticField Java.Lang.system Java.IO.out
38 loadString "Argument: %d\n"
40 allocArray Java.Lang.object
44 invokeStatic Java.Lang.integer valueOf
46 invokeVirtual Java.IO.printStream Java.IO.printf
50 testClass = generate "Test" test
53 B.writeFile "Test.class" (encodeClass testClass)