parseFunction static method

SolFunction parseFunction(
  1. String sig
)

Parse a human-readable signature like "function transfer(address to, uint256 amount) returns (bool)".

Implementation

static SolFunction parseFunction(String sig) {
  final trimmed = sig.trim();
  final withoutPrefix = trimmed.startsWith('function ')
      ? trimmed.substring(9).trim()
      : trimmed;

  final parenStart = withoutPrefix.indexOf('(');
  final name = withoutPrefix.substring(0, parenStart).trim();

  final inputEnd = _findMatchingParen(withoutPrefix, parenStart);
  final inputStr = withoutPrefix.substring(parenStart + 1, inputEnd);

  var outputStr = '';
  final returnsIdx = withoutPrefix.indexOf('returns', inputEnd);
  if (returnsIdx >= 0) {
    final outStart = withoutPrefix.indexOf('(', returnsIdx);
    final outEnd = _findMatchingParen(withoutPrefix, outStart);
    outputStr = withoutPrefix.substring(outStart + 1, outEnd);
  }

  final (inputTypes, inputNames) = _parseParams(inputStr);
  final (outputTypes, outputNames) = _parseParams(outputStr);

  return SolFunction(
    name: name,
    inputs: inputTypes,
    inputNames: inputNames,
    outputs: outputTypes,
    outputNames: outputNames,
  );
}