From 31b6787f871ae4bbdb9fd09e589d7cc565db0821 Mon Sep 17 00:00:00 2001 From: Hitalo Souza Date: Sun, 21 Jun 2026 06:32:08 -0300 Subject: [PATCH] wasm: make integer/string builtins available to the `-os browser` target (#27517) --- .../wasm/{wasi => }/int_notd_no_imports.v | 0 .../wasm/{wasi => }/string_notd_no_imports.v | 0 .../wasm/tests/browser_int_builtins_test.v | 34 +++++++++++++++++++ 3 files changed, 34 insertions(+) rename vlib/builtin/wasm/{wasi => }/int_notd_no_imports.v (100%) rename vlib/builtin/wasm/{wasi => }/string_notd_no_imports.v (100%) create mode 100644 vlib/v/gen/wasm/tests/browser_int_builtins_test.v diff --git a/vlib/builtin/wasm/wasi/int_notd_no_imports.v b/vlib/builtin/wasm/int_notd_no_imports.v similarity index 100% rename from vlib/builtin/wasm/wasi/int_notd_no_imports.v rename to vlib/builtin/wasm/int_notd_no_imports.v diff --git a/vlib/builtin/wasm/wasi/string_notd_no_imports.v b/vlib/builtin/wasm/string_notd_no_imports.v similarity index 100% rename from vlib/builtin/wasm/wasi/string_notd_no_imports.v rename to vlib/builtin/wasm/string_notd_no_imports.v diff --git a/vlib/v/gen/wasm/tests/browser_int_builtins_test.v b/vlib/v/gen/wasm/tests/browser_int_builtins_test.v new file mode 100644 index 000000000..38389feb5 --- /dev/null +++ b/vlib/v/gen/wasm/tests/browser_int_builtins_test.v @@ -0,0 +1,34 @@ +import os + +// On the `-os browser` target, integer-to-string (`int.str()`), `println(int)`, +// string interpolation/concat of integers, and the `min_int`/`max_int` builtin +// constants used to fail — their implementations live in +// `vlib/builtin/wasm/int_notd_no_imports.v` / `string_notd_no_imports.v`, which +// were only compiled for `-os wasi`. They are now in the shared +// `vlib/builtin/wasm/` dir, so browser builds pick them up too. +fn test_wasm_browser_target_can_format_integers() { + vexe := os.quoted_path(@VEXE) + wrkdir := os.join_path(os.vtmp_dir(), 'wasm_browser_int_tests') + os.mkdir_all(wrkdir)! + defer { + os.rmdir_all(wrkdir) or {} + } + + source_path := os.join_path(wrkdir, 'ints.v') + output_path := os.join_path(wrkdir, 'ints.wasm') + source := [ + 'pub fn main() {', + '\tprintln(42)', // println(int) needs int.str() + '\tn := 7', + "\tprintln('value=' + n.str())", // explicit int.str() + string concat + '\t_ = max_int', // min_int/max_int builtin consts + '\t_ = min_int', + '}', + ].join_lines() + os.write_file(source_path, source)! + + res := + os.execute('${vexe} -b wasm -os browser -o ${os.quoted_path(output_path)} ${os.quoted_path(source_path)}') + assert res.exit_code == 0, 'browser integer formatting failed to compile: ${res.output}' + assert os.exists(output_path), 'missing browser wasm output' +} -- 2.39.5