d692f6bb80
cl-interpret: Complain, rather than panic, on outlined module
2024-07-11 02:48:35 -05:00
58c5a01312
cl-structures: Clean up IndexMap and fix doctests
2024-07-10 14:56:17 -05:00
3c4d31c473
cl-repl: Run by default, break into menu
2024-07-09 06:15:15 -05:00
d723f7cece
cl-interpret: String-building addition
...
Note: This drastically increases the number of symbols. Yeowch.
2024-07-09 06:14:44 -05:00
b446677eda
cl-interpret: Enforce wrapping behavior
2024-07-09 06:13:55 -05:00
0beb121f32
cl-interpret: Change print to print without newline, add new println builtin
2024-07-09 06:13:05 -05:00
6b16c55d97
cl-typeck: Fix doc list breakage
2024-06-22 02:00:47 -05:00
c16dbca55c
cl-structures: Remove #[feature(inline_const)], stabilized in Rust 1.79
2024-06-22 01:59:01 -05:00
4c883d87a4
cl-ast: Link to [Meta] in [Attrs]
2024-05-19 16:00:40 -05:00
1c3a56f5b5
misc: Fix broken doc links, remove "pool" from index_map.rs
2024-05-19 15:32:57 -05:00
406bfb8882
cl-interpret: Stop kidding myself, I'll be replacing the interpreter before I get rid of this.
2024-05-19 15:16:22 -05:00
e0f54aea97
cl-structures: Mention IndexMap and MapIndex in the top level doc comment
2024-05-19 15:12:54 -05:00
fa8a71addc
cl_structures: Rename deprecated_intern_pool to the more correct name "IndexMap"
...
Also, reverse the order of generic args, to make them consistent with other map collections
2024-05-19 14:51:14 -05:00
0cc0cb5cfb
conlang: Remove "Identifier" node
...
It never carried any extra information, and got in the way everywhere it was used.
2024-05-19 14:41:31 -05:00
f330a7eaa5
conlang: Split assignment into plain Assign and assign-with-Modify
2024-05-19 14:31:30 -05:00
8d8928b8a8
conlang: Struct, tuple member accesses, member function call syntax
...
Currently uses UFCS in the interpreter. This may change after type checking?
2024-05-19 13:55:28 -05:00
be81221895
cl-typeck: Move type inference utils into own module
2024-05-16 15:06:59 -05:00
33b7cd3971
cl-structures: Do not #[derive(Eq)] for Interned<T>
...
Derive places Eq bound on T, which is not true of Interned<T>
2024-05-16 15:04:37 -05:00
c9266d971f
cl-typeck: Insert impls into target type's namespace
...
TODO: Process imports like this lazily
2024-05-07 13:59:45 -05:00
a89f45aa58
cl-typeck: Add isize/usize primitives
2024-05-04 23:07:57 -05:00
d2eb165759
cl-arena: Add iterator allocation to TypedArena
...
This is copied almost verbatim from rustc-arena e82c861d7e/compiler/rustc_arena/src/lib.rs (L203)
TODO: Add unit tests, run unit tests in Miri
2024-05-04 22:17:34 -05:00
edf175e53b
cl-typeck: Add utilities for HM-style type inference via unification
2024-05-04 22:12:33 -05:00
6aea23c8ba
cl-ast/desugar: Turn all paths into absolute paths
2024-04-29 16:25:30 -05:00
db0b791b24
cl-ast: Fix pretty-printing for use items
2024-04-29 16:19:52 -05:00
7c73fd335c
cl-typeck: Store def metadata in a Node
...
I'm not overly proud of this code, but it currently works. Will refactor later.
2024-04-29 15:40:30 -05:00
d7ce33e457
cl-arena: Allow the arena to hold its own lifetime.
...
cl-structures: Stick some arenas inside the interners, rather than taking a reference.
2024-04-28 02:01:52 -05:00
0d937728ed
cl-structures: Mention new structures in the top-module blurb
2024-04-27 21:15:45 -05:00
a8ef989084
cl-structures/stack: only drop if T needs drop
2024-04-27 21:08:09 -05:00
e7c5a02afa
cl-structures: Fully remove unused arenas v2 sources
2024-04-27 20:36:03 -05:00
12046fa9f7
cl-structures/intern: Fix doc comment
2024-04-27 20:26:45 -05:00
fb7de717d0
cl-structures: Remove arena.rs
and hashbrown dependency
2024-04-27 20:24:42 -05:00
3fe5916a4f
cl-ast: Switch from old string interner to new string interner
...
Update cl-parser, et. al. to match.
2024-04-27 20:24:11 -05:00
2c57f848ea
cl-structures: Fix doctest in deprecated_intern_pool
2024-04-27 20:19:46 -05:00
81cf05cc69
cl-structures: Interning v3: ACTUALLY DO THE THING
...
Here we have *real* interning, producing unique references if and only if the input is unique! Boy am I glad I invested time into this, because it's really fun to work with.
Hopefully my logic regarding Send-ness and Sync-ness aren't completely unsound.
2024-04-27 20:16:36 -05:00
83423f37be
cl-arena: Make arena constructors const fn
2024-04-27 16:52:20 -05:00
ecf97801d6
cl-typeck: Use helper functions on module to insert into the various namespaces
2024-04-27 16:10:22 -05:00
9566f098ac
cl-typeck: Remove NameCollectable trait, use NameCollector instead :D
2024-04-27 16:05:40 -05:00
b9085551e1
cl-typeck: Reimplement NameCollectable in terms of an AST visitor
2024-04-27 15:51:37 -05:00
a877c0d726
cl-arena: Add arena allocator implementation based HEAVILY on rustc-arena
...
It seems to pass the most basic of tests in miri (shame it needs the unstable `strict_provenance` feature to do so, but eh.)
2024-04-26 00:02:50 -05:00
893b716c86
cl-structures: Rename the deprecated "intern pool" (lmao)
...
Don't deprecate it yet, though, we've got more stuff yet.
2024-04-25 23:53:44 -05:00
e49b171bea
Rename DefItem/DefSource/DefSorcerer to better reflect their meaning
2024-04-25 16:07:26 -05:00
901e9d1d5b
cl-typeck: Remove nightly-only debug_closure_helpers
2024-04-25 15:55:32 -05:00
aa3f357fca
conlang: Misc. doc fixes
2024-04-24 20:05:55 -05:00
d4432cda7a
cl-structures: Give the StringArena a new home.
2024-04-24 19:52:56 -05:00
40ec9b30e4
conlang: Use interned strings (Sym
) for all symbols
2024-04-24 19:34:29 -05:00
ede00c3c86
cl-structures: Cleanup for GlobalSym
2024-04-24 18:11:21 -05:00
be604b7b45
cl-structures: Use hashbrown's hash table implementation for deduplication.
2024-04-24 17:43:02 -05:00
e70ffd1895
cl-structures: Global (ew!) and local string interning!
...
- StringArena provides an arena for immutable strings, inspired by other string interners, and keeps track of the ends of every allocated string. Strings inserted into the arena are assigned a Symbol.
- intern::Interner keeps track of the hashes of each inserted string, and provides deduplication for interned strings. This allows referential comparison between interned strings
- global_intern::GlobalSym provides metered access to a Global Interner, and has a Display implementation which queries the Interner.
The global interner is planned for use in cl-ast.
TODO: the unstable raw_entry API is about to be removed from Rust. Maybe switch to hashbrown, or write my own hash table?
2024-04-24 17:11:41 -05:00
f24bd10c53
cl-structures: intern_pool isn't unsafe
...
Nor is it an intern pool, it's more of an unstable typed arena. Ah well.
2024-04-24 17:00:58 -05:00
8453b092f1
cl-typeck: Fix list in doc comment getting mistaken for a doctest
2024-04-24 16:50:30 -05:00
42307d2ab4
cl-typeck: Sketch out a new way to store definition metadata
2024-04-22 23:17:50 -05:00
45d75bb552
cl-structures: Make Span and Loc functions const (now you can make a const Span!)
2024-04-22 21:44:12 -05:00
b74c4cd5bf
cl-parser: Forego RAII scopeguard finalization pattern in impl Fold for ModuleInliner
...
We have an outer function *right there* to do cleanup for us.
2024-04-22 21:43:30 -05:00
0c518b47e6
cl-ast: Give Path some inherent methods
2024-04-22 21:04:30 -05:00
169f61144b
cl-ast: Fix typo in ast_impl::convert impl From<AsRef<str>> for PathPart
2024-04-22 20:52:12 -05:00
ed9b73a1a3
repline: Remove default-features from crossterm, since we don't use the event API
2024-04-22 02:18:57 -05:00
2ed8481489
cl-repl: Switch from argh to argwerk
2024-04-22 02:03:04 -05:00
f483d690e2
Revert "Cargo.toml: Add documentation
key"
...
This reverts commit 087969e117
.
2024-04-22 00:07:44 -05:00
087969e117
Cargo.toml: Add documentation
key
2024-04-21 23:49:24 -05:00
116d98437c
cl-typeck: Promote some top-module notes to doc comments
2024-04-21 23:42:45 -05:00
8121c1c8bb
Move typeck.rs from cl-repl to cl-typeck
2024-04-21 23:41:38 -05:00
bf16338166
cl-typeck: Outline all modules.
2024-04-21 23:05:06 -05:00
9449e5ba06
cl-typeck: Sketch out a new path resolver algorithm, and reparent some unused cruft
2024-04-21 22:48:52 -05:00
b796411742
cl-typeck: Module imports v0.1
...
- NameCollects use items
- Preprocesses them
- Uses no fancy algorithms
- Doesn't respect item visibility at all
- *declaration-order-dependent* :(
- works, though! :)
- TODO: Lazy evaluation of literally any of this stuff.
2024-04-21 22:43:25 -05:00
ef190f2d66
cl-structures: Add get_many_mut
implementation for Pool (currently delegates to unstable std)
2024-04-21 22:32:47 -05:00
9c3c2e8674
cl-parser: Implement a module inlining pass
2024-04-21 22:31:01 -05:00
02323ae6f2
cl-parser: Sync error::Parsing with cl-ast
2024-04-21 21:20:55 -05:00
e36a684422
grammar: Make UseTree less ultra-janky
2024-04-21 18:57:46 -05:00
5341631781
conlang: Add constructor expression for structs!
...
grammar:
- Add new rules `PathLike`, `Structor`, `Fielder`
- Replace Path with PathLike in Primary expressions
cl-ast:
- Add nodes for Structor and Fielder
cl-parser:
- Add branch to path-expression parsing
- Parse Structor bodies
interpret:
- Add TODO
2024-04-20 15:02:16 -05:00
efd442bbfa
conlang: Import items into scope with use
!
...
grammar:
- Improve specification of `Path`
- Add `Use` and `UseTree` rules
- Add `Use` as a variant of ItemKind
cl-token:
- Add new keywords `use` and `as`
cl-ast:
- Add nodes for Use and UseTree
- Add new ItemKind for Use
- Implement traversal in Visit and Fold
cl-interpret:
- Mark ItemKind::Use with a todo
cl-parser:
- Update to match grammar
cl-typeck:
- Update to match changes in AST
- Mark UseTrees as NameCollectable and TypeResolvable, but leave as todos
2024-04-20 14:51:54 -05:00
9dc0cc7841
cl-interpret: Give the interpreter a little love
...
And stop copying strings around.
2024-04-19 10:49:25 -05:00
90a3818ca0
conlang: Move all cl-libs into the compiler directory
2024-04-19 07:39:23 -05:00