Commit Graph

2929 Commits

Author SHA1 Message Date
Riley-Kilgore
9296516f5a Fixed hyphen in filename breaking LSP 2024-08-05 16:27:37 -04:00
KtorZ
a07f8cbc58 Fill-in CHANGELOG. 2024-08-04 14:48:03 +02:00
KtorZ
ec7f659539 Allow bytes to be defined as plain strings, or with specified encoding.
The syntax is as follows:

  { "bytes" = "...", "encoding" = "<encoding>" }

  The following encoding are accepted:

  "utf8", "utf-8", "hex", "base16"

  Note: the duplicates are only there to make it easier for people to
  discover them by accident. When "hex" (resp. "base16") is specified,
  the bytes string will be decoded and must be a valid hex string.
2024-08-04 14:48:03 +02:00
KtorZ
6454266b06 Allow simple expressions as configuration in aiken.toml
This is currently extremely limited as it only supports (UTF-8)
  bytearrays and integers. We should seek to at least support hex bytes
  sequences, as well as bools, lists and possibly options.

  For the latter, we the rework on constant outlined in #992 is
  necessary.
2024-08-04 14:48:03 +02:00
KtorZ
6de1d91104 Create dedicated error when environment isn't found.
This is less confusing that getting an 'UnknownModule' error reporting
  even a different module name than the one actually being important
  ('env').

  Also, this commit fixes a few errors found in the type-checker
  when reporting 'UnknownModule' errors. About half the time, we would
  actually attached _imported modules_ instead of _importable modules_
  to the error, making the neighboring suggestion quite worse (nay
  useless).
2024-08-04 14:48:03 +02:00
KtorZ
2dca0c4185 Ensure env modules dependencies are properly handled.
We figure out dependencies by looking at 'use' definition in parsed
  modules. However, in the case of environment modules, we must consider
  all of them when seeing "use env". Without that, the env modules are
  simply compiled in parallel and may not yet have been compiled when
  they are needed as actual dependencies.
2024-08-04 10:33:58 +02:00
KtorZ
fbe2f82582 Thread down environment module from cli down to the type-checker
We simply provide a flag with a free-form output which acts as
  the module to lookup in the 'env' folder. The strategy is to replace
  the environment module name on-the-fly when a user tries to import
  'env'.

  If the environment isn't found, an 'UnknownModule' error is raised
  (which I will slightly adjust in a following commits to something more
  related to environment)

  There are few important consequences to this design which may not seem
  immediately obvious:

  1. We parse and type-check every env modules, even if they aren't
     used. This ensures that code doesn't break with a compilation error
     simply because people forgot to type-check a given env.

     Note that compilation could still fail because the env module
     itself could provide an invalid API. So it only prevents each
     modules to be independently wrong when taken in isolation.

  2. Technically, this also means that one can import env modules in
     other env modules by their names. I don't know if it's a good or
     bad idea at this point but it doesn't really do any wrong;
     dependencies and cycles are handlded all-the-same.
2024-08-04 10:27:32 +02:00
KtorZ
c9d0da0c22 Parse sources of conditional env modules.
Do nothing about it yet, but trigger an error if env/default.ak is
  missing; but only if there's any module at all under env.
2024-08-03 17:42:55 +02:00
KtorZ
4645257e62 Prune pallas dependencies.
Using 'pallas' as a dependency brings utxo-rpc other annoying dependencies such as _tokyo_. This not only makes the overall build longer, but it also prevents it to even work when targetting wasm.
2024-08-03 14:14:49 +02:00
Matthias Benkort
09c065d332 Merge pull request #991 from aiken-lang/pattern-match-bytearrays
Allow pattern-matching on bytearrays
2024-08-03 14:09:12 +02:00
KtorZ
f14dfdf8e1 Allow pattern-matching on bytearrays
- Doesn't allow pattern-matching on G1/G2 elements and strings,
    because the use cases for those is unclear and it adds complexity to
    the feature.

  - We still _parse_ patterns on G1/G2 elements and strings, but emit an
    error in those cases.

  - The syntax is the same as for bytearray literals (i.e. supports hex,
    utf-8 strings or plain arrays of bytes).
2024-08-03 13:51:36 +02:00
KtorZ
ea032c90f2 Add missing CHANGELOG entries. 2024-08-02 12:08:25 +02:00
KtorZ
86aed1baa5 Enable 'mk_pair_data' builtin. 2024-08-02 00:17:16 -04:00
KtorZ
643e43f8aa Fix zero-arg builtins invokations.
There are currently two zero-arg builtins:

  - mkNilData
  - mkNilPairData

  And while they have strictly speaking no arguments, the VM still
  requires that they are called with an extra unit argument applied.
2024-08-02 00:17:16 -04:00
KtorZ
1c58da4d86 Support mk_cons builtin
While this builtin is readily available through the Aiken syntax
  `[head, ..tail]`, there's no reason to not support its builtin form
  even though we may not encourage its usage. For completeness and to
  avoid bad surprises, it is now supported.

  Fixes #964.
