Commit Graph

560 Commits

Author SHA1 Message Date
KtorZ 7b22b63ad8
move 'EvalInfo' to project::script & define a new 'EvalHint' 2022-12-14 22:00:09 +01:00
KtorZ 921e7abbb6
Move pretty-printing utilities to project::pretty 2022-12-14 21:59:09 +01:00
Carlos Souza 6343fa7105 Change generated assets file extensions 2022-12-14 12:48:29 -05:00
KtorZ 87546e0abd
Return non-zero exit code on test failure
And integrated test results with miette report.
2022-12-14 18:44:31 +01:00
Carlos Souza c77b7c293b Fix errors on aiken build
- Update generics syntax
- Add required args to default validator function

This allows running a successful aiken build from
files generated by aiken new.
2022-12-14 12:03:30 -05:00
KtorZ 3a9cc668fc
Use bright_black (i.e. grey) for box drawing. 2022-12-14 17:45:16 +01:00
KtorZ 2d6fc8bd54
Group test results by module. 2022-12-14 17:34:24 +01:00
Kasey White 3c664b9651
test 1-9 passing 2022-12-14 09:45:26 +01:00
rvcas b71315ba2f
chore: trying to fix test 5 2022-12-14 09:45:26 +01:00
Kasey White 6635a918b5
clean up minor warnings 2022-12-14 09:45:26 +01:00
KtorZ b6962ba9d3
Add 'eval' command to evaluate target aiken function
Pretty useful for debbugging. Though, on second-thoughts, this is
  something we may want to review later and maybe have that done by
  default for tests.

  At the moment, we expects tests to unify to `bool`, and treat `false`
  values as failing tests. Yet, on failures, this gives little
  information about what's wrong with the test.

  It'd be nice to either have better way to assert in tests, or, to
  simply accept non-bool tests, and show whatever the test evaluates
  to as a debug output.
2022-12-14 09:45:26 +01:00
rvcas 11c793dd2a
feat(Type): add is_option method 2022-12-14 09:45:25 +01:00
Kasey White 8393d8555c
fill constants to data so now test 006 passes 2022-12-14 09:45:25 +01:00
Kasey White dc5ae296db
implement anonymous functions, more tests pass now 2022-12-14 09:45:25 +01:00
Kasey White d78e2c9c6f
feat: finish up generic match cases 2022-12-14 09:45:23 +01:00
Kasey White e43063d447
overhaul monomorphize to cover all generic cases
test b passes
2022-12-14 09:45:23 +01:00
Kasey White 15dc202810
Feat: generic function call tests work 2022-12-14 09:45:23 +01:00
Kasey White e4d9ca4586
support generics 2022-12-14 09:45:23 +01:00
rvcas 16fbf5bbcd
feat: fix recursive functions 2022-12-14 09:45:22 +01:00
Kasey White 3d3b3d7e10
checkpoint 2022-12-14 09:45:22 +01:00
KtorZ 95986fed83 Fix lexer for signed integers. 2022-12-13 19:52:30 -05:00
KtorZ 18bf89418a Fix codegen for binary operator 'or'
a && b → if a { b } else { false }
  a || b → if a { true } else { b }
2022-12-13 18:52:23 -05:00
KtorZ 431b0cfcf2 Preserve newlines after blocks of comments.
This is an example of output from the formatter now:

  ```
  //// Some module documentation

  // foo
  const a: Int = 42

  // Some comment block
  // For which newlines are respected.
  // Foo

  // Another one

  /// add_one documentation
  pub fn add_one(n: Int) -> Int {
    // n + 1
    n + 1
  }
  ```

  before this commit, comments would all be collapsed into one group
  above the function as:

  ```
  // Some comment block
  // For which newlines are respected.
  // Foo
  // Another one
  /// add_one documentation
  pub fn add_one(n: Int) -> Int {
  ```
2022-12-13 18:52:23 -05:00
KtorZ 22a526bb13 Enforce unique top-level names for tests too.
This prevents the compiler from crashing later on. Test names should be unique and not clash with function names.
2022-12-13 18:52:23 -05:00
rvcas 4dfb454d8a refactor: change match to if matches! 2022-12-13 10:34:34 -05:00
KtorZ 1637a0d30e Add --match-tests to 'check' cmd
For running only tests matching a certain pattern. Useful when doing TDD.
2022-12-13 10:34:34 -05:00
rvcas 69db9696d6 feat: prefix tuples with hash again cause ambguity with call 2022-12-13 10:27:17 -05:00
rvcas 6dc4738b66 feat: update formatter for new changes 2022-12-12 19:22:11 -05:00
rvcas a4f6388eca feat: remove the need for # in front of tuples 2022-12-12 19:22:11 -05:00
rvcas dfc57b347a feat: switch generic type args to be delimited by chevrons 2022-12-12 19:22:11 -05:00
rvcas a18aad7daf refactor(project): use new Options instead of a spiderweb of bools 2022-12-10 19:14:58 -05:00
KtorZ 0eb3cf221b
Trigger and report on more events in the compilation pipeline. 2022-12-09 15:04:02 +01:00
KtorZ 749d8ecb10
Fix formatter to not prefix tests as 'pub' 2022-12-09 14:35:50 +01:00
KtorZ d09d38d65b
Add a flag '--skip-tests' to the 'check' cmd.
So that tests can be skipped, and the old behavior recovered if necessary.

  Tests execution is on by default however.
