blob: 34395abcea864c78a4502bf436f246901357fa11 [file] [edit]
// Copyright (c) 2026, 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 'package:wasm_builder/wasm_builder.dart' as w;
const w.ValueType _jsString = w.RefType.extern(nullable: false);
const w.ValueType _funcRef = w.RefType.func(nullable: false);
const w.ValueType _eqRef = w.RefType.eq(nullable: false);
/// The Wasm dev runtime (`pkg/wasm_dev_rt`) API for [module].
class DevRuntime {
final w.ModuleBuilder module;
late final w.BaseFunction print = _import('print', [_jsString]);
late final w.BaseFunction staticId = _import(
'staticId',
[_jsString],
[w.NumType.i32],
);
late final w.BaseFunction defineStatic = _import('defineStatic', [
w.NumType.i32,
_funcRef,
]);
late final w.BaseFunction lookupStatic = _import(
'lookupStatic',
[w.NumType.i32],
[_funcRef],
);
late final w.BaseFunction classId = _import(
'classId',
[_jsString],
[w.NumType.i32],
);
late final w.BaseFunction defineClassSupers = _import('defineClassSupers', [
w.NumType.i32,
w.NumType.i32,
]);
late final w.BaseFunction instanceMemberId = _import(
'instanceMemberId',
[_jsString],
[w.NumType.i32],
);
late final w.BaseFunction shapeId = _import(
'shapeId',
[_jsString],
[w.NumType.i32],
);
late final w.BaseFunction startInstanceMemberDefinitions = _import(
'startInstanceMemberDefinitions',
[w.NumType.i32],
);
late final w.BaseFunction defineInstanceMember = _import(
'defineInstanceMember',
[w.NumType.i32, w.NumType.i32, w.NumType.i32, _funcRef],
);
late final w.BaseFunction endInstanceMemberDefinitions = _import(
'endInstanceMemberDefinitions',
[w.NumType.i32],
);
late final w.BaseFunction findTarget = _import(
'findTarget',
[w.NumType.i32, w.NumType.i32, w.NumType.i32],
[_funcRef],
);
late final w.BaseFunction defaultValueSentinel = _import(
'defaultValueSentinel',
[_eqRef],
[_eqRef],
);
DevRuntime(this.module);
/// Imports the function [name] exported by the runtime.
w.BaseFunction _import(
String name,
List<w.ValueType> inputs, [
List<w.ValueType> outputs = const [],
]) => module.functions.import(
'wasm_dev_rt',
name,
module.types.defineFunction(inputs, outputs),
'wasm_dev_rt.$name',
);
}