Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add ert bootstrap WIP #87

Draft
wants to merge 7 commits into
base: master
Choose a base branch
from
Draft

add ert bootstrap WIP #87

wants to merge 7 commits into from

Conversation

gtrak
Copy link

@gtrak gtrak commented Oct 30, 2024

I think we just need to implement more native functions to get this running

fails here:

Loading ert...
Loading debug...
Loading backtrace...
Loading find-func...
-----LOAD ERROR START-----
 

;;;###autoload
(define-minor-mode find-function-mode
  "Enable some key bindings for the `find-function' family of functions."
  :group 'find-function :version "31.1" :global t :lighter nil
  ;; For compatibility with the historical behavior of the old
  ;; `find-function-setup-keys', define our bindings at the precedence
  ;; level of the global map.
  :keymap nil
  (pcase-dolist (`(,map ,key ,cmd)
                 `((,ctl-x-map   "F" find-function)
                   (,ctl-x-4-map "F" find-function-other-window)
                   (,ctl-x-5-map "F" find-function-other-frame)
                   (,ctl-x-map   "K" find-function-on-key)
                   (,ctl-x-4-map "K" find-function-on-key-other-window)
                   (,ctl-x-5-map "K" find-function-on-key-other-frame)
                   (,ctl-x-map   "V" find-variable)
                   (,ctl-x-4-map "V" find-variable-other-window)
                   (,ctl-x-5-map "V" find-variable-other-frame)
                   (,ctl-x-map   "L" find-library)
                   (,ctl-x-4-map "L" find-library-other-window)
                   (,ctl-x-5-map "L" find-library-other-frame)))
    (if find-function-mode
        (keymap-set map key cmd)
      (keymap-unset map key t))))
-----LOAD ERROR END-----
-----LOAD ERROR START-----
         ; if-let
(require 'find-func)
-----LOAD ERROR END-----
-----LOAD ERROR START-----
 
(require 'backtrace)
-----LOAD ERROR END-----
-----LOAD ERROR START-----
 
(require 'debug)
-----LOAD ERROR END-----
-----LOAD ERROR START-----
 
(load "ert")
-----LOAD ERROR END-----
Error: Signal

BEGIN_BACKTRACE
0: signal [error ("Eager macro-expansion failure: (error . "Invalid function: re-search-backward")") ]
1: error ["Eager macro-expansion failure: %S" (error . "Invalid function: re-search-backward") ]
2: internal-macroexpand-for-load [(define-minor-mode find-function-mode "Enable some key bindings for the `find-function' family of functions." :group (quote find-function) :version "31.1" :global t :lighter nil :keymap nil (pcase-dolist ((` ((, map) (, key) (, cmd))) (` (((, ctl-x-map) "F" find-function) ((, ctl-x-4-map) "F" find-function-other-window) ((, ctl-x-5-map) "F" find-function-other-frame) ((, ctl-x-map) "K" find-function-on-key) ((, ctl-x-4-map) "K" find-function-on-key-other-window) ((, ctl-x-5-map) "K" find-function-on-key-other-frame) ((, ctl-x-map) "V" find-variable) ((, ctl-x-4-map) "V" find-variable-other-window) ((, ctl-x-5-map) "V" find-variable-other-frame) ((, ctl-x-map) "L" find-library) ((, ctl-x-4-map) "L" find-library-other-window) ((, ctl-x-5-map) "L" find-library-other-frame)))) (if find-function-mode (keymap-set map key cmd) (keymap-unset map key t)))) nil ]
3: require [find-func ]
4: require [backtrace ]
5: require [debug ]
6: load ["ert" ]
END_BACKTRACE
Error: ()

@CeleritasCelery
Copy link
Owner

Thanks for taking a stab at this! The error is indeed because we are missing re-search-backward. I started to implement it using this code:

fn re_search_backward(
    regexp: &str,
    bound: usize,
    noerror: OptionalFlag,
    count: usize,
    env: &mut Rt<Env>,
) -> Result<Option<(usize, usize)>> {
    let buf = env.current_buffer.get_mut();
    let chars = buf.text.cursor().chars();
    buf.text.move_gap_out_of(0..chars);
    let (text, rest) = buf.text.slice(0..chars);
    assert!(rest.is_empty());
    let re = Regex::new(&lisp_regex_to_rust(regexp))?;
    if let Some(Ok(last_match)) =  re.find_iter(&text).last() {
        let start = last_match.start();
        let end = last_match.end();
        // set match data
        Ok(Some((start, end)))
    } else {
        Ok(None)

    }
}

But at very least we need to add a byte_to_char function on the buffer so we can convert the bounds returned by regex back into char positions and store them in the match data.

@CeleritasCelery
Copy link
Owner

I just pushed a byte_to_char function to the buffer. That should allow us to implement re-search-backward.

@CeleritasCelery
Copy link
Owner

For this particular issue, it was part of define-minor-mode which we haven't boostrapped yet. When we run into these, we can just comment them out with the comment ;; RUNE-BOOTSTRAP and move on. I have pushed that change to the branch.

@gtrak
Copy link
Author

gtrak commented Nov 7, 2024

I pulled the elisp again from 29.1 and hit the next issue, seems to be a problem with cl-loop?

-----LOAD ERROR START-----


(defun find-library--from-load-history (library)
  ;; In `load-history', the file may be ".elc", ".el", ".el.gz", and
  ;; LIBRARY may be "foo.el" or "foo".
  (let ((load-re
         (concat "\\(" (regexp-quote (file-name-sans-extension library)) "\\)"
                 (regexp-opt (get-load-suffixes)) "\\'")))
    (cl-loop
     for (file . _) in load-history thereis
     (and (stringp file) (string-match load-re file)
          (let ((dir (substring file 0 (match-beginning 1)))
                (basename (match-string 1 file)))
            (locate-file basename (list dir) (find-library-suffixes)))))))
-----LOAD ERROR END-----
-----LOAD ERROR START-----
         ; if-let
(require 'find-func)
-----LOAD ERROR END-----
-----LOAD ERROR START-----

(require 'backtrace)
-----LOAD ERROR END-----
-----LOAD ERROR START-----

(require 'debug)
-----LOAD ERROR END-----
-----LOAD ERROR START-----

(load "ert")
-----LOAD ERROR END-----
Error: Signal

BEGIN_BACKTRACE
0: signal [error ("Eager macro-expansion failure: (error . "expected Symbol, found Cons: (file . _)")") ]
1: error ["Eager macro-expansion failure: %S" (error . "expected Symbol, found Cons: (file . _)") ]
2: internal-macroexpand-for-load [(defalias (quote find-library--from-load-history) (function (lambda (library) (let ((load-re (concat "\(" (regexp-quote (file-name-sans-extension library)) "\)" (regexp-opt (get-load-suffixes)) "\'"))) (cl-loop for (file . _) in load-history thereis (and (stringp file) (string-match load-re file) (let ((dir (substring file 0 (match-beginning 1))) (basename (match-string 1 file))) (locate-file basename (list dir) (find-library-suffixes))))))))) t ]
3: require [find-func ]
4: require [backtrace ]
5: require [debug ]
6: load ["ert" ]
END_BACKTRACE

@gtrak
Copy link
Author

gtrak commented Nov 7, 2024

It looks like it's using the elisp eager internal-macroexpand-for-load function, which I see you've worked around elsewhere in lisp/loadup.el. Is that what it should be using? I'm wondering if it's too restrictive somehow to parse the cl-loop form.

I added a println to the rune macroexpand function to confirm it's choking on this form:
macroexpand: (cl-loop for (file . _) in load-history thereis (and (stringp file) (string-match load-re file) (let ((dir (substring file 0 (match-beginning 1))) (basename (match-string 1 file))) (locate-file basename (list dir) (find-library-suffixes)))))

@gtrak
Copy link
Author

gtrak commented Nov 7, 2024

I was able to capture the rust backtrace, I think I don't quite follow how rune decided this has to be a symbol. I wonder if that's only resolved once when the macro is initially called?

My backtrace: Backtrace [
    { fn: "rune::core::error::TypeError::new", file: "./src/core/error.rs", line: 46 },
    { fn: "rune::core::object::convert::<impl core::convert::TryFrom<rune::core::object::tagged::Gc<rune::core::object::tagged::ObjectType>> for rune::core::object::symbol::Symbol>::try_from", file: "./src/macros.rs", line: 14 },
    { fn: "rune::data::__wrapper_fn_symbol_name", file: "./src/data.rs", line: 114 },
    { fn: "rune::core::object::func::SubrFn::call", file: "./src/core/object/func.rs", line: 187 },
    { fn: "rune::eval::<impl rune::core::gc::root::Rt<rune::core::gc::root::Slot<rune::core::object::tagged::Gc<rune::core::object::tagged::FunctionType>>>>::call", file: "./src/eval.rs", line: 438 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 203 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 197 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 197 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_or", file: "./src/interpreter.rs", line: 368 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 74 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::call_closure", file: "./src/interpreter.rs", line: 717 },
    { fn: "rune::eval::<impl rune::core::gc::root::Rt<rune::core::gc::root::Slot<rune::core::object::tagged::Gc<rune::core::object::tagged::FunctionType>>>>::call", file: "./src/eval.rs", line: 441 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 203 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_and", file: "./src/interpreter.rs", line: 356 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 73 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_if", file: "./src/interpreter.rs", line: 387 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 72 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 71 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_if", file: "./src/interpreter.rs", line: 388 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 72 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 71 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_while", file: "./src/interpreter.rs", line: 329 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 76 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 70 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::call_closure", file: "./src/interpreter.rs", line: 717 },
    { fn: "rune::eval::<impl rune::core::gc::root::Rt<rune::core::gc::root::Slot<rune::core::object::tagged::Gc<rune::core::object::tagged::FunctionType>>>>::call", file: "./src/eval.rs", line: 441 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 203 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 197 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 197 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 197 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::setq", file: "./src/interpreter.rs", line: 403 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 80 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_if", file: "./src/interpreter.rs", line: 388 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 72 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 70 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_cond", file: "./src/interpreter.rs", line: 344 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 75 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 70 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::call_closure", file: "./src/interpreter.rs", line: 717 },
    { fn: "rune::eval::<impl rune::core::gc::root::Rt<rune::core::gc::root::Slot<rune::core::object::tagged::Gc<rune::core::object::tagged::FunctionType>>>>::call", file: "./src/eval.rs", line: 441 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 203 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_while", file: "./src/interpreter.rs", line: 329 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 76 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 70 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_if", file: "./src/interpreter.rs", line: 390 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 72 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::call_closure", file: "./src/interpreter.rs", line: 717 },
    { fn: "rune::eval::<impl rune::core::gc::root::Rt<rune::core::gc::root::Slot<rune::core::object::tagged::Gc<rune::core::object::tagged::FunctionType>>>>::call", file: "./src/eval.rs", line: 441 },
    { fn: "rune::eval::macroexpand", file: "./src/eval.rs", line: 316 },
    { fn: "rune::eval::__wrapper_fn_macroexpand", file: "./src/eval.rs", line: 291 },
    { fn: "rune::core::object::func::SubrFn::call", file: "./src/core/object/func.rs", line: 187 },
    { fn: "rune::eval::<impl rune::core::gc::root::Rt<rune::core::gc::root::Slot<rune::core::object::tagged::Gc<rune::core::object::tagged::FunctionType>>>>::call", file: "./src/eval.rs", line: 438 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 203 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::let_bind_value", file: "./src/interpreter.rs", line: 559 },
    { fn: "rune::interpreter::Interpreter::let_bind_serial", file: "./src/interpreter.rs", line: 492 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 475 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 71 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::call_closure", file: "./src/interpreter.rs", line: 717 },
    { fn: "rune::eval::<impl rune::core::gc::root::Rt<rune::core::gc::root::Slot<rune::core::object::tagged::Gc<rune::core::object::tagged::FunctionType>>>>::call", file: "./src/eval.rs", line: 441 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 203 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::setq", file: "./src/interpreter.rs", line: 403 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 80 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_if", file: "./src/interpreter.rs", line: 390 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 72 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_progx", file: "./src/interpreter.rs", line: 293 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 78 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::call_closure", file: "./src/interpreter.rs", line: 717 },
    { fn: "rune::eval::<impl rune::core::gc::root::Rt<rune::core::gc::root::Slot<rune::core::object::tagged::Gc<rune::core::object::tagged::FunctionType>>>>::call", file: "./src/eval.rs", line: 441 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 203 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_if", file: "./src/interpreter.rs", line: 388 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 72 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_progn", file: "./src/interpreter.rs", line: 314 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 77 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::setq", file: "./src/interpreter.rs", line: 403 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 80 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_progn", file: "./src/interpreter.rs", line: 314 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 77 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_while", file: "./src/interpreter.rs", line: 329 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 76 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 71 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::call_closure", file: "./src/interpreter.rs", line: 717 },
    { fn: "rune::eval::<impl rune::core::gc::root::Rt<rune::core::gc::root::Slot<rune::core::object::tagged::Gc<rune::core::object::tagged::FunctionType>>>>::call", file: "./src/eval.rs", line: 441 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 203 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_if", file: "./src/interpreter.rs", line: 390 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 72 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 197 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 197 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 70 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 70 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 71 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_progn", file: "./src/interpreter.rs", line: 314 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 77 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 71 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_cond", file: "./src/interpreter.rs", line: 344 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 75 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 71 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_if", file: "./src/interpreter.rs", line: 388 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 72 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 71 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 70 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_if", file: "./src/interpreter.rs", line: 390 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 72 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_progx", file: "./src/interpreter.rs", line: 293 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 78 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::call_closure", file: "./src/interpreter.rs", line: 717 },
    { fn: "rune::eval::<impl rune::core::gc::root::Rt<rune::core::gc::root::Slot<rune::core::object::tagged::Gc<rune::core::object::tagged::FunctionType>>>>::call", file: "./src/eval.rs", line: 441 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 203 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_if", file: "./src/interpreter.rs", line: 388 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 72 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_progn", file: "./src/interpreter.rs", line: 314 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 77 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::setq", file: "./src/interpreter.rs", line: 403 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 80 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_progn", file: "./src/interpreter.rs", line: 314 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 77 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_while", file: "./src/interpreter.rs", line: 329 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 76 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 71 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::call_closure", file: "./src/interpreter.rs", line: 717 },
    { fn: "rune::eval::<impl rune::core::gc::root::Rt<rune::core::gc::root::Slot<rune::core::object::tagged::Gc<rune::core::object::tagged::FunctionType>>>>::call", file: "./src/eval.rs", line: 441 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 203 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 197 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 197 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 70 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 70 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_if", file: "./src/interpreter.rs", line: 388 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 72 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 71 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_if", file: "./src/interpreter.rs", line: 388 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 72 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 71 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_if", file: "./src/interpreter.rs", line: 388 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 72 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 71 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_if", file: "./src/interpreter.rs", line: 388 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 72 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 71 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_cond", file: "./src/interpreter.rs", line: 344 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 75 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 71 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_if", file: "./src/interpreter.rs", line: 388 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 72 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 71 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 70 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_if", file: "./src/interpreter.rs", line: 390 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 72 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_progx", file: "./src/interpreter.rs", line: 293 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 78 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::call_closure", file: "./src/interpreter.rs", line: 717 },
    { fn: "rune::eval::<impl rune::core::gc::root::Rt<rune::core::gc::root::Slot<rune::core::object::tagged::Gc<rune::core::object::tagged::FunctionType>>>>::call", file: "./src/eval.rs", line: 441 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 203 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_if", file: "./src/interpreter.rs", line: 388 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 72 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_progn", file: "./src/interpreter.rs", line: 314 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 77 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::setq", file: "./src/interpreter.rs", line: 403 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 80 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_progn", file: "./src/interpreter.rs", line: 314 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 77 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_while", file: "./src/interpreter.rs", line: 329 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 76 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 71 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::call_closure", file: "./src/interpreter.rs", line: 717 },
    { fn: "rune::eval::<impl rune::core::gc::root::Rt<rune::core::gc::root::Slot<rune::core::object::tagged::Gc<rune::core::object::tagged::FunctionType>>>>::call", file: "./src/eval.rs", line: 441 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 203 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_if", file: "./src/interpreter.rs", line: 388 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 72 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 70 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::call_closure", file: "./src/interpreter.rs", line: 717 },
    { fn: "rune::eval::<impl rune::core::gc::root::Rt<rune::core::gc::root::Slot<rune::core::object::tagged::Gc<rune::core::object::tagged::FunctionType>>>>::call", file: "./src/eval.rs", line: 441 },
    { fn: "rune::eval::funcall", file: "./src/eval.rs", line: 170 },
    { fn: "rune::eval::__wrapper_fn_funcall", file: "./src/eval.rs", line: 160 },
    { fn: "rune::core::object::func::SubrFn::call", file: "./src/core/object/func.rs", line: 187 },
    { fn: "rune::eval::<impl rune::core::gc::root::Rt<rune::core::gc::root::Slot<rune::core::object::tagged::Gc<rune::core::object::tagged::FunctionType>>>>::call", file: "./src/eval.rs", line: 438 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 203 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_cond", file: "./src/interpreter.rs", line: 344 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 75 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 71 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_if", file: "./src/interpreter.rs", line: 388 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 72 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 71 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 70 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_if", file: "./src/interpreter.rs", line: 390 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 72 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_progx", file: "./src/interpreter.rs", line: 293 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 78 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::call_closure", file: "./src/interpreter.rs", line: 717 },
    { fn: "rune::eval::<impl rune::core::gc::root::Rt<rune::core::gc::root::Slot<rune::core::object::tagged::Gc<rune::core::object::tagged::FunctionType>>>>::call", file: "./src/eval.rs", line: 441 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 203 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 70 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::call_closure", file: "./src/interpreter.rs", line: 717 },
    { fn: "rune::eval::<impl rune::core::gc::root::Rt<rune::core::gc::root::Slot<rune::core::object::tagged::Gc<rune::core::object::tagged::FunctionType>>>>::call", file: "./src/eval.rs", line: 441 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 203 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::eval_if", file: "./src/interpreter.rs", line: 388 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 72 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 70 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::condition_case", file: "./src/interpreter.rs", line: 633 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 86 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_cond", file: "./src/interpreter.rs", line: 344 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 75 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::Interpreter::eval_let", file: "./src/interpreter.rs", line: 477 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 70 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::Interpreter::implicit_progn", file: "./src/interpreter.rs", line: 577 },
    { fn: "rune::interpreter::call_closure", file: "./src/interpreter.rs", line: 717 },
    { fn: "rune::eval::<impl rune::core::gc::root::Rt<rune::core::gc::root::Slot<rune::core::object::tagged::Gc<rune::core::object::tagged::FunctionType>>>>::call", file: "./src/eval.rs", line: 441 },
    { fn: "rune::lread::eager_expand", file: "./src/lread.rs", line: 119 },
    { fn: "rune::lread::load_internal", file: "./src/lread.rs", line: 86 },
    { fn: "rune::lread::load", file: "./src/lread.rs", line: 194 },
    { fn: "rune::fns::require", file: "./src/fns.rs", line: 518 },
    { fn: "rune::fns::__wrapper_fn_require", file: "./src/fns.rs", line: 499 },
    { fn: "rune::core::object::func::SubrFn::call", file: "./src/core/object/func.rs", line: 187 },
    { fn: "rune::eval::<impl rune::core::gc::root::Rt<rune::core::gc::root::Slot<rune::core::object::tagged::Gc<rune::core::object::tagged::FunctionType>>>>::call", file: "./src/eval.rs", line: 438 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 203 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::eval", file: "./src/interpreter.rs", line: 44 },
    { fn: "rune::lread::eager_expand", file: "./src/lread.rs", line: 121 },
    { fn: "rune::lread::load_internal", file: "./src/lread.rs", line: 86 },
    { fn: "rune::lread::load", file: "./src/lread.rs", line: 194 },
    { fn: "rune::fns::require", file: "./src/fns.rs", line: 518 },
    { fn: "rune::fns::__wrapper_fn_require", file: "./src/fns.rs", line: 499 },
    { fn: "rune::core::object::func::SubrFn::call", file: "./src/core/object/func.rs", line: 187 },
    { fn: "rune::eval::<impl rune::core::gc::root::Rt<rune::core::gc::root::Slot<rune::core::object::tagged::Gc<rune::core::object::tagged::FunctionType>>>>::call", file: "./src/eval.rs", line: 438 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 203 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::eval", file: "./src/interpreter.rs", line: 44 },
    { fn: "rune::lread::eager_expand", file: "./src/lread.rs", line: 121 },
    { fn: "rune::lread::load_internal", file: "./src/lread.rs", line: 86 },
    { fn: "rune::lread::load", file: "./src/lread.rs", line: 194 },
    { fn: "rune::fns::require", file: "./src/fns.rs", line: 518 },
    { fn: "rune::fns::__wrapper_fn_require", file: "./src/fns.rs", line: 499 },
    { fn: "rune::core::object::func::SubrFn::call", file: "./src/core/object/func.rs", line: 187 },
    { fn: "rune::eval::<impl rune::core::gc::root::Rt<rune::core::gc::root::Slot<rune::core::object::tagged::Gc<rune::core::object::tagged::FunctionType>>>>::call", file: "./src/eval.rs", line: 438 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 203 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::eval", file: "./src/interpreter.rs", line: 44 },
    { fn: "rune::lread::eager_expand", file: "./src/lread.rs", line: 121 },
    { fn: "rune::lread::load_internal", file: "./src/lread.rs", line: 86 },
    { fn: "rune::lread::load", file: "./src/lread.rs", line: 194 },
    { fn: "rune::lread::__wrapper_fn_load", file: "./src/lread.rs", line: 155 },
    { fn: "rune::core::object::func::SubrFn::call", file: "./src/core/object/func.rs", line: 187 },
    { fn: "rune::eval::<impl rune::core::gc::root::Rt<rune::core::gc::root::Slot<rune::core::object::tagged::Gc<rune::core::object::tagged::FunctionType>>>>::call", file: "./src/eval.rs", line: 438 },
    { fn: "rune::interpreter::Interpreter::eval_call", file: "./src/interpreter.rs", line: 203 },
    { fn: "rune::interpreter::Interpreter::eval_sexp", file: "./src/interpreter.rs", line: 92 },
    { fn: "rune::interpreter::Interpreter::eval_form", file: "./src/interpreter.rs", line: 53 },
    { fn: "rune::interpreter::eval", file: "./src/interpreter.rs", line: 44 },
    { fn: "rune::lread::load_internal", file: "./src/lread.rs", line: 88 },
    { fn: "rune::lread::load", file: "./src/lread.rs", line: 194 },
    { fn: "rune::load", file: "./src/main.rs", line: 127 },
    { fn: "rune::bootstrap", file: "./src/main.rs", line: 144 },
    { fn: "rune::main", file: "./src/main.rs", line: 66 },
    { fn: "core::ops::function::FnOnce::call_once", file: "/rustc/f6e511eec7342f59a25f7c0534f1dbea00d01b14/library/core/src/ops/function.rs", line: 250 },
    { fn: "std::sys::backtrace::__rust_begin_short_backtrace", file: "/rustc/f6e511eec7342f59a25f7c0534f1dbea00d01b14/library/std/src/sys/backtrace.rs", line: 154 },
    { fn: "std::rt::lang_start::{{closure}}", file: "/rustc/f6e511eec7342f59a25f7c0534f1dbea00d01b14/library/std/src/rt.rs", line: 164 },
    { fn: "core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once", file: "/rustc/f6e511eec7342f59a25f7c0534f1dbea00d01b14/library/core/src/ops/function.rs", line: 284 },
    { fn: "std::panicking::try::do_call", file: "/rustc/f6e511eec7342f59a25f7c0534f1dbea00d01b14/library/std/src/panicking.rs", line: 554 },
    { fn: "std::panicking::try", file: "/rustc/f6e511eec7342f59a25f7c0534f1dbea00d01b14/library/std/src/panicking.rs", line: 518 },
    { fn: "std::panic::catch_unwind", file: "/rustc/f6e511eec7342f59a25f7c0534f1dbea00d01b14/library/std/src/panic.rs", line: 345 },
    { fn: "std::rt::lang_start_internal::{{closure}}", file: "/rustc/f6e511eec7342f59a25f7c0534f1dbea00d01b14/library/std/src/rt.rs", line: 143 },
    { fn: "std::panicking::try::do_call", file: "/rustc/f6e511eec7342f59a25f7c0534f1dbea00d01b14/library/std/src/panicking.rs", line: 554 },
    { fn: "std::panicking::try", file: "/rustc/f6e511eec7342f59a25f7c0534f1dbea00d01b14/library/std/src/panicking.rs", line: 518 },
    { fn: "std::panic::catch_unwind", file: "/rustc/f6e511eec7342f59a25f7c0534f1dbea00d01b14/library/std/src/panic.rs", line: 345 },
    { fn: "std::rt::lang_start_internal", file: "/rustc/f6e511eec7342f59a25f7c0534f1dbea00d01b14/library/std/src/rt.rs", line: 143 },
    { fn: "std::rt::lang_start", file: "/rustc/f6e511eec7342f59a25f7c0534f1dbea00d01b14/library/std/src/rt.rs", line: 163 },
    { fn: "main" },
    { fn: "__libc_start_call_main", file: "./csu/../sysdeps/nptl/libc_start_call_main.h", line: 58 },
    { fn: "__libc_start_main_impl", file: "./csu/../csu/libc-start.c", line: 360 },

@CeleritasCelery
Copy link
Owner

CeleritasCelery commented Nov 8, 2024

The backtrace was not much help here because of the condition-case wrapper here. We can remove that until the code is more stable.

After getting a good backtrace I was able to dive down and find out this was due to two bugs in Rune (thank you!). I have pushed fixes to your branch.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants