Implementing object-oriented languages 2