breakdownTopOfStack025ParityProbe method

Map<String, Object?> breakdownTopOfStack025ParityProbe(
  1. String source
)

Direct stack-decomposition probe for Tree-sitter 0.25.10's private ts_parser__breakdown_top_of_stack helper.

Implementation

Map<String, Object?> breakdownTopOfStack025ParityProbe(String source) {
  if (source != '{}') {
    throw ArgumentError.value(source, 'source', 'must be the empty object');
  }
  GeneratedTreeSitterNode leaf(int symbol, int start, int end) =>
      GeneratedTreeSitterNode(
        symbol: symbol,
        type: language.symbols[symbol].name,
        startByte: start,
        endByte: end,
        startPoint: TreeSitterTablePoint(0, start),
        endPoint: TreeSitterTablePoint(0, end),
        named: language.symbols[symbol].named,
        visible: language.symbols[symbol].visible,
        extra: false,
      );
  final parent = GeneratedTreeSitterNode(
    symbol: 17,
    type: language.symbols[17].name,
    startByte: 0,
    endByte: 2,
    startPoint: const TreeSitterTablePoint(0, 0),
    endPoint: const TreeSitterTablePoint(0, 2),
    named: language.symbols[17].named,
    visible: language.symbols[17].visible,
    extra: false,
    children: [leaf(1, 0, 1), leaf(3, 1, 2)],
  );
  final beforeState = language.nextState(1, parent.symbol);
  final stack = _ParseStack(
    frames: _FrameStack.of([
      _Frame(1, null, extra: false),
      _Frame(beforeState, parent, extra: false, pending: true),
    ]),
    position: parent.endByte,
    point: parent.endPoint,
    dynamicPrecedence: parent.dynamicPrecedence,
    errorCost: 0,
    recoverySteps: 0,
    recovering: false,
    zeroWidthExternalTokens: <String>{},
    scannerState: Uint8List(0),
  );
  final brokenDown = _breakdownTopOfStack(stack);
  final nodes =
      brokenDown?.frames
          .map((frame) => frame.node)
          .whereType<GeneratedTreeSitterNode>()
          .toList(growable: false) ??
      const <GeneratedTreeSitterNode>[];
  return <String, Object?>{
    'result': brokenDown != null,
    'before_state': beforeState,
    'after_state': brokenDown?.frames.last.state ?? beforeState,
    'child_count': nodes.length,
    'symbols': [
      for (var index = 0; index < 3; index++)
        index < nodes.length ? nodes[index].symbol : 0,
    ],
  };
}