Commit Graph

1739 Commits

Author SHA1 Message Date
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
microproofs ae68ae9afb fix: wrong var usage on inline_direct_reduce, now it properly looks at applied func not arg 2023-04-25 01:57:04 -04:00
rvcas baa2cef6c4
feat(playground): impl clone for some errors 2023-04-24 17:13:20 -04:00
microproofs ff87a4c60f fix: "when bool is" was not properly assigning term to body when not a complex clause
Add some end to end tests to test uplc
2023-04-23 12:51:23 -04:00
microproofs 9bb1a88f23 fix: expect [] on a non-empty list now fails. 2023-04-21 17:39:21 -04:00
microproofs 0066765ae5 convert acceptance tests 9-10 2023-04-21 16:01:54 -04:00
microproofs 016634fc38 fix: inline_direct_reduce now works properly 2023-04-21 16:01:54 -04:00
microproofs 0b7d217bd0 convert acceptance test 8 2023-04-21 16:01:54 -04:00
rvcas c9a762a13c
fix: we weren't including the name unused var warning 2023-04-20 16:53:56 -04:00
KtorZ 2a8488d3c1
Fix css media query for newly introduced navigation. 2023-04-20 16:49:45 +02:00
KtorZ 6b1ed427e7
Some minor stylistic improvements on docs generation
- [x] Show links to prelude, builtins and stdlib
  - [x] Remove project 'owner' in the header (only show repository)
  - [x] Fix type annotation overflow on mobile
  - [x] Remove the prewrap mode on mobile
2023-04-20 16:28:57 +02:00
KtorZ 4269cf20b0
Fix erroneous "aiken new" command's output instructions
Fixes #505.
2023-04-20 14:38:48 +02:00
microproofs 672a900243 chore: converted acceptance tests 5-7 2023-04-19 20:03:41 -04:00
microproofs c2ee631d07 feat: new setup for the gen_uplc testing
* new test only module aiken_project::tests
* move TestProject to tests/mod.rs
* new tests go in gen_uplc.rs
2023-04-19 16:08:55 -04:00
microproofs e4276d7f5a move uplc tests to new location 2023-04-19 16:08:55 -04:00
microproofs 23a7e7e680 chore: convert acceptance test 5
Also constructors with no fields are now converted to a constant data term.
2023-04-19 16:08:55 -04:00
microproofs 9de713803a feat: Add wrap data reduce which helps prevent unnecessary wrap to unwrap and vice versa.
fix: in inline_reduce the wrong arg name was used. arg instead of argument

refactor var occurences
2023-04-19 16:08:55 -04:00
microproofs 022d557906 chore: convert acceptance test 4 2023-04-19 16:08:55 -04:00
microproofs 7da3ac2c99 chore: convert acceptance test 3 2023-04-19 16:08:55 -04:00
microproofs 7dd13f8d73 feat: add end to end tests to replace acceptance tests with strict uplc comparison.
Add acceptance tests 1,2, 6 as end to end tests
2023-04-19 16:08:55 -04:00
rvcas 3182dac908
chore: Release 2023-04-17 10:53:30 -04:00
rvcas e3f2fb5393
fix: need to return deserialization error here 2023-04-17 10:50:40 -04:00
rvcas 3b351d36fb
fix(aiken-lang): assignment as last expr in when and if 2023-04-16 19:55:47 -04:00
rvcas 3d0fa1a5f6
chore: Release 2023-04-16 16:49:08 -04:00
rvcas 98c61ca151
feat(aiken-lang): anonymous functions
@MartinSchere noticed a weird error
where an unknown variable wasn't being reported
the type checker was incorrectly scoping
arguments for anonymous function definitions.
Luckily his compilation failed due to a FreeUnique
error during code gen which is good. But this may
have been the source of other mysterious FreeUnique
errors.

I also noticed that anonymous function allowed
arguments with the same name to be defined.

`fn(arg, arg)`

This now returns an error.
2023-04-16 16:38:43 -04:00
rvcas 63ddef7efb
chore: Release 2023-04-13 13:37:12 -04:00
rvcas 12e8ebdf4f
chore: revert version bumps 2023-04-13 13:03:43 -04:00
KtorZ 067e39286d
Bump versions to 1.0.0-alpha, update CHANGELOG. 2023-04-13 17:35:21 +02:00
KtorZ 00550f8ddb
Add myself as co-authors for some of the project's crate
Forgot to do it before, and noticing now :D
2023-04-13 17:25:21 +02:00
KtorZ e2c78bdd3b
Add min rust-version to crates
So that people runs into better errors if they try installing from source with an 'obsolete' rust compiler.
2023-04-13 17:24:44 +02:00
KtorZ 74a7257ec9
Add some more instructions to 'blueprint apply' command help text. 2023-04-13 12:23:20 +02:00
rvcas ccc450659a chore: switch discharge value back to the recursive form for simplicity 2023-04-13 01:28:27 -04:00
microproofs 564939ab61 feat
* remove more Rc's
* reconstruct Value::Builtin only when needed

Co-authored-by: Lucas Rosa <x@rvcas.dev>
2023-04-13 01:28:27 -04:00
microproofs 09a6ea51d6 feat(machine): reduce term allocations
* remove term from VBuiltin
* and also means we don't need the useless wrapping

Co-authored-by: Lucas Rosa <x@rvcas.dev>
2023-04-13 01:28:27 -04:00
rvcas 70f12d3fc5 chore: new branch with some things from the bumpalo branch 2023-04-13 01:28:27 -04:00
microproofs fc1b8738df fix: fixed how the ir was generating for expect Void, expect Bool, let Void
add some acceptance tests for the various scenarios
2023-04-12 22:37:33 -04:00
Kasey White 1e35281650
clause guard with discard is now handled 2023-04-12 08:26:03 +02:00
Kasey White 02d57cc076 tests pass now after adding in final wrapper as air elements 2023-04-09 17:43:56 -04:00
Kasey White e69a70f49c remove final wrapper and replace with equivalent air elements 2023-04-09 17:43:56 -04:00
Kasey White 9e95e24624 now tests are passing 2023-04-09 17:43:56 -04:00
Kasey White efb901f3b4 fix: issue with modifying a functions dependencies and adding a function that depended on it causing infinite loops 2023-04-09 17:43:56 -04:00
Kasey White a17ebf301f fix: now we monomorphize __expect_type functions 2023-04-09 17:43:56 -04:00
Kasey White 9d9f8a914a fix generics causing a free unique due to ordering in expect_type 2023-04-09 17:43:56 -04:00
Kasey White 581c86ed83 chore: commented code removal 2023-04-09 17:43:56 -04:00
Kasey White 4d97719e6d update blueprint tests with new hashes and script outputs 2023-04-09 17:43:56 -04:00
Kasey White 8d81345fb1 fix: diff_defined_types was not being filled if constructor had 0 args 2023-04-09 17:43:56 -04:00
Kasey White f8483da4e0 Code gen now handles expecting on validator args in the air stack.
Thus allowing us to use code gen created functions to expect on data types including recursive ones.
Some minor tweaks to the air.
Added a uplc optimization for later.
2023-04-09 17:43:56 -04:00
Kasey White 4e4eed13e1 refactor define_ir_recurse to use let else 2023-04-09 17:43:56 -04:00
Kasey White 4ff0504d58 feat: change define_ir_processor to handle code_gen_functions
Also flattened out that function by using let else
2023-04-09 17:43:56 -04:00
Kasey White bc7b07c1d9 fix: expect_type now works on recursice constructors and validator args are now handled by air 2023-04-09 17:43:56 -04:00
Kasey White a1b3ae52d8 fix: optimization that was being ignored 2023-04-09 17:43:56 -04:00
Kasey White 6c932bb562 expect on map and list now use a function that gets instantiated as air in code gen functions 2023-04-09 17:43:56 -04:00
Kasey White abd97f0ade changed assert_on_list from being defined at uplc level to being defined at air level to enable proper hoisting 2023-04-09 17:43:56 -04:00
Kasey White f4ba6b8985 fix: unused validator args had an incorrect if check 2023-04-09 17:43:56 -04:00
Kasey White 3f45b524b8 feat: unused validator args are not expect checked 2023-04-09 17:43:56 -04:00
Kasey White 8c8312a412 fix: expect true was always expecting false 2023-04-09 17:43:56 -04:00
Kasey White ddf0fbfa0a fix: expect void now checks for unit instead of expecting data
Args in validator are now fully expected on.
Add new air FieldsEmpty to make checking for empty constructors easier
2023-04-09 17:43:56 -04:00
KtorZ 4799af3242
Rework 'blueprint apply' command and wrap up wiring up validation.
The apply command now works only from a serialized CBOR data (instead of a UPLC syntax). So it is no longer possible to specify arbitrary cbor terms through the CLI. I believe it to be an acceptable limitation for now; especially given that Aiken will never generate blueprints with non-data terms at the interface boundary.
2023-04-08 08:57:40 +02:00
KtorZ bf222a3ea2
Fix reference JSON deserialization. 2023-04-08 08:57:40 +02:00
KtorZ c18deecdc8
Show slightly better schema mismatch errors
Display terms as CBOR diagnostic when they are Plutus data.
2023-04-08 08:57:38 +02:00
KtorZ 176cb45524
Factor out error (schema mismatch) creation during blueprint validation. 2023-04-08 08:57:04 +02:00
KtorZ 7d6612b108
Rework parameter validation to work from 'Constant' instead of 'Term'
This simplifies the code and makes it more efficient as we no longer need to wrap and unwrap constant terms constantly.
2023-04-08 08:57:03 +02:00
KtorZ d58ef1a079
Implement blueprint schema & data validations. 2023-04-08 08:57:03 +02:00
KtorZ ee220881b6
Generalize schema definition to work from inline schema or reference. 2023-04-08 08:57:03 +02:00
KtorZ d620f6367c
Bootstrap schema validation for simple constants. 2023-04-08 08:57:03 +02:00
KtorZ 9033b44044
Implement quick builder on PlutusData.
In the same spirit of the existing Term builder; I also added a `data`
  method to lift a `PlutusData` into a `Term<T>` and generalized a bit
  the builder to only require a `Term<Name>` when necessary and remain
  generic otherwise.

  The `PlutusData` builder could potentially be upstreamed to pallas
  diretly.
