-
Notifications
You must be signed in to change notification settings - Fork 5
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
highly nested comptimes lead to stackoverflow in type infference #16
Comments
this is pretty unlikely to happen anywhere without capy having macros, as even sth like: a :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a1 } } } } } } } } } } } } } };
a1 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a2 } } } } } } } } } } } } } };
a2 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a3 } } } } } } } } } } } } } };
a3 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a4 } } } } } } } } } } } } } };
a4 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a5 } } } } } } } } } } } } } };
a5 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a6 } } } } } } } } } } } } } };
a6 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a7 } } } } } } } } } } } } } };
a7 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a8 } } } } } } } } } } } } } };
a8 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a9 } } } } } } } } } } } } } };
a9 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a10 } } } } } } } } } } } } } };
a10 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a11 } } } } } } } } } } } } } };
a11 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a12 } } } } } } } } } } } } } };
a12 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a13 } } } } } } } } } } } } } };
a13 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a14 } } } } } } } } } } } } } };
a14 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a15 } } } } } } } } } } } } } };
a15 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a16 } } } } } } } } } } } } } };
a16 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a17 } } } } } } } } } } } } } };
a17 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a18 } } } } } } } } } } } } } };
a18 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a19 } } } } } } } } } } } } } };
a19 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { 20 } } } } } } } } } } } } } }; doesn't overflow. interestingly adding a main function like so: a :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a1 } } } } } } } } } } } } } };
a1 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a2 } } } } } } } } } } } } } };
a2 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a3 } } } } } } } } } } } } } };
a3 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a4 } } } } } } } } } } } } } };
a4 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a5 } } } } } } } } } } } } } };
a5 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a6 } } } } } } } } } } } } } };
a6 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a7 } } } } } } } } } } } } } };
a7 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a8 } } } } } } } } } } } } } };
a8 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a9 } } } } } } } } } } } } } };
a9 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a10 } } } } } } } } } } } } } };
a10 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a11 } } } } } } } } } } } } } };
a11 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a12 } } } } } } } } } } } } } };
a12 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a13 } } } } } } } } } } } } } };
a13 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a14 } } } } } } } } } } } } } };
a14 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a15 } } } } } } } } } } } } } };
a15 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a16 } } } } } } } } } } } } } };
a16 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a17 } } } } } } } } } } } } } };
a17 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a18 } } } } } } } } } } } } } };
a18 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { a19 } } } } } } } } } } } } } };
a19 :: comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { comptime { 20 } } } } } } } } } } } } } };
main :: () -> i32 {
a
} causes a crash: thread 'main' panicked at crates/codegen/src/compiler/functions.rs:258:17:
not yet implemented: Oh shit I forgot to account for this possibility
stack backtrace:
0: rust_begin_unwind
at /rustc/030e4d382f1df30240408540f25cd1ccc8dbbf50/library/std/src/panicking.rs:619:5
1: core::panicking::panic_fmt
at /rustc/030e4d382f1df30240408540f25cd1ccc8dbbf50/library/core/src/panicking.rs:72:14
2: codegen::compiler::functions::FunctionCompiler::compile_global
at ./crates/codegen/src/compiler/functions.rs:258:17
3: codegen::compiler::functions::FunctionCompiler::compile_expr_with_args
at ./crates/codegen/src/compiler/functions.rs:1186:43
4: codegen::compiler::functions::FunctionCompiler::compile_expr_with_args
at ./crates/codegen/src/compiler/functions.rs:1043:21
5: codegen::compiler::functions::FunctionCompiler::compile_expr
at ./crates/codegen/src/compiler/functions.rs:508:9
6: codegen::compiler::functions::FunctionCompiler::compile_expr_with_args
at ./crates/codegen/src/compiler/functions.rs:1402:21
7: codegen::compiler::functions::FunctionCompiler::compile_expr_with_args
at ./crates/codegen/src/compiler/functions.rs:1043:21
8: codegen::compiler::functions::FunctionCompiler::compile_expr
at ./crates/codegen/src/compiler/functions.rs:508:9
9: codegen::compiler::functions::FunctionCompiler::compile_expr_with_args
at ./crates/codegen/src/compiler/functions.rs:1402:21
10: codegen::compiler::functions::FunctionCompiler::compile_expr_with_args |
This is more of an issue on deeply nested things in general. As long as the codebase is structured in a recursive way, this will be an problem. This input also causes a crash with type inference.
Restructuring everything to be iterative might make the entire codebase much cleaner too, but it would also require a huge rewrite of everything. So the fix to this one might not be as fast as the other ones. |
I just pushed a large change to I'll look into it soon. |
input:
backtrace:
The text was updated successfully, but these errors were encountered: