Commit graph

26 commits

Author SHA1 Message Date
85ffc0c7dd [fine] All error sentinels carry diagnostics
The system has an invariant that if you ever return an error
sentinel (error environment, error type) then that sentinel is caused
by an error that was reported to the user. We have had too many bugs
over the last little while where that was not the case!

(An example is if we mis-interpret the tree by calling `nth_tree` with
the wrong index or something, and get `None`, and think "oh must be a
syntax error", but it was really just the wrong index. Then there's an
error sentinel with no error diagnostic and we don't discover the
mistake until much farther along.)

Now we enforce this by requiring that whoever constructs the error
sentinel *prove* that they can do so by providing a diagnostic. It's
less efficient but prevents the problem.

This actually uncovered a couple of latent bugs where we were
generating error sentinels instead of a more appropriate type! Whoops!
2024-03-25 08:07:18 -07:00
1199646e29 [fine] File name in error messages
Going to need to normalize that name though, because right now it
really *really* sucks to have a big \\?\ kinda name. Probably
normalize it relative to the base directory.
2024-02-15 06:36:14 -08:00
b43947b6f1 [fine] Conditionals produce alternates (yikes!) 2024-02-07 07:58:36 -08:00
239e859eaf [fine] Support assignment to member, loops with iterators
Hmm it's starting to look like something.
2024-02-07 01:57:41 -08:00
3415b1a3f6 [fine] Here are some tests 2024-02-05 06:13:32 -08:00
ac3c158a81 [fine] While loops, nothing 2024-02-05 06:11:37 -08:00
7f30d0ccc3 [fine] More resilience
We don't lose function declarations and whatnot, although we get lost
with broken return types.
2024-01-31 07:46:20 -08:00
f2e82942df [fine] Some resilience, a design improvement for iterator 2024-01-29 10:04:47 -08:00
f634e4da18 [fine] Don't panic on this parse error 2024-01-28 22:15:01 -08:00
19e57db724 [fine] Static methods I guess 2024-01-25 06:44:53 -08:00
bc57978dda [fine] No methods assigned to variables! 2024-01-24 09:11:55 -08:00
2839b43f6d [fine] Improvements to classes
- Classes are defined lazily
- Member access is via environment
- Member access is just a binary expression with a weird environment
- Slot loads look like variable loads now
- Associativity in the parser (ugh)
2024-01-22 23:17:02 -08:00
5f0a0b3268 [fine] Many test improvements, error improvements
- Check for more error conditions
- Move to more definitive error assertions
- Simpler error messages in some cases
- Test more conditions more thoroughly, revisit old tests
2024-01-21 08:14:42 -08:00
d0b74db715 [fine] Error checking for some cases 2024-01-20 11:13:22 -08:00
e6c96fde38 [fine] Some tests to make work at some point I guess 2024-01-19 21:01:10 -08:00
f20f5a5e03 [fine] Assignments!
And new error capabilities!
2024-01-19 19:08:17 -08:00
106f2eb30f [fine] Giving up on generics for now 2024-01-17 09:12:00 -08:00
55749af917 [fine] Some fixes around return statements 2024-01-15 09:04:28 -08:00
44bc072b04 [fine] Test for function return type mismatch 2024-01-15 07:52:49 -08:00
50eb7a9673 [fine] This one too 2024-01-13 08:16:50 -08:00
1c1c03e1d9 [fine] Make sure we check this one 2024-01-13 08:15:10 -08:00
5ebede4a21 [fine] Gobs of work
- Assertion improvements
- Type check function calls
- Functions in the environment
- Compile function calls
2024-01-13 08:12:39 -08:00
4bd3ac06fa [fine] Use the right tree to get the environment for an identifier
Can't go up to the parent, that defeats the whole point! Use *my*
environment, not my parent's environment!!
2024-01-07 09:13:34 -08:00
8835d9eaf2 [fine] Tweak syntax for assertions to make me happier 2024-01-06 07:54:00 -08:00
758aef4db9 [fine] Get rid of "value required", it's not useful 2024-01-06 07:27:44 -08:00
a9c1b04920 [fine] Tests for type errors
WHEEEEEEE!
2024-01-05 19:29:45 -08:00