2023-04-08 08:57:03 +02:00
KtorZ f311e048b7
Improve error message on 'ParameterizedValidator'. 2023-04-08 08:57:01 +02:00
KtorZ cdc7ebf9a0
Remove now-unnecessary blueprint generics.
These were needed before as a way to _partially deserialize_
  blueprints. Indeed, some commands required accessing information of
  the blueprint, but not necessarily the schema. So out of laziness (or
  cleverness?), we only deserialized validators as serde::Value and
  achieved that through the use of generics.

  Now that validators and schemas have proper deserialisers, we can
  simply deserialize a blueprint.

  TODO: Our serialisation/deserialisation is safe with regards to
  itself; i.e. it roundtrips. However, we only supports a subset of the
  specified blueprint format. For example, we would fail to deserialize
  blueprints that have inline data-schemas (we only use references).
2023-04-08 08:53:51 +02:00
KtorZ f0d2d20a4c
Impl JSON deserialization for blueprint's 'Schema'. 2023-04-08 08:53:51 +02:00
KtorZ 565c0bea74
Write JSON deserializers for Reference, Constructors, Items and Data.
This is needed in order to deserialize a JSON blueprint and use it to perform validation.
  Still TODO:

  - [ ] Write JSON deserializer for 'Schema'

  Which should now be relatively straightforward.
2023-04-08 08:53:49 +02:00
rvcas 1444c9328d
fix some typos 2023-04-07 16:51:18 -04:00
KtorZ 057102c491
Add function to uplc::parser for string escape
Was originally written as a way to fix a failing property test on the
  program_builder; but the program builder is now gone. This function
  is still useful to have around.
2023-04-05 14:27:20 +02:00
rvcas 298e8068ee chore: remove program_builder 2023-03-30 21:15:27 -04:00
rvcas d8cbcde61d feat(validators): unused param warning
Params being unused were being incorrectly reported.
This was because params need to be initialized
at a scope above both the validator functions. This
manifested when using a multi-validator where one of
the params was not used in both validators.

The easy fix was to add a field called
`is_validator_param` to `ArgName`. Then
when infering a function we don't initialize args
that are validator params. We now handle this
in a scope that is created before in the match branch for
validator in the `infer_definition` function. In there
we call `.in_new_scope` and initialize params for usage
detection.
2023-03-30 21:15:27 -04:00
Kasey White 8fad5b77c6 chore: add some unit tests to stack 2023-03-30 11:32:18 -04:00
KtorZ 6a4f62d074
Allow newlines in when clause sequences. 2023-03-30 13:49:00 +02:00
KtorZ 5d4c95d538
Supports commenting validator inner functions. 2023-03-30 13:37:09 +02:00
KtorZ 814157dd7b
Fix formatter inconsistency with record spread patterns. 2023-03-30 13:02:20 +02:00
KtorZ 17431daaa4
Correctly nest multiline pipeline expressions. 2023-03-30 12:48:15 +02:00
KtorZ cb5dc75326
Remove unnecessary import. 2023-03-30 11:50:59 +02:00
KtorZ 1d3315005c
Support some single-character escape sequences in UPLC
Fixes #472.

  This also partially addresses #195. However, as pointed out in one of
  the comment, there's no 'official rule' when it comes to what should
  be considered valid escape sequences. Haskell relies mostly on the
  AttoParsec library and Rust also has its own set of rules.

  This is in particular true for unicode escape sequences, but there is
  a common middleground for some usual single character escapes such as
  \n or \\. So we now at least support these.

  For more complicated escape sequence, please refer to #195 for now and
  keep the discussion going there.
2023-03-30 11:50:59 +02:00
KtorZ dc500b8e13
Add missing import to owo_colors 2023-03-30 09:21:59 +02:00
KtorZ cc18e7cff2
Fix formatting of function expressions with traces
Fixes #471
2023-03-30 09:21:46 +02:00
KtorZ efa31e3df7
minor lsp tweaks
- forcibly disable colors
  - do not show labels in error messages
2023-03-29 18:25:56 +02:00
Kasey White aa29636d50 fix: scope issue with ir_stack being incremented wrongly with assignment
Also fixed  scope of constructor tag and void in whens
2023-03-28 21:15:22 -04:00
rvcas 80f2fd746d test(gen_uplc::scope): more replace unit tests
Co-authored-by: Kasey White <kwhitemsg@gmail.com>
2023-03-27 20:00:32 -04:00
rvcas e5980c5a96 feat(gen_uplc::scope): use some assumptions to simplify replace 2023-03-27 20:00:32 -04:00
Kasey White c8ac9aa165 test: add replace same value unit test 2023-03-27 20:00:32 -04:00
rvcas 5453572fc0 test(gen_uplc::scope): common ancestor method
Co-authored-by: Kasey White <kwhitemsg@gmail.com>
2023-03-27 20:00:32 -04:00
Kasey White 822bb4242a fix: function hoisting errors --
One involving zero args being hoisted instead of compiled and replaced.
Second involving not updating a function's dependeny function scope. Which then hoisted to a lower scope and caused free unique
2023-03-27 20:00:32 -04:00
rvcas 96b7fb1c50 chore: make clippy happy 2023-03-27 20:00:32 -04:00
rvcas b5ed958f62 chore: remove unused variable 2023-03-27 20:00:32 -04:00
Kasey White b2dcb112c9 fix last 2 acceptance tests 2023-03-27 20:00:32 -04:00
Kasey White 51a6589aac 2 acceptance tests left to fix 2023-03-27 20:00:32 -04:00
Kasey White eef34b8f4b feat: all compiler errors fixed
Co-authored-by: Lucas Rosa <x@rvcas.dev>
2023-03-27 20:00:32 -04:00
Kasey White 25ff8acb1e feat: one more function to finish up 2023-03-27 20:00:32 -04:00
Kasey White 77afa76163 feat: refactor handle_each_clause
fix expect type ordering on constr type checking
2023-03-27 20:00:32 -04:00
rvcas f07a959ab8 feat: almost done
Co-authored-by: Kasey White <kwhitemsg@gmail.com>
2023-03-27 20:00:32 -04:00
rvcas 709ee914ed feat: another round of functions using AirStack
Co-authored-by: Kasey White <kwhitemsg@gmail.com>
2023-03-27 20:00:32 -04:00
rvcas 489dd235ff feat(gen_uplc): finished up a few more functions
Co-authored-by: Kasey White <kwhitemsg@gmail.com>
2023-03-27 20:00:32 -04:00
rvcas 33a3c5dc13 feat(gen_uplc): introduce scope new type
* new module scope which holds some ancestor logic
* rework some things to truly hide scope increments

Co-authored-by: Kasey White <kwhitemsg@gmail.com>
2023-03-27 20:00:32 -04:00
rvcas ca0d896b8d feat: start using AirStack methods
Co-authored-by: Kasey White <kwhitemsg@gmail.com>
2023-03-27 20:00:32 -04:00
rvcas 3e6f688e2d feat: refactor some methods and modules
* move uplc::ast::builder to uplc::builder
* rename aiken_lang::uplc to aiken_lang::gen_uplc
* move aiken_lang::air and aiken_lang::builder to aiken_lang::gen_uplc
  as submodules

