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
a3a87e0b67
test.cl: Fix moved i32 to module ::num
2024-04-22 15:47:37 -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
9b11543396
Update readme.md
2024-04-22 02:06:46 -05:00
2ed8481489
cl-repl: Switch from argh to argwerk
2024-04-22 02:03:04 -05:00
a3bb1ef447
stdlib: fix errant let in test.cl
2024-04-22 02:02:25 -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
2a5e965edf
sample-code: Add hello.cl
2024-04-21 23:07:16 -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
2a62a1c714
repline: Promote to its own crate!
...
cl-repl: Major refactor based on the design of typeck.rs
2024-04-19 07:30:17 -05:00
01ffdb67a6
cl-ast: Add Fold and Visit traits, to more easily map or collect nodes in the AST
...
typeck.rs: Since this is apparently my testbed now, add a new mode.
TODO: replace the main `conlang` binary with this, since it's so much better.
2024-04-19 03:21:07 -05:00
de024b6cb7
cl-repl: Remove references to the old Resolver
2024-04-19 03:01:24 -05:00
2834e4a8ea
cl-ast: Fix typo in format.rs
2024-04-19 02:47:55 -05:00
4ff101f0ee
yaml.rs: Fix extraneous pair in While
2024-04-18 23:58:44 -05:00
1fa027a0c2
cl-ast: Move AST into its own module
2024-04-18 21:31:46 -05:00
9a687624fc
stdlib: Add some funky syntax tests
...
TODO: make stuff like this into actual lexer->parser->analysis->interpreter tests.
2024-04-18 21:10:11 -05:00
e102ae25b4
typeck.rs: Make the REPL output a little less unreadable
2024-04-18 21:05:59 -05:00
a56ee38b15
cl-parser: General cleanup and maintenance
...
- Made infallible rules infallible
- Don't double-check keywords where keywords are required.
- Of course, this change means rules aren't self-contained
- Rename the `Call` precedence level
- Made member-access operators left-associative
- Removed the useless `Nothing` error type. :(
2024-04-18 21:04:16 -05:00
f315fb5af7
cl-ast: Overhaul pretty-printing using std::fmt::Write adapters.
...
Now you don't have to import cl_ast::format::*!!!
2024-04-18 20:47:28 -05:00
e4f270da17
cl-ast: Re-order items for aesthetic reasons
2024-04-18 20:22:08 -05:00
17a522b633
cl-parser: Make break bodies actually optional
...
Note: This goes against the original plan to 'not give Semi a special meaning', but it should be syntactically unambiguous.
2024-04-18 16:42:48 -05:00
736fc37a81
repline: Remove Ignore
trait, make debug output backspace-able
2024-04-18 01:56:45 -05:00