| // 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 with Builder<ir.DefinedFunction> { |
| final ModuleBuilder moduleBuilder; |
| final ir.DefinedFunction function; |
| |
| /// All local variables defined in the function, including its inputs. |
| List<ir.Local> get locals => body.locals; |
| |
| /// The body of the function. |
| InstructionsBuilder? _body; |
| |
| FunctionBuilder(this.moduleBuilder, this.function) { |
| _body = InstructionsBuilder( |
| moduleBuilder, |
| function.type.inputs, |
| function.type.outputs, |
| ); |
| } |
| |
| ir.FunctionType get type => function.type; |
| ir.FinalizableIndex get finalizableIndex => function.finalizableIndex; |
| ir.Module get enclosingModule => function.enclosingModule; |
| String? get functionName => function.functionName; |
| String get name => function.name; |
| |
| bool get isPure => function.isPure; |
| set isPure(bool value) => function.isPure = value; |
| |
| bool get isJSCalled => function.isJSCalled; |
| set isJSCalled(bool value) => function.isJSCalled = value; |
| |
| int? get inlineHint => function.inlineHint; |
| set inlineHint(int? value) => function.inlineHint = value; |
| |
| InstructionsBuilder get body => _body!; |
| |
| @override |
| ir.DefinedFunction forceBuild() { |
| function.body = body.build(); |
| _body = null; |
| return function; |
| } |
| |
| @override |
| String toString() => function.toString(); |
| } |