78 Commits

Author SHA1 Message Date
31733ce425 bin: update for repline 0.0.12 2026-01-10 01:36:12 -05:00
5d724af37b doughlang: Doc fixes 2026-01-09 22:37:43 -05:00
a7ebf31878 typeck: Begin implementing scoping rules 2026-01-06 05:57:50 -05:00
2be73d2660 doughlang: symbol interning and AST reparameterization
- intern: Add interners from cl-intern

- ast:
- Break AST into ternimals (AstTypes) and nonterminals (Expr, Pat, Bind, Make, Use)
- Make AST generic over terminals (except operators, for now)
2026-01-06 04:57:15 -05:00
e4c008bd4b doughlang: Expressions in patterns
ast:
- Document operators
- Parameterize Pat with Annotation
- Consolidate Path and Lit into "Value" (Expr)
- Consolidate NamedRecord/Namedtuple into PatOp::TypePrefixed
- Allow Pat<Pat,*> patterns
- Additional helper functions on Expr and Pat

lexer:
- Support inner-doc comment syntax `//!`
  - Cleans up `///` or `//!` prefix

parser:
- Make Parse::Prec `Default`
- Allow expression elision after `..`/`..=`
- Fix Parser::consume not updating elide_do state
- Add token splitting, to make `&&Expr` and `&&Pat` easier
- error: Embed Pat precedence in ParseError
2026-01-05 15:17:22 -05:00
d6104b6a0b Update .gitignore 2026-01-05 14:33:06 -05:00
4d92954a5f main: expand the repl's capabilities to include debug + all syntactic positions 2026-01-03 22:03:10 -05:00
e199e15804 parser: Tweak type and fn precedence 2025-12-24 17:44:59 -05:00
4a38a0ebbf main: Put the expression body on line after byte-span 2025-12-23 05:01:53 -05:00
41b8688438 display: newline-indent bare function bodies(?) 2025-12-23 05:01:25 -05:00
a836de32c7 Use: add alias use foo as bar form 2025-12-20 06:09:31 -05:00
f551e3aef3 ast: Break compatibility
- Turned `static` and `const` into scoped modifiers (like `pub`
- Added anonymous record patterns
2025-12-20 05:22:14 -05:00
64ce18d576 examples: add silly to-lisp converter that doesn't produce any actual lisp 2025-12-16 04:18:30 -05:00
cca8347cc2 patterns: make PatOp::ArRep match Op::ArRep 2025-12-16 04:17:38 -05:00
1887c9c014 parser/pat: allow ranges in function type annotations 2025-12-05 09:24:57 -05:00
12cf529186 Cargo.toml: Use public version of Repline 2025-12-02 03:12:52 -05:00
e4f57250b5 Cargo.toml: update to repline 0.0.9 2025-12-01 23:25:28 -05:00
3b6cac2bcb .cargo: use sparse registry 2025-12-01 23:25:05 -05:00
e566ea62e5 ast: Give for loops a dedicated node and remove eager desugar 2025-12-01 23:16:47 -05:00
7ea483fe26 fmt: fix write_char not respecting indent string
take default indent string from env!
2025-12-01 23:09:58 -05:00
2e5cd3029f samples: remove receiver.do, fix usable.do 2025-11-04 09:17:12 -05:00
82ec6770c8 examples: Add sevenfold example demonstrating (and testing) Visit and Fold 2025-11-02 01:17:39 -04:00
bb10056f38 main: Print span of expressions, by parsing them as Anno 2025-11-02 01:10:36 -04:00
719f98917b ast: separate display impls from node decls 2025-11-02 01:10:11 -04:00
30871013cd parser/expr: Don't next() the precedences in bind; it makes everything less readable. 2025-11-02 00:37:28 -04:00
6c4c58dc2e parser/expr: Like I said in the comment... 2025-11-01 21:11:33 -04:00
c1d32f3efc ast: Add Fold, Folder traits, reorganize visit
parser: fix precedence of `BindOp::Let`
2025-10-29 04:39:41 -04:00
9a0d1232a6 token: docs
pat: Token::kind
2025-10-28 23:02:33 -04:00
d5e25a15dc ast: add continue expression 2025-10-28 22:47:58 -04:00
fb8677c937 lib.rs: improve the blurb 2025-10-28 22:17:43 -04:00
8e2bc5ad85 src: Split parser into modules, reorganize AST 2025-10-28 22:15:06 -04:00
a3cab92b35 parser: clean up unused ExplicitDo 2025-10-28 04:26:41 -04:00
0d7b89da96 ast: Add Visitor interface
Questions: do we need this?
2025-10-28 04:21:52 -04:00
588606e0c4 src: address a bunch of clippy::pedantic lints 2025-10-28 02:53:20 -04:00
0bf5a41498 syntax: Merge ALL definitions into Bind, and allow type variable introducers at every Bind 2025-10-28 02:27:56 -04:00
a29adeeef3 ast: move typedef up 2025-10-24 05:26:07 -04:00
287b57abd7 main: print parse stats when parse errors 2025-10-24 05:25:38 -04:00
89e4afcc42 parser: "Parse" type variable introducers (and discard them for now) 2025-10-24 05:24:58 -04:00
64dc8bb279 ast: add ptr patterns 2025-10-21 08:35:46 -04:00
263d2290c0 token: Make TKind::{Pub, Mod} match their keywords 2025-10-21 08:35:33 -04:00
3fd089ad11 parser: Move parse_for below impl Parse<'t> for Expr, and allow a single semi at EOF 2025-10-21 07:44:13 -04:00
6c57263492 token: Remove and and or tokens, since they clash with operator overload function names 2025-10-21 07:43:04 -04:00
115fe836f9 ast: move implementations of Expr below Op 2025-10-21 07:42:37 -04:00
c7e2e3d31d ast: pub patterns, and, since Pat replaced Ty, !(never) patterns. 2025-10-21 07:42:04 -04:00
ccb6bef6d9 ast: Add use, tackle remaining low-hanging fruit 2025-10-21 07:09:12 -04:00
9cccac5910 docs: Fix cargo-doc errors 2025-10-20 04:52:52 -04:00
b80a3a55c3 ast: Merge Ty into Pat, merge Mod and Fn into Bind 2025-10-20 04:24:21 -04:00
22094f4862 main: Clear screen on mode change 2025-10-20 00:40:22 -04:00
0015ac5f1b ast: rename Let to Bind 2025-10-20 00:39:56 -04:00
458e95a8ed AST: merge let, const, static, match_arm into one binder 2025-10-20 00:21:49 -04:00