Commit graph

61 commits

Author SHA1 Message Date
Ayaz Hafiz
70b80c275f
Avoid panic 2025-01-05 23:54:47 -05:00
Ayaz Hafiz
a003a16979
Catch panics that happen within repl step executions
Example session:

```
» 1 + 1
The Roc compiler had an internal error.
Please file a bug report at
    https://github.com/roc-lang/roc/issues/new
Please include the following data:

Error message: intentional panic
Stack backtrace:
   0: std::backtrace_rs::backtrace::libunwind::trace
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/../../backtrace/src/backtrace/libunwind.rs:104:5
   1: std::backtrace_rs::backtrace::trace_unsynchronized
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2: std::backtrace::Backtrace::create
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/backtrace.rs:331:13
   3: panic_hook
             at ./crates/repl_cli/src/lib.rs:52:41
   4: call<fn(&core::panic::panic_info::PanicInfo), (&core::panic::panic_info::PanicInfo)>
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/core/src/ops/function.rs:79:5
   5: <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/alloc/src/boxed.rs:2029:9
   6: std::panicking::rust_panic_with_hook
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/panicking.rs:785:13
   7: std::panicking::begin_panic_handler::{{closure}}
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/panicking.rs:651:13
   8: std::sys_common::backtrace::__rust_end_short_backtrace
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/sys_common/backtrace.rs:171:18
   9: rust_begin_unwind
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/panicking.rs:647:5
  10: core::panicking::panic_fmt
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/core/src/panicking.rs:72:14
  11: step
             at ./crates/repl_ui/src/repl_state.rs:66:9
  12: {closure#1}
             at ./crates/repl_cli/src/lib.rs:109:21
  13: call_once<roc_repl_cli::main::{closure_env#1}, ()>
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/core/src/ops/function.rs:250:5
  14: call_once<roc_repl_ui::repl_state::ReplAction, roc_repl_cli::main::{closure_env#1}>
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/core/src/panic/unwind_safe.rs:272:9
  15: do_call<core::panic::unwind_safe::AssertUnwindSafe<roc_repl_cli::main::{closure_env#1}>, roc_repl_ui::repl_state::ReplAction>
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/panicking.rs:554:40
  16: ___rust_try
  17: try<roc_repl_ui::repl_state::ReplAction, core::panic::unwind_safe::AssertUnwindSafe<roc_repl_cli::main::{closure_env#1}>>
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/panicking.rs:518:19
  18: catch_unwind<core::panic::unwind_safe::AssertUnwindSafe<roc_repl_cli::main::{closure_env#1}>, roc_repl_ui::repl_state::ReplAction>
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/panic.rs:142:14
  19: main
             at ./crates/repl_cli/src/lib.rs:108:30
  20: main
             at ./crates/cli/src/main.rs:321:16
  21: call_once<fn() -> core::result::Result<(), std::io::error::Error>, ()>
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/core/src/ops/function.rs:250:5
  22: __rust_begin_short_backtrace<fn() -> core::result::Result<(), std::io::error::Error>, core::result::Result<(), std::io::error::Error>>
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/sys_common/backtrace.rs:155:18
  23: {closure#0}<core::result::Result<(), std::io::error::Error>>
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/rt.rs:166:18
  24: core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/core/src/ops/function.rs:284:13
  25: std::panicking::try::do_call
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/panicking.rs:554:40
  26: std::panicking::try
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/panicking.rs:518:19
  27: std::panic::catch_unwind
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/panic.rs:142:14
  28: std::rt::lang_start_internal::{{closure}}
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/rt.rs:148:48
  29: std::panicking::try::do_call
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/panicking.rs:554:40
  30: std::panicking::try
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/panicking.rs:518:19
  31: std::panic::catch_unwind
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/panic.rs:142:14
  32: std::rt::lang_start_internal
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/rt.rs:148:20
  33: lang_start<core::result::Result<(), std::io::error::Error>>
             at /rustc/25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04/library/std/src/rt.rs:165:17
  34: _main

Machine Target: MacArm64
```
2025-01-05 23:54:47 -05:00
jamin-eisenberg
7429f8a970
Initial attempt (failing tests?) 2024-08-28 18:15:23 -04:00
Agus Zubiaga
52f84910a7
Support importing local files in the REPL 2024-04-26 23:33:19 -03:00
Brendan Hansknecht
6dc5bfb1b7
Use roc_target over target_lexicon
Tailors a target class for our needs.
Replaces tons of uses across the entire compiler.
This is a base for later adding new targets like thumb.
2024-03-31 10:50:26 -07:00
Anton-4
adf88e7282
change underline color 2024-02-19 13:53:01 +01:00
Anton-4
c6b5e2f8c3
less colors more contrast 2024-02-14 17:20:44 +01:00
Richard Feldman
b725a114cf
Remove fancy quote from rockin' roc repl 2023-11-18 22:16:14 -05:00
Richard Feldman
1f396871f9
Simplify repl tips 2023-09-18 15:26:09 -05:00
Richard Feldman
e6b9446755
Move WELCOME_MESSAGE to be cli-specific 2023-09-18 15:26:09 -05:00
Richard Feldman
074401fbdf
Remove the whole #var1 thing 2023-09-17 06:31:51 -04:00
Richard Feldman
f4937e72cc
Try printing #val1 at end of previous line 2023-09-17 01:01:58 -04:00
Brian Carroll
ead3c33eb8
Tweak comments and factoring 2023-09-10 11:28:29 +01:00
Brian Carroll
6a47a99114
formatting & clippy 2023-09-09 16:13:17 +01:00
Brian Carroll
aa0e975845
clippy 2023-09-09 15:03:50 +01:00
Brian Carroll
fc7b831285
remove some more duplicated code (format_output) 2023-09-09 14:45:14 +01:00
Brian Carroll
3923dad203
Remove duplicated code from roc_repl_cli and get tests compiling 2023-09-09 13:01:31 +01:00
Brian Carroll
8f59ee9492
Create a new crate roc_repl_ui for shared CLI/web UI code 2023-09-09 11:55:55 +01:00
Richard Feldman
dbf928bc46
Reorganize ReplState logic for cli/wasm compat 2023-09-08 15:37:16 -04:00
Folkert
ef39bad7c6
auto clippy fixes 2023-07-10 18:27:08 +02:00
Luke Boswell
cec67721e6
merge upstream/main 2022-11-06 09:27:46 +11:00
Luke Boswell
f3bdb5f321
updating rust package documentation 2022-11-03 20:00:06 +11:00
Richard Feldman
1499ec5def
Drop termline dependency 2022-11-01 21:42:08 -04:00
Richard Feldman
19ffa61f8f
Add a gray line after each repl output 2022-11-01 15:57:22 -04:00
Joshua Warner
07be8ec000
Refactor Parser trait to pass min_indent
This removes the need to explicitly pass thru min_indent when using the parser combinators.

