aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2023-01-14 13:22:39 +0530
committerAkshay Nair <phenax5@gmail.com>2023-01-14 13:22:39 +0530
commitd362ef26db894ea52c6abd34489aa9efdbc0c89b (patch)
tree20400ad5ebc70085447e2bb087381aa8c8409afd /src
parent4746652abfb7aed46627d27a55919d2986885735 (diff)
downloadts-types-lang-d362ef26db894ea52c6abd34489aa9efdbc0c89b.tar.gz
ts-types-lang-d362ef26db894ea52c6abd34489aa9efdbc0c89b.zip
chore: adds test cases + fixes Test effect scope
Diffstat (limited to 'src')
-rw-r--r--src/eval-env/builtins.ts8
-rw-r--r--src/eval-env/test.ts17
-rw-r--r--src/eval.ts2
-rw-r--r--src/index.ts17
4 files changed, 31 insertions, 13 deletions
diff --git a/src/eval-env/builtins.ts b/src/eval-env/builtins.ts
index 669a005..35f8485 100644
--- a/src/eval-env/builtins.ts
+++ b/src/eval-env/builtins.ts
@@ -6,10 +6,10 @@ const applyFunc = (ctx: Ctx, fn: Type | undefined, val: string): Type => {
const resultType = (() => {
const baseTypes = fn
?.getBaseTypes()
- .flatMap((t) => t.getSymbol()?.getName())
+ .flatMap((t) => t.getSymbol()?.getName() ?? [])
- if (baseTypes?.includes('Kind1')) {
- const [_, resultNode] = ctx.createResult(
+ if (!!fn?.getProperty('return') || baseTypes?.includes('Kind1')) {
+ const [_key, resultNode] = ctx.createResult(
`(${ctx.typeToString(fn)} & { input: ${val} })['return']`
)
return resultNode
@@ -53,7 +53,7 @@ const applyFunc = (ctx: Ctx, fn: Type | undefined, val: string): Type => {
// TODO: Cleanup unwanted result node values
if (!resultType) {
- throw new Error('Fuck shit')
+ throw new Error('Couldnt get result for function application')
}
return resultType
diff --git a/src/eval-env/test.ts b/src/eval-env/test.ts
index 84ae138..4dd8c8d 100644
--- a/src/eval-env/test.ts
+++ b/src/eval-env/test.ts
@@ -2,7 +2,7 @@ import { Type } from 'ts-morph'
import { Ctx } from '../types'
export default (ctx: Ctx, args: Type[]) => ({
- Test: async () => {
+ Test: ctx.withScope(async () => {
const [msg, effs] = args
process.stdout.write(` - ${ctx.getTypeValue(msg)} `)
@@ -13,12 +13,12 @@ export default (ctx: Ctx, args: Type[]) => ({
console.log('[✓]')
} catch (e) {
- console.log('[TEST FAILED]')
+ // console.log('[TEST FAILED]')
throw e
}
return []
- },
+ }),
Assert: async () => {
if (!ctx.getTypeValue(args[0])) {
@@ -27,4 +27,15 @@ export default (ctx: Ctx, args: Type[]) => ({
return []
},
+
+ ShowAssertionError: async () => {
+ const [left, right] = args
+ console.log()
+ console.log(' | Assertion error:')
+ console.log(' | - Left: ', ctx.typeToString(left))
+ console.log(' | - Right:', ctx.typeToString(right))
+ console.log()
+
+ return []
+ },
})
diff --git a/src/eval.ts b/src/eval.ts
index a7b1fb1..6eb72a1 100644
--- a/src/eval.ts
+++ b/src/eval.ts
@@ -32,6 +32,7 @@ export const evaluateType = async (
const name = effTyp.getSymbol()?.getName()
const args = effTyp.getTypeArguments()
+ // console.log('>>>>>', name)
// console.log(ctx.typeToString(effTyp))
// console.log(name, args.map(ctx.typeToString))
@@ -58,6 +59,7 @@ export const evaluateType = async (
prevEnv = ctx.currentEnv
}
+ // Evaluate custom effects (overrides builtins)
if (name && ctx.hasCustomEffect(name)) {
return ctx.runCustomEffect(name, args)
}
diff --git a/src/index.ts b/src/index.ts
index f6d46d6..4775823 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -15,12 +15,17 @@ const main = () => {
.description('Run a typescript .ts file')
.argument('<file>', 'Typescript file to run')
.action(async (filePath) => {
- const ctx = createContext({ filePath })
- const resultType = ctx.entryPoint.getType()
- const effects = resultType.isTuple()
- ? resultType.getTupleElements()
- : [resultType]
- await evalList(ctx, effects)
+ try {
+ const ctx = createContext({ filePath })
+ const resultType = ctx.entryPoint.getType()
+ const effects = resultType.isTuple()
+ ? resultType.getTupleElements()
+ : [resultType]
+ await evalList(ctx, effects)
+ } catch (e) {
+ console.error(e)
+ process.exit(1)
+ }
})
return program.parseAsync()