From 0efcccbb68402feefe2aed7d0d0f091c18f97f14 Mon Sep 17 00:00:00 2001 From: "Ilya V. Portnov" Date: Fri, 30 Sep 2011 17:03:43 +0600 Subject: [PATCH] some updates. --- JVM/Generator.hs | 6 ++++-- Java/Lang.hs | 3 +++ TestGen.hs | 19 +++++++++---------- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/JVM/Generator.hs b/JVM/Generator.hs index 2ee0240..34b27ed 100644 --- a/JVM/Generator.hs +++ b/JVM/Generator.hs @@ -134,11 +134,13 @@ endMethod = do 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 { diff --git a/Java/Lang.hs b/Java/Lang.hs index bd23f16..d11f7bd 100644 --- a/Java/Lang.hs +++ b/Java/Lang.hs @@ -26,3 +26,6 @@ system = "java/lang/System" objectInit :: NameType Method objectInit = NameType "" $ MethodSignature [] ReturnsVoid +valueOfInteger :: NameType Method +valueOfInteger = NameType "valueOf" $ MethodSignature [IntType] (Returns Java.Lang.integerClass) + diff --git a/TestGen.hs b/TestGen.hs index 540a7da..a42fa05 100644 --- a/TestGen.hs +++ b/TestGen.hs @@ -15,9 +15,6 @@ import qualified Java.IO 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] "" [] ReturnsVoid $ do @@ -25,12 +22,7 @@ test = 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 @@ -41,12 +33,19 @@ test = do 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 -- 2.25.1