private void toPDialect(CodeWriter writer) {
   writer.append("for ");
   writer.append(v1);
   if (v2 != null) {
     writer.append(", ");
     writer.append(v2);
   }
   writer.append(" in ");
   source.toDialect(writer);
   writer.append(":");
   writer.newLine();
   writer.indent();
   instructions.toDialect(writer);
   writer.dedent();
 }
 private void toODialect(CodeWriter writer) {
   writer.append("for each (");
   writer.append(v1);
   if (v2 != null) {
     writer.append(", ");
     writer.append(v2);
   }
   writer.append(" in ");
   source.toDialect(writer);
   writer.append(")");
   boolean oneLine = instructions.size() == 1 && (instructions.get(0) instanceof SimpleStatement);
   if (!oneLine) writer.append(" {");
   writer.newLine();
   writer.indent();
   instructions.toDialect(writer);
   writer.dedent();
   if (!oneLine) {
     writer.append("}");
     writer.newLine();
   }
 }
 @Override
 public void toDialect(CodeWriter writer) {
   writer.append(" matching ");
   expression.toDialect(writer);
 }