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() {
36
36
if ( result !== null ) {
37
37
consoleElement . value += `\n${ result } \n` ;
38
38
}
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 ) ;
42
45
}
43
46
}
44
47
@@ -61,4 +64,5 @@ snippets.addEventListener('change', () => {
61
64
runCodeFromTextarea ( ) ;
62
65
} ) ;
63
66
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;
12
12
extern crate web_sys;
13
13
14
14
use js_sys:: { Object , Reflect , TypeError } ;
15
+ use std:: panic;
15
16
use wasm_bindgen:: prelude:: * ;
16
17
17
18
pub use crate :: vm_class:: * ;
18
19
19
20
const PY_EVAL_VM_ID : & str = "__py_eval_vm" ;
20
21
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
+ }
22
39
23
40
#[ wasm_bindgen( start) ]
24
41
pub 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 ) ) ;
26
43
}
27
44
28
45
// Hack to comment out wasm-bindgen's generated typescript definitons
You can’t perform that action at this time.
0 commit comments