public AbstractDatum inner_step(ExpressionNode nd, VMState vms) { // Find the object Object xd = vms.top().at(nd.child_exp(0)); Assert.check(xd instanceof AbstractPointerDatum); AbstractPointerDatum xpd = (AbstractPointerDatum) xd; AbstractDatum rd = (AbstractDatum) xpd.deref(); Assert.check(rd instanceof AbstractObjectDatum); AbstractObjectDatum object = (AbstractObjectDatum) rd; // Find the field AbstractDatum field = object.getFieldByName(((OpMember) nd).path, ((OpMember) nd).member); // New datum on scratch Clc_ASTUtilities util = (Clc_ASTUtilities) vms.getProperty("ASTUtilities"); AbstractRefDatum d = (AbstractRefDatum) util.scratchDatum(nd.get_type(), vms); // Give it a value d.putValue(field); String name = xpd.getValueString() + ((OpMember) nd).operator_image + ((OpMember) nd).member_name; d.putValueString(name); return d; }