Age | Commit message (Collapse) | Author | |
---|---|---|---|
2 hours | rebel-lang: scope: minor code cleanupmain | Matthias Schiffer | |
3 hours | rebel-lang: scope: add helpers for Var access | Matthias Schiffer | |
3 hours | rebel-lang: add execute benchmark | Matthias Schiffer | |
3 hours | rebel-lang: scope: store initialization status separately from value | Matthias Schiffer | |
By storing a Value instead of an Option<Value>, we can just pass around a &mut Value instead of a ValueSlot. The initialized flag can also be used for typechecking, when no Value is available. | |||
5 hours | rebel-lang: reuse assignment code for let statements | Matthias Schiffer | |
This should ensure that let with expression is always equivalent to let + separate initialization. | |||
6 hours | rebel-lang: scope: allow assigning to _ patterns | Matthias Schiffer | |
6 hours | rebel-lang: scope: factor out assign_destr_pat_type() and ↵ | Matthias Schiffer | |
assign_destr_pat_value() helpers | |||
7 hours | rebel-lang: scope: allow assigning to tuple fields | Matthias Schiffer | |
7 hours | Update dependencies | Matthias Schiffer | |
8 hours | rebel-parse: recipe: allow negative integer literals | Matthias Schiffer | |
Parsing a number as a negative literal instead of a positive number with negation fixes parsing of i64::MIN. The rule is only used for this specific case though, as the unary_op + number rule will succeed first otherwise. | |||
8 hours | rebel-lang: add more detailed error information | Matthias Schiffer | |
The different error types for lookup, type and eval are unified. | |||
8 hours | rebel-parse: store number literals as i64 instead of u64 | Matthias Schiffer | |
Avoid a useless conversion during eval. | |||
9 hours | rebel-lang: scope: check index type in array index patterns | Matthias Schiffer | |
9 hours | rebel-parse, rebel-lang: rename base "expr"/"pat" fields to "base" in ↵ | Matthias Schiffer | |
index/field projection | |||
10 hours | rebel-lang: scope: allow assigning fields and array elements | Matthias Schiffer | |
13 hours | scope: introduce LookupError type | Matthias Schiffer | |
15 hours | rebel-parse: implement pattern validation | Matthias Schiffer | |
15 hours | rebel-parse: handle more pattern types | Matthias Schiffer | |
Add support for parsing parentheses, field access and index operations in patterns, and distinguish let and destructuring pattern. | |||
25 hours | rebel-parse: add type and pat modes to parse-string | Matthias Schiffer | |
25 hours | rebel-parse: add support for different path roots | Matthias Schiffer | |
Distinguish relative (unprefixed), absolute (`::` prefix) and section-specific (`recipe::`, `task::`) paths. | |||
25 hours | rebel-parse: sort keyword enum variants by name | Matthias Schiffer | |
25 hours | rebel-lang: scope: add helpers for path handling | Matthias Schiffer | |
2 days | rebel-parse, rebel-lang: remove array length from types | Matthias Schiffer | |
Tuples are sufficient for fixed-length data. For arrays, the small increase in type safety is not worth the large increase in complexity - both for the typechecker, and the usage of the language. The Coerce parameter of unify() is preserved for now, as it may become useful again for other types like sets. | |||
2 days | rebel-lang: merge ast_stmt_type() into record_type() and execute() | Matthias Schiffer | |
This deduplicates some code and improves type checking. | |||
2 days | rebel-lang: repl: use record_type() on a cloned Context instead of ↵ | Matthias Schiffer | |
ast_stmt_type() The whole typechecking will happen in record_type() to avoid duplicating the logic. | |||
2 days | rebel-lang: typing: do not accept _ in expressions | Matthias Schiffer | |
_ is a pattern, not an expression. | |||
2 days | rebel-parse, rebel-lang: distinguish let statements and simple assignments | Matthias Schiffer | |
2 days | rebel-parse, rebel-lang: rename "body" to "block" | Matthias Schiffer | |
2 days | rebel-parse: recipe: actually store fetch block in AST | Matthias Schiffer | |
2 days | rebel-lang: typing: implement turning an AST Type into a runtime Type | Matthias Schiffer | |
2 days | rebel-lang: scope: add type namespace | Matthias Schiffer | |
Create a type namespace that is separate from the value namespace, and initialize it with the basic types that should be in scope by default. | |||
2 days | rebel-parse: ast: typ: allow to distinguish between free and dynamic array ↵ | Matthias Schiffer | |
length | |||
2 days | rebel-parse: limit explicit array length specification to u32 | Matthias Schiffer | |
2 days | rebel-lang: limit array lengths to u32 | Matthias Schiffer | |
Make the supported maximum array length independent of usize. | |||
2 days | rebel-parse: token: reserve "let" and "mut" keywords | Matthias Schiffer | |
3 days | rebel-parse: replace TypedExpr with TypedPat | Matthias Schiffer | |
3 days | rebel-parse: create separate types to represent types | Matthias Schiffer | |
3 days | rebel-parse: rename struct field name from key to name | Matthias Schiffer | |
3 days | rebel-parse: split expr out of ast module | Matthias Schiffer | |
3 days | rebel-lang: typing: change function names for expr types | Matthias Schiffer | |
Be explicit about that these functions handle types of AST expressions, rather than an explicit type specification. | |||
3 days | rebel-lang: distinguish explicit and inferred type of variables | Matthias Schiffer | |
3 days | rebel-lang: add support str comparision | Matthias Schiffer | |
3 days | rebel-parse: use phf for faster keyword parsing | Matthias Schiffer | |
3 days | rebel-parse: reserve struct, map and set keywords | Matthias Schiffer | |
3 days | rebel-lang: typing: use write_str() to format constant strings | Matthias Schiffer | |
3 days | rebel-lang: value: fix Value enum variant names to match Type variants | Matthias Schiffer | |
3 days | rebel-lang: typing: remove unused Coerce::None | Matthias Schiffer | |
3 days | rebel-lang: typing: rename Coerce::Dynamic to Compare | Matthias Schiffer | |
Compare conveys what this Coercion mode is used for more accurately. | |||
3 days | rebel-lang: typing: Fix function call type checking to use Coerce::Assign | Matthias Schiffer | |
Apply the same rules to call parameters that are used for variable assignment. | |||
3 days | rebel-parse: grammar: order combined assignment operations | Matthias Schiffer | |
Test for more frequent operations earlier. |