Files
sdk/pkg/dart2wasm/test/ir_tests/interop.int.wat
T
Martin Kustermann 5cd42e6b21 [dart2wasm] Start emitting binaryen.inline custom section
Binaryen introduced `binaryen.inline` which allows us to tell it
inlining hints now, including "never inline" hint (see [0])

This allows us to remove the ugly mangling of wasm function names with
`<noInline>` postfix.

We also now pass `--strip-toolchain-annotations`: The annotations
occupy size in the wasm binary and wasm runtimes ignore them (they are
for `wams-opt` only).

Except for IR tests: Here we want to see the annotations, so we keep
them there.

We also rename the package:wasm_builder classes to clearly indicate
those are binaryen specific sections.

We also make the ir_test.dart put it's options first, allowing the IR
tests to override options if needed.

[0] https://github.com/WebAssembly/binaryen/commit/3c25487214600a9

Change-Id: I96688bfaeba403a39cd5e7376f8d2889bcbae030
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/510000
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Srujan Gaddam <srujzs@google.com>
2026-06-10 15:51:47 -07:00

75 lines
2.2 KiB
WebAssembly Text Format

(module $module0
(type $#Top (struct
(field $field0 i32)))
(type $BoxedInt (sub final $#Top (struct
(field $field0 i32)
(field $value i64))))
(func $"dart2wasm.M (import)" (import "dart2wasm" "M") (param externref) (result externref))
(func $"dart2wasm.R (import)" (import "dart2wasm" "R") (param externref) (result externref))
(global $"intValueNullable initialized" (mut i32) <...>)
(global $intValueNullable (mut (ref null $BoxedInt)) <...>)
(func $intValue implicit getter (result i64) <...>)
(func $ktrue implicit getter (result i32) <...>)
(func $jsifyInt (param $var0 i64) (result externref) <...>)
(func $sinkInt (param $var0 i64) <...>)
(func $sinkIntNullable (param $var0 (ref null $BoxedInt)) <...>)
(@binaryen.inline 0)
(func $testIntConstant
i64.const 1
call $jsifyInt
call $"dart2wasm.R (import)"
call $toDartInt
call $sinkInt
)
(@binaryen.inline 0)
(func $testIntConstantNullable
ref.null noextern
call $"dart2wasm.M (import)"
call $toDartNullableInt
call $sinkIntNullable
)
(@binaryen.inline 0)
(func $testIntValue
call $"intValue implicit getter"
call $jsifyInt
call $"dart2wasm.R (import)"
call $toDartInt
call $sinkInt
)
(@binaryen.inline 0)
(func $testIntValueNullable
(local $var0 (ref null $BoxedInt))
global.get $"intValueNullable initialized"
if (result (ref null $BoxedInt))
global.get $intValueNullable
else
call $"ktrue implicit getter"
if (result (ref null $BoxedInt))
i32.const 86
call $"intValue implicit getter"
struct.new $BoxedInt
else
ref.null none
end
local.tee $var0
global.set $intValueNullable
i32.const 1
global.set $"intValueNullable initialized"
local.get $var0
end
local.tee $var0
ref.is_null
if (result externref)
ref.null noextern
else
local.get $var0
struct.get $BoxedInt $value
call $jsifyInt
end
call $"dart2wasm.M (import)"
call $toDartNullableInt
call $sinkIntNullable
)
(func $toDartInt (param $var0 externref) (result i64) <...>)
(func $toDartNullableInt (param $var0 externref) (result (ref null $BoxedInt)) <...>)
)