Co-authored-by: Kasey White <kwhitemsg@gmail.com>
2023-03-27 20:00:32 -04:00
Kasey White 2d77ec1a6a add merge function 2023-03-27 20:00:32 -04:00
Kasey White 32d34d5fd3 create struct Air Env
refactor out some to_strings
2023-03-27 20:00:32 -04:00
Kasey White bb820ebdd8 fix: trace and scope issues
fix scope issues involving fieldsexpose and other destructureing pattern
fix trace to extract string from term.
2023-03-21 12:38:13 -04:00
Kasey White 6e5b24a937 refactor the rest of the term builders to use more concise code 2023-03-21 00:50:13 -04:00
Kasey White 7c3750bbb4 fix: apply order on field expose 2023-03-21 00:50:13 -04:00
Kasey White 50db958d06 update codegen to use more streamlined uplc building methods 2023-03-21 00:50:13 -04:00
Kasey White ef3862ade8 refactor: uplc code gen uses shorthand methods 2023-03-21 00:50:13 -04:00
Kasey White 74a7a2f214 commit air changes that expose scope as a mutable pointer 2023-03-21 00:50:13 -04:00
KtorZ 6422027c6c
Fix README template for newly generated projects, and hello, world 2023-03-18 22:23:55 +01:00
KtorZ 0f35675f57
remove wrongly committed println. 2023-03-18 17:33:21 +01:00
KtorZ 0b8c3b05fe
Fill-in test scenario for parsing large integer constants. 2023-03-18 16:17:42 +01:00
KtorZ 8a2af4cd2e
Fix lexer throwing errors when parsing a too large tuple index. 2023-03-18 16:13:50 +01:00
rvcas 2dbc50f098
feat: generate_test doesn't need arguments 2023-03-17 18:41:22 -04:00
rvcas 74c61358ab
feat: new error for when multi-validators have the same arg count 2023-03-17 18:40:50 -04:00
rvcas d753b57c1b
chore: use let-else 🤯 2023-03-17 18:40:49 -04:00
KtorZ bc690c5410
Generated wrapped schemas for multi-validators' redeemers 2023-03-17 18:40:49 -04:00
Kasey White bb6fc76971
start on registering redeemer wrapper type in definitions 2023-03-17 18:40:49 -04:00
KtorZ 7e1403a3b2
Complete generation of blueprint multi-validators. 2023-03-17 18:40:49 -04:00
Kasey White fe92b27d50
start on refactoring validator to support multi-validators in blueprint 2023-03-17 18:40:49 -04:00
KtorZ 61113cd7b9
distinguish between multi vs single validator case in blueprint schema generation. 2023-03-17 18:40:48 -04:00
Lucas 22880a300f
Update crates/aiken-lang/src/parser.rs
Co-authored-by: Matthias Benkort <5680256+KtorZ@users.noreply.github.com>
2023-03-17 18:40:48 -04:00
Lucas 950598b534
Update crates/aiken-lang/src/parser.rs
Co-authored-by: Matthias Benkort <5680256+KtorZ@users.noreply.github.com>
2023-03-17 18:40:48 -04:00
Lucas 3d92772d23
Update crates/aiken-lang/src/tipo/infer.rs
Co-authored-by: Matthias Benkort <5680256+KtorZ@users.noreply.github.com>
2023-03-17 18:40:48 -04:00
Lucas bf34324ac0
Update crates/aiken-lang/src/format.rs
Co-authored-by: Matthias Benkort <5680256+KtorZ@users.noreply.github.com>
2023-03-17 18:40:48 -04:00
rvcas c3870e340e
feat(codegen): support multi-validators
* rename force_wrap to force
* add a bunch of builder methods to Term<Name>
* refactor one tiny location to show off builder methods
* split generate into `generate` and `generate_test`
* create wrap_as_multi_validator function

Co-authored-by: Kasey White <kwhitemsg@gmail.com>
2023-03-17 18:40:44 -04:00
rvcas 87493bbba9
feat(register_values): refactor repeated code into register_function and register other_fun 2023-03-17 18:38:24 -04:00
rvcas 15bdb6972d
feat(fmt): better validator formatting with double supported 2023-03-17 18:38:24 -04:00
rvcas ed92869fb9
feat(validator): parsing and typechecking for double validators 2023-03-17 18:38:24 -04:00
Matthias Benkort 3eccc349aa
Merge pull request #459 from aiken-lang/remove-multi-subjects
Cleanup implementation from multi-subjects when/is
2023-03-17 14:58:56 +01:00
KtorZ 660d2199d4
Make blueprint generation deterministic
Sort validators before iterating on them.
2023-03-17 14:57:39 +01:00
rvcas 5e3a902c75 fix: add back some extra info on display 2023-03-17 09:35:10 -04:00
KtorZ 28a3844d54
Cleanup implementation from multi-subjects when/is 2023-03-17 13:06:39 +01:00
KtorZ c113582404 Support multi-clause patterns as syntactic sugar
And disable multi-patterns clauses. I was originally just controlling
  whether we did disable that from the parser but then I figured we
  could actually support multi-patterns clauses quite easily by simply
  desugaring a multi-pattern into multiple clauses.

  This is only a syntactic sugar, which means that the cost of writing
  that on-chain is as expensive as writing the fully expanded form; yet
  it seems like a useful shorthand; especially for short clause
  expressions.

  This commit however disables multi-pattern when clauses, which we do
  not support in the code-generation. Instead, one pattern on tuples for
  that.
2023-03-16 19:45:41 -04:00
KtorZ 660ca3fada Fix comment formatting wrongly assuming false invariant. 2023-03-16 18:44:11 -04:00
KtorZ 57e217e81c Add failing tests (fmt panic) on weird doc comments.
Isolated doc comments causes the compiler to panic with:

  ```
  'no consecutive empty lines'
  ```

  This is reproducible when doc comments are wrapped in sandwich between
  comments and newlines.
2023-03-16 18:44:11 -04:00
KtorZ 0feb2df0a0
Minor error messages fixes. 2023-03-16 23:35:12 +01:00
Lucas fab6d56bf2
Merge branch 'main' into newline-assignment 2023-03-16 15:30:55 -04:00
KtorZ 5d3816e984 Improve warning message for UnusedVariable 2023-03-16 15:29:44 -04:00
KtorZ a5e505e6b0 Remove unused let-binding from type-checking
The typed-AST produced as a result of type-checking the program will
  no longer contain unused let-bindings. They still raise warnings in
  the code so that developers are aware that they are being ignore.

  This is mainly done to prevent mistakes for people coming from an
  imperative background who may think that things like:

  ```
  let _ = foo(...)
  ```

  should have some side-effects. It does not, and it's similar to
  assigned variables that are never used / evaluated. We now properly
  strip those elements from the AST when encountered and raise proper
  warnings, even for discarded values.
2023-03-16 15:29:44 -04:00
KtorZ 45ea7acc6a Refactor infer_assignment code to be more future-proof
It's generally a bad idea to use equality on enum variants because this won't trigger any compiler errors in the future yet could have hazardous effects if adding new variants. So it's usually preferrable to use exauhstive pattern matching and let the compiler warn missing cases in places where it matters.
2023-03-16 15:29:44 -04:00
KtorZ 5bea2d163d Fix comments and remove commented-out code. 2023-03-16 15:29:44 -04:00
KtorZ da8d3fc1fc Removed unused warning variant: UnusedLiteral 2023-03-16 15:29:44 -04:00
KtorZ 20f5baffa7
Enforce newline after assignment / clause.
This leads to more consistent formatting across entire Aiken programs.
  Before that commit, only long expressions would be formatted on a
  newline, causing non-consistent formatting and additional reading
  barrier when looking at source code.

  Programs also now take more vertical space, which is better for more
  friendly diffing in version control systems (especially git).
2023-03-16 19:46:46 +01:00
KtorZ d59305a1b0
Provide better compiler feedback for type holes in annotations.
It is now possible to leave a hole in a type annotation and have the compiler fill-in the expected type of us.
  This is a pretty useful debugging tool when playing with complex functions.
2023-03-16 14:07:06 +01:00
rvcas bf94956c7e feat: print todo's type when printing the todo warning 2023-03-15 16:43:09 -04:00
Kasey White f830172493 fix: wrong scope being passed in for unwrapdata and wrapdata in assignment ir
Closes #441
2023-03-14 17:05:27 -04:00
rvcas 2a00ef281b
chore: bow to the clippy 2023-03-14 17:03:28 -04:00
KtorZ 724f1ac4b6 Remove unused 'FlexBreak'
The difference between 'FlexBreak' and 'Break(Mode::Strict/Flexible)' as always confused me; and turned out that the 'FlexBreak' thingy is never used. This is dead-code, so I removed it.
2023-03-14 16:47:43 -04:00
KtorZ 1311d9bd27 Support flexible pipe operator formatting
Rules are now as follows:

  - If a pipeline contains a newline, then the entire pipeline is formatted over multiple lines.
  - If it doesn't, then it's formatted as a single-line UNLESS it cannot fit; in which case, we fallback to multiline again.
2023-03-14 16:47:43 -04:00
KtorZ ae981403c6 Re-introduce field title & description in referenced schemas. 2023-03-12 12:44:49 -04:00
KtorZ 451737237e Fix blueprint generation for recursive types.
This was a bit tricky and I ended up breaking things down a lot and
  trying different path. This commit is the result of the most
  satisfying one.

  It introduces a new 'concept' and types: Definitions and Reference.
  These elements are meant to reflect JSON pointers and JSON-schema
  definitions which we now use for pretty much all user-defined
  data-types.

  In fact, Schemas are no longer inlined, but are always referencing
  some schema under "definitions".

  This indirection is necessary in order to cope with recursive types.
  And while it's only truly necessary for recursive types, using it
  consistently makes it both easier to produce and easier to consume.

  ---

  The blueprint generation for recursive types here also works thanks to
  the 'Definitions' data-structure wrapper around a BTreeMap. This uses
  a strategy where:

  (1) schemas are only generated if they haven't been seen before
  (2) schemas are marked as seen BEFORE actually being generated (to
  effectively stop a recursive generation).

  This relies on one important aspect: the key must be uniquely
  identifying a given schema. Which means that we have to monomorphize
  data-types with generic parameters also here, and use keys that are
  specialized in one data-type.

  ---

  In this large overhaul we've also lost one thing which I didn't bother
  re-introducing yet to keep the work manageable: title for record
  fields. Before, we use to pull those from record constructor when
  available, yet now, every record constructor has been replaced by a
  `$ref`. We could theoritically attach a title to the reference. I'll
  try to quickly add that in a later commit.
