Commit Graph

19 Commits

Author SHA1 Message Date
KtorZ
aadf3cfb48 Allow test definition to carry one parameter
The parameter is special as it takes no annotation but a 'via' keyword followed by an expression that should unify to a Fuzzer<a>, where Fuzzer<a> = fn(Seed) -> (Seed, a). The current commit only allow name identifiers for now. Ultimately, this may allow full expressions.
2024-03-03 19:33:24 +01:00
rvcas
25a837ab3f feat: parser and check fixes
- do not erase sequences if the sole expression is an assignment
- emit parse error if an assignment is assigned to an assignment
- do not allow assignments in logical op chains
2024-01-19 14:32:21 -05:00
rvcas
c910e0054e test(bls): constant parsing tests 2023-11-15 15:55:56 -05:00
microproofs
8b89ba3b93 feat: implement bls primitives in code gen 2023-11-15 15:55:56 -05:00
rvcas
3675762c3e feat(bls): aiken level g1 and g2 literals 2023-11-15 15:55:56 -05:00
rvcas
e5801f9c19 feat: support doc comments for functions args and validator params
- Add support to the formatter for these doc comments
- Add a new field to `Arg` `doc: Option<String>`
- Don't attach docs immediately after typechecking a module
  - instead we should do it on demand in docs, build, and lsp
  - the check command doesn't need to have any docs attached
  - doing it more lazily defers the computation until later making
    typechecking feedback a bit faster
- Add support for function arg and validator param docs in
  `attach_module_docs` methods
- Update some snapshots
- Add put_doc to Arg

closes #685
2023-10-16 13:38:23 -04:00
rvcas
dca09811c1 fix: empty records crashing code gen closes #728 2023-08-31 17:39:38 -04:00
rvcas
13ee62c05c fix: don't break failing test defs for current users 2023-07-12 09:16:37 -04:00
rvcas
03e7d6e944 feat: update syntax for failing test to be more consistent 2023-07-12 09:16:37 -04:00
KtorZ
78d34f7f76 Fix parsing of negative int patterns and constants
This was trickier than expected as the expression parser, and in particular the bin-op parser will interpret negative patterns as a continuation of a binary operation and eventually choke on the next right-arrow symbol. This is due to how we actually completely erase newlines once we're done with the lexer. The newline separating when clause is actually semantically important. In principle, we could only parse an expression until the next newline.

  Ideally, we would keep that newline in the list of token but it's difficult to figure out which newline to keep between two right arrows since a clause guard can be written over multiple lines. Though, since we know that this is only truly a problem for negative integers, we can use the same trick as for tuples and define a new 'NewLineMinus' token. That token CANNOT be part of a binop expression. That means it's impossible to write a binary operation with a minus over multiple lines, or more specifically, with the '-' symbol on a newline. This sounds like a fair limitation. What we get in exchange is less ambiguity when parsing patterns following expressions in when clause cases.

  Another more cumbersome option could be to preserve the first newline encountered after a 'right-arrow' symbol and before any parenthesis or curly brace is found (which would otherwise signal the beginning of a new block). That requires to traverse, at least partially, the list of tokens twice. This feels unnecessary for now and until we do face a similar issue with a binary operator.
2023-07-06 16:10:46 -04:00
KtorZ
549cf22cdd Rename (Un)TypedExpr.Int -> (Un)TypedExpr.UInt
We do not actually every parse negative values in there, as a negative value is a combination of a 'Negate' and 'UInt' expression.
  However, for patterns and constant, it'll be simpler to parse whole Int values as there's no ambiguity with arithmetic operations
  there. To avoid confusion of having some 'Int' constructors containing only non-negative values, and some being on the whole range,
  I've renamed the constructor to 'UInt' to make this more obvious.
2023-07-06 16:10:46 -04:00
KtorZ
ed85cb1c00 Fix todo/error parsing
This was a bit more tricky than anticipated but played out nicely in
  the end. Now we have one holistic way of parsing todos and errors
  instead of it being duplicated between when/clause and sequence. The
  error/todo parser has been moved up to the expression part rather than
  being managed when parsing sequences. Not sure what motivated that to
  begin with.

  Fixes #621.
2023-07-05 20:12:57 +02:00
KtorZ
66296df9c3 Move parsing of literals under new 'literal' parser module group
Also moved the logic for 'int' and 'string' there though it is trivial. Yet, for bytearray, it tidies things nicely by removing them from the 'utils' module.
2023-07-05 14:37:29 +02:00
KtorZ
e15cdaf248 Move 'utils::bytearray' to 'expr/bytearray' 2023-07-05 14:10:47 +02:00
KtorZ
93e010b345 Replace 'public' utils with a more generic 'optional_flag'
The 'public' util was arguably not really adding much except a layer of indirection.
  In the end, one useful parsing behavior to abstract is the idea of 'optional flag' that we use for both 'pub' and 'opaque' keywords.
2023-07-05 13:57:34 +02:00
rvcas
5e8edcb340 test(parser): finish moving tests to their correct modules 2023-07-04 17:48:48 -04:00
rvcas
a75bcff5c8 test(parser): type alias, anon fn, record update and more 2023-07-04 17:19:30 -04:00
rvcas
bd8c13c372 test(parser): move over the validator tests and some misc tests to parser 2023-07-04 17:19:29 -04:00
rvcas
6b05d6a91e test(parser): rename definitions to definition and more tests 2023-07-04 17:19:29 -04:00