diff options
Diffstat (limited to 'src/eval.ts')
| -rw-r--r-- | src/eval.ts | 22 |
1 files changed, 20 insertions, 2 deletions
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 () => { |
