Commit Graph

177 Commits

Author SHA1 Message Date
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
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
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
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
alessandrokonrad 3012a0b41d
Fix constructor tag range 2023-02-08 13:14:26 +01: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
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 175cd777d8 feat: enable elliptic curve verification builtins 2023-02-04 22:07:56 -05:00
rvcas ddad05bf51
chore: leave a comment for later 2023-02-04 15:33:18 -05: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
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
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
rvcas 99c1c880b0 chore: more clippy 2023-02-01 18:53:11 -05:00