My ultimate goal here is to evolve the current parser closer toward a purely combinator-based parser,
at which point we can more easily transition smoothly to a formal(ish) grammar, or expand the meanings of combinators
to include things like:
* Incremental (re)parsing
* Unified parsing and formatting code
* Better error recovery
* Using the main parser directly for syntax highlighting
2022-10-31 13:31:47 -07:00
Richard Feldman
50ebffad5a
Fix Windows Readline error 2022-10-31 07:28:24 -04:00
Richard Feldman
062d532fa4
Fix most repl tests 2022-10-30 05:47:05 -04:00
Richard Feldman
5b36d2c41c
Drop pending_src, fix repl tips 2022-10-27 18:47:32 -04:00
Richard Feldman
6038965cb6
Fix some repl state machine bugs 2022-10-27 18:47:32 -04:00
Richard Feldman
a6c1667d37
Reorganize repl modules 2022-10-27 18:47:31 -04:00
Richard Feldman
9f498add60
Reorganize some REPL modules 2022-10-27 18:47:27 -04:00
Richard Feldman
4c02a38a99
Drop some apparently-unreachable code 2022-10-27 18:46:15 -04:00
Richard Feldman
63c7b90113
Have repl validator accept top level defs 2022-10-27 18:46:15 -04:00
Richard Feldman
ba6457779d
Fix :help newline 2022-10-27 18:46:15 -04:00
Richard Feldman
f85c10c4bb
Colorize ctrl-v + ctrl-j in repl instructions 2022-10-27 18:46:14 -04:00
Richard Feldman
8a29d50f4e
Swap when TIPS and SHORT_INSTRUCTIONS print 2022-10-27 18:46:14 -04:00
Josh Mak
20fcacbcd6
Add how to newline repl tips at start-up 2022-10-11 18:25:08 -07:00
Joshua Warner
ab4e03b05d Rename Lambda -> Closure for consistency 2022-10-08 11:05:05 -07:00
Ayaz Hafiz
e31a16f650
Properly wrap with newtype-by-void layouts in repl
Closes #4208
2022-10-05 11:17:57 -05:00
Anton-4
a46d4fa1c6
further improved tips UX, fixed cli.rs assert 2022-10-03 15:31:34 +02:00
João Mota
d6b59e7091
slight overlook
Signed-off-by: João Mota <jackthemotorcycle@gmail.com>
2022-10-03 13:44:00 +01:00
João Mota
692d7651ab
Add tips to REPL
Signed-off-by: João Mota <jackthemotorcycle@gmail.com>
2022-10-03 13:38:27 +01:00
Ayaz Hafiz
ed04c2040a
Push the layout interner through the backends 2022-08-31 14:33:52 -05:00
Ayaz Hafiz
c5466810a4
Add LayoutInterner to LayoutCache
Adds a thread-local interner of layouts to LayoutCache, and updates all
references appropriately.

This is a bit suboptimal for single-threaded workloads that will look at
creating layout caches again, like the REPL, but I think that's okay for
now - since the global interner will be uncontested for those workloads, it
should still be plenty fast to access the interner, even behind a lock.
2022-08-31 14:33:51 -05:00
Mostly Void
c5aa453071
Change repl behavior and instructions around quit 2022-08-24 17:34:01 +05:30
Folkert
546b702740
nullable wrapped tags 2022-08-06 14:40:00 +02:00
Richard Feldman
3136c5fb63
Allow testing interface modules 2022-08-03 19:49:48 -04:00
Folkert
64c2d8d87e
move expect running logic into repl_expect 2022-07-26 21:15:16 +02:00
Folkert
954a4fbe32
WIP 2022-07-23 14:25:38 +02:00
Folkert
6c0217c6f6
make the repl app mutable (for expect repl) 2022-07-23 14:03:30 +02:00