private boolean handleBlock(final Block block, final boolean sortStats) {
    // FIXME: revisit this!
    if (block.isSynthetic()) {
      final int statCount = block.getStatementCount();
      switch (statCount) {
        case 0:
          {
            final EmptyNode emptyNode = new EmptyNode(-1, block.getToken(), block.getFinish());
            curStat = new EmptyStatementTreeImpl(emptyNode);
            return false;
          }
        case 1:
          {
            curStat = translateStat(block.getStatements().get(0));
            return false;
          }
        default:
          {
            // fall through
            break;
          }
      }
    }

    final List<? extends Statement> stats = block.getStatements();
    curStat =
        new BlockTreeImpl(block, translateStats(sortStats ? getOrderedStatements(stats) : stats));
    return false;
  }
Пример #2
0
  /**
   * Create a new split node from statements contained in a parent block.
   *
   * @param parent Parent block.
   * @param statements Statements to include.
   * @return New split node.
   */
  private SplitNode createBlockSplitNode(
      final Block parent,
      final FunctionNode function,
      final List<Statement> statements,
      final long weight) {
    final long token = parent.getToken();
    final int finish = parent.getFinish();
    final String name = function.uniqueName(SPLIT_PREFIX.symbolName());

    final Block newBlock = new Block(token, finish, statements);

    return new SplitNode(name, newBlock, compiler.findUnit(weight + WeighNodes.FUNCTION_WEIGHT));
  }