2023-03-12 12:44:49 -04:00
KtorZ f67e049dc2 Introduce indirection for fields. 2023-03-12 12:44:49 -04:00
KtorZ 3a7aac0a33 Make blueprint code slightly more resilient to changes.
Leverage traits instead of hard-coded type parameters.
2023-03-12 12:44:49 -04:00
KtorZ e44f18bae5 Add failing test scenario for recursive types. 2023-03-12 12:44:49 -04:00
Kasey White 4a7bbc23df fix: change in scope was applied in wrong place in pattern_ir for constr expect 2023-03-12 00:25:26 -05:00
rvcas 6440c4f498
fix(codegen): tuple pattern scopes
Co-authored-by: Kasey White <kwhitemsg@gmail.com>
2023-03-09 19:30:52 -05:00
Kasey White f377d60085 ChooseData is now lazy with its branch arguments.
This enables calling the un_data builtins directly from choose_data args
2023-03-09 00:31:57 -05:00
rvcas 553eb88d3d fix(check): record field access properly restricted to single constr types 2023-03-08 23:50:16 -05:00
rvcas 41e725152e
feat(unify): cannot cast between string and data closes #432 2023-03-08 22:47:38 -05:00
Kasey White c85240cbed Fix exception when doing expect boolean = ..
Add new Air Assert Bool
Add acceptance test 76
2023-03-08 22:31:30 -05:00
rvcas 6cde0628a7 fix(check): filter tests before code gen
Co-authored-by: Kasey White <kwhitemsg@gmail.com>
2023-03-08 20:58:27 -05:00
KtorZ a66c9bd2c3
Remove redundant match on tuple blueprint generation. 2023-03-08 16:40:03 +01:00
KtorZ 2c987e289d
Fix 'find_modules_prefix' when generating docs. 2023-03-08 12:28:01 +01:00
KtorZ ab32302117
Only generate documentation of current package with 'docs'
This was generating documentation for ALL packages including dependencies.
2023-03-08 12:00:59 +01:00
KtorZ 0ea4538cac
Fix typo and pluralize message for invalid field arity error. 2023-03-08 11:44:54 +01:00
Matthias Benkort d8934b3d8d
Merge pull request #421 from aiken-lang/monomorph-panic-fix
Functions with only a generic return weren't being properly monomorph…
2023-03-08 11:39:50 +01:00
Kasey White 89373c32e6
Functions with only a generic return weren't being properly monomorphized. Fixed that. 2023-03-08 10:31:05 +01:00
rvcas f8545854fc
feat: json output for uplc eval 2023-03-08 10:19:36 +01:00
rvcas bd7b8792bf
feat: introduce EvalResult type 2023-03-08 10:19:36 +01:00
rvcas 4f1d14f2a0
feat: introduce miette into uplc 2023-03-08 10:19:35 +01:00
KtorZ cb11b21c9f
Update dependencies
In particular, tempfile >= 3.4.0 to remove the vulnerability on remove_dir_all
2023-03-08 10:17:22 +01:00
rvcas 8f765bfd52
fix: some breaking changes from pallas v0.18 2023-03-06 13:17:14 -05:00
rvcas c3175e2fc9
fix: some breaking changes from clap v4 2023-03-06 13:16:33 -05:00
rvcas 79c2cb3062
fix: toml now have a better way to capture error spans 2023-03-06 13:15:48 -05:00
rvcas 92161bed43
fix: From<&str> for GlobPattern does not exist need to use string 2023-03-06 13:15:12 -05:00
rvcas 1902a2d56c
chore: update all deps 2023-03-06 13:13:59 -05:00
rvcas 1f8535e76e
chore: update some deps 2023-03-06 11:09:44 -05:00
rvcas 9f587e802c chore: update comment 2023-03-03 20:57:20 -05:00
rvcas e2dc4ec6c8 feat: implement convert command 2023-03-03 20:57:20 -05:00
rvcas 812ffb30f0 feat(cli): wire together a new command for convert 2023-03-03 20:57:20 -05:00
Kasey White f230af436c fix: scope issue with expect and function calls
Add acceptance test 72
2023-03-03 01:00:35 -05:00
Kasey White 60bc2ab61d clippy 2023-03-02 21:49:20 -05:00
Kasey White 5779b77ccc fix: Had to also check for generic type in return of a function.
add check to prevent stack overflow error
Add panic to prevent any other occurrences of stack overflow
2023-03-02 21:49:20 -05:00
Kasey White fe1f200e4d rename find_generics_... to find_and_replace_generics
Other renames as well
2023-03-02 21:49:20 -05:00
KtorZ 6d098a4571 Fix blueprint generation for nested fields with Data
Having the data's schema be optional at the level of the 'Schema' did not allow to represent cases where there would be an opaque data at an arbitrary nesting. So I introduced a new variant 'Opaque' on 'Data' to fill that gap.
2023-03-02 15:25:17 -05:00
rvcas a40f88b918 fix: test never used Foo 2023-03-02 15:25:17 -05:00
KtorZ 65c336cb82
Update blueprint outputs to reflect latest specification.
Schemas of datums, redeemers and parameters are now nested under a field 'schema'. This allows to define a field 'purpose' at the same level.
2023-03-02 17:17:27 +01:00
KtorZ 70cdf3cb26
Add 'exported_data' test and revert 413a056 2023-03-02 16:09:08 +01:00
Kasey White 413a056c08 fix: Data was not allowed in an interface
Co-authored-by: rvcas <x@rvcas.dev>
2023-03-01 21:34:36 -05:00
Kasey White d7c33bd62a fix: A unique error was caused by the order in which we insert functions.
These functions relied on the same dependency and had the same scope. So insertion was by encounter rather than order determined by dependency handling. Now we switched to dependency order is prioritized to prevent free unique.
2023-03-01 14:22:59 -05:00
KtorZ a46a9fca41
Only use colors & text decorations on ANSI-capable terminals.
Fixes #404.
2023-02-26 13:19:03 +01:00
Kasey White 2f2be39813 clippy fixes 2023-02-26 00:13:38 -05:00
Kasey White 665a8dec67 feat: add support for unconstr_data
-Builitins IR now acts like Record IR in terms of argument consumption
-UnConstrData returns as Pair(Data,Data) to conform with how pairs are treated behind the scenes.
2023-02-26 00:13:38 -05:00
rvcas 0066cc61cc
Release 0.0.29
aiken@0.0.29
aiken-lang@0.0.29
aiken-lsp@0.0.29
aiken-project@0.0.29
uplc@0.0.29

Generated by cargo-workspaces
2023-02-23 19:04:18 -05:00
KtorZ 539ed2dea4
Fix unicode char parsing in comments. 2023-02-22 17:33:13 +01:00
KtorZ fbf65de1dc
Update default cost models for Aiken
Closes #396
2023-02-22 17:03:48 +01:00
KtorZ bdee5e7995
Use variable-length threshold for levenshtein distance
Fixes #348
2023-02-22 13:29:39 +01:00
KtorZ 00e9dabe82
Add missing Plutus builtins to Aiken's lang. 2023-02-22 12:53:03 +01:00
KtorZ 0838d48f7c
Move module name validation outside of type-checking
And disable it for documentation generation. This way, we can generate documentation for aiken/builtins and aiken (prelude)
2023-02-22 11:51:32 +01:00
KtorZ 6465af3ae2
Add missing keywords to highlightjs for doc generation. 2023-02-22 11:50:31 +01:00
KtorZ c0230a811f
Add 'plutusVersion' to blueprints. 2023-02-21 15:37:35 +01:00
KtorZ 82a32a082b
Remove 'purpose' from blueprint's schema.
This has been removed from the CIP-0057 specification since validators
  are often re-used for multiple purposes (especially validators with
  arity 2). It's misleading to assign a validator a purpose since the
  purpose distinction actually happens _within_ the validator itself.
2023-02-21 15:30:41 +01:00
KtorZ db0dfbbec1
Fix blueprint schema for tuples. 2023-02-21 15:29:33 +01:00
rvcas e611d1ee7a
chore(cmd::new): update validator definition in generated readme 2023-02-20 15:51:12 -05:00
rvcas 97f03e5e98 fix: variants no longer exist 2023-02-20 15:46:55 -05:00
rvcas 94ffc36442 chore: cargo fmt fix 2023-02-20 15:46:55 -05:00
rvcas bd93ced647 feat: improve validator arity check
* add count to dynamically adjust message
* check if args is greater than 3
* delete unused project level errors
2023-02-20 15:46:55 -05:00
rvcas 6af6607df4 chore: github made a weird commit 2023-02-20 15:30:25 -05:00
rvcas 8b9991fd5b chore: update some strings 2023-02-20 15:30:25 -05:00
Lucas 4b296de27c Update crates/aiken-lsp/src/utils.rs
Co-authored-by: Matthias Benkort <5680256+KtorZ@users.noreply.github.com>
2023-02-20 15:30:25 -05:00
rvcas 52bb0e749e fix(lsp): cannot blindly run publish after handle_request 2023-02-20 15:30:25 -05:00
rvcas a8829889e3 feat(lsp): properly recompile project is files change 2023-02-20 15:30:25 -05:00
rvcas c033cab79e feat(lsp): bring over some stuff for completions, it basically doesn't work right though 2023-02-20 15:30:25 -05:00
rvcas 02eaefce21 feat(lsp): include docs on hover 2023-02-20 15:30:25 -05:00
rvcas 815d7d80c6 feat(lsp): hover and goto definition 2023-02-20 15:30:25 -05:00
rvcas 39ea803fe6 chore: remove eprintln 2023-02-20 15:30:25 -05:00
rvcas 38bcbaf701 feat(lsp): enable compiling a project 2023-02-20 15:30:25 -05:00
rvcas b55726c90f feat(project): remove Error::List and use Vec<Error> 2023-02-20 15:30:25 -05:00
Kasey White 70164282f8 fix: switch from unwrap to if let to allow boolean when
fix: test 67 fixed to take in ByteArray instead of string literal
2023-02-20 04:37:33 -05:00
Kasey White 2394438a91 clippy fix 2023-02-20 02:46:46 -05:00
Kasey White 87eb4ca3b4 feat: handle single constr when with multiple branches
Add case to acceptance test 40
Add special case for top level single constr in a when.
2023-02-20 02:46:46 -05:00
KtorZ f307e214c3
Remove parse error on bytearray literals for trace, todo & error, parse as String instead.
This has been bothering me and the more I thought of it the more I
  disliked the idea of a warning. The rationale being that in this very
  context, there's absolutely no ambiguity. So it is only frustrating
  that the parser is even able to make the exact suggestion of what
  should be fixed, but still fails.

  I can imagine it is going to be very common for people to type:

  ```
  trace "foo"
  ```

  ...yet terribly frustrating if they have to remember each time that
  this should actually be a string. Because of the `trace`, `todo` and
  `error` keywords, we know exactly the surrounding context and what to
  expect here. So we can work it nicely.

  However, the formatter will re-format it to:

  ```
  trace @"foo"
  ```

  Just for the sake of remaining consistent with the type-system. This
  way, we still only manipulate `String` in the AST, but we conveniently
  parse a double-quote utf-8 literal when coupled with one of the
  specific keywords.

  I believe that's the best of both worlds.
