File tree Expand file tree Collapse file tree 2 files changed +27
-6
lines changed
Expand file tree Collapse file tree 2 files changed +27
-6
lines changed Original file line number Diff line number Diff line change @@ -36,9 +36,12 @@ function runCodeFromTextarea() {
3636 if ( result !== null ) {
3737 consoleElement . value += `\n${ result } \n` ;
3838 }
39- } catch ( e ) {
40- errorElement . textContent = e ;
41- console . error ( e ) ;
39+ } catch ( err ) {
40+ if ( err instanceof WebAssembly . RuntimeError ) {
41+ err = window . __RUSTPYTHON_ERROR || err ;
42+ }
43+ errorElement . textContent = err ;
44+ console . error ( err ) ;
4245 }
4346}
4447
@@ -61,4 +64,5 @@ snippets.addEventListener('change', () => {
6164 runCodeFromTextarea ( ) ;
6265} ) ;
6366
64- runCodeFromTextarea ( ) ; // Run once for demo
67+ // Run once for demo
68+ runCodeFromTextarea ( ) ;
Original file line number Diff line number Diff line change @@ -12,17 +12,34 @@ extern crate wasm_bindgen_futures;
1212extern crate web_sys;
1313
1414use js_sys:: { Object , Reflect , TypeError } ;
15+ use std:: panic;
1516use wasm_bindgen:: prelude:: * ;
1617
1718pub use crate :: vm_class:: * ;
1819
1920const PY_EVAL_VM_ID : & str = "__py_eval_vm" ;
2021
21- extern crate console_error_panic_hook;
22+ fn panic_hook ( info : & panic:: PanicInfo ) {
23+ // If something errors, just ignore it; we don't want to panic in the panic hook
24+ use js_sys:: WebAssembly :: RuntimeError ;
25+ let window = match web_sys:: window ( ) {
26+ Some ( win) => win,
27+ None => return ,
28+ } ;
29+ let msg = & info. to_string ( ) ;
30+ let _ = Reflect :: set ( & window, & "__RUSTPYTHON_ERROR_MSG" . into ( ) , & msg. into ( ) ) ;
31+ let error = RuntimeError :: new ( & msg) ;
32+ let _ = Reflect :: set ( & window, & "__RUSTPYTHON_ERROR" . into ( ) , & error) ;
33+ let stack = match Reflect :: get ( & error, & "stack" . into ( ) ) {
34+ Ok ( stack) => stack,
35+ Err ( _) => return ,
36+ } ;
37+ let _ = Reflect :: set ( & window, & "__RUSTPYTHON_ERROR_STACK" . into ( ) , & stack. into ( ) ) ;
38+ }
2239
2340#[ wasm_bindgen( start) ]
2441pub fn setup_console_error ( ) {
25- std:: panic:: set_hook ( Box :: new ( console_error_panic_hook :: hook ) ) ;
42+ std:: panic:: set_hook ( Box :: new ( panic_hook ) ) ;
2643}
2744
2845// Hack to comment out wasm-bindgen's generated typescript definitons
You can’t perform that action at this time.
0 commit comments