2022-12-09 14:14:15 +01:00
rvcas 4ad74bef1f
refactor: move prints to cli via EventListener trait 2022-12-08 19:25:28 -05:00
KtorZ 801ab3989e
feat: display test runner summary alongside test results.
Moar sexy.
2022-12-08 19:25:28 -05:00
KtorZ 4cae4a4467
pad left instead of right, so units/thousands are aligned. 2022-12-08 19:25:28 -05:00
rvcas 2ba712eef6
feat: start adding padding to test output 2022-12-08 19:25:28 -05:00
KtorZ 5770ea2456
Make test runner more sexy.
Using colors.
2022-12-08 19:25:28 -05:00
KtorZ db25ff3817
refactor: run_tests to avoid repetition. 2022-12-08 19:25:28 -05:00
rvcas e9d8e1d317
feat: print budget consumed by test 2022-12-08 19:25:24 -05:00
rvcas 141a9aef30
feat: impl Sub for ExBudget 2022-12-08 19:24:20 -05:00
rvcas f250d3df84
feat: eval should take initial budget 2022-12-08 19:24:20 -05:00
KtorZ 4cdb5d8d02
Implement test runner.
easy.
2022-12-08 19:24:20 -05:00
rvcas 384c4daa4a
feat: add test_gen function 2022-12-08 19:24:20 -05:00
KtorZ bc785673b2
Fix compilation errors for the newly introduce test & add type inference.
Tests are basically functions for which the return type should unify with bool. In principle, the type checker could also check that a test function has no arguments but, a test function with arguments wouldn't parse in the first place; feels a bit hacky but it works when considering the pipeline as a whole.

  Note that the code generation is still to be done.
2022-12-08 19:24:20 -05:00
KtorZ ea48747825
Extend parser for 'test' keyword. 2022-12-08 19:24:20 -05:00
rvcas a65b4aa471
feat: add test def and test token 2022-12-08 19:24:20 -05:00
Kasey White 80a9b7b36a feat: add map support and tuple deconstruction in let 2022-12-08 14:28:30 -05:00
Kasey White 26d2a95618 missing a couple forces 2022-12-08 14:28:30 -05:00
Kasey White 2f7131e9b8 feat: add tuples and streamline conversion of types to and from data 2022-12-07 08:40:23 -05:00
rvcas 45990f1f84 feat: unify tuples and stdlib updates 2022-12-06 22:23:40 -05:00
Kasey White 3f47a1f4b8 fix: constr issue
- also fixed constant parsing
- added new cbor flag to eval

