Commit Graph

1362 Commits

Author SHA1 Message Date
Cainã Costa b80c41b4b7 chore: cargo fmt 2023-07-11 13:06:25 -04:00
Cainã Costa 14652abd4f fix: port last missing test
This test has been added after the first implementation, so we move it
to the new format :)
2023-07-11 13:06:25 -04:00
Cainã Costa 7f7a86765d feat: bring back formatting imdepotency test 2023-07-11 13:06:25 -04:00
Cainã Costa c27ef8ad93 chore: refactor formatting tests
This changes the tests from normal assertions into snapshot tests, as
well as standardizing test names.
2023-07-11 13:06:25 -04:00
rvcas 01be548752
chore: update stdlib version in new command relates to #672 2023-07-10 07:36:31 -04:00
Pi Lanningham 723c347a1a Clippy
Clippy has a build failure locally, for some reason, so I have to use CICD to find these
2023-07-09 23:16:01 -04:00
Pi Lanningham 189150612c cargo fmt :| 2023-07-09 23:16:01 -04:00
Pi Lanningham 26a4c57805 Clippy cleanup 2023-07-09 23:16:01 -04:00
Pi Lanningham c4690c6e00 Data parsing, tests 2023-07-09 23:16:01 -04:00
Pi Lanningham 6d9a95ef2d Add all but data parsing
Updates the parsing to the standard, *except* for Data, since that'll be more involved
2023-07-09 23:16:01 -04:00
Pi Lanningham a48c45b737 Formatting 2023-07-09 23:16:01 -04:00
Pi Lanningham ecff82659d Tweak pretty-printing
This pretty printing now (mostly) matches https://github.com/input-output-hk/plutus/issues/4751#issuecomment-1538377273; the only concern is whether the PlutusData stuff should be upstreamed to pallas, and whether pallas has a way to print BigInts easier
2023-07-09 23:16:01 -04:00
rvcas 94bf75dd1c
chore: delete unreferenced snapshots 2023-07-06 21:00:13 -04:00
KtorZ 126f2ab004 Implement new formatter for 'int'.
This is used for constants and patterns, which can carry negative
   values.
