packages feed

hs-java-0.2: TestGen.hs

{-# LANGUAGE OverloadedStrings #-}

import qualified Data.ByteString.Lazy as B

import JVM.ClassFile
import JVM.Converter
import JVM.Assembler
import JVM.Builder

import qualified Java.Lang
import qualified Java.IO

test :: Generate ()
test = do
  newMethod [ACC_PUBLIC] "<init>" [] ReturnsVoid $ do
      aload_ I0
      invokeSpecial Java.Lang.object Java.Lang.objectInit
      i0 RETURN

  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
      getStaticField Java.Lang.system Java.IO.out
      loadString "Argument: %d\n"
      iconst_1
      allocArray Java.Lang.object
      dup
      iconst_0
      iload_ I0
      invokeStatic Java.Lang.integer Java.Lang.valueOfInteger
      aastore
      invokeVirtual Java.IO.printStream Java.IO.printf
      pop
      i0 RETURN

  newMethod [ACC_PUBLIC, ACC_STATIC] "main" [arrayOf Java.Lang.stringClass] ReturnsVoid $ do
      iconst_5
      invokeStatic "Test" hello
      i0 RETURN

  return ()

testClass ::  Class Resolved
testClass = generate "Test" test

main = do
  B.writeFile "Test.class" (encodeClass testClass)