Co-authored-by: rvcas <x@rvcas.dev>
2022-12-05 22:55:57 -05:00
rvcas 7875af7d35 feat: better errors for incorrect contructor making 2022-12-05 18:11:04 -05:00
rvcas 7e6dc978a1 feat: commit latest build assets for sample 2022-12-05 14:18:44 -05:00
rvcas ed3d143477 feat: rename ir to air 2022-12-05 14:18:44 -05:00
rvcas 24d724e10e chore: fix fmt 2022-12-05 14:18:44 -05:00
Kasey White 3e68204768 replace uplc with uplc_two and move structs over 2022-12-05 14:18:44 -05:00
Kasey White 22fbef2fbe feat: finish up binops and fix constr creation 2022-12-05 14:18:44 -05:00
Kasey White 0fda535c50 feat: add module constants except for tuple 2022-12-05 14:18:44 -05:00
Kasey White de9302a877 feat: finish list destructure in when matches 2022-12-05 14:18:44 -05:00
Kasey White 8cbdf97d22 finish uplc code gen for complex clauses with constr 2022-12-05 14:18:44 -05:00
Kasey White f48039fd4f Add ability to generate ir with complex constructor cases 2022-12-05 14:18:44 -05:00
Kasey White 64cbae938d Add clause guard to IR and use it for complex clauses 2022-12-05 14:18:44 -05:00
Kasey White e1d6ffa92a add more binops 2022-12-05 14:18:44 -05:00
Kasey White 044d609a24 feat: nested constr access and module funcs now work 2022-12-05 14:18:44 -05:00
Kasey White 3d3beef7d4 feat: uplc code gen for functions and minor recursion fix 2022-12-05 14:18:44 -05:00
Kasey White 8f984ad131 fix up function definitions in the IR 2022-12-05 14:18:44 -05:00
Kasey White 02ee129615 feat: function insertion IR done, code gen will be easy 2022-12-05 14:18:44 -05:00
Kasey White 29a30aa61f feat: finished when constr is for IR and code gen 2022-12-05 14:18:44 -05:00
Kasey White 3fb3a3240a checkpoint 2022-12-05 14:18:44 -05:00
rvcas 86ea41adc3 feat: start when expressions 2022-12-05 14:18:44 -05:00
Kasey White 8b24a66b7e add field access and list patterns are finished
Co-authored-by: rvcas <x@rvcas.dev>
2022-12-05 14:18:44 -05:00
Kasey White abe29a3883 make progress on list deconstruction with IR 2022-12-05 14:18:44 -05:00
Kasey White 2a00b896fc create ir and start to replace plutus code gen with ir 2022-12-05 14:18:44 -05:00
Kasey White 6870a5cab7 fix minor scope issue 2022-12-05 14:18:44 -05:00
Kasey White e3267310c5 remove unListData 2022-12-05 14:18:44 -05:00
rvcas 84da69411d chore: fix test 2022-12-04 21:12:29 -05:00
rvcas f2c359f9d5 test(parser): add record creation tests 2022-12-04 21:12:29 -05:00
rvcas 85f839abe4 feat: support punning in record updates 2022-12-04 21:12:29 -05:00
rvcas 9ebc836b89 feat: handle punning in a non-ambiguous way 2022-12-04 21:12:29 -05:00
rvcas 391849bf37 feat: parser improvements
- record creation with punning
- disambiguate if condition from record creation with punning
- split parser tests up into many smaller ones
2022-12-04 21:12:29 -05:00
KtorZ 375499930a Add UPLC support for 'ProtoList' & 'ProtoPair' constants
Supersedes #35.

  The syntax for these elements isn't "set in stone"; in the sense that it is unspecified in [input-output-hk/plutus](https://github.com/input-output-hk/plutus). There's no visible plan from IOG to extend the Haskell parser to support this syntax, though there are samples of imagined syntax in the code. Thus, we can lead the way and simply choose a suitable syntax and let the Haskell implementation align to it later.

  This syntax is thus inspired from input-output-hk/plutus' samples, with only a small change: we use `<` and `>` for encapsulating type declaration instead of `(`, `)`. There are already enough parentheses in the UPLC syntax, adding more reduces visibility.

  Doing this, I've also added a lot more test cases for the UPLC parser. There could be more, but this is a good start.

  Here are some example programs (taken from test cases) utilizing this syntax:

  ```
  (program 0.0.0 (con list<bytestring> [#00, #01]))
  ```

  ```
  (program 0.0.0
      (con pair
        <integer, integer>
        [14, 42]
      )
  )
  ```

  ```
  (program 0.0.0
      (con pair<string, list<integer>> ["foo", [14, 42]])
  )
  ```

  _(Note that this was mainly done as an exercise to get more familiar with Rust and parts of Aiken.)_
2022-12-03 10:16:16 -05:00
rvcas 5ec93a8692 feat: format bytearrays 2022-12-01 15:28:15 -05:00
rvcas fedafed845 feat: add module constants 2022-12-01 15:28:15 -05:00
rvcas 34c8a58391 feat: complete language tour 2022-11-30 15:35:55 -05:00
rvcas 0823b78bf8 feat: some new features
- tuples `#(Int, Int)`
- `trace` and `trace("text")`
2022-11-28 22:33:53 -05:00
eyelash 6066e3176c move `to_string()` outside of the match 2022-11-28 17:30:45 -05:00
vh-zuka 269cf8c13f fix: update aiken new 2022-11-26 10:30:41 -05:00
rvcas d5087dbcc7 fix: it's more consistent to have snakecase builtins 2022-11-24 18:36:22 -05:00
rvcas 67d160230b feat: new build command flag
- `uplc` to optionally dump raw uplc
2022-11-24 18:17:03 -05:00
Kasey White 1c3511b073 insert def should run after all sequences have run 2022-11-24 17:51:49 -05:00
Kasey White 6babebde28 feat: support self recursion functions and fix making constrs 2022-11-24 15:19:32 -05:00
rvcas 09e77e1918 feat: display named source 2022-11-24 11:38:43 -05:00
rvcas ba8855add9 fix: implicit discard in list patterns 2022-11-24 10:06:54 -05:00
rvcas 27e0286d01 fix: most places should allow trailing comma 2022-11-23 21:09:06 -05:00
rvcas c07b9a1a81 feat: allow assignments to be cast to other types 2022-11-23 21:09:06 -05:00
rvcas 34d7a28351 feat: add check keyword and new assignment syntax 2022-11-23 21:09:06 -05:00
Kasey White 6687b9fe4c add forces to pair usage and fix clippy 2022-11-23 17:57:02 -05:00
Kasey White dc510b1c7a feat: finish list deconstruct 2022-11-23 17:57:02 -05:00