From f3d65a760f6f5158ec3ce066a991ff87e8264197 Mon Sep 17 00:00:00 2001 From: Yura Lazaryev Date: Wed, 8 May 2024 12:50:21 +0200 Subject: [PATCH] Fix CaseOfCase UPLC transform. --- .../src/UntypedPlutusCore/Transform/CaseOfCase.hs | 12 ++++++++---- .../test/Transform/CaseOfCase/1.uplc.golden | 12 +++++++----- .../test/Transform/CaseOfCase/3.uplc.golden | 12 +++++++----- .../test/Transform/CaseOfCase/withError.uplc.golden | 12 +++++++----- 4 files changed, 29 insertions(+), 19 deletions(-) diff --git a/plutus-core/untyped-plutus-core/src/UntypedPlutusCore/Transform/CaseOfCase.hs b/plutus-core/untyped-plutus-core/src/UntypedPlutusCore/Transform/CaseOfCase.hs index 4ef949baf61..ef22387b011 100644 --- a/plutus-core/untyped-plutus-core/src/UntypedPlutusCore/Transform/CaseOfCase.hs +++ b/plutus-core/untyped-plutus-core/src/UntypedPlutusCore/Transform/CaseOfCase.hs @@ -27,11 +27,15 @@ import Control.Lens caseOfCase :: (fun ~ PLC.DefaultFun) => Term name uni fun a -> Term name uni fun a caseOfCase = transformOf termSubterms $ \case Case ann scrut alts - | ( ite@(Force _ (Builtin _ PLC.IfThenElse)) + | ( ite@(Force a (Builtin _ PLC.IfThenElse)) , [cond, (trueAnn, true@Constr{}), (falseAnn, false@Constr{})] ) <- splitApplication scrut -> - mkIterApp - ite - [cond, (trueAnn, Case ann true alts), (falseAnn, Case ann false alts)] + Force a $ + mkIterApp + ite + [ cond + , (trueAnn, Delay trueAnn (Case ann true alts)) + , (falseAnn, Delay falseAnn (Case ann false alts)) + ] other -> other diff --git a/plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/1.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/1.uplc.golden index 8eab5d0e6da..99e77d62902 100644 --- a/plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/1.uplc.golden +++ b/plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/1.uplc.golden @@ -1,7 +1,9 @@ -[ +(force [ - [ (force (builtin ifThenElse)) b_0 ] - (case (constr 0) (con integer 1) (con integer 2)) + [ + [ (force (builtin ifThenElse)) b_0 ] + (delay (case (constr 0) (con integer 1) (con integer 2))) + ] + (delay (case (constr 1) (con integer 1) (con integer 2))) ] - (case (constr 1) (con integer 1) (con integer 2)) -] \ No newline at end of file +) \ No newline at end of file diff --git a/plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/3.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/3.uplc.golden index aafa38213c8..74f9f77952f 100644 --- a/plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/3.uplc.golden +++ b/plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/3.uplc.golden @@ -1,7 +1,9 @@ -[ +(force [ - [ (force (builtin ifThenElse)) b_0 ] - (case (constr 0 x_1 xs_2) f_3 (con integer 2)) + [ + [ (force (builtin ifThenElse)) b_0 ] + (delay (case (constr 0 x_1 xs_2) f_3 (con integer 2))) + ] + (delay (case (constr 1) f_3 (con integer 2))) ] - (case (constr 1) f_3 (con integer 2)) -] \ No newline at end of file +) \ No newline at end of file diff --git a/plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/withError.uplc.golden b/plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/withError.uplc.golden index 35b55ad8259..7cdbc9b7363 100644 --- a/plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/withError.uplc.golden +++ b/plutus-core/untyped-plutus-core/test/Transform/CaseOfCase/withError.uplc.golden @@ -1,7 +1,9 @@ -[ +(force [ - [ (force (builtin ifThenElse)) (con bool True) ] - (case (constr 0) (con unit ()) (error)) + [ + [ (force (builtin ifThenElse)) (con bool True) ] + (delay (case (constr 0) (con unit ()) (error))) + ] + (delay (case (constr 1) (con unit ()) (error))) ] - (case (constr 1) (con unit ()) (error)) -] \ No newline at end of file +) \ No newline at end of file