microproofs
794fc93084
remove unused structs
2023-09-25 21:16:19 -04:00
microproofs
0b38855ce4
add new enum for hoistablefunctions
2023-09-25 21:16:19 -04:00
microproofs
ced818c455
checkpoint commit
2023-09-25 21:16:19 -04:00
microproofs
0fb9837ddf
chore: change UserFunction to HoistableFunction to prepare for mututal recursion
2023-09-25 21:16:19 -04:00
microproofs
74b8ab62b2
chore: add comments
2023-09-25 21:16:19 -04:00
microproofs
a4aa51ed2d
WIP: first part of mutual recursion is done.
...
This involves creating the function definition and detecting cycles.
The remaining part is to "fix" the call sites
of the mutually recursive functions
2023-09-25 21:16:19 -04:00
KtorZ
f379039efc
Fix record shorthand causing parsing ambiguity in if/else expressions.
...
Fixes #735 .
2023-09-15 09:41:00 +02:00
rvcas
d808197507
chore: clippy fix
2023-09-13 18:17:59 -04:00
rvcas
9a4f181a0f
chore: clippy fix
2023-09-13 17:19:31 -04:00
microproofs
a45001376d
fix: is_record was used incorrectly in code gen,
...
the real solution was to look up the datatype and check constructors length
2023-09-13 00:33:02 -04:00
microproofs
d042d55d42
fix clippy warnings in code gen
2023-09-12 21:25:05 -04:00
KtorZ
8ba5946c32
Preserve escape sequence after formatting
...
Bumped into this randomly. We do correctly parse escape sequence, but
the format would simply but the unescaped string back on save. Now it
properly re-escapes strings before flushing them back. I also removed
the escape sequence for 'backspace' and 'new page' form feed as I
don't see any use case for those in an Aiken program really...
2023-09-08 12:12:15 +02:00
rvcas
6b70292dfb
chore: cargo fmt
2023-09-06 21:10:50 -04:00
rvcas
dca09811c1
fix: empty records crashing code gen closes #728
2023-08-31 17:39:38 -04:00
microproofs
51c44c6a30
fix: add an assert for better error messages when doing empty types
2023-08-30 13:50:37 -04:00
microproofs
baa6917af5
Fix: Change type map length assert to check for greater than equals instead of equals to argument length
2023-08-29 21:59:15 -04:00
waalge
d4b9f22ac3
rm unnecessary mut
2023-08-26 16:30:44 +00:00
microproofs
084b900b2a
change: traverse_with_tree now has a boolean to determine when with is called
...
fix: Opaque types are now properly handled in code gen (i.e. code gen functions, in datums/redeemers, in from data casts)
chore: add specific nested opaque type tests to code gen
2023-08-19 20:07:37 -04:00
rvcas
f5a49c4df4
fix: aliased import of single type throws compiler error closes #707
2023-08-16 23:15:51 -04:00
microproofs
a45e04fd9b
fix: using the wrong var for pattern matching
2023-08-16 21:59:25 -04:00
microproofs
2456801b17
fix list clauses with guards and add more tests
2023-08-16 21:59:25 -04:00
rvcas
0ff64e3bac
test: check and format tests for logical op chain
2023-08-15 09:58:35 -04:00
rvcas
e14d51600f
feat(format): logical op chain
2023-08-15 09:58:35 -04:00
rvcas
2c2f3c90fb
feat: new snapshots
2023-08-15 09:58:35 -04:00
rvcas
05eb281f40
chore: can safely remove this at this point
2023-08-15 09:58:35 -04:00
rvcas
e4ef386c44
feat(tipo): inference for and/or chains
2023-08-15 09:58:35 -04:00
rvcas
ab3a418b9c
feat(parser): add support for and/or chaining
2023-08-15 09:58:35 -04:00
microproofs
2f7784f31e
chore: update changelog
...
expecting a type on List<Data> from data now only checks that type is a list and not each element
2023-08-10 23:01:46 -04:00
microproofs
eda388fb29
test(aiken-lang): add a new test for list edge case in when clause patterns
2023-08-08 20:47:35 -04:00
microproofs
252f68de17
fix clippy
2023-08-07 19:08:18 -04:00
Pi Lanningham
f464eb3702
Cargo fmt + clippy, with latest rust
2023-08-07 19:00:39 -04:00
Pi Lanningham
0d99afe5e2
Cargo fmt
2023-08-07 19:00:39 -04:00
microproofs
90c7753201
update tests for new recursion optmization
2023-08-07 19:00:39 -04:00
microproofs
65984ed15b
fix: move where we call the with in traverse_tree_with
2023-08-07 19:00:39 -04:00
Pi Lanningham
dba0e11ba7
Add other shadowing cases
2023-08-07 19:00:39 -04:00
Pi Lanningham
fc948f0029
Add the same optimization to dependent functions
...
I originally didn't add this because I thought this was mutually
recursive functions, which I couldn't picture how that would work;
I refactored all this logic into modify_self_calls, which maybe needs a
better name now.
Perf gain on some stdlib tests (line concat tests) is 93%!!
2023-08-07 19:00:39 -04:00
Pi Lanningham
c45caaefc8
Rudimentary implementation
...
Adds an identify_recursive_static_params; doesn't handle all shadowing cases yet
2023-08-07 19:00:39 -04:00
Pi Lanningham
09f889b121
Add codegen for recursive statics case
...
We also flip the recursive_statics fields to recursive_nonstatics; This makes the codegen a little easier. It also has a hacky way to hard code in some recursive statics for testing
2023-08-07 19:00:39 -04:00
Pi Lanningham
586a2d7972
Add recursive_static_params to AIR
...
Any methods to a recursive function that are unchanged and forwarded
don't need to be applied each time we recurse; instead, you can
define a containing lambda, reducing the number of applications
dramatically when recursing
2023-08-07 19:00:39 -04:00
microproofs
1d9878c5ee
fix: code gen tests now up to date using trace
...
fix: Formatter should take ErrorTerm and return "fail"
fix: fail with no reason should just return ErrorTerm
2023-08-07 12:02:44 -04:00
microproofs
29599879b2
one minor tail fix in clause pattern
2023-08-07 12:02:44 -04:00
microproofs
6a1b2db698
use retain instead of position
2023-08-07 12:02:44 -04:00
microproofs
7bf22fa58b
fix multivalidator issue
2023-08-07 12:02:44 -04:00
microproofs
281a8363c0
fixes to tuples and usage of discard.
...
Also a fix to tail and its type in when list pattern matches
2023-08-07 12:02:44 -04:00
microproofs
bfa4cc2efc
fix: some function dependency tree path was not being updated in order
...
fix: revert to old implicit way of casting to data for now
2023-08-07 12:02:44 -04:00
microproofs
a45ff692a6
last changes for today
2023-08-07 12:02:44 -04:00
microproofs
db79468435
remove old stuff
2023-08-07 12:02:44 -04:00
microproofs
aca79bd728
remove warning
2023-08-07 12:02:44 -04:00
microproofs
3189a60bdb
fixes to how we sort dependencies.
...
Also update dependency path based on a functions path.
2023-08-07 12:02:44 -04:00
microproofs
80b950b8aa
fix edge case with assign and pattern matching
2023-08-07 12:02:44 -04:00
microproofs
186e1235fd
checkpoint
2023-08-07 12:02:44 -04:00
microproofs
1ee7492f1f
fix tuple clause
2023-08-07 12:02:44 -04:00
microproofs
5aecb96668
constants are back. I had broke them when switching how data casting works
2023-08-07 12:02:44 -04:00
microproofs
0b8266dfd1
some type conversion fixes
2023-08-07 12:02:44 -04:00
microproofs
02948616cd
some more fixes involving clauses
2023-08-07 12:02:44 -04:00
microproofs
a689b8748f
fix: working on minor edge cases
...
fix: zero arg function dependencies should not count as hoisted
fix: tuple index was receiving the wrong type
2023-08-07 12:02:44 -04:00
microproofs
4e3ced5b75
fix and clean up tests and handle
...
one edge case on rearrange clauses
2023-08-07 12:02:44 -04:00
microproofs
018453f6b1
fix expect on tuple type using the wrong internal type
2023-08-07 12:02:44 -04:00
microproofs
f03ed41e03
fix some unnecessary lambdas in assign
2023-08-07 12:02:44 -04:00
microproofs
03dd13dc7d
fixing list condition edge cases and clean up rearrange list clauses
2023-08-07 12:02:44 -04:00
microproofs
e8fa8f5423
fixing list clause issues
2023-08-07 12:02:44 -04:00
microproofs
c6f90a999b
checkpoint
2023-08-07 12:02:44 -04:00
microproofs
389699f485
fix to subject type for assignment on single clause
2023-08-07 12:02:44 -04:00
microproofs
dcb3a9b45b
some type and expect fixes
2023-08-07 12:02:44 -04:00
microproofs
3545bad3c4
fix typing to constr
2023-08-07 12:02:44 -04:00
microproofs
52ebc9b6c1
some more fixes
2023-08-07 12:02:44 -04:00
microproofs
58b327e5b3
fixing bugs and edge cases
2023-08-07 12:02:44 -04:00
microproofs
2f4319f162
fix: tuples and list patterns had a few issues
2023-08-07 12:02:44 -04:00
microproofs
960a15c4ec
checkpoint - fixing tests and stuff
2023-08-07 12:02:44 -04:00
microproofs
72b6f0f847
all but six tests passing
2023-08-07 12:02:44 -04:00
microproofs
6eeb282dee
Now code gen is finished and we just have testing
2023-08-07 12:02:44 -04:00
microproofs
518bea5be4
feat: fixed up generate and generate test
...
last step is checking on uplc code gen
2023-08-07 12:02:44 -04:00
microproofs
18ea44adb0
chore: rename unwrapData and wrapData
...
add validator cast function for extra validator params
2023-08-07 12:02:44 -04:00
microproofs
55dd1a1a56
out with the old code and in with the air tree
2023-08-07 12:02:44 -04:00
microproofs
02ce3761ae
final checkpoint
2023-08-07 12:02:44 -04:00
microproofs
8641c305f4
feat: airtree now hoists function. Now all that is left is finishing uplc gen
2023-08-07 12:02:44 -04:00
microproofs
5ad8b520fd
checkpoint
2023-08-07 12:02:44 -04:00
microproofs
5a51764cff
remove some warnings
2023-08-07 12:02:44 -04:00
microproofs
a099c01734
feat: add support for hoisting code gen functions
...
fix: code gen vars should be module functions
fix: missed a recursive call in do_find_air_tree_node under binop
2023-08-07 12:02:44 -04:00
microproofs
c0f09856d3
feat: Here's a first, we hoisted some user functions onto the validator
2023-08-07 12:02:44 -04:00
microproofs
62660e04b5
checkpoint;
...
Remaining work is on function hoisting. Functions have been defined and monomorphized
2023-08-07 12:02:44 -04:00
microproofs
ae9de11e77
big checkpoint:
...
feat: add monomorphize and other useful tree function abstractions
feat: started testing function hositing result so far
2023-08-07 12:02:44 -04:00
microproofs
947c118175
checkpoint
2023-08-07 12:02:44 -04:00
microproofs
9704cafefe
a checkpoint for function hoisting start and type fix
2023-08-07 12:02:44 -04:00
microproofs
55ae708e3e
checkpoint: start on function hoisting
2023-08-07 12:02:44 -04:00
microproofs
2b7e7ead1c
feat: add support for validator arguments
...
feat: finish expect type on data constr
fix: tuple clause was exposing all items regardless of discard
fix: tuple clause was not receiving complex_clause flag
fix: condition for assert where constructor had 0 args was tripping assert
fix: had to rearrange var and discard assignment to ensure correct val is returned
fix: binop had the wrong type
2023-08-07 12:02:44 -04:00
microproofs
7d4e136467
checkpoint
2023-08-07 12:02:44 -04:00
microproofs
fd83c9a739
feat: fix up generic type functions to work with the new air tree functions
...
chore: remove commented code
2023-08-07 12:02:44 -04:00
microproofs
b3714ca9d0
fix: list clause guard for final clause needs to use list accessor
2023-08-07 12:02:44 -04:00
microproofs
2c61ecd4bb
feat: finish up nested clauses
2023-08-07 12:02:44 -04:00
microproofs
a3afb62861
chore: fixing nested clauses to match aiken stack air
2023-08-07 12:02:44 -04:00
microproofs
95af421f95
feat: finish tuple conditions
2023-08-07 12:02:44 -04:00
microproofs
05b6b2a97d
chore: rename some functions
2023-08-07 12:02:44 -04:00
microproofs
c025073056
fix: List clauses were destructuring the next element unnecessarily
...
feat: finish nested constructor clauses
2023-08-07 12:02:44 -04:00
microproofs
f6e163d16d
feat: start on nested clauses
...
chore: remove then field from list clause guard and clause guard
2023-08-07 12:02:44 -04:00
microproofs
5bcc425f0f
feat: changed air expressions clause guard
...
and list clause guard to air statements
2023-08-07 12:02:44 -04:00
microproofs
023be88bf6
chore: another checkpoint
...
fix: guard clause to properly check condition
2023-08-07 12:02:44 -04:00
microproofs
f94c8213b6
checkpoint
2023-08-07 12:02:44 -04:00
microproofs
0854d71836
chore: another checkpoint and renamed ClauseProperties fields
2023-08-07 12:02:44 -04:00
microproofs
d731757123
feat: start on clauses in when conditions
...
**checkpoint**
2023-08-07 12:02:44 -04:00
microproofs
96959011e9
feat: finish up build. just have helper methods
...
feat: Create an air and AirTree iterator.
This allows us to iterate forwards or backwards over the tree as a vec.
chore: moved around some functions
2023-08-07 12:02:44 -04:00
microproofs
ba3265054c
chore: move tree to gen_uplc2 and create a duplicate air file without scope
2023-08-07 12:02:44 -04:00
microproofs
7cee9a4d15
chore: move assignment_air_tree and expect_type to gen_uplc
...
feat: add is_primitive check to types
2023-08-07 12:02:44 -04:00
microproofs
cd726b561e
feat: add removal of discard lets
...
chore: Name change for AirTree sequence
feat: finish up assignment constructor and list for airtree builder
2023-08-07 12:02:44 -04:00
microproofs
59362e3d8c
feat: almost done assignment have tuple and constr left
...
feat: modified the AirTree structure to have statements, sequences, and expressions
feat: changed the hoist_over function to be universal
2023-08-07 12:02:44 -04:00
microproofs
65bb7e48e2
feat: start on build assignment
...
feat: implement assignment hoisting
2023-08-07 12:02:44 -04:00
microproofs
c359bd35d7
feat: update tree to allow for let hoisting
...
feat: start on build for when expressions
feat: add builder methods for AirTree
2023-08-07 12:02:44 -04:00
microproofs
83ade9335f
feat: implement most of airtree build
2023-08-07 12:02:44 -04:00
microproofs
5e097d42ba
feat: add AirTree types and builder functions
2023-08-07 12:02:44 -04:00
rvcas
266b6bbb7d
fix(exhaustiveness): for constructor use correct name because import aliases
2023-08-03 16:28:47 -04:00
rvcas
60ac8ab591
fix(exhaustiveness): adjust helper method to get contructors properly
2023-08-03 16:14:42 -04:00
KtorZ
675b737898
Check exhaustiveness behavior on pattern guards.
2023-08-02 10:40:59 +02:00
KtorZ
4f7f39292d
Fix subtle bug in pattern rendering
...
When rendering missing or redundant patterns, linked-list would
wrongly suggest the last nil constructor as a pattern on non-empty
list.
For example, before this commit, the exhaustivness checker would yield:
```
[(_, True), []]
```
as a suggestion, for being the result of being a list pattern with a
single argument being `(_, True) :: Nil`. Blindly following the
compiler suggestion here would cause a type unification error (since
`[]` doesn't unify with a 2-tuple).
Indeed, we mustn't render the Nil constructor when rendering non-empty
lists! So the correct suggestion should be:
```
[(_, True)]
```
2023-08-02 10:31:35 +02:00
KtorZ
00b255e960
Remove now-dead code.
2023-08-02 09:22:21 +02:00
rvcas
f3cab94ae1
test(check): a bunch of tests for the new exhaustiveness stuff
2023-08-01 21:13:50 -04:00
rvcas
75e18d485d
fix: redundant might be wildcard which doesn't match technically
2023-08-01 21:13:50 -04:00
rvcas
a6b230aad4
fix: exhaustiveness on types from other modules
2023-08-01 21:13:50 -04:00
rvcas
7e531d0da1
fix: wrong var for name in UnknownModule error
2023-08-01 21:13:50 -04:00
rvcas
b6ac39f322
feat(exhaustiveness): show both clauses in redundant error
2023-08-01 21:13:50 -04:00
rvcas
ef2fc57ca9
feat(exhaustiveness): check tuple patterns
2023-08-01 21:13:50 -04:00
rvcas
f1100e901d
feat(exhaustiveness): pretty print missing patterns
2023-08-01 21:13:50 -04:00
rvcas
de2791fe82
feat(tipo): add new error for redundant clauses
2023-08-01 21:13:50 -04:00
rvcas
0061bcf78d
feat: add support for list patterns
2023-08-01 21:13:50 -04:00
rvcas
e8a71cd63b
chore: rename usefulness module
2023-08-01 21:13:50 -04:00
rvcas
03efb46e6f
feat(exhaustiveness): algorithm U borrowed from elm
2023-08-01 21:13:50 -04:00
rvcas
77a627817b
chore: prepare changelog for release
2023-07-15 21:34:41 -04:00
rvcas
1b8e94fe32
feat: expect boolean sugar
2023-07-15 20:50:02 -04:00
rvcas
db3b5c74bb
fix: todo and fail spans
2023-07-15 20:08:16 -04:00
rvcas
69fdee9f7e
fix: trace expr
2023-07-15 20:08:16 -04:00
rvcas
2edfd33594
fix: some attempted adjustments
2023-07-15 20:08:16 -04:00
rvcas
252b760ca1
test: remove prefix on all format tests
2023-07-14 16:56:27 -04:00
rvcas
eafe3cdf75
test: fail with expr relates to #675
2023-07-14 13:09:55 -04:00
rvcas
e7c1b28b52
feat: add ability to reference validators in tests closes #632
2023-07-12 18:29:03 -04:00
rvcas
13ee62c05c
fix: don't break failing test defs for current users
2023-07-12 09:16:37 -04:00
rvcas
03e7d6e944
feat: update syntax for failing test to be more consistent
2023-07-12 09:16:37 -04:00
rvcas
1ab1ff9a1f
feat: rename error to fail
2023-07-12 09:16:37 -04:00
rvcas
914b8d4e74
fix: infer validator args as Data if Unbound closes #649
2023-07-11 13:51:17 -04:00
Cainã Costa
b80c41b4b7
chore: cargo fmt
2023-07-11 13:06:25 -04:00
Cainã Costa
14652abd4f
fix: port last missing test
...
This test has been added after the first implementation, so we move it
to the new format :)
2023-07-11 13:06:25 -04:00
Cainã Costa
7f7a86765d
feat: bring back formatting imdepotency test
2023-07-11 13:06:25 -04:00
Cainã Costa
c27ef8ad93
chore: refactor formatting tests
...
This changes the tests from normal assertions into snapshot tests, as
well as standardizing test names.
2023-07-11 13:06:25 -04:00
rvcas
94bf75dd1c
chore: delete unreferenced snapshots
2023-07-06 21:00:13 -04:00
KtorZ
126f2ab004
Implement new formatter for 'int'.
...
This is used for constants and patterns, which can carry negative
values.
2023-07-06 16:10:46 -04:00
KtorZ
78d34f7f76
Fix parsing of negative int patterns and constants
...
This was trickier than expected as the expression parser, and in particular the bin-op parser will interpret negative patterns as a continuation of a binary operation and eventually choke on the next right-arrow symbol. This is due to how we actually completely erase newlines once we're done with the lexer. The newline separating when clause is actually semantically important. In principle, we could only parse an expression until the next newline.
Ideally, we would keep that newline in the list of token but it's difficult to figure out which newline to keep between two right arrows since a clause guard can be written over multiple lines. Though, since we know that this is only truly a problem for negative integers, we can use the same trick as for tuples and define a new 'NewLineMinus' token. That token CANNOT be part of a binop expression. That means it's impossible to write a binary operation with a minus over multiple lines, or more specifically, with the '-' symbol on a newline. This sounds like a fair limitation. What we get in exchange is less ambiguity when parsing patterns following expressions in when clause cases.
Another more cumbersome option could be to preserve the first newline encountered after a 'right-arrow' symbol and before any parenthesis or curly brace is found (which would otherwise signal the beginning of a new block). That requires to traverse, at least partially, the list of tokens twice. This feels unnecessary for now and until we do face a similar issue with a binary operator.
2023-07-06 16:10:46 -04:00
KtorZ
346df47232
Refactor chain parser
...
The main goal is to make the parser more reusable to be used for when-clauses, instead of the expression parser. A side goal has been to make it more readable by moving the construction of some untyped expression as method on UntypedExpr. Doing so, I got rid of the extra temporary 'ParseArg' type and re-used the generic 'CallArg' instead by simply using an Option<UntypedExpr> as value to get the same semantic as 'ParseArg' (which would distinguish between plain call args and holes). Now the chained parser is in a bit more reusable state.
2023-07-06 16:10:46 -04:00
KtorZ
549cf22cdd
Rename (Un)TypedExpr.Int -> (Un)TypedExpr.UInt
...
We do not actually every parse negative values in there, as a negative value is a combination of a 'Negate' and 'UInt' expression.
However, for patterns and constant, it'll be simpler to parse whole Int values as there's no ambiguity with arithmetic operations
there. To avoid confusion of having some 'Int' constructors containing only non-negative values, and some being on the whole range,
I've renamed the constructor to 'UInt' to make this more obvious.
2023-07-06 16:10:46 -04:00
KtorZ
5a4a2faa4d
Split pattern parser into individual modules.
2023-07-06 16:10:46 -04:00
KtorZ
0650d6152d
rename test cases for when/clause to somewhat match the file hierarchy.
2023-07-06 16:10:46 -04:00
KtorZ
ed85cb1c00
Fix todo/error parsing
...
This was a bit more tricky than anticipated but played out nicely in
the end. Now we have one holistic way of parsing todos and errors
instead of it being duplicated between when/clause and sequence. The
error/todo parser has been moved up to the expression part rather than
being managed when parsing sequences. Not sure what motivated that to
begin with.
Fixes #621 .
2023-07-05 20:12:57 +02:00
rvcas
e331b3449b
chore: clippy fix
2023-07-05 12:06:03 -04:00
KtorZ
a306d6e9f2
Move chain and chained parsing into their own submodule
...
Alleviate a bit more the top-level expression parser. Note that we
probably need a bit more disciplined in what we export and at what level
because there doesn't seem to be much logic as for whether a parser is
private, exported to the crate only or to the wide open. I'd be in favor
of exporting everything by default.
2023-07-05 15:18:07 +02:00
KtorZ
4f6defcf3e
rename: 'r' → 'expression' & 'seq_r' → 'sequence'
...
Better readability.
2023-07-05 14:42:14 +02:00
KtorZ
66296df9c3
Move parsing of literals under new 'literal' parser module group
...
Also moved the logic for 'int' and 'string' there though it is trivial. Yet, for bytearray, it tidies things nicely by removing them from the 'utils' module.
2023-07-05 14:37:29 +02:00
KtorZ
e15cdaf248
Move 'utils::bytearray' to 'expr/bytearray'
2023-07-05 14:10:47 +02:00
KtorZ
44eb501d78
Favor pattern-match over if-else when parsing assignment kinds
...
Equality on a union-type is potentially dangerous as the compiler won't
complain if we add a new case that we don't cover. Reversing the
assignment by yielding a `Token` for a given `AssignmentKind`. This way
we can use a pattern-match that got us covered for future cases.
2023-07-05 14:01:13 +02:00
KtorZ
93e010b345
Replace 'public' utils with a more generic 'optional_flag'
...
The 'public' util was arguably not really adding much except a layer of indirection.
In the end, one useful parsing behavior to abstract is the idea of 'optional flag' that we use for both 'pub' and 'opaque' keywords.
2023-07-05 13:57:34 +02:00
rvcas
5e8edcb340
test(parser): finish moving tests to their correct modules
2023-07-04 17:48:48 -04:00
rvcas
47567c5e6f
test(parser): some adjustments after rebase with @ktorz fix
2023-07-04 17:19:30 -04:00
rvcas
b25db429be
test(parser): anon binop and ambiguous sequence
2023-07-04 17:19:30 -04:00
rvcas
8a6c81493c
test(parser): record create
2023-07-04 17:19:30 -04:00
rvcas
a75bcff5c8
test(parser): type alias, anon fn, record update and more
2023-07-04 17:19:30 -04:00
rvcas
bd8c13c372
test(parser): move over the validator tests and some misc tests to parser
2023-07-04 17:19:29 -04:00
rvcas
6b05d6a91e
test(parser): rename definitions to definition and more tests
2023-07-04 17:19:29 -04:00
rvcas
baf807ca2d
test(parser): list spread
2023-07-04 17:19:29 -04:00
rvcas
44d0432560
test(parser): int list
2023-07-04 17:19:29 -04:00
rvcas
f9c099a923
test: add indoc to assert_expr macro
2023-07-04 17:19:29 -04:00
rvcas
715752718d
test: assert_module
2023-07-04 17:19:29 -04:00
rvcas
da0b969865
test: adjust snapshots
2023-07-04 17:19:29 -04:00
rvcas
8a7df7f66b
test: add empty list test
2023-07-04 17:19:29 -04:00
Cainã Costa
291dedf4e8
chore: refactor all parse tests to use assert_parse!
2023-07-04 17:19:28 -04:00
rvcas
f878ef7cef
feat: move some token processing to the lexer
2023-07-04 17:19:28 -04:00
rvcas
2226747dc1
feat: finish splitting up parsers
2023-07-04 17:19:28 -04:00
Cainã Costa
63cdb8aa09
chore: add more details on snapshot tests
...
We added a macro to add more information about the code that is being
tested, so we can add lots and lots of small snapshot tests.
2023-07-04 17:19:28 -04:00
Cainã Costa
eeaa1a05d2
feat: add first code snapshot test with insta
2023-07-04 17:19:28 -04:00
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
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
microproofs
d641f731b7
fix: needed a stricter check for expect_pattern func on discard pattern
2023-06-28 15:54:59 -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
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
c3bb7b0f75
fix: tail list being expected on when it should be empty
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
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
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
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
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
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
rvcas
7b3e1c6952
feat: adjust failing test syntax
...
* also add a formatter test
2023-05-25 18:21:12 -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
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
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
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
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
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
rvcas
c9a762a13c
fix: we weren't including the name unused var warning
2023-04-20 16:53:56 -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
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
3b351d36fb
fix(aiken-lang): assignment as last expr in when and if
2023-04-16 19:55:47 -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
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
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
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
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
d620f6367c
Bootstrap schema validation for simple constants.
2023-04-08 08:57:03 +02:00
rvcas
1444c9328d
fix some typos
2023-04-07 16:51:18 -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
cc18e7cff2
Fix formatting of function expressions with traces
...
Fixes #471
2023-03-30 09:21:46 +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
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
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
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
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
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
bd7b8792bf
feat: introduce EvalResult type
2023-03-08 10:19:36 +01: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
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
KtorZ
539ed2dea4
Fix unicode char parsing in comments.
2023-02-22 17:33:13 +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