e3d94d8949
conlang: Unify binding operations!
...
This breaks out the pattern matching/unification algorithm from cl-interpret/interpret.rs to cl-interpret/pattern.rs
TODO: pattern destructuring in const, static :^)
2025-02-22 05:16:37 -06:00
697d139cfd
conlang: Add Tuple-Struct Patterns
...
- Patterns are no longer parsed with the highest precedence
- Function calls with just a path and a tuple of args can now be transformed into a Pattern
2025-02-22 01:37:08 -06:00
5d2c714bc1
conlang: Patterns...2!
...
- Deny arbitrary paths in patterns (only one non-keyword identifier allowed!)
- Allow patterns in for-loop binders (literally useless atm, but it's a step toward making patterns the only way to bind names.)
Next: Functions, Tuple Struct Patterns... And solving the stupid syntactic ambiguity of structors.
2025-02-22 01:00:29 -06:00
01cf9d93e2
cl-repl: Usability improvements
...
- Don't print empty
- Don't needlessly append newline to cleared screen
2025-02-18 21:48:36 -06:00
af9c293907
cl-interpret, cl-repl:
...
Move IO builtins into the CLI, so get_line can use repline keybinds.
2025-02-06 21:35:17 -06:00
6ee9bbd72e
conlang: PATTERN MATCHING AND DESTRUCTURED BINDINGS WOOOOO
...
- Integrate the Match and Pattern nodes into the AST
- TODO: `let x: T` is ambiguous with `let x: {}`. Currently the latter takes precedence in the parser.
- Implement pattern matching through unification in the interpreter.
- It's not fast, but it works!
- Refactor destructuring assignments to use the new pattern functionality
2025-01-29 04:15:33 -06:00
6e94b702c9
cl-ast: Add pattern and match nodes, and associated behaviors
2025-01-29 04:05:11 -06:00
d21683ad61
conlang: Add Quote
expression as a hack for testing
...
Possibly removed later, or replaced with something that turns Conlang AST nodes into Conlang data structures.
2025-01-29 03:56:19 -06:00
518fbe74a1
cl-ast: Fix AddrOf
misbehavior
2025-01-29 03:31:24 -06:00
86c4da0689
cl-repl: Don't print ConValue::Empty return values
2025-01-28 06:55:03 -06:00
883fd31d38
conlang: Elide lifetimes (fixes clippy lint)
2025-01-16 20:57:33 -06:00
8675f91aca
cl-ast: Remove tail from let (it caused more problems that it could've solved)
2024-07-31 03:19:20 -05:00
97808fd855
cl-parser: Transliterate to a trait-based parsing implementation
...
Bump version number.
2024-07-31 01:39:00 -05:00
388a69948e
Revert "cl-ast: Unify break
, return
, and unary
expressions"
...
This reverts commit adb0fd229c9621ad409871115f1a688ddf67e3f3.
2024-07-30 22:31:39 -05:00
adb0fd229c
cl-ast: Unify break
, return
, and unary
expressions
2024-07-30 20:16:07 -05:00
0e545077c6
cl-ast: Remove "Continue" struct
2024-07-30 19:42:28 -05:00
b64cc232f9
cl-ast: Move loop expression into unary exprs (with lowest priority)
2024-07-30 18:21:25 -05:00
b0341f06fd
cl-ast: Move let
into Expr
2024-07-30 18:02:09 -05:00
e43847bbd4
conlang: Introduce as
casting
...
Arbitrary primitive type conversion
Currently implemented as jankily as possible in the interpreter, but it works alright™️
2024-07-26 05:26:08 -05:00
695c812bf5
cl-repl: increase jank: first positional arg is main file, remainder are imports
2024-07-26 05:13:06 -05:00
3511575669
conlang: Add array and slice type syntax
2024-07-20 18:22:50 -05:00
b3d62c09aa
conlang: Self is not a type, it's a path to a type
2024-07-17 15:05:52 -05:00
c9ddebb946
cl-repl/menu: Revert extra newline in banner
2024-07-11 04:44:01 -05:00
5f57924f23
cl-repl: Perform module inlining before submitting code to the interpreter
2024-07-11 02:50:15 -05:00
3c4d31c473
cl-repl: Run by default, break into menu
2024-07-09 06:15:15 -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
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
40ec9b30e4
conlang: Use interned strings (Sym
) for all symbols
2024-04-24 19:34:29 -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 087969e1170e3474a8d2bf2d2afe5ebd691b960c.
2024-04-22 00:07:44 -05:00
087969e117
Cargo.toml: Add documentation
key
2024-04-21 23:49:24 -05:00
8121c1c8bb
Move typeck.rs from cl-repl to cl-typeck
2024-04-21 23:41:38 -05:00
9c3c2e8674
cl-parser: Implement a module inlining pass
2024-04-21 22:31:01 -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
90a3818ca0
conlang: Move all cl-libs into the compiler directory
2024-04-19 07:39:23 -05:00