+ emit' :: J.Instruction -> CodeGen e s (Maybe (Word32, MethodInfo))
+ emit' (INVOKESTATIC cpidx) = do
+ ep <- getEntryPoint
+ let w32_ep = (fromIntegral $ ptrToIntPtr ep) :: Word32
+ let l = buildMethodID cls cpidx
+ calladdr <- getCodeOffset
+ let w32_calladdr = w32_ep + (fromIntegral calladdr) :: Word32
+ newNamedLabel (toString l) >>= defineLabel
+ -- TODO(bernhard): better try SIGILL instead of SIGSEGV?
+ mov (Addr 0) eax
+ -- discard arguments (TODO(bernhard): don't hardcode it)
+ add esp (4 :: Word32)
+ -- push result on stack (TODO(bernhard): if any)
+ push eax
+ return $ Just $ (w32_calladdr, (l, cls, cpidx))
+ emit' insn = emit insn >> return Nothing
+