writeMethodSpec method

MethodSpecIndex writeMethodSpec({
  1. required MethodDefOrRef method,
  2. required List<MetadataType> generics,
})

Writes a MethodSpec row, returning the corresponding index.

Implementation

MethodSpecIndex writeMethodSpec({
  required MethodDefOrRef method,
  required List<MetadataType> generics,
}) {
  assert(
    generics.isNotEmpty,
    'MethodSpec requires at least one generic argument.',
  );

  final buffer = BytesBuilder(copy: false)
    ..addByte(CallingConvention.GENERICINST)
    ..add(CompressedInteger.encode(generics.length));
  for (final genericType in generics) {
    _encodeType(genericType, buffer);
  }

  final table = _tableStream[MetadataTableId.methodSpec];
  final index = MethodSpecIndex(table.length);
  table.add(
    MethodSpec(
      method: method,
      instantiation: _blobHeap.insert(buffer.takeBytes()),
    ),
  );
  return index;
}