summaryrefslogtreecommitdiff
path: root/src/CHAD.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/CHAD.hs')
-rw-r--r--src/CHAD.hs22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/CHAD.hs b/src/CHAD.hs
index cc435db..5ae1a07 100644
--- a/src/CHAD.hs
+++ b/src/CHAD.hs
@@ -809,7 +809,27 @@ drev des policy = \case
(EVar ext (d2 (opt2 op)) IZ))
(weakenExpr (WCopy (wSinks' @[_,_])) e2))
- e -> error $ "CHAD: unsupported " ++ takeWhile (/= ' ') (show e)
+ EError t s ->
+ Ret BTop
+ (EError (d1 t) s)
+ (subenvNone (select SMerge des))
+ (EMReturn d2acc (ENil ext))
+
+ -- These should be the next to be implemented, I think
+ EBuild1{} -> err_unsupported "EBuild1"
+ EFold1{} -> err_unsupported "EFold1"
+ EIdx1{} -> err_unsupported "EIdx1"
+
+ EBuild{} -> err_unsupported "EBuild"
+ EIdx{} -> err_unsupported "EIdx"
+
+ EMOne{} -> err_evm
+ EMScope{} -> err_evm
+ EMReturn{} -> err_evm
+ EMBind{} -> err_evm
where
d2acc = d2e (select SAccum des)
+
+ err_evm = error "EVM operations unsupported in the source program"
+ err_unsupported s = error $ "CHAD: unsupported " ++ s