Polymorphic bytecode: Compositional compilation for Java-like languages