From 7a9520b3879bccb872aaca6245c92071a957deff Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Thu, 12 Jan 2023 17:33:57 +0530 Subject: feat: adds try/catch effects --- src/eval.ts | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/eval.ts b/src/eval.ts index c34e911..12997b1 100644 --- a/src/eval.ts +++ b/src/eval.ts @@ -4,6 +4,7 @@ import readline from 'readline' import { match } from './util' import { Ctx } from './types' +import { assert } from 'console' const rl = readline.createInterface({ input: process.stdin, @@ -117,8 +118,25 @@ export const evaluateType = async ( }, Exit: async () => { - const exitCode = args[0] && ctx.getTypeValue(args[0]) - process.exit(exitCode) + process.exit(args[0] && ctx.getTypeValue(args[0])) + }, + + Try: async () => { + const [effTyp, catchK] = args + + try { + if (!effTyp) throw new Error('wow') + return await evaluateType(ctx, effTyp) + } catch(e) { + const error = JSON.stringify((e as any)?.message ?? e) + const catchResExpr = `(${ctx.typeToString(catchK)} & { input: ${error} })['return']` + const [resultKey, _] = ctx.createResult(catchResExpr) + return [resultKey] + } + }, + + Throw: async () => { + throw args[0] && ctx.getTypeValue(args[0]) }, ReadLine: async () => { -- cgit v1.3.1