2024-08-02 00:17:16 -04:00
KtorZ
bf5a406ffb Remove clause guards.
Closes #886.
2024-08-02 00:16:27 -04:00
KtorZ
b28d4a6e9f Add input reference to ReferenceInputNotFound error.
Fixes #974.
2024-08-01 15:29:39 +02:00
KtorZ
34d5bc71b1 Add one more edge-case test for multiline. 2024-08-01 15:21:53 +02:00
KtorZ
91aa435f37 Fix 'multiline' truncating last character of each line.
Fixes #987.
2024-08-01 15:20:43 +02:00
KtorZ
b8bb480bff Fix 'aiken new' workflow template 2024-07-26 13:56:26 +02:00
rvcas
4645fd3e28 chore: Release 2024-07-25 08:28:15 -04:00
rvcas
732147b36a chore: remove msi installer 2024-07-25 08:26:45 -04:00
KtorZ
53b5a5ccee Screw windows too, until next non-alpha. 2024-07-25 12:24:47 +02:00
KtorZ
9dc4c915f3 Manually set windows version. 2024-07-25 12:07:27 +02:00
KtorZ
9e08f9b4e6 Re-add wix file for Windows release. 2024-07-25 11:48:27 +02:00
KtorZ
26c3e95a06 screw musl targets, for now. 2024-07-25 11:29:52 +02:00
KtorZ
28c1922600 Also include pkg-config for musl build. 2024-07-25 10:23:30 +02:00
KtorZ
d36edb4e01 Add libssl-dev build dependency for musl target. 2024-07-25 10:17:29 +02:00
KtorZ
49190b485a chore: Release 2024-07-25 09:58:06 +02:00
KtorZ
327449e320 Update CHANGELOG, bump date, document latest fixes & optimizations 2024-07-25 09:54:03 +02:00
Matthias Benkort
594a304190 Merge pull request #980 from aiken-lang/multivalidator-plus-optimization
Mutlivalidator is now an opcode to help minimize validator size
2024-07-25 09:47:47 +02:00
Matthias Benkort
63863c948f Merge pull request #979 from aiken-lang/fix_casting_inference
Fix pattern inference and annotation requirements.
2024-07-25 09:40:27 +02:00
microproofs
c286ada08d clippy fix 2024-07-24 11:29:55 -04:00
microproofs
1001e83374 Updated acceptance test runs 2024-07-24 10:34:29 -04:00
microproofs
dfce9c1d96 feat: Add multivalidator as an AIR tree opcode.
feat: Add uplc eval optimization
2024-07-24 10:00:08 -04:00
KtorZ
67493ad847 Fix casting inferrence on patterns
The original goal for this commit was to allow casting from Data on
  patterns without annotation. For example, given some custom type
  'OrderDatum':

  ```
  expect OrderDatum { requested_handle, destination, .. }: OrderDatum = datum
  ```

  would work fine, but:

  ```
  expect OrderDatum { requested_handle, destination, .. } = datum
  ```

  Yet, the annotation feels unnecessary at this point because type can
  be inferred from the pattern itself. So this commit allows, whenever
  possible (ie when the pattern is neither a discard nor a var), to
  infer the type from a pattern.

  Along the way, I also found a couple of weird behaviours surrounding
  this kind of assignments, in particular in combination with let. I'll
  highlight those in the next PR (#979).
2024-07-24 12:42:24 +02:00
KtorZ
987a5fa779 Set a date for v1.0.30-alpha release. 2024-07-24 09:39:48 +02:00
rvcas
06ac851458 chore: update changelog 2024-07-23 11:20:42 -04:00
Matthias Benkort
967c264bfe Merge pull request #978 from aiken-lang/supercharge_traces
Supercharge traces
2024-07-23 08:53:46 +02:00
KtorZ
89890f3b4b Fill-in CHANGELOG 2024-07-19 12:44:12 +02:00
KtorZ
30ddfa23d9 Provide better parse errors in trace when using comma instead of colon. 2024-07-19 12:28:08 +02:00
KtorZ
2922c0aa6f Display expected patterns/tokens in parse error when applicable.
We've never been using those 'expected' tokens captured during
  parsing, which is lame because they contain useful information!

  This is much better than merely showing our infamous

    "Try removing it!"
2024-07-19 12:28:08 +02:00
KtorZ
d6fd37c80e Rework 'compact' mode for traces
- Trace-if-false are now completely discarded in compact mode.

  - Only the label (i.e. first trace argument) is preserved.

  - When compiling with tracing _compact_, the first label MUST unify to
    a string. This shouldn't be an issue generally speaking and would
    enforce that traces follow the pattern

    ```
    label: arg_0[, arg_1, ..., arg_n]
    ```

  Note that what isn't obvious with these changes is that we now support
  what the "emit" keyword was trying to achieve; as we compile now with
  user-defined traces only, and in compact mode to only keep event
  labels in the final contract; while allowing larger payloads with
  verbose tracing.
2024-07-19 12:28:08 +02:00
KtorZ
a9d782e206 re-introduce code-gen patch, but with a test.
Actually, this has been a bug for a long time it seems. Calling any
  prelude functions using a qualified import would result in a codegen
  crash. Whoopsie.

  This is now fixed as shown by the regression test.
2024-07-19 12:28:07 +02:00
KtorZ
5afcc9b0c1 Remove unnecessary code_gen patch.
This is a little weird but, prelude functions are handled slightly
  differently.
2024-07-19 12:28:07 +02:00
KtorZ
f8236817fe Allow serialisable (Data-able) arguments to trace
Somehow, we have to patch some function in gen_uplc because of the
  module name. I have to look further into this because it isn't normal.
2024-07-19 12:28:07 +02:00
KtorZ
beb5ac4643 Add 'diagnostic' to the prelude, as well as companion functions.
This is not fully satisfactory as it pollutes a bit the prelude. Ideally, those functions should only be visible
  and usable by the underlying trace code. But for now, we'll just go with it.
2024-07-19 12:28:07 +02:00
KtorZ
754ed07408 Type-check variadic traces & desugarize them. 2024-07-18 10:02:23 +02:00
KtorZ
f9719af23e Allow variadic arguments in trace
Although, doesn't do anything with them yet. The idea is to simplify
  the use of trace to make it a lot more useful than it currently is.
2024-07-18 10:01:34 +02:00
KtorZ
976262c2e6 Allow discard in expect.
Fixes #967.
2024-07-17 18:11:09 +02:00