blob: c745026781764ec991f2c357b8ba10f48b15a67f [file] [log] [blame]
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import '../ir/ir.dart' as ir;
import 'builder.dart';
/// A function defined in a module.
class FunctionBuilder extends ir.BaseFunction
with IndexableBuilder<ir.DefinedFunction> {
/// All local variables defined in the function, including its inputs.
List<ir.Local> get locals => body.locals;
/// The body of the function.
late final InstructionsBuilder body;
FunctionBuilder(super.enclosingModule, super.index, super.type,
[super.functionName]) {
body = InstructionsBuilder(enclosingModule, type.inputs, type.outputs);
}
@override
ir.DefinedFunction forceBuild() => ir.DefinedFunction(
enclosingModule, body.build(), finalizableIndex, type, functionName);
@override
String toString() => functionName ?? "#$finalizableIndex";
}