2023-02-19 10:10:42 +01:00
KtorZ 78770d14b7
Emit warning when detecting an hex string interpreted as UTF-8 bytes.
This will probably save people minutes/hours of puzzled debugging. This is only a warning because there may be cases where one do actually want to specify an hex-encoded bytearray. In which case, they can get rid of the warning by using the plain bytearray syntax (i.e. as an array of bytes).
2023-02-19 10:10:42 +01:00
KtorZ d72e13c7c8
Emit parse error when finding a ByteArray literal instead of String literal. 2023-02-19 10:10:42 +01:00
KtorZ 53fb821b62
Use double-quotes for utf-8 bytearrays, and @"..." for string literals
The core observation is that **in the context of Aiken** (i.e. on-chain logic)
  people do not generally want to use String. Instead, they want
  bytearrays.

  So, it should be easy to produce bytearrays when needed and it should
  be the default. Before this commit, `"foo"` would parse as a `String`.
  Now, it parses as a `ByteArray`, whose bytes are the UTF-8 bytes
  encoding of "foo".

  Now, to make this change really "fool-proof", we now want to:

  - [ ] Emit a parse error if we parse a UTF-8 bytearray literal in
    place where we would expect a `String`. For example, `trace`,
    `error` and `todo` can only be followed by a `String`.

    So when we see something like:

    ```
    trace "foo"
    ```

    we know it's a mistake and we can suggest users to use:

    ```
    trace @"foo"
    ```

    instead.

  - [ ] Emit a warning if we ever see a bytearray literals UTF-8, which
    is either 56 or 64 character long and is a valid hexadecimal string.
    For example:

    ```
    let policy_id = "29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6"
    ```

    This is _most certainly_ a mistake, as this generates a ByteArray of
    56 bytes, which is effectively the hex-encoding of the provided string.

    In this scenario, we want to warn the user and inform them they probably meant to use:

    ```
    let policy_id = #"29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6"
    ```
