Trevor Elliott
Trevor Elliott
When ISLE constructors fail to apply we currently return `None` with no additional information about what rule failed. To help with debugging, this PR adds an additional codegen flag called...
#### Input [→ View on sorbet.run](https://sorbet.run/#%23%20typed%3A%20strict%0Aclass%20A%0A%20%20extend%20T%3A%3ASig%0A%0A%20%20sig%20%7Bparams(y%3A%20T%3A%3AHash%5BString%2CString%5D%2C%20z%3A%20String).void%7D%0A%20%20def%20self.bar(y%3D%7B%7D%2C%20z%3A)%0A%20%20end%0Aend%0A%0AA.bar(%7B%20%22a%22%20%3D%3E%20%22foo%22%20%7D)) ```ruby # typed: strict class A extend T::Sig sig {params(y: T::Hash[String,String], z: String).void} def self.bar(y={}, z:) end end A.bar({ "a" => "foo" }) ```...
#### Input [→ View on sorbet.run](https://sorbet.run/#%23%20typed%3A%20true%0A%0Aclass%20A%3B%20end%0Aclass%20B%3B%20end%0Amodule%20M%3B%20end%0A%0Amodule%20Foo%0A%20%20extend%20T%3A%3ASig%0A%20%20extend%20T%3A%3AHelpers%0A%0A%20%20interface!%0A%0A%20%20sig%20%7Babstract.void%7D%0A%20%20def%20foo%3B%20end%0Aend%0A%0Aclass%20X1%0A%20%20extend%20T%3A%3ASig%0A%20%20include%20Foo%0A%20%20sig%20%7Boverride.void%7D%0A%20%20def%20foo%3B%20end%0Aend%0A%0Aclass%20Y%20%3C%20B%3B%20end%0A%0Aclass%20Z%0A%20%20extend%20T%3A%3ASig%0A%0A%20%20include%20M%0A%20%20include%20Foo%0A%0A%20%20sig%20%7Boverride.void%7D%0A%20%20def%20foo%3B%20end%0Aend%0A%0Amodule%20Main%0A%20%20extend%20T%3A%3ASig%0A%0A%20%20TypeArg%20%3D%20T.type_alias%20%7BT.all(T.any(A%2C%20B%2C%20M)%2C%20Foo%2C%20T.any(X1%2C%20Y%2C%20Z))%7D%0A%0A%20%20sig%20%7Bparams(x%3A%20TypeArg).void%7D%0A%20%20def%20self.test(x)%0A%20%20%20%20x.foo%0A%20%20end%0Aend%0A) ```ruby # typed: true class A; end class B; end module M; end module Foo extend T::Sig extend T::Helpers interface! sig {abstract.void} def foo;...
#### Input [sorbet.run](https://sorbet.run/#%23%20typed%3A%20true%0Aclass%20A%0A%20%20extend%20T%3A%3ASig%0A%20%20extend%20T%3A%3AGeneric%0A%20%20extend%20T%3A%3AHelpers%0A%0A%20%20A%20%3D%20type_template(fixed%3A%20Integer)%0A%0A%20%20%40f%20%3D%20T.let(nil%2C%20T.nilable(A))%0Aend) ```ruby class A extend T::Sig extend T::Generic extend T::Helpers A = type_template(fixed: Integer) @f = T.let(nil, T.nilable(A)) end ``` #### Observed output ``` editor.rb:9: Unsupported usage of...
Resolve overlap in the ISLE prelude and the x64 inst module by introducing new types that allow better sharing of extractor resuls, or falling back on priorities. This PR makes...
#### Feature While working on finishing the migration of the x64 backend to ISLE, I encountered a case where guarding a rule on specific ISA features being enabled caused the...
#### Feature When working on lowerings in ISLE, it's convenient to rely on implicit conversions to de-clutter the implementation. However this can hide bugs, as in the following example: ```scheme...
### `.clif` Test Case ``` function %f1(i64x2, i64x2) -> i32x4 { block0(v0: i64x2, v1: i64x2): v2 = uunarrow v0, v1 return v2 } ``` ### Steps to Reproduce Compile the...
### `.clif` Test Case ``` function %f3(i64x2, i64x2) -> i32x4 { block0(v0: i64x2, v1: i64x2): v2 = snarrow v0, v1 return v2 } function %f3(i64x2, i64x2) -> i32x4 { block0(v0:...
Remove the boolean types from cranelift, and the associated instructions `breduce`, `bextend`, `bconst`, and `bint`. Standardize on using `1`/`0` for the return value from instructions that produce scalar boolean results,...