Commit Graph

2952 Commits

Author SHA1 Message Date
KtorZ
93a141bfa4 Test and fix 'unwrap_void_or' 2024-08-08 00:39:44 -04:00
KtorZ
49ddcccd12 Revert checking for negative constr on bool
It is impossible to serialize/deserialize a Data with a negative
  constructor. So the only way this can happen is by programmatically
  construct a value using builtin constr_data.

  While possible, it is entirely at the responsibility of the
  programmer, but not malleable from an attacker who can only provide
  values as 'Data' (and thus, must be decoded like others).
2024-08-08 00:39:44 -04:00
KtorZ
aefbc6e1b9 Define a safer API for unwrap_xxx_or and choose_data_xxx
Cloning a 'Term' is potentially dangerous, so we don't want this to
  happen by mistake. So instead, we pass in var names and turn them into
  terms when necessary.
2024-08-08 00:39:44 -04:00
KtorZ
846c16087e Test (and fix) unwrap_or helpers. 2024-08-08 00:39:44 -04:00
KtorZ
ea8003af8f Fix bool soft-casting.
While the ledger doesn't allow deserializing negative constr value,
  they are still possible at the machine level. So, we better make sure
  that we don't make assumptions regarding this.
2024-08-08 00:39:44 -04:00
KtorZ
9610237616 Refactor unknown_data_to_type, break down into smaller functions. 2024-08-08 00:39:44 -04:00
KtorZ
c3a61706b5 Factor out common UPLC logic for converting Data to Bool. 2024-08-08 00:39:44 -04:00
microproofs
05504b9762 Fix out of order expect check. Also fix no_inline error in code gen. @acceptance_107 2024-08-08 00:39:44 -04:00
microproofs
663695558c Fix remaining errors and now onto testing 2024-08-08 00:39:44 -04:00
microproofs
0be5229f1c Only 2 errors and todos left to finish 2024-08-08 00:39:44 -04:00
microproofs
6ba9a312f0 Work through all but constr case for expect_type_assign
TODO: constr case for expect_type_assign
TODO: soft_cast opcode uplc codegen
TODO: fix PairAccessor opcode uplc codegen
2024-08-08 00:39:44 -04:00
microproofs
dd5badd884 Start work on revamping assignment so we can handle soft casting properly 2024-08-08 00:39:44 -04:00
KtorZ
9ea54afd12 Add on more example illustrating if/is issue. 2024-08-08 00:39:44 -04:00
KtorZ
a6c5dbb5ad Thread down if/is pattern assignment type down to code-generation.
This isn't sufficient however, as the 'assignment' helper handling
  code generation doesn't perform any check when patterns are vars. This
  is curious, and need to be investigated further.
2024-08-08 00:39:44 -04:00
KtorZ
c4abf2e8f4 Add acceptance test 106 showing issue with if/is implicit casting. 2024-08-08 00:39:44 -04:00
KtorZ
aa872846bb Re-generate insta snapshots, remove obsolete snapshots. 2024-08-06 19:25:35 +02:00
KtorZ
9d8fdf787c Improve formatter on long-lines, in particular bin-ops. 2024-08-06 19:25:35 +02:00
KtorZ
91e0e2493a Provide better errors on unknown type in cyclic definitions.
Let's consider the following case:

  ```
  type Var =
    Integer

  type Vars =
    List<Var>
  ```

  This incorrectly reports an infinite cycle; due to the inability to
  properly type-check `Var` which is also a dependent var of `Vars`. Yet
  the real issue here being that `Integer` is an unknown type.

  This commit also upgrades miette to 7.2.0, so that we can also display
  a better error output when the problem is actually a cycle.
2024-08-06 19:24:48 +02:00
KtorZ
1ae6640cd0 Make alternative clause parser more flexible.
The spirit here is to make it easier to discover this syntax. People
  have different intuition about it and the single pipe may not be the
  most obvious one.

  It is however the recommended syntax, and the formatter will rewrite
  any of the other to it.
2024-08-06 11:31:11 +02:00
KtorZ
8c121f6d97 Document 'export' and provide better errors on module not found. 2024-08-06 11:09:05 +02:00
KtorZ
e3b1cf1093 Rework CHANGELOG to reflect reality.
We never released 1.0.30, so it's a bit misleading to have an entry for it in the CHANGELOG. So I merged its content with the ongoing release which is likely to be 1.1.0
2024-08-06 10:50:15 +02:00
Matthias Benkort
e6bb13def6 Merge pull request #994 from aiken-lang/conditional-modules
Conditional configuration & environment
2024-08-06 09:05:11 +02:00
Riley-Kilgore
5160ab49de Use char instead of str 2024-08-05 16:27:37 -04:00
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