Commit Graph

18 Commits

Author SHA1 Message Date
bb3eecd190 interpreter: Allow statements to choose their own return value (reduces code duplication) 2024-02-26 15:53:45 -06:00
ffa313eea8 ast: Allow type specifier in let statement 2024-02-26 15:49:55 -06:00
ae76df9c83 interpreter: Fix bug where a break instruction would instead signal a return from subroutine 2024-02-26 15:33:47 -06:00
1bfeeb1755 interpreter: shrink integers to pointer-size in temp type implementation, for speed 2024-02-26 15:32:49 -06:00
59b73f314a ast: Remove unary hash operator to reserve the symbol for use in attribute parsing 2024-02-26 15:30:50 -06:00
b8d70d3393 Cleanup: Break Loc out into a common module, rename WhileParsing => Parsing 2024-01-23 01:51:00 -06:00
c4a32895df conlang 0.3.0: Total grammar overhaul
- Rewrote the grammar
- Rewrote the AST
- Rewrote the Parser
- Removed pretty printer (now handled by ast::ast_impl::Pretty, a Writer wrapper)
- Added items, and new keywords to go with them
  - Syntax is ~maybe temporary, based on Rust syntax
2024-01-21 05:32:18 -06:00
6bb2f3774f interpreter: Add regression tests for operators and precedence 2024-01-09 23:52:48 -06:00
d9d8c70556 interpreter: revert storing environments in functions
This change broke recursion entirely
2024-01-09 22:42:15 -06:00
99ade72756 interpreter: fix variable resolution and assignment 2024-01-09 22:39:58 -06:00
53f9ec2356 interpreter: use an explicit stack, rather than a cons list
Also gets rid of some dead code
2024-01-05 22:47:16 -06:00
d387e4dfd7 interpreter: rewrite interpreter
- Remove interpreter struct
- Replace with `Interpret` trait
- This separates concerns dramatically! Yay!
- Implement block scoping via `Frame` abstraction
  - TODO: is this the right abstraction?
  - TODO: Modules??
  - TODO: What environment should be passed into a function call?
ast:
- rename Name.name to Name.symbol (name.name.name.name.name.name.name is very readable, yes yes)
2024-01-05 17:48:19 -06:00
79fda16788 cl 0.0.2: MAJOR ERGONOMIC BOOST
Broke frontend into its own library, "cl-frontend"
- Frontend is pretty :D
- Included sample fibonacci implementation

Deprecated conlang::ast::Visitor in favor of bespoke traits
- Rust traits are super cool.
- The Interpreter is currently undergoing a major rewrite

Added preliminary type-path support to the parser
- Currently incomplete: type paths must end in Never..?

Pretty printer is now even prettier
- conlang::ast now exports all relevant AST nodes, since there are no namespace collisions any more
2024-01-04 02:18:09 -06:00
ee5dabb4f3 Conlang: Implement functions 1.0 (Resolves #12)
- [x] Call syntax
- [x] Function declaration syntax
TODO:
- [ ] Any form of type checking
- [ ] Static variable resolution
- [ ] Closures, etc.
2023-10-29 23:47:00 -05:00
8fe89e6297 conlang: Variable binding and cleanup
ast: Separate concerns, and remove Walk
interpreter: implement variable binding
2023-10-29 01:13:48 -05:00
aead97e357 interpreter: Implement ranges and for loops 2023-10-26 21:51:18 -05:00
ed6917070c interpreter: fix comment 2023-10-26 14:51:13 -05:00
15a3d265df interpreter: Prototype interpreter
TODO: Type-checking, floats, variables & scope
TODO Later: A bytecode interpreter
2023-10-26 14:48:44 -05:00