Nick Fitzgerald
381dadadd0
Move trie construction out to its own module
2021-11-11 15:56:55 -08:00
Nick Fitzgerald
bffaccde1f
Add a tutorial to the README
2021-11-11 15:56:55 -08:00
Nick Fitzgerald
0e082e8d6f
Make sure that every decl has a definition at the end of type checking
2021-11-11 15:56:55 -08:00
Nick Fitzgerald
d2bd07c246
Check that integer literals are primitive types in patterns
2021-11-11 15:56:55 -08:00
Nick Fitzgerald
ce207ee953
Check that integer literals are a primitive type
2021-11-11 15:56:55 -08:00
Nick Fitzgerald
a099b2b590
Extend fuzzing to semantic analysis and codegen
...
* Fix a panic when we are substituting macro args, but we already had an error
involving the macro.
* Fix a stack overflow when an internal extractor's definition is recursive.
2021-11-11 15:56:55 -08:00
Nick Fitzgerald
9be1942b11
Use .copied() instead of .cloned()
2021-11-11 15:56:55 -08:00
Nick Fitzgerald
6604a26e27
Add a top-level parse function
...
And make `parse_defs` take `self` by ownership. This avoids a couple `Vec`
clones.
2021-11-11 15:56:55 -08:00
Nick Fitzgerald
e3aeb850b2
Fix a panic when parsing var patterns
2021-11-11 15:56:55 -08:00
Nick Fitzgerald
f2b6244b9c
Fix some panics on parsing error paths
2021-11-11 15:56:55 -08:00
Nick Fitzgerald
6a523938de
Fix overflows when tokenizing integer literals
2021-11-11 15:56:55 -08:00
Nick Fitzgerald
825258939b
Define a fuzz target for the parser
2021-11-11 15:56:55 -08:00
Nick Fitzgerald
cfaa35d8c0
Use structopt to derive CLI flags
...
Instead of using `clap` directly
2021-11-11 15:56:55 -08:00
Nick Fitzgerald
6ffb02d9f6
Use miette for reporting errors
...
This gives us errors with annotated context like this:
```
Error:
× type error: Unknown variable 'x'
╭─[isle_examples/let.isle:24:1]
24 │ (Lower (B.B z))
25 │ (A.Add x y))
· ┬
· ╰── Unknown variable 'x'
╰────
```
2021-11-11 15:56:55 -08:00
Nick Fitzgerald
38da2cee3e
Switch to using thiserror
2021-11-11 15:56:55 -08:00
Nick Fitzgerald
b93304b327
Add docs to all public exports and deny(missing_docs) going forward
2021-11-11 15:56:55 -08:00
Nick Fitzgerald
922a3886d5
Fix let variable typing rules
2021-11-11 15:56:55 -08:00
Nick Fitzgerald
972dc00a92
Don't use &mut dyn Write in codegen
...
We always use a `String` which has infallible writing so we can remove all these
`Result`s and pretend-fallible methods.
2021-11-11 15:56:55 -08:00
Nick Fitzgerald
3535f82056
Remove an unused field in TermFunctionBuilder
2021-11-11 15:56:55 -08:00
Nick Fitzgerald
012f4b04d7
Update TODO
2021-11-11 15:56:55 -08:00
Nick Fitzgerald
5f5484ddbc
Use matches!(..) to make TrieNode::is_empty more concise
2021-11-11 15:56:55 -08:00
Nick Fitzgerald
66ba1d89b5
Remove TODO we don't want to do
...
If the extern types are represented with associated types, then we can't match
on them.
2021-11-11 15:56:55 -08:00
Chris Fallin
91904aa756
TODO items from call with fitzgen
2021-11-11 15:56:55 -08:00
Chris Fallin
20bc5ca7a8
Support extern constants of any primitive type.
2021-11-11 15:56:55 -08:00
Chris Fallin
d0ace640a2
TODO update.
2021-11-11 15:56:55 -08:00
Chris Fallin
521010cc4f
Split into isle and islec crates
2021-11-11 15:56:55 -08:00
Chris Fallin
e751f12ac5
Refactor to allow use as library, in order to allow build.rs usage.
2021-11-11 15:56:55 -08:00
Chris Fallin
83672a88cc
bugfix to macro template generation: exclude Pos on ident from equality (broken by recent commit)
2021-11-11 15:56:55 -08:00
Chris Fallin
3ed146b782
README update.
2021-11-11 15:56:55 -08:00
Chris Fallin
2a574b1b42
Properly track locations on every AST node. Semantic errors are much more useful now. Also print parse errors in same (pseudo-standard compiler error) output format.
2021-11-11 15:56:55 -08:00
Chris Fallin
7d38b3b6d8
Revamped error handling: keep going beyond some errors to accumulate a list of build errors, like most conventional compilers.
2021-11-11 15:56:55 -08:00
Chris Fallin
b46fa6acb0
Remove old/no longer used lower.rs
2021-11-11 15:56:55 -08:00
Chris Fallin
af9e01a456
Remove old .gitmodules -- no longer using wasmtime as a submodule
2021-11-11 15:56:55 -08:00
Chris Fallin
5a8e35b253
Some fixes to the internal-extractor macro substitution
2021-11-11 15:56:55 -08:00
Chris Fallin
3f96068f94
Some test cases for arg-less enums.
2021-11-11 15:56:55 -08:00
Chris Fallin
edc95c51a0
Support for bools. Also fix fallible/infallible mixup for ctors.
2021-11-11 15:56:55 -08:00
Chris Fallin
a412cce615
Infallible extractors, and some fixes to fallibility in return types (Option<T> vs T).
2021-11-11 15:56:55 -08:00
Chris Fallin
6daa55af82
Initial draft of DSL semantics complete.
...
This latest refactor adds "extractor macros" in place of the
very-confusing-even-to-the-DSL-author reverse-rules-as-extractors
concept. It was beautifully symmetric but also just too mind-bending to
be practical.
It also adds argument polarity to external extractors. This is inspired
by Prolog's similar notion (see e.g. the "+x" vs. "-x" argument notation
in library documentation) where the unification-based semantics allow
for bidirectional flow through arguments. We don't want polymorphism
or dynamism w.r.t. directions/polarities here; the polarities are
static; but it is useful to be able to feed values *into* an extractor
(aside from the one value being extracted). Semantically this still
correlates to a term-rewriting/value-equivalence world since we can
still translate all of this to a list of equality constraints.
To make that work, this change also adds expressions into patterns,
specifically only for extractor "input" args. This required quite a bit
of internal refactoring but is only a small addition to the language
semantics.
I plan to build out the little instruction-selector sketch further but
the one that is here (in `test3.isle`) is starting to get interesting
already with the current DSL semantics.
2021-11-11 15:56:55 -08:00
Chris Fallin
1ceef04680
(and ...) combinator in patterns
2021-11-11 15:56:55 -08:00
Chris Fallin
602b8308ce
More work on sketch for isel and some TODO items derived from it.
2021-11-11 15:56:55 -08:00
Chris Fallin
d725ac13b2
Codegen: parameterize on a generated Context trait that contains external ctors/etors.
2021-11-11 15:56:55 -08:00
Chris Fallin
3ccbaf0f69
Generate match {} statements by merging adjacent MatchVariant trie edges.
2021-11-11 15:56:55 -08:00
Chris Fallin
ed4c857082
Priority-trie: merge edges with different priorities into ranges when possible.
2021-11-11 15:56:55 -08:00
Chris Fallin
7865191093
Update long block comment describing priority trie in codegen.rs.
2021-11-11 15:56:55 -08:00
Chris Fallin
b8e916a0ab
Another example, testing rule priorities a bit
2021-11-11 15:56:55 -08:00
Chris Fallin
bc91a4e5f6
Add TODO
2021-11-11 15:56:55 -08:00
Chris Fallin
4a2cd78827
Working example and README
2021-11-11 15:56:55 -08:00
Chris Fallin
d7efd9f219
Working extractor and constructor generation from rules!
2021-11-11 15:56:55 -08:00
Chris Fallin
be1140e80a
WIP.
2021-11-11 15:56:55 -08:00
Chris Fallin
cd55dc9568
WIP.
2021-11-11 15:56:55 -08:00