2023-07-06 16:10:46 -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 346df47232 Refactor chain parser
The main goal is to make the parser more reusable to be used for when-clauses, instead of the expression parser. A side goal has been to make it more readable by moving the construction of some untyped expression as method on UntypedExpr. Doing so, I got rid of the extra temporary 'ParseArg' type and re-used the generic 'CallArg' instead by simply using an Option<UntypedExpr> as value to get the same semantic as 'ParseArg' (which would distinguish between plain call args and holes). Now the chained parser is in a bit more reusable state.
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 5a4a2faa4d Split pattern parser into individual modules. 2023-07-06 16:10:46 -04:00
KtorZ 0650d6152d rename test cases for when/clause to somewhat match the file hierarchy. 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 2a747305f7
Fixes evaluation of large positive bigint in the UPLC machine
Fixes #511.
2023-07-05 18:52:14 +02:00
rvcas e331b3449b
chore: clippy fix 2023-07-05 12:06:03 -04:00
KtorZ a306d6e9f2
Move chain and chained parsing into their own submodule
Alleviate a bit more the top-level expression parser. Note that we
probably need a bit more disciplined in what we export and at what level
because there doesn't seem to be much logic as for whether a parser is
private, exported to the crate only or to the wide open. I'd be in favor
of exporting everything by default.
2023-07-05 15:18:07 +02:00
KtorZ 4f6defcf3e
rename: 'r' → 'expression' & 'seq_r' → 'sequence'
Better readability.
2023-07-05 14:42:14 +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 44eb501d78
Favor pattern-match over if-else when parsing assignment kinds
Equality on a union-type is potentially dangerous as the compiler won't
complain if we add a new case that we don't cover. Reversing the
assignment by yielding a `Token` for a given `AssignmentKind`. This way
we can use a pattern-match that got us covered for future cases.
2023-07-05 14:01:13 +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 47567c5e6f
test(parser): some adjustments after rebase with @ktorz fix 2023-07-04 17:19:30 -04:00
rvcas b25db429be
test(parser): anon binop and ambiguous sequence 2023-07-04 17:19:30 -04:00
rvcas 8a6c81493c
test(parser): record create 2023-07-04 17:19:30 -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
rvcas baf807ca2d
test(parser): list spread 2023-07-04 17:19:29 -04:00
rvcas 44d0432560
test(parser): int list 2023-07-04 17:19:29 -04:00
rvcas f9c099a923
test: add indoc to assert_expr macro 2023-07-04 17:19:29 -04:00
rvcas 715752718d
test: assert_module 2023-07-04 17:19:29 -04:00
rvcas da0b969865
test: adjust snapshots 2023-07-04 17:19:29 -04:00
rvcas 8a7df7f66b
test: add empty list test 2023-07-04 17:19:29 -04:00
Cainã Costa 291dedf4e8
chore: refactor all parse tests to use assert_parse! 2023-07-04 17:19:28 -04:00
rvcas f878ef7cef
feat: move some token processing to the lexer 2023-07-04 17:19:28 -04:00
rvcas 2226747dc1
feat: finish splitting up parsers 2023-07-04 17:19:28 -04:00
Cainã Costa 63cdb8aa09
chore: add more details on snapshot tests
We added a macro to add more information about the code that is being
tested, so we can add lots and lots of small snapshot tests.
2023-07-04 17:19:28 -04:00
Cainã Costa eeaa1a05d2
feat: add first code snapshot test with insta 2023-07-04 17:19:28 -04:00
Cainã Costa 58c854fd3f
feat: add insta as dependency
We are going to start to add "golden"/snapshot tests, so we are using
[insta](https://insta.rs) to do so.
2023-07-04 17:19:28 -04:00
rvcas eea94fc9a4
feat: move anon fn, let, and expect 2023-07-04 17:19:28 -04:00
rvcas 9c98fc8026
feat: start splitting apart expr_parser 2023-07-04 17:19:28 -04:00
rvcas e3ed5d3b00
feat: move expr_parser and remove module.rs to definitions 2023-07-04 17:19:28 -04:00
rvcas 3339d41fdd
feat: finish moving definitions and start exprs 2023-07-04 17:19:27 -04:00
rvcas fc580d4fa0
feat(parser): move definitions to their own modules 2023-07-04 17:19:27 -04:00
KtorZ 49098d5a45 Bump miette to 5.9.0
No particular reason, but it's good to be up-to-date with our dependencies.
2023-07-04 16:51:59 -04:00
KtorZ 5a6cc855e6 Use byte count for token span in the lexer.
Somehow, miette doesn't play well with spans when using chars indices.
  So we have to count the number of bytes in strings / chars, so that
  spans align accordingly.
2023-07-04 16:51:59 -04:00
microproofs 67c072a1a9 test: add acceptance test 86
fix: prevent mutual recursion for expect type code gen functions
2023-07-04 12:24:25 -04:00
Pi Lanningham c10f0e53df cargo fmt 2023-07-01 16:17:10 -04:00
Pi Lanningham 4a8cb72708 Add a blueprint policy command
Computes the policy ID of a minting policy; added guards for blueprint address to check that it's not a minting policy; Wasn't 100% sure where the errors should live, so I'm happy to move them if there's objections
2023-07-01 16:17:10 -04:00
microproofs 42544af799 fix: safe encode bits to check for 2^num_bits <= byte we are encoding
fix: I thought namedDeBruijn takes advantage of Binder for encoding and decoding.
It does not...
fix: Debruijn was being converted to NamedDeBruijn incorrectly
2023-06-30 23:06:38 -04:00
microproofs d641f731b7 fix: needed a stricter check for expect_pattern func on discard pattern 2023-06-28 15:54:59 -04:00
rvcas 90ff211205
chore: Release 2023-06-23 19:41:14 -04:00
rvcas 619b73d03e
feat: enhance new command 2023-06-23 19:40:11 -04:00
rvcas d633129ddf
fix: clearer unused var warning closes #579 2023-06-23 19:04:54 -04:00
microproofs 8b3504e9a1 fix: `expect _ = ...` not including the cast from data logic if the type is data and right hand has a type annotation 2023-06-23 18:39:12 -04:00
microproofs 226556bdd6 fix: builtins using the incorrect data to type conversion when used as a function param. 2023-06-23 14:31:19 -04:00
microproofs db369da96e feat: Make traces produced by expect dependent on
the value of the tracing flag.
2023-06-23 14:03:23 -04:00
microproofs dbfa08a5a7 fix: issue with tuple clause
It was not consuming the next case if there was no condition being checked in the clause.
Now it properly always consumes the next clause unless last clause.
2023-06-23 12:36:15 -04:00
microproofs 626033ff9b fix: attempt to convert from opaque before doing monomorphization 2023-06-22 18:20:31 -04:00
microproofs 24f5c4de6b fix: the final clause of a when expecting another clause afterwards in nested list cases.
fix: all elements were being destructured in tuple clauses even if not used
2023-06-19 21:43:38 -04:00
microproofs e1f788b628 chore: commit tests first 2023-06-19 21:43:38 -04:00
KtorZ 4252ee6373
Implement formatter for anon binop. 2023-06-17 08:44:59 +02:00
KtorZ 91f03abb7b
Support all binary operator in the anonymous binop parser. 2023-06-17 08:44:45 +02:00
KtorZ d0b4c1c3b5
Add remaining boolean comparison operator to anon binop parser.
Nothing to see here as they all have the same signature. Implementing
  arithmetic bin-operators and boolean logic operators will require some
  more logic.
2023-06-17 07:57:37 +02:00
KtorZ ec94230294
Extend parser to accept anonymous binop as expressions.
This is simply a syntactic sugar which desugarize to a function call with two arguments mapped to the specified binary operator.
  Only works for '>' at this stage as a PoC, extending to all binop in the next commit.
2023-06-17 07:36:11 +02:00
KtorZ ba911d48ea
Refactor 'is_capture' field on function expressions.
Refactored into an enum to make it easier to extend with a new variant to support binary operators.
2023-06-17 07:26:46 +02:00
microproofs 93135cebbb fix: redeemers in the script context are sorted by redeemer ptr not data hash 2023-06-16 12:24:44 -04:00
microproofs e72a9f8e0b chore: rearrange code gen test order 2023-06-14 13:12:49 -04:00
rvcas 85d82e5aec
chore: Release 2023-06-13 21:24:41 -04:00
rvcas 06079fa57e
fix: wow 2023-06-13 21:03:16 -04:00
microproofs 379c2fe2bf chore: Release 2023-06-13 20:32:22 -04:00
rvcas 878fd4de48 feat: include column number in location 2023-06-13 20:30:43 -04:00
rvcas 44e066f907 feat: add a panic hook, present issue link 2023-06-13 20:30:43 -04:00
microproofs c3bb7b0f75 fix: tail list being expected on when it should be empty 2023-06-13 12:03:38 -04:00
microproofs 1e0f7ea0ab fix: foldl test 2023-06-13 12:03:38 -04:00
microproofs af36b5ac77 fixes:
fix: Issue where using var pattern in a when was passing the constr index instead of the constr
fix: Issue where expecting on a list had unexpected behaviors based on list length
2023-06-13 12:03:38 -04:00
rvcas aeaec6bcd8
fix: record format when module select
- instead of checking the container we need to check
  the FieldAccess label.

closes #601
2023-06-13 00:18:32 -04:00
microproofs a5245fdc6b chore: couple more identity tests in optimize step 2023-06-10 00:01:54 -04:00
microproofs c5af6e0be3 chore: Release 2023-06-08 19:34:51 -04:00
KtorZ 6bd8e94e17
Preserve numeric underscore and hexadecimal notation through formatting. 2023-06-08 16:37:20 +02:00
KtorZ 0b7682306f
Refactor formatter to use new 'self.int' helper function. 2023-06-08 15:34:28 +02:00
KtorZ 79a2174f0a
Extend parser to support int as hexadecimal and numeric underscore.
We only allow numeric underscore for decimal numbers as I am not sure how we can define it for non-decimal numbers?
2023-06-08 15:33:50 +02:00
KtorZ 0ea11a4d13
Introduce new test cases for hexadecimal and underscore parsing. 2023-06-08 13:26:22 +02:00
rvcas 3fc9c8e0db
chore: re-add empty line handling by @KtorZ
Co-authored-by: KtorZ
2023-06-07 17:21:04 -04:00
rvcas 41a08e4a06
chore: re-add nix stuff from @waalge
Co-authored-by: waalge
2023-06-07 17:16:56 -04:00
rvcas 8d107b1293
fix(build): --uplc must use Program<Name> to pretty print 2023-06-07 16:25:59 -04:00
rvcas 1747090931
fix: fmt crashing with comment at end of file
closes #568
2023-06-07 15:59:54 -04:00
KtorZ 0afc3aba13
Fix operator precedences, in particular |>
Fixes #571.
2023-06-06 17:17:47 +02:00
microproofs 5faa925aea fix: error when using nested boolean checks in when conditions 2023-06-06 03:04:12 -04:00
microproofs bfd2a50a6b fix: zero arg functions were grabbing extra dependencies they didn't need to
fix: Had the wrong conversion for constant maps to plutus data. Fixed to check for right conversion
2023-06-04 15:23:36 -04:00
rvcas cf6d04e95b
chore: some clippy warnings 2023-06-02 19:47:52 -04:00
microproofs cdf8bd6548 fix: list items in when were not being added to scope
fix: tuple clause must preserve previous clause properties state
2023-06-02 18:38:21 -04:00
microproofs 8f0cf289b4 fixes:
fix: rearrange clauses and fill in gaps now handles nested patterns in a uniform way
fix: discards in records was being sorted incorrectly leading to type issues
chore: remove some filter maps in cases where None is impossible anyway
chore: some refactoring on a couple functions to clean up
2023-06-02 18:38:21 -04:00
rvcas 9c29f4f26b
fix: blueprints gen failing on List
closes #569

* added new methods to Definitions
  it doesn't use expect
* lookup was failing for the special map/pair case
  when resolving list generics

Co-authored-by: Pi <pi@sundaeswap.finance>
2023-06-02 17:53:10 -04:00
microproofs 6609ab335c chore: add another test for field destructuring in a list 2023-06-02 13:00:09 -04:00
Pi Lanningham fbec4a9385 Update docs.rs
The doc comment was long, leading to an incorrect description on the command line
2023-06-02 02:25:04 -04:00
rvcas cb9a140601
chore: Release 2023-06-02 00:34:07 -04:00
rvcas 335cc0c8bc
feat(cli): rework uplc subcommands
closes #553

* rename flat to encode
* rename unflat to decode
* alias both to their old names
* both only print to stdout
  use can pipe to file
* split cbor and hex flags
* hex flag works for either cbor or flat
* encode takes --to flag
  [name, named-debruijn, debruijn]
* decode takes --from flag
  [name, named-debruijn, debruijn]
2023-06-01 23:50:59 -04:00
rvcas e5d9398625 fix: add module name to type mismatch error
* if expected and given are equal then we show
  the module
* we could do it in all cases it looks kinda nice
* format is `Type - ModuleName`
2023-06-01 20:00:36 -04:00
microproofs 6955f79035 chore: update changelog
fix: Minor improvement to record update to use empty list instead of the null list from a record fields list.
2023-06-01 12:22:42 -04:00
microproofs deee50b77e fix: just change `as_key`
Co-authored-by: Lucas Rosa <x@rvcas.dev>
2023-05-31 00:27:31 -04:00
microproofs a6807f0bfb fix: seems like definition lookups weren't working
Co-authored-by: Lucas Rosa <x@rvcas.dev>
2023-05-31 00:18:05 -04:00
microproofs c710d488d6 fix: need to sort record update args so they match indices order 2023-05-30 20:23:12 -04:00
microproofs 52a51acc69 fix: fix record update so it actually works
Created multiple tests of varying record updates
2023-05-30 20:23:12 -04:00
microproofs e1e65d7695 typo 2023-05-30 17:28:52 -04:00
microproofs a65821d5ab fix: constrs that contain fields now work when passed as an arg to a function.
Convert acceptance test 22

Create test for passing constr as a function
2023-05-30 17:28:52 -04:00
rvcas 26a607eb00
fix: bad parsing of comments at end of file closes #551 2023-05-30 11:07:39 -04:00
rvcas 2860bac4c6
fix: bad parsing for module select type annotations closes #550 2023-05-30 10:39:49 -04:00
microproofs 28a9152f09 add acceptance tests to 20 2023-05-25 22:54:53 -04:00
microproofs f571665538 add test 18 2023-05-25 22:54:53 -04:00
rvcas 7b3e1c6952
feat: adjust failing test syntax
* also add a formatter test
2023-05-25 18:21:12 -04:00
Niels Mündler 00ac6b6c56 Fix dumping of builtin pairs 2023-05-25 18:03:24 -04:00
rvcas a44b5e1a77
test: adjust formatter tests after latest tweaks 2023-05-25 17:37:53 -04:00
rvcas 151db8d4ae
fix: formatter weirdness relates to #542 2023-05-25 17:19:02 -04:00
rvcas a124a16a61
feat(tests): implement a way to express that tests can fail 2023-05-25 16:54:53 -04:00
microproofs 6740107256 add acceptance test 17 2023-05-20 17:02:57 -04:00
microproofs dda8c4de7a adding more tests for code gen. 2023-05-20 15:29:13 -04:00
Micah Kendall ccb2d0b7ee urgent nix patch 2023-05-19 18:28:07 -04:00
rvcas d68d4656df
feat(aiken-new): output a github action
- bonus: include git short sha in version

closes #515
2023-05-18 01:33:03 -04:00
microproofs 8e60234562 chore: Release 2023-05-17 18:04:45 -04:00
microproofs 173154e406 fix: (code gen): expect type now properly tracks constructor dependency.
This was specific to code gen generated functions.
2023-05-17 17:56:01 -04:00
microproofs 340ed3b6a5 fix: case where identity function was used as a param.
This was causing a free unique. The fix is after stripping applied usage of identity,
we then check if it is passed around and if so we leave in the function declaration.
2023-05-16 16:21:37 -04:00
rvcas f2d8c8938c
chore: Release 2023-05-14 21:25:29 -04:00
microproofs 4838ebd39e feat: record modules are no longer unimplemented for no fields
refactor: remove some clones and use a ref instead
test: add acceptance test 81
2023-05-14 18:30:51 -04:00
microproofs 3356e2ecd0 fix: nested constrs with a single index was ignoring fields 2023-05-14 17:33:01 -04:00
microproofs c3eab4cc2a chore: fix up when tuple deconstruction test
add inline test for optimization tests
add some more builder functions
2023-05-11 18:06:46 -04:00
rvcas 1fb31e246c
fix: better conditional comp for wasm 2023-05-11 16:59:54 -04:00
rvcas e1a75391a1
chore: Release 2023-05-09 23:16:59 -04:00
microproofs 0c3dc0580a chore: add if_else optimization test 2023-05-09 19:09:24 -04:00
microproofs 6456001cbc fix: the uplc optimization tests were missing intern
add builtin force reduce tests
2023-05-09 18:55:53 -04:00
microproofs 419b946a82 fix: wrap_data_reduce optimization should leave constr data
and unconstr data untouched.
2023-05-09 16:56:50 -04:00
microproofs 4b8fd1769a chore: change pattern todos to have a better error message 2023-05-08 16:27:43 -04:00
microproofs 49898f7420 fix: to_data_builtin to operate on arg not func result 2023-05-08 16:15:09 -04:00
microproofs b36cf1c029 chore: refactor default functions in uplc_code_gen.
feat: Add an identity optimization to remove functions that return the argument only.
2023-05-08 16:15:09 -04:00
microproofs d2dbae1cbf fix:
Negative numbers now show up as a constant instead of 0 - that number

Expect on constructors without field maps no longer panics

Expect on constructors with discard as assigned field names now no longer throws free unique
2023-04-30 14:44:54 -04:00
microproofs b1728b57b8 chore: Release 2023-04-28 17:11:56 -04:00
microproofs 7201163b77 fix: better function hoisting for code gen functions
mainly code gen function dependencies won't be hoisted to the top.
2023-04-28 17:05:46 -04:00
microproofs 0d0c96deda commit validator changes and tests 2023-04-28 17:05:46 -04:00
microproofs b108c0f610 chore: add optimization test on unwrap data 2023-04-27 12:17:57 -04:00
microproofs 8b11844282 clippy fix 2023-04-26 17:40:27 -04:00
microproofs c3184c544c fix: wrap data reduce had the wrong argument called in recursively, thus skipping over cases that should have been reduced
chore: Add unit tests on for uplc optimizations
2023-04-26 17:22:16 -04:00
microproofs b050018a37 test fix: blueprint change 2023-04-25 02:06:56 -04:00