2023-02-19 10:09:22 +01:00
KtorZ 98b89f32e1
Preserve bytearray format choice from input. 2023-02-19 10:09:22 +01:00
Kasey f3cdc05875
fix: the refactor on discharge value env (#393) 2023-02-18 20:49:29 -05:00
KtorZ cd4ceb219c
Remove complex and compound constants.
This is not supported by the code generation, so it's a bit of a lie
  to have them in the language in the first place. There's arguably not
  even any use for constant records, list and tuples to begin with. So
  this cleans this up everywhere for the sake of moving forward with the
  alpha release.

  This now reduces constants to:

  - Integer
  - ByteArray
  - String

  Anything else can be declared via a function anyway. We can revisit
  this choice later.... or not.
2023-02-17 17:31:15 +01:00
KtorZ 76b2396830
Fix offset location for 'SingleConstructorExpect' warnings. 2023-02-17 16:43:07 +01:00
KtorZ 4a22e5f656
Fix module comment parsing / formatting after bumping chumsky to 0.9.0 2023-02-17 14:07:24 +01:00
KtorZ ec144fa220
Make 'choose_data' builtin available. 2023-02-17 11:25:41 +01:00
KtorZ 95e1442b49 Swap arguments to unify when inferring traces
The first argument shows as what the compiler expects in the error message. So it must be the correct one or the error is actually misleading.
2023-02-16 20:29:41 -05:00
KtorZ 45454ced01 Make tracing configurable, when relevant.
Tracing is now turn OFF by default when:

  - building project
  - building documentation
  - building dependencies

  It can be turned ON only when building project using `--keep-traces`.
  That means it's not possible to build dependencies with traces. The
  address `--rebuild` flag will also rebuild without traces.

  Tracing is however turn ON by default when:

  - checking the project (and running tests).

  In this scenario, tracing can be disabled using `--no-traces` (if for
  example, one want to analyze the execution units of specific functions
  without having to manually remove traces from code).
2023-02-16 20:29:41 -05:00
KtorZ e9e3f4f50a Implement TraceIfFalse type-checking and AST transformation.
This caused me some trouble. In my first approach, I ended up having
  multiple traces because nested values would be evaluated twice; once
  as condition, and once as part of the continuation.

  To prevent this, we can simply evaluate the condition once, and return
  plain True / False boolean as outcome. So this effectively transforms any
  expression:

  ```
  expr
  ```

  as

  ```
  if expr { True } else { trace("...", False) }
  ```
2023-02-16 20:29:41 -05:00
KtorZ 6a50bde666 Implement parser & formater for 'TraceIfFalse'
Interestingly enough, chumsky seems to fail when given a 'choice' with
  more than 25 elements. That's why this commit groups together some of
  the choices as another nested 'choice'.
2023-02-16 20:29:41 -05:00
KtorZ 60390fe4f0 Add TraceIfFalse untyped expression
The goal is to handle this without bothering the code generation down the line. That is, we can handle it when transforming from the untyped AST to the typed one. That's why there's no 'TraceIfFalse' constructor in the typed AST. It has disappeared during type-check.
2023-02-16 20:29:41 -05:00
Kasey White 6ce62115f7 found formatting issue 2023-02-16 20:27:00 -05:00
Kasey White d7cfca2a57 fix condition and branch body getting passed same scope 2023-02-16 20:27:00 -05:00
Kasey White d1ca85c4bc feat: add support for assign and nested assign
My formatter is not working :'(
2023-02-16 20:27:00 -05:00
KtorZ 3204322da6
Fix validator lookup by title.
We want the lookup to yield a result when there's only a single
  validator; and no title is provided. So that users can simply do
  'aiken address' in their project if it's unambiguous. The validator's
  name is only required to disambiguate between multiple validators.

  I also noticed that the order of arguments in with_validator was
  wrong. Somehow.
2023-02-16 10:28:27 +01:00
KtorZ 20841962f6
Fix error messages still referring to blueprint's purpose. 2023-02-16 10:06:12 +01:00
Matthias Benkort ec6baf3a6a
Merge pull request #351 from aiken-lang/acceptance-test-054-pattern-match-on-list
Add new acceptance test scenario: 056
2023-02-16 10:01:56 +01:00
rvcas 2151fe4484 fix(infer): if branch bodies need to be checked in a new scope 2023-02-16 00:05:55 -05:00
rvcas c4a588f3dd test(check): if scoping 2023-02-16 00:05:55 -05:00
rvcas 7b0faa7c1c test(check): validator errors and warning 2023-02-16 00:05:55 -05:00
rvcas a311531508 fix(cli): aiken address 2023-02-16 00:05:55 -05:00
rvcas 8b4985498b chore: add fmt test for validator 2023-02-16 00:05:55 -05:00
rvcas 2e78b7100c fix: blueprint tests 2023-02-16 00:05:55 -05:00
rvcas b057d27465 fix: some updates from latest main 2023-02-16 00:05:55 -05:00
rvcas 673b57b81c feat: get bluprint stuff compiling again 2023-02-16 00:05:55 -05:00
rvcas d03288cece feat(validator): move return type and arity check to infer 2023-02-16 00:05:55 -05:00
rvcas a88a193383 fix: properly lex new token and adjust parsed spans 2023-02-16 00:05:55 -05:00
rvcas e647330433 fix: better formating for validator 2023-02-16 00:05:55 -05:00
rvcas a044c3580e feat: typecheck validators 2023-02-16 00:05:55 -05:00
rvcas 2e7fe191db feat(definitions):
* add parsing for new validator defs
* start adding typechecking
* add a unit test for parsing
2023-02-16 00:05:55 -05:00
Kasey White 2fa494bda7 fix: calculated list pattern length with tail incorrectly before.
Now subtract 1 from length since next item does not need a end of list check
2023-02-15 22:12:41 -05:00
KtorZ 56258dc815
Fix todo/error parser on when clauses. 2023-02-16 00:40:49 +01:00
KtorZ 808ff97c68
Preserve trace, error & todo formatting. 2023-02-15 23:19:07 +01:00
KtorZ 6525f21712
Remove 'Todo' from the AST & AIR
Todo is fundamentally just a trace and an error. The only reason we kept it as a separate element in the AST is for the formatter to work out whether it should format something back to a todo or something else.

  However, this introduces redundancy in the code internally and makes the AIR more complicated than it needs to be. Both todo and errors can actually be represented as trace + errors, and we only need to record their preferred shape when parsing so that we can format them back to what's expected.
2023-02-15 21:57:08 +01:00
KtorZ 7b676643bd
Lift 'error' up one level in the parser and remove its label.
We now parse errors as a combination of a trace plus and error term. This is a baby step in order to simplify the code generation down the line and the internal representation of todo / errors.
2023-02-15 21:09:03 +01:00
KtorZ 7abd76b6ad
Allow to trace expressions (and not only string literals)
This however enforces that the argument unifies to a `String`. So this
  is more flexible than the previous form, but does fundamentally the
  same thing.

  Fixes #378.
2023-02-15 21:07:56 +01:00
KtorZ 7251b2d01e
Remove single-argument function call special-case in formatter
Not sure what this special case was trying to achieve, but it's not right. There's no need to handle function call with a single argument differently than the others.
2023-02-15 17:22:08 +01:00
KtorZ 014c7a3d73
Fix error display in tx simulate. 2023-02-15 09:42:46 +01:00
Kasey White a24fc55993 Delay 2nd arg on trace in case it throws and prevents trace from printing 2023-02-15 03:06:58 -05:00
Kasey White e15e725bfe add one more test 2023-02-15 02:20:05 -05:00
Kasey White 5e5a9dd25f quick fix for test 59 2023-02-15 02:20:05 -05:00
Kasey White 32b0200966 fixes: tuple clauses, zero args funcs, list clause named pattern
List Clauses patterns handle var cases

Fixed Tuple Clauses issue with last clause not being a tuple

Redid how zero arg functions and dependencies are handled. Tough one lol
2023-02-15 02:20:05 -05:00
Kasey White b7fa57027a scope is now properly handled in expect cases 2023-02-14 12:38:36 -05:00
KtorZ 428b5f2b37
Align output of `tx simulate` with other Aiken's commands.
And also return a structured output as JSON, so it's more easily used
  by other tools.

  ```
       Parsing script context
    Simulating 78ec148ea647cf9969446891af31939c5d57b275a2455706782c6183ef0b62f1
      Redeemer Spend → 0

  {"mem":151993,"cpu":58180696}
  ```
2023-02-14 16:50:55 +01:00
KtorZ 34596b3084
Fix collecting withdrawal scripts in eval_phase_one
The current implementation assumed that ALL withdrawals present in a
  transaction had to be locked by a script and failed otherwise. But a
  transaction can actually be composed of both. So instead of failing,
  we should rather just ignore withdrawals that can't be referenced by
  redeemers.
2023-02-14 15:58:34 +01:00
Kasey White 3b3ec7d95c format fix 2023-02-12 19:12:38 -05:00
Kasey White 765ceefd38 feat: add ability to downcast void to data 2023-02-12 18:56:38 -05:00
Kasey White 4c838defd1 fix issue with final clause producing clauseguard air 2023-02-12 18:43:11 -05:00
Kasey White e9883adf12 fix: scope issue when using when with a function call subject 2023-02-12 18:43:11 -05:00
Kasey White 4b1015e0d4 change how expect works on lists and constructors
Add more coverage to acceptance test 40 on expect
2023-02-11 22:26:34 -05:00
Matthias Benkort deb2ab8f80
Merge pull request #362 from aiken-lang/patterns-improvements
Patterns improvements
2023-02-11 22:46:04 +01:00
KtorZ b83a247ff7
Add slightly more informative note for list pattern on int. 2023-02-11 17:00:32 +01:00
KtorZ 2e8fd6e1c2
Remove patterns on 'String'
There's arguably no use case ever for that in the context of on-chain
  Plutus. Strings are really just meant to be used for tracing. They
  aren't meant to be manipulated as heavily as in classic programming
  languages.
2023-02-11 16:57:14 +01:00
KtorZ 6649821200
Add type-checker sanity tests for list patterns. 2023-02-11 16:54:49 +01:00
KtorZ 56e90fba21
Add missing newlines to 'join' in error messages. 2023-02-11 16:24:56 +01:00
KtorZ 3c7663cd3c
Basic exhaustivness check on list patterns
Before that commit, the type-checker would allow unsafe list patterns
  such as:

  ```
  let [x] = xs

  when xs is {
    [x] -> ...
    [x, ..] ->  ...
  }
  ```

  This is quite unsafe and can lead to confusing situations. Now at
  least the compiler warns about this. It isn't perfect though,
  especially in the presence of clause guards. But that's a start.
2023-02-11 16:20:28 +01:00
rvcas 831a37d094
feat: shouldn't use this warning on list 2023-02-11 09:42:39 -05:00
Kasey White e92d9af3c2 fix: changed how list_access_to_uplc handles discards fixing unit test 55
Also fix incorrect error message in runtime in machine
2023-02-11 04:30:18 -05:00
Kasey White ddef61a855 fix: blueprint tests 2023-02-10 19:45:44 -05:00
Kasey White 0269409fa1 case where removing a lam with 0 occurrences is not safe
Since a function call can have arbitrary other calls that lead to error and that is difficult to detect.
2023-02-10 19:24:47 -05:00
KtorZ 21fbd48b8d
Improve error on duplicate imports. 2023-02-10 17:07:08 +01:00
KtorZ f747ee0aca
Improve error message when finding a non-exhaustive let-binding. 2023-02-10 11:01:13 +01:00
rvcas c1d67e95e1
feat: fix errors and add tests for BigInt changes 2023-02-09 15:01:30 -05:00
KtorZ bd4aeb779c
Implement integer_log2 on BigInt
Comparing it with the Haskell's implementation.
2023-02-09 18:14:00 +01:00
KtorZ e76d26eb3c
Fixup: follow compiler. 2023-02-09 16:09:49 +01:00
rvcas cfbe5fd3cc
feat: use BigInt in constant integer 2023-02-09 09:46:42 -05:00
rvcas ec58279424
test(machine): integer overflow 2023-02-09 09:44:06 -05:00
Matthias Benkort 37bd22a0d2
Merge pull request #353 from aiken-lang/rvcas/assert_expect
Rename assert to expect
2023-02-09 15:17:14 +01:00
rvcas 461aaf14bd
chore: no more loose numbers for location offsets 2023-02-09 09:16:54 -05:00
KtorZ b5cf8c78a5
Add Ordering data-type definition to prelude known constructors. 2023-02-09 14:36:39 +01:00
KtorZ 6be2a9ed80
Fix formatting of unary operators applied to binary operators.
Add crucial parenthesis...
2023-02-09 13:58:11 +01:00
KtorZ 83a86e6dc0
Fix logical operator precedence in parser.
Whoopsie... || and && were treated with the same precedence, causing very surprising behavior down the line.

  I noticed this because of the auto-formatter adding parenthesis where it really shouldn't. The problem came actually from the parser and how it constructed the AST.
2023-02-09 13:57:12 +01:00
KtorZ 62fe321ddf
Add 'Ordering' data-type to the Prelude.
Useful to have around to build comparison functions.
2023-02-09 11:07:30 +01:00
Matthias Benkort b803332f99
Update crates/aiken-lang/src/tipo/error.rs 2023-02-09 09:25:33 +01:00
rvcas 460da20e4a
feat: warn when using expect in a completely safe way 2023-02-09 02:10:22 -05:00
rvcas e9caa710c4
chore: rename assert_parser to expect_parser 2023-02-09 01:05:11 -05:00
rvcas 9348caab2f
feat(expect): update formatter
* Token::Expect should format to expect
* since we still capture assert this means
  we can help users update to the new syntax
2023-02-09 00:57:38 -05:00
rvcas 3f540c7c99
chore: rename assignment kind 2023-02-09 00:47:38 -05:00
rvcas dbd162e985
feat: handle expect in parser
* map both assert/expect to Token::Expect
* use the new token in the parser
* new unit test to expect
2023-02-09 00:43:29 -05:00
rvcas 5a4a8df727
feat(token): add Token::Expect 2023-02-09 00:25:54 -05:00
rvcas fd14da0720 chore: fix blueprint tests 2023-02-09 00:09:23 -05:00
Kasey White f60b7d84c1 clippy fix 2023-02-09 00:09:23 -05:00
Kasey White 076871492b fix: unwrap used in a reachable place. Replaced with alternative option 2023-02-09 00:09:23 -05:00
Kasey White 9ae28aaa88 all nebula tests pass. Had one more fix on listaccessor to finish 2023-02-09 00:09:23 -05:00
Kasey White 986a6009f7 fix: Various fixes for FieldsExpose, ListAccessor, TupleAccessor 2023-02-09 00:09:23 -05:00
KtorZ 95a62f7172
Fix oversights in blueprint / schema generation. 2023-02-08 19:04:50 +01:00
alessandrokonrad 221f1afbfe
Changed imports 2023-02-08 16:28:59 +01:00
alessandrokonrad 74b3507777
Added tag/constructor conversion tests 2023-02-08 16:26:58 +01:00
Ales 242eaa8b67
Merge pull request #347 from spacebudz/constr
Fix constructor tag range
2023-02-08 14:52:50 +01:00
alessandrokonrad ce648b7483 Fixed schnorr and limiting it to 32 bytes messages for now 2023-02-08 08:04:24 -05:00
alessandrokonrad 3012a0b41d
Fix constructor tag range 2023-02-08 13:14:26 +01:00
alessandrokonrad 7c9443d87f
Changed to prehash function 2023-02-07 22:53:30 +01:00
KtorZ 6e554129e9
Fix blueprint validator tests. 2023-02-07 12:28:34 +01:00
Matthias Benkort 8feaefe073
Merge pull request #335 from aiken-lang/blueprint-parameters
Blueprint parameters
2023-02-07 11:43:01 +01:00
KtorZ 4aa92a6d5e
Use positional argument for blueprint 'apply' command 2023-02-07 11:42:42 +01:00
rvcas 08e8347317 chore: rename feature flag to native-secp256k1 2023-02-07 00:25:22 -05:00
rvcas 67a2674d27 feat: allow verify functions to build for wasm 2023-02-07 00:25:22 -05:00
Kasey White 5d0c5d2a5b remove a redundant type replacement in build_ir 2023-02-05 23:56:44 -05:00
rvcas 3ff927d30a feat: reset the generator when generate finishes 2023-02-05 20:35:39 -05:00
rvcas 501d667532 chore: fix tests 2023-02-05 20:35:39 -05:00
Kasey White f1b24a5f6d fix: the following issues
fix conversion from inner opaque type for when and assignment
This fixes Clause being used in cases where ListClause or TupleClause should be used
Reset defined and zero arg functions between each code gen
Fixes for optimizations when encountering shadowed variables
2023-02-05 20:35:39 -05:00
Kasey White c32a9d7b6f commit working changes so far 2023-02-05 20:35:39 -05:00
rvcas 31cd19f198 feat: use secp256k1 to implement verify for ecdsa and schnorr 2023-02-04 22:07:56 -05:00
rvcas cde3e31723 feat: fill in todo for verify ecdsa and schnorr costing 2023-02-04 22:07:56 -05:00
rvcas 09d8d683b6 fix: switch to error from secp256k1 2023-02-04 22:07:56 -05:00
rvcas fb69a2c8a9 fix: switch to rust bindings for bitcoin-secp256k1 2023-02-04 22:07:56 -05:00
rvcas c2ff9389c5 feat(runtime): implement verifyEcdsaSecp256k1Signature 2023-02-04 22:07:56 -05:00
rvcas d224fe5356 feat(runtime): set force count and arg typechecking for the elliptic curve builtins 2023-02-04 22:07:56 -05:00
rvcas fb37521857 feat: make a transparent machine error for signature::Error 2023-02-04 22:07:56 -05:00
rvcas 175cd777d8 feat: enable elliptic curve verification builtins 2023-02-04 22:07:56 -05:00
rvcas 7bffb994fc feat: add k256 for elliptic curve algos 2023-02-04 22:07:56 -05:00
dependabot[bot] 71b7ec6088 chore(deps): bump tokio from 1.23.1 to 1.24.2
Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.23.1 to 1.24.2.
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](https://github.com/tokio-rs/tokio/commits)

---
updated-dependencies:
- dependency-name: tokio
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-04 20:06:54 -05:00
rvcas ddad05bf51
chore: leave a comment for later 2023-02-04 15:33:18 -05:00
KtorZ b04fb5962a
Do not compute addresses of parameterized validators
And leave a proper notice.
2023-02-04 11:49:56 +01:00
KtorZ 9b8ff590b8
Implement 'blueprint apply' command.
This is still a bit clunky as the interface is expecting parameters in UPLC form and we don't do any kind of verification. So it is easy to shoot oneself in the foot at the moment (for example, to apply an integer into something that should have received a data). To be improved later.
2023-02-04 11:39:55 +01:00
KtorZ ea269b14a2
Fix deserialization issue when 'parameters' is missing.
Deserialize to an empty vector.
2023-02-04 11:38:09 +01:00
KtorZ 592d3d7a1c
Define 'apply_parameter' method on 'Project' 2023-02-04 10:44:33 +01:00
KtorZ 12f4768008
Write method to apply a UPLC term to an existing 'Validator' 2023-02-04 10:22:23 +01:00
KtorZ 9c71aab3db
Factor out reusable parts regarding blueprints from lib/project
So we can re-apply the same logic for applying arguments.
2023-02-04 10:21:45 +01:00
KtorZ 55ecc199d1
Add 'parameters' to blueprints for parameterized validators.
Without that, we have no way to distinguish between fully applied
   validators and those that still require some hard-coded parameters.

   Next steps is to make it easier to apply parameters to those, as well
   as forbid the creation of addresses of validators that aren't fully
   qualified.
2023-02-04 09:31:43 +01:00
Kasey White 4c8221e439 fix: add is data check to recursive_assert_tipo 2023-02-04 02:47:55 -05:00
Kasey White 86ca466807 feat: some code gen improvements
* fix assert on pattern Var
* fix tuple index unwrapping closes #334
* allow wrapping when casting with let
* allow wrapping when casting via function call
2023-02-04 02:33:10 -05:00
rvcas c126f6acda feat: invert how casting is controlled
I decided to invert how I'm doing it. I'm passing
in a new argument to unify in environment called
allow_cast: bool and essentially at various
unification sites I can control whether or not I
want to allow casting to even occur. So we can
assume it's false by default always and then we
turn it on in a few places vs. just opening the
flood gates and locking it down at various sites
as they come up# Please enter the commit message
for your changes. Lines starting
2023-02-04 02:33:10 -05:00
rvcas 2b554d105a fix: when Data cast bypass 2023-02-04 02:33:10 -05:00
rvcas a9ed04ef22 feat: newer rules around casting Data
* you cannot cast FROM Data with a `let`
* you cannot cast FROM Data by passing
  Data to none Data when calling a function
* you MUST use `assert` to cast from data
* you can cast INTO Data with a `let`
* you can cast INTO Data by passing none Data
  to Data when calling a function
* You cannot assert cast Data without an
  annotation
2023-02-04 02:33:10 -05:00
Niels Mündler 700e9cab5b Add missing carets when dumping builtin list 2023-02-02 17:32:03 -05:00
rvcas ae42dc964a
fix: allow var and discard with data on right hand side 2023-02-02 01:16:53 -05:00
rvcas 39e0716f5f
feat: better rules around Data casting
* you cannot cast to Data ever
* you can cast from Data to ANY TYPE
* you cannot cast via a function call arg hack
2023-02-02 00:43:45 -05:00
rvcas c9d0ce0392 chore: fmt 2023-02-01 23:49:33 -05:00
rvcas 50b5273967 fix(tests): validator hashs and cbor changed for blueprints 2023-02-01 23:49:33 -05:00
Kasey White 1843b7e73b clippy fix and remove some prints 2023-02-01 23:49:33 -05:00
Kasey White 9dc2bac2c3 fix:minor optimization fixes
Unique only comparison for equals led to strange results
Fixed by interning in a different spot
2023-02-01 23:49:33 -05:00
Kasey White fdf89b7326 implement optimizations
-Force usage on builtins
-Inline vars used once
-Lambdas that use a var as an arg
-Lambdas that use a const as an arg
2023-02-01 23:49:33 -05:00
rvcas 88ce8ba8b9 feat: remove check assignment 2023-02-01 23:03:35 -05:00
rvcas 21251d6499
fix: remove check from lexer 2023-02-01 20:44:58 -05:00
Kasey White 3123ad9079 change eval_builtin_app to return Rc so that ifthenelse and chooselist are faster 2023-02-01 18:53:11 -05:00
Kasey White 456b08a205 minor performance improvements
Changed a couple cases where the inner Rc object was cloned to use the Rc object instead
2023-02-01 18:53:11 -05:00
rvcas 99c1c880b0 chore: more clippy 2023-02-01 18:53:11 -05:00
rvcas a365649360 chore: clippy autofix 2023-02-01 18:53:11 -05:00
rvcas 9c4e921e79 feat: more Rc in machine 2023-02-01 18:53:11 -05:00
rvcas c8efe60843 feat: use Rc for more things, fib_iter runs almost 3 seconds faster now 2023-02-01 18:53:11 -05:00
rvcas eda3194cf0 feat: trying Rc for Name 2023-02-01 18:53:11 -05:00
Kasey White b5d9a9bb52 Change discharge_value and discharge_value_env to use a stack machine 2023-02-01 18:53:11 -05:00
rvcas 790e8ba680 fix: start trying to get rid of recursion for discharge value 2023-02-01 18:53:11 -05:00
rvcas 618ea0c8dc feat: switch to zip from zip-extract 2023-02-01 14:50:18 -05:00
dependabot[bot] 6974d31285 chore(deps): bump tokio from 1.23.0 to 1.23.1
Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.23.0 to 1.23.1.
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.23.0...tokio-1.23.1)

