From f31caa5baad20553cac0330ae9ff279b8f88f340 Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Sat, 14 Jan 2023 17:38:24 +0530 Subject: feat: adds test cases for do and seq + fixes behavior with empty results --- src/context.ts | 4 +++- src/eval-env/builtins.ts | 14 ++++++++------ src/util.ts | 7 +++---- 3 files changed, 14 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/context.ts b/src/context.ts index fab6653..f70a17d 100644 --- a/src/context.ts +++ b/src/context.ts @@ -39,7 +39,9 @@ export const createContext = (options: CtxOptions): Ctx => { ) const getResultExpr = (resultKey?: string) => - `(${RESULT_TYPE_NAME}[${JSON.stringify(resultKey)})` + resultKey + ? `((${RESULT_TYPE_NAME}[${JSON.stringify(resultKey)})['output'])` + : 'undefined' const addResult = (name: string, ty: string): Node | undefined => resultTypeNode diff --git a/src/eval-env/builtins.ts b/src/eval-env/builtins.ts index c5b0c82..d90bc2e 100644 --- a/src/eval-env/builtins.ts +++ b/src/eval-env/builtins.ts @@ -49,6 +49,8 @@ export default (ctx: Ctx, args: Type[]) => ({ return [resultKey] }, + Noop: async () => [], + Print: async () => { console.log(...args.map(ctx.typeToString)) return [] @@ -77,7 +79,7 @@ export default (ctx: Ctx, args: Type[]) => ({ const resultType = applyFunc( ctx, chainToKind, - resultKey ? `(${ctx.getResultExpr(resultKey)})['output']` : 'never' + resultKey ? `${ctx.getResultExpr(resultKey)}` : 'never' ) return ctx.evaluateType(ctx, resultType) }), @@ -102,7 +104,7 @@ export default (ctx: Ctx, args: Type[]) => ({ return [value] }, - Try: async () => { + Try: ctx.withScope(async () => { const [effTyp, catchK] = args try { @@ -113,7 +115,7 @@ export default (ctx: Ctx, args: Type[]) => ({ const resultType = applyFunc(ctx, catchK, error) return ctx.evaluateType(ctx, resultType) } - }, + }), Throw: async () => { throw args[0] && ctx.getTypeValue(args[0]) @@ -134,8 +136,8 @@ export default (ctx: Ctx, args: Type[]) => ({ effectTyps?.getTupleElements() ?? [] ) const [resultKey, _] = ctx.createResult(`[ - ${effectResults.map(ctx.getResultExpr).join(', ')} - ]`) + ${effectResults.map(ctx.getResultExpr).join(', ')} + ]`) return [resultKey] }), @@ -148,7 +150,7 @@ export default (ctx: Ctx, args: Type[]) => ({ // TODO: Use last type's result instead of last result key const lastResKey = effectResults[effectResults.length - 1] const [resultKey, _] = ctx.createResult( - `(${ctx.getResultExpr(lastResKey)})['output']` + `${ctx.getResultExpr(lastResKey)}` ) return [resultKey] }), diff --git a/src/util.ts b/src/util.ts index a486294..b7d4efe 100644 --- a/src/util.ts +++ b/src/util.ts @@ -7,9 +7,10 @@ export const match = ( ) => (k && pattern[k] ? pattern[k]() : pattern._()) export const evalList = async (ctx: Ctx, effectTyps: Type[]) => { - const effectResults: string[] = [] + const effectResults: (string | undefined)[] = [] for (const item of effectTyps ?? []) { - effectResults.push(...(await ctx.evaluateType(ctx, item))) + const [resultKey] = await ctx.evaluateType(ctx, item) + effectResults.push(resultKey ? resultKey : undefined) } return effectResults } @@ -69,8 +70,6 @@ export const applyFunc = ( return undefined })() - // TODO: Cleanup unwanted result node values - if (!resultType) { throw new Error('Couldnt get result for function application') } -- cgit v1.3.1