Karl Meakin
Karl Meakin
Rewrites operations on `select` to `select` on operations (eg `ineg(select(cond, x, y)) => select(cond, ineg(x), ineg(y))`. This transform is not obviously beneficial by itself, but it may expose more opportunities...
#### Feature The condition codes for performing the `>` and `>=` comparisons on integers should be removed from the Cranelift IR #### Benefit Makes the IR more strongly normalizing. At...
Replace `Vec` with `Vec
Fixes #507 When record types are quoted, the size of the environment is incremented with each field. But this is not done when record types are *created* during synthesis of...
``` // synthesises type `fun (A: Type) (B : Type) -> {x: A, y: B}` def good_id = fun (A: Type) (B: Type) (p: {x: A, y: B}) => ({x...
* Adds record and tuple patterns. * This required rewriting the pattern match compiler and coverage checker, following the algorithms outlined in [Compiling pattern matching to good decision trees](https://dl.acm.org/doi/10.1145/1411304.1411311) and...
Distinguish between the three ways that `RecordProj` can be an error: * The head expression is not a record (eg `Type.foo`) * The head expression is a record, but it...
* Move duplicated logic for synth/checking let terms into `synth_let_def` and add `LetDef` struct. * Replace some uses of `let initial_len = self.local_env.len(); ...; self.local_env.truncate(initial_len)` with `self.with_scope(|this| ...)` * Use...
Distinguish between the two different ways that `FunApp` can be an error: * Trying to apply any number of arguments to an expression that is not a function (eg `Type...
* Removes the `Array8`, `Array16` and `Array32` types and their corresponding functions, leaving only `Array64`. * Added `_extend_` and `_truncate_` for all integer types * ~~Implicitly insert extension functions during...