---
updated-dependencies:
- dependency-name: tokio
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-01 12:36:49 -05:00
Matthias Benkort ecc5e13ccd
Merge pull request #316 from aiken-lang/cip-0057-blueprints
Blueprints (CIP-0057) as build artifacts
2023-01-31 17:45:56 +01:00
KtorZ a50b51e086
Fix bytearray literals parsing and formatting.
Weirdly enough, we got the parsing wrong for byte literals in expressions (but did okay in constants). But got the formatting wrong in constants (yet did okay for formatting expressions). I've factored out the code in both cases to avoid the duplication that led to this in the first place. Plus added test coverage to make sure this doesn't happen in the future.
2023-01-31 17:19:40 +01:00
KtorZ daee8e39d6
Implement new command: address
This calculates a validator's address from validators found in a blueprint. It also provides a convenient way to attach a delegation part to the validator if needs be. The command is meant to provide a nice user experience and works 'out of the box' for projects that have only a single validator. Just call 'aiken address' to get the validator's address.

  Note that the command-line doesn't provide any option to configure the target network. This automatically assumes testnet, and will until we deem the project ready for mainnet. Those brave enough to run an Aiken's program on mainnet will find a way anyway.
2023-01-31 15:39:40 +01:00
KtorZ 1aa12fb368
Implement serde's Deserialize for blueprints.
Here's a trick though: I got lazy (a bit) and did not write a full deserializer for Schema because this is busywork and not at all necessary at this stage. Instead, I've made the blueprint parameterized by a generic type <T>; which represents the type of the underlying blueprint's schema. When deserializing from JSON, we can default to 'Value' to get a free deserializer. Since all we're interested about is the program and the metadata (purpose and title) of a validator, it works nicely.

  Serialization however expects a Blueprint<Schema>, and most of the functions operates over a Blueprint<Schema> anyway.
