Spread few more boxes around.
Signed-off-by: KtorZ <[email protected]>
Signed-off-by: KtorZ <[email protected]>
Signed-off-by: KtorZ <[email protected]>
Signed-off-by: KtorZ <[email protected]>
Signed-off-by: KtorZ <[email protected]>
Signed-off-by: KtorZ <[email protected]>
Signed-off-by: KtorZ <[email protected]>
Signed-off-by: KtorZ <[email protected]>
Fixes #1276 Signed-off-by: KtorZ <[email protected]>
Signed-off-by: KtorZ <[email protected]>
Signed-off-by: KtorZ <[email protected]>
Signed-off-by: KtorZ <[email protected]>
Running this on the stdlib was a good test case which bubbled several issues mainly related to generic types; we handle those by simply defaulting to 'Data'. Signed-off-by: KtorZ <[email protected]>
Signed-off-by: KtorZ <[email protected]>
Signed-off-by: KtorZ <[email protected]>
There's no point keeping two functions here; it should really just always require the language / plutus version. Also, the 'can_error' boolean is just confusing and as it just reverse the result; which we can simply get by negating it. Technically, booleans aren't allowed for Plutus V3, but we use them for tests. So that's now a 'flag' on the function. Signed-off-by: KtorZ <[email protected]>
Signed-off-by: KtorZ <[email protected]>
Signed-off-by: KtorZ <[email protected]>
The existing `failed()` method applies the same strict success check (must return Bool(true) or Unit) to all Plutus language versions. This diverges from the Haskell reference implementation. Haskell's `processLogsAndErrors` in `PlutusLedgerApi.Common.Eval` only checks for `EvaluationFailure` for PlutusV1/V2 — any non-error return value is considered success. The strict Bool(true)/Unit requirement only applies to PlutusV3. This adds `failed_with_lang()` which takes a `Language` parameter and applies version-appropriate success criteria: - PlutusV1/V2: success = execution completed without error (any return value accepted) - PlutusV3: success = must return Bool(true) or Unit (strict, same as existing `failed(false)`) Real-world impact: PlutusV2 oracle scripts (e.g., Liqwid Finance oracle on preview testnet) return Data values rather than Bool(true)/Unit, and are incorrectly rejected by the current implementation.
The code is sufficiently complexe already, and the addition of the source map context makes it a bit more. That's okay. But duplicating entire chunks of logic with no changes when we have generics, is not! There's a similar cleanup to be done around the 'coverage' command, which is, in most part, a duplicate of the `check` command. Note that this changes also drop the 'finalize_minimal' and make the `no_optimize` flag now unused. It is not a mistake. That flag should not exist and shall be removed in upcoming commits. Signed-off-by: KtorZ <[email protected]>
1. Preserve term context through DeBruijn round-trip in optimizer (afterwards, run_once_pass) by collecting and restoring contexts instead of replacing with C::default(). 2. Fix source-map index stability by visiting function before argument in Apply traversal, so wrapping a term doesn't shift existing indices. 3. Propagate fuzzer sampling errors in coverage instead of silently breaking, which could produce false success with empty reports. 4. Aggregate property test iterations by base name for fail-once semantics — the property passes if ANY iteration fails, not each independently. 5. Include configured directory prefix in sourceMapFile references so they resolve relative to the blueprint location.
- Add is_empty() method to Env (len_without_is_empty) - Allow type_complexity in builtin_curry_reducer - Remove redundant iter cloning in script_context.rs
I had a different rust version locally so therese weren't showing up. - Used derive(Default) on SourceLocation - Allow some unused assignments, because they're used by miette - Add result_large_err to existing allow attribute