/***** * virtualfieldaccess.cc * Andy Hammerlindl 2009/07/23 * * Implements the access subclass used to read and write virtual fields. *****/ #include "virtualfieldaccess.h" #include "coder.h" namespace trans { void virtualFieldAccess::encode(action act, position pos, coder &e) { switch(act) { case CALL: if (caller) { caller->encode(CALL, pos, e); } else { this->encode(READ, pos, e); e.encode(inst::popcall); } return; case READ: assert(getter); getter->encode(CALL, pos, e); return; case WRITE: if (setter) setter->encode(CALL, pos, e); else { em.error(pos); em << "virtual field is read-only"; } return; } } void virtualFieldAccess::encode(action act, position pos, coder &e, frame *) { e.encode(inst::pop); encode(act, pos, e); } } // namespace trans