2023-01-31 15:39:40 +01:00
KtorZ cab59c188a
Define serde's Serialize/Deserialize for Program<DeBrujin>
This will be useful to re-use this behavior in other structure that contains a Program<DeBruijn> without having to manually serialize or deserialize the entire structure.
2023-01-31 15:39:40 +01:00
KtorZ 4588ccd040
Better use of From/Tryfrom within the blueprint module. 2023-01-31 15:39:40 +01:00
KtorZ 22a1c1dfb4
Use IndexMap throughout
In an ideal world, I should have handlded that directly at the conflicting commit in the rebase, but this would have bubbled up through all commits... which I wasn't really quite keen on going through. So here's an extra ugly commit that comes and 'fix the rebase'.
2023-01-31 09:51:00 +01:00
KtorZ 90ee86d14e
Improve error reporting for the blueprint generation.
Actually link schema error to source code with a span and a label. This is easily done and provides some extra context.
2023-01-31 09:48:45 +01:00
KtorZ b3fc2d51cf
Fix help on unknown::module error. 2023-01-31 09:48:45 +01:00
KtorZ 2523816813
Handle opaque single-variant-single-field special case. 2023-01-31 09:48:45 +01:00
KtorZ aaa8cba0cf
Fix nested generics and phantom-types, and handle list special case
List of pairs are actually encoded as 'map'.
2023-01-31 09:48:45 +01:00
KtorZ 9a44cba007
Add support for generics in the blueprint generation. 2023-01-31 09:48:45 +01:00
KtorZ 0bd9d045b0
Support tuples in blueprint generation. 2023-01-31 09:48:44 +01:00
KtorZ d2cc44e5f4
Allow testing blueprint generation from Aiken programs
This is quite something, because now we have a testing pipeline that
  can also be used for testing other compiler-related stuff such as the
  type-checker or the code generator.
2023-01-31 09:48:44 +01:00
KtorZ b93e14659c
Refactor blueprint & handle annotated schemas
This also now introduce two levels of representable types (because it's needed at least for tuples):

  Plutus Data (a.k.a Data) and UPLC primitives / constants (a.k.a Schema).

  In practice, we don't want to specify blueprints that use direct UPLC primitives because there's little support for producing those in the ecosystem. So we should aim for producing only Data whenever we can. Yet we don't want to forbid it either in case people know what they're doing. Which means that we need to capture that difference well in the type modelling (in Rust and in the CIP-0057 specification).

  I've also simplified the error type for now, just to provide some degree of feedback while working on this. I'll refine it later with proper errors.
2023-01-31 09:48:44 +01:00
KtorZ 547696abde
Add title and description to exported types in the blueprint
This also fixes a bug where the documentation of record constructor arguments would be dropped after type-checking. Took me a while to pinpoint.
2023-01-31 09:48:44 +01:00
KtorZ 59ffc6434f
Add title to blueprint's validators
And use it to prefix UPLC artifacts' names.
2023-01-31 09:48:44 +01:00
KtorZ f8970ecb9e
Move UPLC dump into separate function + log event.
```
    Compiling aiken-lang/stdlib 43d8e740ffdf5febc59e51b7f0d5f8506115340c (examples/hello_world/build/packages/aiken-lang-stdlib)
    Compiling aiken-lang/hello_world 1.0.0 (examples/hello_world)
   Generating project's blueprint (examples/hello_world/plutus.json)
    Exporting UPLC (examples/hello_world/artifacts)
  ```
2023-01-31 09:48:44 +01:00
KtorZ b667b7f7b7
Refactor test collection to use the new CheckedModules method
And also, caught a little issue regarding the filtering of test cases.
2023-01-31 09:48:44 +01:00
KtorZ 5683d19a4c
Refactor build steps to generate blueprints instead
The blueprint is generated at the root of the repository and is
  intended to be versioned with the rest. It acts as a business card
  that contains many practical information. There's a variety of tools
  we can then build on top of open-source contracts. And, quite
  importantly, the blueprint is language-agnostic; it isn't specific to
  Aiken. So it is really meant as an interop format within the
  ecosystem.
2023-01-31 09:48:38 +01:00
KtorZ 3cefbd00af
Draft basic Blueprint schema type definition.
This doesn't include validations yet. Let's start simple
  and try to get some basic schema generated already.
2023-01-31 09:47:47 +01:00
rvcas 60ad3dae50
chore: fmt builder.rs 2023-01-30 12:07:50 -05:00
rvcas af67f41ead
fix: Air::Lam not real, probably meant Air::Let 2023-01-30 12:01:40 -05:00
Lucas b653714c0c
Merge branch 'main' into when-clause-guards 2023-01-30 11:40:29 -05:00
Kasey White 0ea2be0e95 feat: Add codegen for handling clause guards 2023-01-30 05:11:27 -05:00
Kasey White a638388747 Add more complex test 40.
Add assert for when constr index is given
2023-01-30 04:17:03 -05:00
Kasey White 8c04ab093a update test 40 2023-01-30 03:24:52 -05:00
Kasey White afd040fda5 feat: Finish up assert feature
Better error reporing on NonFunctionalApplication Error
Refactor redundant code
Add handling of whens with one clause.
2023-01-29 05:21:55 -05:00
Kasey White 4c8089c28a Assert now works for a variety of types.
Still some final work to finish and test. Things are good so far
2023-01-28 05:14:12 -05:00
Kasey White 60736b4a54 chore: Add error when type casting without annotation
Also implement and test most of assert. Finishing last few cases.
2023-01-28 02:40:53 -05:00
Kasey White fc88028034 some refactoring and adding assert on lists 2023-01-27 05:02:19 -05:00
Kasey White d4eec1fe79 chore: Add scaffolding for assert 2023-01-27 05:02:19 -05:00
Kasey White 38c24cca01 single clause when not yet implemented 2023-01-27 05:02:19 -05:00
Kasey White 1af1b6d898 finalize aiken ir with typing 2023-01-27 05:02:19 -05:00
rvcas 4976ea4164 chore: add test for the new token captures 2023-01-26 10:16:29 -05:00
rvcas 703fcb451d fix(parser,windows): capture carriage return properly 2023-01-26 10:16:29 -05:00
rvcas 3c97f057cc chore: fix clippy 2023-01-24 12:07:06 -05:00
rvcas ba05f1f070 feat: add label to span 2023-01-24 12:07:06 -05:00
rvcas a485406e3d fix: use the location of the pattern not the entire clause 2023-01-24 12:07:06 -05:00
rvcas 7206360baa feat(when): single when clause now emits warning 2023-01-24 12:07:06 -05:00
Kasey White e36f91c39c fix: multiple list cases of the same length weren't being handled 2023-01-21 19:42:17 -05:00
Kasey White e8fb386bdc chore: Switch from hashmap and hashset to indexmap and indexset 2023-01-21 18:10:15 -05:00
KtorZ 5d7585cc05
Implement parser for when clause guard
With pretty parse errors on failures. The type-checker was already
  implemented for those, so it now only requires some work in the code
  generation.

  Fixes #297.
2023-01-21 17:43:13 +01:00
KtorZ 91bd0d1d77
Display warning help + minor error improvements. 2023-01-21 17:42:58 +01:00
KtorZ 333a990249
Fix parsing of subtractions and negations in the absence of space. 2023-01-21 12:43:11 +01:00
KtorZ bb360cd7c8
Fix display of 'UnknownLabels'
This is a bit annoying as we are forced to use #[related] here which isn't quite what we want.
  Ideally, this would use #[diagnostic_source] but, there's a bug upstream. See: zkat/miette#172.
2023-01-21 11:37:19 +01:00
KtorZ d905f24e7f
Forbid solo-assignment as the only function body
In the similar spirit to what we did for sequences. Yet, we need to handle the case of body being just an assignment -- or a trace of an assignment which is basically the same thing.
2023-01-21 10:32:06 +01:00
KtorZ 2101bb924d
Fix tuple-pattern parser
This case was originally left out but, tuple parsers are almost always exclusively starting with a NewLineLeftParen token.
2023-01-21 10:04:11 +01:00
KtorZ d321b85df2
Refactor type errors back into macro annotations
Far less verbose than defining classes by hand, plus, it allows to have everything about a single error be co-located. And finally, it allows to use 'related', 'label' and so on more easily.
2023-01-20 20:11:44 +01:00
KtorZ 4459fdb360
Fix error reporting on cyclic definitions.
Fixes #292
2023-01-20 20:09:00 +01:00