From acd0803def213babd475cd9dfa14f3cb0d85011e Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Mon, 15 Jun 2026 00:48:11 +0300 Subject: [PATCH] wasm: add browser stderr builtins (#27452) --- .../wasm/browser/builtin_notd_no_imports.v | 5 ++++ .../gen/wasm/tests/browser_empty_main_test.v | 24 ++++++++++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/vlib/builtin/wasm/browser/builtin_notd_no_imports.v b/vlib/builtin/wasm/browser/builtin_notd_no_imports.v index 32e5df3c9..89e2e3d98 100644 --- a/vlib/builtin/wasm/browser/builtin_notd_no_imports.v +++ b/vlib/builtin/wasm/browser/builtin_notd_no_imports.v @@ -14,3 +14,8 @@ pub fn panic(s string) { pub fn println(s string) { JS.__writeln(s.str, s.len) } + +// eprintln prints a message with a line end, to the browser output host. +pub fn eprintln(s string) { + JS.__writeln(s.str, s.len) +} diff --git a/vlib/v/gen/wasm/tests/browser_empty_main_test.v b/vlib/v/gen/wasm/tests/browser_empty_main_test.v index afa0181b3..270b0fe00 100644 --- a/vlib/v/gen/wasm/tests/browser_empty_main_test.v +++ b/vlib/v/gen/wasm/tests/browser_empty_main_test.v @@ -19,12 +19,12 @@ fn test_wasm_browser_target_allows_empty_main() { os.rmdir_all(wrkdir) or {} } - source_path := os.join_path(wrkdir, 'empty_main.wasm.v') + source_path := os.join_path(wrkdir, 'empty_main.v') os.write_file(source_path, 'pub fn main() {}\n')! flags_sets := [ - '-no-bounds-checking -b wasm -os browser', - '-no-bounds-checking -enable-globals -b wasm -os browser', + '-b wasm -os browser', + '-enable-globals -b wasm -os browser', ] for idx, flags in flags_sets { @@ -36,6 +36,24 @@ fn test_wasm_browser_target_allows_empty_main() { } } +fn test_wasm_browser_target_allows_eprintln() { + vexe := os.quoted_path(@VEXE) + wrkdir := os.join_path(os.vtmp_dir(), 'wasm_browser_eprintln_tests') + os.mkdir_all(wrkdir)! + defer { + os.rmdir_all(wrkdir) or {} + } + + source_path := os.join_path(wrkdir, 'eprintln_main.v') + output_path := os.join_path(wrkdir, 'eprintln_main.wasm') + os.write_file(source_path, "pub fn main() { eprintln('browser stderr') }\n")! + + res := + os.execute('${vexe} -b wasm -os browser -o ${os.quoted_path(output_path)} ${os.quoted_path(source_path)}') + assert res.exit_code == 0, 'compilation failed: ${res.output}' + assert os.exists(output_path), 'missing output for browser eprintln' +} + fn test_wasm_shared_library_exports_custom_names_without_main() { vexe := os.quoted_path(@VEXE) wrkdir := os.join_path(os.vtmp_dir(), 'wasm_shared_library_tests') -- 2.39.5