/**
  * Updates the <code>node</code> to which <b>(OBJECT)</b> was applied previously.
  *
  * @param pContext The big step proof context.
  * @param pNode The node to update according to <b>(OBJECT)</b>.
  */
 public void updateObject(BigStepProofContext pContext, BigStepProofNode pNode) {
   if ((pNode.getChildCount() == 1) && (pNode.getChildAt(0).isProven())) {
     ObjectExpr oldObjectExpr = (ObjectExpr) pNode.getExpression();
     Row row = (Row) pNode.getChildAt(0).getResult().getValue();
     pContext.setProofNodeResult(
         pNode, new ObjectExpr(oldObjectExpr.getId(), oldObjectExpr.getTau(), row));
   }
 }
 /**
  * Applies the <b>(OBJECT)</b> rule to the <code>pNode</code> using the <code>pContext</code>.
  *
  * @param pContext The big step proof pContext.
  * @param pNode The node to apply the <b>(OBJECT)</b> rule to.
  */
 public void applyObject(BigStepProofContext pContext, BigStepProofNode pNode) {
   ObjectExpr objectExpr = (ObjectExpr) pNode.getExpression();
   Row row = objectExpr.getRow();
   if (row.isValue()) {
     throw new IllegalArgumentException("Can not apply OBJECT"); // $NON-NLS-1$
   }
   pContext.addProofNode(pNode, row);
 }
 /**
  * Updates the <code>node</code> to which <b>(SEND)</b> was applied previously.
  *
  * @param pContext The big step proof context.
  * @param pNode The node to update according to <b>(SEND)</b>.
  */
 public void updateSend(BigStepProofContext pContext, BigStepProofNode pNode) {
   if ((pNode.getChildCount() == 1) && (pNode.getChildAt(0).isProven())) {
     Send send = (Send) pNode.getExpression();
     ObjectExpr objectExpr = (ObjectExpr) pNode.getChildAt(0).getResult().getValue();
     Row row = objectExpr.getRow();
     Expression newRow;
     newRow = row.substitute(objectExpr.getId(), objectExpr);
     pContext.addProofNode(pNode, new Send(newRow, send.getId()));
   } else if ((pNode.getChildCount() == 2)
       && (pNode.getChildAt(0).isProven())
       && (pNode.getChildAt(1).isProven())) {
     pContext.setProofNodeResult(pNode, pNode.getChildAt(1).getResult());
   }
 }
 /**
  * Applies the <b>(OBJECT)</b> rule to the
  * <code>node</node> using the <code>context</code>.
  *
  * @param context the minimal typing proof context.
  * @param pNode the minimal typing proof node.
  */
 public void applyObject(MinimalTypingProofContext context, MinimalTypingProofNode pNode) {
   MinimalTypingExpressionProofNode node = (MinimalTypingExpressionProofNode) pNode;
   ObjectExpr object = (ObjectExpr) node.getExpression();
   MonoType tau = object.getTau();
   // check if user entered type for self
   if (tau == null) {
     throw new RuntimeException(
         MessageFormat.format(
             Messages.getString("MinimalTypingException.2"), "self")); // $NON-NLS-1$ //$NON-NLS-2$
   }
   // if type is a rec type, unfold to get a object type
   if (tau instanceof RecType) {
     RecType rec = (RecType) tau;
     tau = rec.getTau().substitute(rec.getTypeName(), rec);
   }
   TypeEnvironment environment = node.getEnvironment();
   environment = environment.star();
   // generate new child node
   context.addProofNode(node, environment.extend(object.getId(), tau), object.getRow());
 }