Commit Graph

170 Commits

Author SHA1 Message Date
ba148ef5de cl-typeck: Continue work on symbol namespaces
- Refactor for cl-structures intern pool
- Create a list of types the compiler is supposed to care about/have implementations for (Intrinsic/primitive types)
- Add modules and projects (the sym equivalent of ast::File)
- Flesh out value definitions
  - TODO: Create an IR for statements and expressions, and lower the AST into it
2024-03-27 01:54:19 -05:00
8cbe570811 cl-structures: Sketch out a type-safe generic interning pool 2024-03-27 01:26:27 -05:00
66c29d601c cl-structures: Tree cleanup 2024-03-27 01:25:19 -05:00
9f9a21b4c3 cl-repl: Add example that prints the AST in a more friendly way than Debug but in a more verbose way than Display 2024-03-27 01:24:28 -05:00
2cdf112aa6 cl-structures: add todo w/r/t tree traversal api 2024-03-15 05:53:26 -05:00
af35dd1bb3 cl-structures: add a sized, monotype stack 2024-03-15 05:11:47 -05:00
ecde44910f cl-structures: Add a simple potted tree structure, for future use in the module system 2024-03-15 05:10:34 -05:00
a74cd0b8ac cl-structures: break span into its own file. 2024-03-12 19:32:11 -05:00
2eade74d3a cl-repl: Terminal pipe support + fun stylistic fixups 2024-03-01 05:33:35 -06:00
9cae7e4eb8 cl-lexer: switch to unicode-ident crate, since a dependency of cl-repl depends on it. 2024-03-01 04:11:38 -06:00
a07312bf92 cl-lexer: fix link in doc comment 2024-03-01 03:17:43 -06:00
a9b834e012 conlang: bump version number 2024-03-01 03:16:02 -06:00
57dada7aba gitea: update feature-proposal.md 2024-03-01 03:13:07 -06:00
ba6285e006 Pretend conlang has a complete compiler, and start mocking up a standard library 2024-03-01 02:50:50 -06:00
c7fdeaf37a cl-typeck: Begin work on new type-checker.
Comments in lib.rs outline my current thought processes
2024-03-01 02:49:22 -06:00
09737aa40b temp_type_impl: pretty-print functions 2024-03-01 02:47:07 -06:00
1eec1b06ce cl-ast: Move matched brace indenter out of ast_impl (it doesn't impl the ast) 2024-03-01 02:44:35 -06:00
276f0b1031 "libconlang": Remove libconlang 2024-03-01 02:38:00 -06:00
d7604ba039 cl-repl: restructure for future improvements. Replaces temporary handrolled argument parser with external dependency argh.
TODO: Rewrite `argh` in Conlang :^P
2024-03-01 02:35:58 -06:00
c71f68eb55 "libconlang": remove empty module tree tests 2024-02-29 21:05:39 -06:00
c665e52782 all: #![warn(clippy::all)] 2024-02-29 21:04:45 -06:00
50b473cd55 cl-lexer: Move lexer into its own crate 2024-02-29 20:58:50 -06:00
abf00f383c cl-parser: Move inline modules out of line 2024-02-29 20:44:49 -06:00
ab17ebbadc cl-parser: break parser into inline module 2024-02-29 20:43:40 -06:00
cc281fc6ab cl-parser: Move parser into its own crate 2024-02-29 20:41:07 -06:00
1afde9ce35 cl-ast: Move AST definition into its own crate 2024-02-29 19:49:50 -06:00
6e1d5af134 cl-token: Move token definition into its own crate 2024-02-29 19:36:06 -06:00
ee27095fb3 parser: expand the possibilities for assignment locations
This may be reverted later.
TODO: Formalize the concept of a place expression
TODO: Add this to grammar.ebnf
2024-02-29 19:33:28 -06:00
69f5035a8b span: Break out into its own crate, to make room for future expansion 2024-02-29 18:31:41 -06:00
362817e512 cl-repl: fix doctest in repline::ignore 2024-02-29 17:52:16 -06:00
421aab3aa2 interpreter: Break out into a separate crate
My editor's performance was tanking because of macro interpreter::builtins::builtin!

Temporary solution: move the interpreter into a separate crate

If I intended to keep the interpreter around, in the long-term, it might be an idea to make a proc-macro for builtin expansion.
However, the only reason I need the macros is because the interpreter's dynamic typing implementation is so half-baked. After I bang out the new type checker/inference engine, I'll have to rewrite the entire interpreter anyway!
2024-02-29 17:51:38 -06:00
5eb6411d53 interpreter: BuiltIn overhaul!
- Allowed builtins to self-describe
- Broke builtins into their own module
  - Created a macro to work with BuiltIns easier
  - Uses macro 2.0 syntax, so it requires passing in ALL externally referenced identifiers
    - Luckily, this is already a requirement of good, readable macro definitions!
- As a temporary hack, turn overloadable operators into function calls
  - This is kind of pointless at the moment, since there can only be one definition of a function per name (no ADL/function overloading/traits/type namespaces yet!)
  - This is also pretty slow, but benchmarking shows it's not as slow as I thought (~400x slower in release mode than a native Rust implementation when running `fib.cl`/`fib.rs`. Totally unacceptable for most work, but this is a tree walk interpreter.)
  - TODO: Remove this when desugaring from operators to function calls is implemented
2024-02-29 16:48:09 -06:00
e9dc8a7e32 cl-repl: hack together some temporary file loading, to aid in standard library development 2024-02-28 06:02:00 -06:00
862d81a9d4 cl-repl: Rename from cl-frontend.
Also disable escape code printing when debug assertions are off
2024-02-28 05:32:10 -06:00
048e41836a cl-frontend: Create a repline demo that collects definitions and usages of identifiers 2024-02-28 05:25:55 -06:00
78b8d87408 cl-frontend: Embrace the crossterm jank 2024-02-28 05:11:06 -06:00
e01c71f9a7 lexer: implement std::error:;Error for Error (whoops!) 2024-02-28 05:00:39 -06:00
3785045989 cl-frontend: fix strange newline behavior in REPL 2024-02-28 01:21:50 -06:00
67bb3d4ae3 parser: Note intent to switch to a Pratt parser 2024-02-27 23:35:41 -06:00
ca51a35f5c ast: Reduce the number of chained references to 65535 2024-02-27 23:33:20 -06:00
04320de9a8 parser: Make delim, sep, and rep const 2024-02-27 23:32:32 -06:00
325498ac8b ast: Add metadata attributes on Items
TODO: decide what other places attributes belong
2024-02-27 23:31:49 -06:00
9806e95247 ast_impl: Forgot to impl From<Expr> for StmtKind (whoops!) 2024-02-27 22:49:14 -06:00
5484d96e7d ast: Add the "Self" type in preparation for cl-typeck 2024-02-27 22:48:24 -06:00
e3f08ac013 parser: Overhaul the semi-functional Parser::{delimited, separated, repeated} methods into real higher-order functions 2024-02-27 22:46:36 -06:00
978f5e40c1 conlang: Introduce type-alias/typedef syntax
`type T;` | `type T = U;`
2024-02-27 20:49:02 -06:00
0c1b3bfe39 ast: Do not promise PartialOrd/Ord (breaking change) 2024-02-27 20:41:15 -06:00
87c8d43d11 grammar.ebnf: Fix ModuleKind grammar 2024-02-26 16:19:21 -06:00
c36eec216a parser: Allow StmtKind to parse itself (whoops!) 2024-02-26 16:03:18 -06:00
66deb41301 grammar.ebnf: Sync changes with AST 2024-02-26 16:02:36 -06:00