public void start() {
    for (int i = 0; i < defs.length; i++) {
      OpDefNode def = defs[i];
      if (def.getSource() != def && !BBuiltInOPs.contains(def.getSource().getName())) {
        // instance
        String defName = def.getName().toString();

        if (def.getBody() instanceof SubstInNode) {
          String prefix = defName.substring(0, defName.lastIndexOf('!') + 1);
          def.setParams(generateNewParams(def.getParams()));
          ExprNode body;
          try {
            body = generateNewExprNode(def.getBody(), prefix);
          } catch (AbortException e) {
            throw new RuntimeException();
          }
          def.setBody(body);
        }
      }
    }
  }