Commit graph

43 commits

Author SHA1 Message Date
0b0b5d72d0 [fine] Tokens are by reference, ephemera
It's another jump, perhaps, but smaller arrays, and now we can track
ephemera efficiently without bloating child trees. (We could also
put ephemera inline with the child trees but then nth_token would be
unwieldy, and it would lower our data density.)
2024-04-06 17:39:33 -07:00
a3d4c24f11 [fine] Multi-module compilation
It's a little bit complicated, loading a module is a two-step dance
but here's how it's done. Probably some surface-area refactoring needs
to happen so that we do the right thing.
2024-03-30 16:33:27 -07:00
ab477cd783 [fine] Simplify function compilation
This is simpler because we don't "discover" functions to compile as we
go, we just compile all the ones we can find, and functions have
pre-defined exports. This is good and useful to us as we can now refer
to functions in different modules by known indices, but it *does* make
me wonder what we're going to do for compiling generic specializations.
The previous technique was better for that sort of thing.

This is all predicated on the idea that I want to have
partially-compiled modules, which I can't really say why I want it. If
I'm happy to just compile things cross module in the same kind of
space then it's much easier to go back to the function key way of
working.
2024-03-29 19:12:18 -07:00
2c03989da3 [fine] Working on rebuilding declarations
Running into walls dealing with imported declarations, thinking maybe
this structure will help me.
2024-03-28 16:56:42 -07:00
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
8779aade24 [fine] Report errors with environments, fix match bug
I'm worried that this will turn into something I always have to do
instead of something I just do sometimes: always provide the
provenance of some error type or another. Link error types to
diagnostics, etc.
2024-03-24 08:15:33 -07:00
2ba34701ac [fine] Note about panics and error messages 2024-03-24 07:48:23 -07:00
c4b4273115 [fine] Compiler flows error descriptions on tree errors
Like, even when the tree is malformed lets try to talk about what we
found. This is still not right, but it's better maybe.
2024-03-24 07:45:34 -07:00
9ce5794c30 [fine] Panic embeds description, start match 2024-03-24 07:08:45 -07:00
60e8f64c01 [fine] Imports maybe
Feels a little sketchy
2024-03-07 20:07:41 -08:00
a3ae4339cf [fine] Many more import-related shuffles 2024-02-15 06:12:18 -08:00
994268abb6 [fine] Oh no a runtime and module loading and stuff
Lots of test work to use the new mechanism. I'm not sure I like it.
2024-02-12 22:49:34 -08:00
2dbdbb3957 [fine] Lifetime garbage, big refactor
So it turns out that I can't hold `&str` in token because it makes it
impossible to encapsulate a source file in the larger context- self
referential structure problems again. Everything gets rebuilt so that
the source can be passed through. While we're at it, more things
become Rc<> because, man..... life it too short.

Semantics in particular has become a giant hub of the module state: we
can basically just hold an Rc<Semantics> and have everything we could
possibly want to know about a source file, computed lazily if
necessary.
2024-02-11 09:31:51 -08:00
d5059dd450 [fine] List iteration... works?
A little hacky but it works!
2024-02-08 22:25:00 -08:00
5f67aa72d5 [fine] Remember to use this function 2024-02-07 06:11:25 -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
ac3c158a81 [fine] While loops, nothing 2024-02-05 06:11:37 -08:00
65ec2d4cca [fine] Implement the wildcard pattern 2024-02-04 19:36:47 -08:00
deed9d9a45 [fine] Starting on pattern matching, make patterns explicit 2024-02-04 07:47:16 -08:00
198dc5bdb3 [fine] Evaluate is expressions, SO MANY BUG FIXES 2024-02-03 09:38:28 -08:00
afa4812074 [fine] Parse alternate types 2024-02-01 07:56:30 -08:00
36ed61b8bb [fine] Name the type comparison method properly 2024-01-25 22:09:59 -08:00
19e57db724 [fine] Static methods I guess 2024-01-25 06:44:53 -08:00
0c69758b11 [fine] Methods! 2024-01-24 09:03:45 -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
4505996710 [fine] Classes!
It's kinda amazing this works actually
2024-01-20 11:03:33 -08:00
0ee89bf26b [fine] WIP: Classes 2024-01-20 08:56:53 -08:00
f20f5a5e03 [fine] Assignments!
And new error capabilities!
2024-01-19 19:08:17 -08:00
9ee8d39963 [fine] Starting on lists, god help me 2024-01-17 15:58:48 -08:00
b92287ec1f [fine] Starting to work on generic parameters (yikes) 2024-01-16 19:52:45 -08:00
01798236ec [fine] Compile iteratively instead of recursively 2024-01-16 09:26:05 -08:00
7fb88ef199 [fine] More tests and also comparisons 2024-01-15 09:43:56 -08:00
40d611ae37 [fine] Fix block compilation 2024-01-14 19:19:53 -08:00
1eb7da77fc [fine] The VM lives! We can test it a little! 2024-01-14 16:06:14 -08:00
866830b485 [fine] A wild VM appears!
Untested though
2024-01-14 09:28:05 -08:00
65fef78c44 [fine] OK 2024-01-13 15:07:38 -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
d8988cb2cf [fine] test compilation, start removing print 2024-01-11 06:33:08 -08:00
f8f5c9bfac [fine] lets can be local or global 2024-01-09 09:17:37 -08:00
fa53841af9 [fine] Starting to look like something 2024-01-09 07:56:14 -08:00
d14c9a72df [fine] Fully untested compiler 2024-01-08 22:30:34 -08:00
6d2fd446ee [fine] Garbage Compile 2024-01-08 18:43:47 -08:00