| // 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'; |
| import 'util.dart'; |
| |
| /// The interface for the tables in a module. |
| class TablesBuilder with Builder<ir.Tables> { |
| final ir.Module _module; |
| final _definedTables = <ir.DefinedTable>[]; |
| final _importedTables = <ir.ImportedTable>[]; |
| |
| TablesBuilder(this._module); |
| |
| List<ir.DefinedTable> get defined => _definedTables; |
| |
| /// Defines a new table in this module. |
| ir.DefinedTable define(ir.RefType type, int minSize, [int? maxSize]) { |
| final table = ir.DefinedTable( |
| _module, |
| ir.FinalizableIndex(), |
| type, |
| minSize, |
| maxSize, |
| ); |
| _definedTables.add(table); |
| return table; |
| } |
| |
| /// Imports a table into this module. |
| ir.ImportedTable import( |
| String module, |
| String name, |
| ir.RefType type, |
| int minSize, [ |
| int? maxSize, |
| ]) { |
| final table = ir.ImportedTable( |
| _module, |
| module, |
| name, |
| ir.FinalizableIndex(), |
| type, |
| minSize, |
| maxSize, |
| ); |
| _importedTables.add(table); |
| return table; |
| } |
| |
| @override |
| ir.Tables forceBuild() { |
| finalizeImportsAndDefinitions(_importedTables, _definedTables); |
| return ir.Tables(_importedTables, _definedTables); |
| } |
| } |