currentMethod = Nothing,
doneMethods = doneMethods st ++ [method']}
-newMethod :: [AccessFlag] -> B.ByteString -> [ArgumentSignature] -> ReturnSignature -> Generate () -> Generate ()
+newMethod :: [AccessFlag] -> B.ByteString -> [ArgumentSignature] -> ReturnSignature -> Generate () -> Generate (NameType Method)
newMethod flags name args ret gen = do
- startMethod flags name (MethodSignature args ret)
+ let sig = MethodSignature args ret
+ startMethod flags name sig
gen
endMethod
+ return (NameType name sig)
genCode :: GState -> Code
genCode st = Code {
objectInit :: NameType Method
objectInit = NameType "<init>" $ MethodSignature [] ReturnsVoid
+valueOfInteger :: NameType Method
+valueOfInteger = NameType "valueOf" $ MethodSignature [IntType] (Returns Java.Lang.integerClass)
+
hello :: NameType Method
hello = NameType "hello" $ MethodSignature [IntType] ReturnsVoid
-valueOf :: NameType Method
-valueOf = NameType "valueOf" $ MethodSignature [IntType] (Returns Java.Lang.integerClass)
-
test :: Generate ()
test = do
newMethod [ACC_PUBLIC] "<init>" [] ReturnsVoid $ do
invokeSpecial Java.Lang.object Java.Lang.objectInit
i0 RETURN
- newMethod [ACC_PUBLIC, ACC_STATIC] "main" [Array Nothing Java.Lang.stringClass] ReturnsVoid $ do
- iconst_5
- invokeStatic "Test" hello
- i0 RETURN
-
- newMethod [ACC_PUBLIC, ACC_STATIC] "hello" [IntType] ReturnsVoid $ do
+ hello <- newMethod [ACC_PUBLIC, ACC_STATIC] "hello" [IntType] ReturnsVoid $ do
getStaticField Java.Lang.system Java.IO.out
loadString "Здравствуй, мир!"
invokeVirtual Java.IO.printStream Java.IO.println
dup
iconst_0
iload_ I0
- invokeStatic Java.Lang.integer valueOf
+ invokeStatic Java.Lang.integer Java.Lang.valueOfInteger
aastore
invokeVirtual Java.IO.printStream Java.IO.printf
pop
i0 RETURN
+ newMethod [ACC_PUBLIC, ACC_STATIC] "main" [Array Nothing Java.Lang.stringClass] ReturnsVoid $ do
+ iconst_5
+ invokeStatic "Test" hello
+ i0 RETURN
+
+ return ()
+
testClass = generate "Test" test
main = do